cfclient 2024.11__tar.gz → 2025.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cfclient might be problematic. Click here for more details.

Files changed (251) hide show
  1. cfclient-2025.2/.cproject +42 -0
  2. cfclient-2025.2/.flake8 +2 -0
  3. cfclient-2025.2/.github/workflows/CI.yml +47 -0
  4. cfclient-2025.2/.github/workflows/CI_experiment.yml +33 -0
  5. cfclient-2025.2/.github/workflows/log-param-docs.yml +45 -0
  6. cfclient-2025.2/.github/workflows/nightly.yml +62 -0
  7. cfclient-2025.2/.github/workflows/python-publish.yml +44 -0
  8. cfclient-2025.2/.github/workflows/test-python-publish.yml +46 -0
  9. cfclient-2025.2/.gitignore +33 -0
  10. cfclient-2025.2/.pre-commit-config.yaml +5 -0
  11. cfclient-2025.2/CMakeLists.txt +7 -0
  12. {cfclient-2024.11 → cfclient-2025.2}/MANIFEST.in +1 -2
  13. {cfclient-2024.11/src/cfclient.egg-info → cfclient-2025.2}/PKG-INFO +31 -14
  14. cfclient-2025.2/RELEASE_CHECKLIST.md +46 -0
  15. cfclient-2025.2/bin/cfclient +5 -0
  16. cfclient-2025.2/bin/cfheadless +5 -0
  17. cfclient-2025.2/bin/cfloader +5 -0
  18. cfclient-2025.2/bin/cfzmq +5 -0
  19. cfclient-2025.2/bitcraze.ico +0 -0
  20. cfclient-2025.2/docs/development/dev_info_client.md +557 -0
  21. cfclient-2025.2/docs/development/index.md +9 -0
  22. cfclient-2025.2/docs/development/zmq-server.md +513 -0
  23. cfclient-2025.2/docs/functional-areas/cfclient_zmq.md +145 -0
  24. cfclient-2025.2/docs/functional-areas/cfloader.md +160 -0
  25. cfclient-2025.2/docs/functional-areas/client.md +81 -0
  26. cfclient-2025.2/docs/functional-areas/index.md +9 -0
  27. cfclient-2025.2/docs/images/base_station_geo_dialog.png +0 -0
  28. cfclient-2025.2/docs/images/bitcraze_logo.png +0 -0
  29. cfclient-2025.2/docs/images/bootloader-recovery.png +0 -0
  30. cfclient-2025.2/docs/images/cf_client_1.png +0 -0
  31. cfclient-2025.2/docs/images/cfclient_anchor_identification.png +0 -0
  32. cfclient-2025.2/docs/images/cfclient_cf2_config.png +0 -0
  33. cfclient-2025.2/docs/images/cfclient_connect_dialog.png +0 -0
  34. cfclient-2025.2/docs/images/cfclient_connected.png +0 -0
  35. cfclient-2025.2/docs/images/cfclient_console_marked.png +0 -0
  36. cfclient-2025.2/docs/images/cfclient_devconfig_axis.png +0 -0
  37. cfclient-2025.2/docs/images/cfclient_devconfig_dialog.png +0 -0
  38. cfclient-2025.2/docs/images/cfclient_devconfig_feedback.png +0 -0
  39. cfclient-2025.2/docs/images/cfclient_devconfig_select.png +0 -0
  40. cfclient-2025.2/docs/images/cfclient_flightab.png +0 -0
  41. cfclient-2025.2/docs/images/cfclient_frontpage.png +0 -0
  42. cfclient-2025.2/docs/images/cfclient_input_mux_configured.png +0 -0
  43. cfclient-2025.2/docs/images/cfclient_input_mux_select.png +0 -0
  44. cfclient-2025.2/docs/images/cfclient_input_normal.png +0 -0
  45. cfclient-2025.2/docs/images/cfclient_input_student.png +0 -0
  46. cfclient-2025.2/docs/images/cfclient_input_student_device.png +0 -0
  47. cfclient-2025.2/docs/images/cfclient_input_teacher.png +0 -0
  48. cfclient-2025.2/docs/images/cfclient_input_teacher_device.png +0 -0
  49. cfclient-2025.2/docs/images/cfclient_lh_main.png +0 -0
  50. cfclient-2025.2/docs/images/cfclient_logblocks_marked.png +0 -0
  51. cfclient-2025.2/docs/images/cfclient_main_ui.png +0 -0
  52. cfclient-2025.2/docs/images/cfclient_overview.png +0 -0
  53. cfclient-2025.2/docs/images/cfclient_param.png +0 -0
  54. cfclient-2025.2/docs/images/cfclient_plotter.png +0 -0
  55. cfclient-2025.2/docs/images/cfclient_position_estimate.png +0 -0
  56. cfclient-2025.2/docs/images/cfclient_pycharm_windows_miniconda.png +0 -0
  57. cfclient-2025.2/docs/images/cfclient_usb_radio_config.png +0 -0
  58. cfclient-2025.2/docs/images/client_log-configuration_anotated.png +0 -0
  59. cfclient-2025.2/docs/images/configure_cf1.png +0 -0
  60. cfclient-2025.2/docs/images/firmware-upgrade.png +0 -0
  61. cfclient-2025.2/docs/images/image00.png +0 -0
  62. cfclient-2025.2/docs/images/image01.png +0 -0
  63. cfclient-2025.2/docs/images/image02.png +0 -0
  64. cfclient-2025.2/docs/images/image03.png +0 -0
  65. cfclient-2025.2/docs/images/image04.png +0 -0
  66. cfclient-2025.2/docs/images/image05.png +0 -0
  67. cfclient-2025.2/docs/images/image06.png +0 -0
  68. cfclient-2025.2/docs/images/input-arch-mux.png +0 -0
  69. cfclient-2025.2/docs/images/tuning_tab.png +0 -0
  70. cfclient-2025.2/docs/index.md +9 -0
  71. cfclient-2025.2/docs/installation/index.md +9 -0
  72. cfclient-2025.2/docs/installation/install.md +231 -0
  73. cfclient-2025.2/docs/userguides/cfheadless.md +43 -0
  74. cfclient-2025.2/docs/userguides/index.md +9 -0
  75. cfclient-2025.2/docs/userguides/inputdevices.md +118 -0
  76. cfclient-2025.2/docs/userguides/recovery-mode.md +31 -0
  77. cfclient-2025.2/docs/userguides/userguide_client/console_tab.md +12 -0
  78. cfclient-2025.2/docs/userguides/userguide_client/flightcontrol_tab.md +38 -0
  79. cfclient-2025.2/docs/userguides/userguide_client/index.md +330 -0
  80. cfclient-2025.2/docs/userguides/userguide_client/lighthouse_tab.md +84 -0
  81. cfclient-2025.2/docs/userguides/userguide_client/loco_tab.md +85 -0
  82. cfclient-2025.2/docs/userguides/userguide_client/logblocks_tab.md +48 -0
  83. cfclient-2025.2/docs/userguides/userguide_client/parameters_tab.md +23 -0
  84. cfclient-2025.2/docs/userguides/userguide_client/plotter_tab.md +18 -0
  85. cfclient-2025.2/docs/userguides/userguide_client/tuning_tab.md +16 -0
  86. cfclient-2025.2/examples/zmq_clients/ramp_c/Makefile +6 -0
  87. cfclient-2025.2/examples/zmq_clients/ramp_c/ramp.c +49 -0
  88. cfclient-2025.2/examples/zmq_clients/ramp_c/readme.md +23 -0
  89. cfclient-2025.2/examples/zmqclientinput.py +49 -0
  90. cfclient-2025.2/examples/zmqclientled.py +68 -0
  91. cfclient-2025.2/examples/zmqclientparam.py +100 -0
  92. cfclient-2025.2/examples/zmqsrvtest.py +320 -0
  93. cfclient-2025.2/icon-256.icns +0 -0
  94. cfclient-2025.2/module.json +4 -0
  95. cfclient-2025.2/package.xml +25 -0
  96. cfclient-2025.2/pyproject.toml +79 -0
  97. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/__init__.py +5 -3
  98. cfclient-2025.2/src/cfclient/resources/log_param_doc.json +1 -0
  99. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/main.py +1 -1
  100. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/periodictimer.py +1 -1
  101. cfclient-2025.2/src/cfclient/version.py +16 -0
  102. {cfclient-2024.11 → cfclient-2025.2/src/cfclient.egg-info}/PKG-INFO +31 -14
  103. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient.egg-info/SOURCES.txt +101 -4
  104. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient.egg-info/requires.txt +5 -5
  105. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient.egg-info/top_level.txt +1 -0
  106. cfclient-2025.2/src/cfconfig/Makefile +51 -0
  107. cfclient-2025.2/src/cfconfig/configblock.py +111 -0
  108. cfclient-2025.2/tools/build/bdist +17 -0
  109. cfclient-2025.2/tools/build/build +8 -0
  110. cfclient-2025.2/tools/build/verify +11 -0
  111. cfclient-2024.11/gitversion.py +0 -245
  112. cfclient-2024.11/setup.py +0 -121
  113. cfclient-2024.11/src/cfclient/resources/log_param_doc.json +0 -1
  114. cfclient-2024.11/src/cfclient/version.json +0 -1
  115. {cfclient-2024.11 → cfclient-2025.2}/LICENSE.txt +0 -0
  116. {cfclient-2024.11 → cfclient-2025.2}/README.md +0 -0
  117. {cfclient-2024.11 → cfclient-2025.2}/setup.cfg +0 -0
  118. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/config.json +0 -0
  119. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/Generic_OS_X.json +0 -0
  120. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/Joystick.json +0 -0
  121. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/PS3_Mode_1.json +0 -0
  122. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/PS3_Mode_2.json +0 -0
  123. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/PS3_Mode_3.json +0 -0
  124. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/PS4_Mode_1.json +0 -0
  125. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/PS4_Mode_2.json +0 -0
  126. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/PS4_shoulder_btns_yaw.json +0 -0
  127. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/input/xbox360_mode1.json +0 -0
  128. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning/Attitude.json +0 -0
  129. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning/Attitude_rate.json +0 -0
  130. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning/Position.json +0 -0
  131. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning/Velocity.json +0 -0
  132. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Pitch.json +0 -0
  133. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Pitch_rate.json +0 -0
  134. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Position_x.json +0 -0
  135. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Position_y.json +0 -0
  136. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Position_z.json +0 -0
  137. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Roll.json +0 -0
  138. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Roll_rate.json +0 -0
  139. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Velocity_x.json +0 -0
  140. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Velocity_y.json +0 -0
  141. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Velocity_z.json +0 -0
  142. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Yaw.json +0 -0
  143. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/PID_tuning_components/Yaw_rate.json +0 -0
  144. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/configs/log/stabilizer.json +0 -0
  145. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/gui.py +0 -0
  146. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/headless.py +0 -0
  147. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/resources/map.html +0 -0
  148. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/resources/map.js +0 -0
  149. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/__init__.py +0 -0
  150. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/connectivity_manager.py +0 -0
  151. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/__init__.py +0 -0
  152. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/about.py +0 -0
  153. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/about.ui +0 -0
  154. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/anchor_position_dialog.py +0 -0
  155. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/anchor_position_dialog.ui +0 -0
  156. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/basestation_mode_dialog.py +0 -0
  157. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/basestation_mode_dialog.ui +0 -0
  158. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/bootloader.py +0 -0
  159. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/bootloader.ui +0 -0
  160. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/cf2config.py +0 -0
  161. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/cf2config.ui +0 -0
  162. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/inputconfigdialogue.py +0 -0
  163. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/inputconfigdialogue.ui +0 -0
  164. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py +0 -0
  165. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui +0 -0
  166. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/lighthouse_system_type_dialog.py +0 -0
  167. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/lighthouse_system_type_dialog.ui +0 -0
  168. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/logconfigdialogue.py +0 -0
  169. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/dialogs/logconfigdialogue.ui +0 -0
  170. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/icons/checkmark_black.png +0 -0
  171. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/icons/checkmark_white.png +0 -0
  172. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/icons/create.png +0 -0
  173. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/icons/delete.png +0 -0
  174. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/icons/icon-256.png +0 -0
  175. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/main.ui +0 -0
  176. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/pluginhelper.py +0 -0
  177. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/pose_logger.py +0 -0
  178. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tab_toolbox.py +0 -0
  179. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/ConsoleTab.py +0 -0
  180. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/CrtpSharkToolbox.py +0 -0
  181. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/ExampleTab.py +0 -0
  182. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/FlightTab.py +0 -0
  183. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/GpsTab.py +0 -0
  184. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/LEDTab.py +0 -0
  185. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/LogBlockDebugTab.py +0 -0
  186. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/LogBlockTab.py +0 -0
  187. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/LogClientTab.py +0 -0
  188. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/LogTab.py +0 -0
  189. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/ParamTab.py +0 -0
  190. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/PlotTab.py +0 -0
  191. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/TuningTab.py +0 -0
  192. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/__init__.py +0 -0
  193. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/consoleTab.ui +0 -0
  194. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/crtpSharkToolbox.ui +0 -0
  195. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/exampleTab.ui +0 -0
  196. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/flightActionContainer.ui +0 -0
  197. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/flightTab.ui +0 -0
  198. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/gpsTab.ui +0 -0
  199. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/ledTab.ui +0 -0
  200. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/lighthouse_tab.py +0 -0
  201. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/lighthouse_tab.ui +0 -0
  202. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/locopositioning_tab.py +0 -0
  203. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/locopositioning_tab.ui +0 -0
  204. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/logBlockDebugTab.ui +0 -0
  205. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/logBlockTab.ui +0 -0
  206. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/logClientTab.ui +0 -0
  207. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/logTab.ui +0 -0
  208. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/paramTab.ui +0 -0
  209. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/plotTab.ui +0 -0
  210. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/tabs/tuningTab.ui +0 -0
  211. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/widgets/__init__.py +0 -0
  212. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/widgets/ai.py +0 -0
  213. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/widgets/hexspinbox.py +0 -0
  214. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/widgets/plotter.ui +0 -0
  215. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/widgets/plotwidget.py +0 -0
  216. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/widgets/super_slider.py +0 -0
  217. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/__init__.py +0 -0
  218. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/bslh_1.png +0 -0
  219. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/bslh_2.png +0 -0
  220. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/bslh_3.png +0 -0
  221. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/bslh_4.png +0 -0
  222. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/bslh_5.png +0 -0
  223. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/ui/wizards/lighthouse_geo_bs_estimation_wizard.py +0 -0
  224. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/__init__.py +0 -0
  225. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/config.py +0 -0
  226. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/config_manager.py +0 -0
  227. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/__init__.py +0 -0
  228. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputinterfaces/__init__.py +0 -0
  229. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputinterfaces/leapmotion.py +0 -0
  230. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputinterfaces/wiimote.py +0 -0
  231. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputinterfaces/zmqpull.py +0 -0
  232. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputreaderinterface.py +0 -0
  233. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputreaders/__init__.py +0 -0
  234. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputreaders/linuxjsdev.py +0 -0
  235. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/inputreaders/pysdl2.py +0 -0
  236. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/mux/__init__.py +0 -0
  237. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/mux/nomux.py +0 -0
  238. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/mux/takeovermux.py +0 -0
  239. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/input/mux/takeoverselectivemux.py +0 -0
  240. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/logconfigreader.py +0 -0
  241. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/logdatawriter.py +0 -0
  242. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/singleton.py +0 -0
  243. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/ui.py +0 -0
  244. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/zmq_led_driver.py +0 -0
  245. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient/utils/zmq_param.py +0 -0
  246. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient.egg-info/dependency_links.txt +0 -0
  247. {cfclient-2024.11 → cfclient-2025.2}/src/cfclient.egg-info/entry_points.txt +0 -0
  248. {cfclient-2024.11 → cfclient-2025.2}/src/cfloader/__init__.py +0 -0
  249. {cfclient-2024.11 → cfclient-2025.2}/src/cfloader/__main__.py +0 -0
  250. {cfclient-2024.11 → cfclient-2025.2}/src/cfzmq/__init__.py +0 -0
  251. {cfclient-2024.11 → cfclient-2025.2}/src/cfzmq/__main__.py +0 -0
@@ -0,0 +1,42 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
3
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
4
+ <cconfiguration id="cdt.managedbuild.toolchain.gnu.base.556304233">
5
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.556304233" moduleId="org.eclipse.cdt.core.settings" name="Default">
6
+ <externalSettings/>
7
+ <extensions>
8
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
9
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
10
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
11
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
12
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
13
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
14
+ </extensions>
15
+ </storageModule>
16
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
17
+ <configuration buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.556304233" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
18
+ <folderInfo id="cdt.managedbuild.toolchain.gnu.base.556304233.1571022948" name="/" resourcePath="">
19
+ <toolChain id="cdt.managedbuild.toolchain.gnu.base.782442737" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
20
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1751475477" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
21
+ <builder id="cdt.managedbuild.target.gnu.builder.base.370951709" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/>
22
+ <tool id="cdt.managedbuild.tool.gnu.archiver.base.2066136681" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
23
+ <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1966071336" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
24
+ <tool id="cdt.managedbuild.tool.gnu.c.compiler.base.2144663438" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"/>
25
+ <tool id="cdt.managedbuild.tool.gnu.c.linker.base.1237044607" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
26
+ <tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.554953785" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
27
+ <tool id="cdt.managedbuild.tool.gnu.assembler.base.1409456431" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"/>
28
+ </toolChain>
29
+ </folderInfo>
30
+ </configuration>
31
+ </storageModule>
32
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
33
+ </cconfiguration>
34
+ </storageModule>
35
+ <storageModule moduleId="scannerConfiguration">
36
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
37
+ </storageModule>
38
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
39
+ <project id="crazyflie-pc-client-hover.null.1838634307" name="crazyflie-pc-client-hover"/>
40
+ </storageModule>
41
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
42
+ </cproject>
@@ -0,0 +1,2 @@
1
+ [flake8]
2
+ max-line-length:120
@@ -0,0 +1,47 @@
1
+ # This is a basic workflow to help you get started with Actions
2
+
3
+ name: CI
4
+
5
+ # Controls when the action will run.
6
+ on:
7
+ # Triggers the workflow on push or pull request events but only for the master branch
8
+ push:
9
+ branches: [ master ]
10
+ pull_request:
11
+ branches: [ master ]
12
+ schedule:
13
+ # Weekly build to make sure dependencies are OK
14
+ - cron: '30 16 * * 3'
15
+
16
+ jobs:
17
+ checks:
18
+ runs-on: ubuntu-latest
19
+
20
+ steps:
21
+ # Checkout, fetch-depth=0 fetches the full repos (required for automatic versioning to work)
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0
25
+
26
+ - name: Set up Python 3.13
27
+ uses: actions/setup-python@v4
28
+ with:
29
+ python-version: 3.13
30
+
31
+ - name: Install dependencies
32
+ run: |
33
+ python -m pip install --upgrade pip
34
+ pip install build
35
+
36
+ - name: Build package
37
+ run: |
38
+ python3 -m build
39
+
40
+ - name: Install package
41
+ run: |
42
+ pip install dist/*.tar.gz
43
+
44
+ - run: docker pull bitcraze/builder
45
+
46
+ - name: CI checks
47
+ run: docker run --rm -v ${PWD}:/module bitcraze/builder ./tools/build/build
@@ -0,0 +1,33 @@
1
+ # This is a basic workflow to help you get started with Actions
2
+
3
+ name: CI experiment
4
+
5
+ # Controls when the action will run.
6
+ on:
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ checks:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ # Checkout, fetch-depth=0 fetches the full repos (required for automatic versioning to work)
15
+ - uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 0
18
+
19
+ - name: Set up Python 3.12
20
+ uses: actions/setup-python@v4
21
+ with:
22
+ python-version: 3.12
23
+
24
+ - name: Check build and install
25
+ run: |
26
+ pip install setuptools
27
+ python3 setup.py sdist
28
+ pip install dist/*.tar.gz
29
+
30
+ - run: docker pull bitcraze/builder
31
+
32
+ - name: CI checks
33
+ run: docker run --rm -v ${PWD}:/module bitcraze/builder ./tools/build/build
@@ -0,0 +1,45 @@
1
+ name: Log- and param documentation
2
+
3
+ # Controls when the action will run.
4
+ on:
5
+ workflow_dispatch:
6
+ schedule:
7
+ - cron: '0 0 * * *'
8
+
9
+ jobs:
10
+ update_log_param_json:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Check out sources
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Checkout crazyflie-firmware
18
+ uses: actions/checkout@v3
19
+ with:
20
+ repository: bitcraze/crazyflie-firmware
21
+ path: firmware
22
+
23
+ - name: Generate log_param_doc.json
24
+ run: |
25
+ cd firmware
26
+ docker run --rm -e "HOST_CW_DIR=${PWD}" \
27
+ -e "CALLING_HOST_NAME=$(hostname)" -e "CALLING_UID"=$UID \
28
+ -e "CALLING_OS"=$(uname) -v ${PWD}:/tb-module \
29
+ -v ${HOME}/.ssh:/root/.ssh \
30
+ -v /var/run/docker.sock:/var/run/docker.sock bitcraze/toolbelt \
31
+ build-docs
32
+
33
+ - name: Update client log_param_doc.json
34
+ run: |
35
+ cp firmware/docs/api/log_param_doc.json src/cfclient/resources/
36
+ git config --local user.email "ci@bitcraze.io"
37
+ git config --local user.name "Bitcraze CI Robot"
38
+ git add -f src/cfclient/resources/log_param_doc.json
39
+ git commit -m "Update log_param_doc.json" || echo "Nothing to commit"
40
+
41
+ - name: Push changes
42
+ uses: ad-m/github-push-action@master
43
+ with:
44
+ github_token: ${{ secrets.GITHUB_TOKEN }}
45
+ branch: ${{ github.ref }}
@@ -0,0 +1,62 @@
1
+ # Run check and build of the lib using the Bitcraze builder docker image
2
+ name: Nightly Build
3
+
4
+ on:
5
+ workflow_dispatch:
6
+ schedule:
7
+ - cron: '0 2 * * *'
8
+
9
+ jobs:
10
+ build-and-test:
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os: [ubuntu-latest, lab-mac, windows-latest]
15
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
16
+
17
+ runs-on: ${{ matrix.os }}
18
+
19
+ steps:
20
+ - name: Checkout repo
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Set up Python ${{ matrix.python-version }}
24
+ if: runner.os == 'Linux' || runner.os == 'Windows'
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: ${{ matrix.python-version }}
28
+
29
+ - name: Set up Python ${{ matrix.python-version }} and venv on macOS
30
+ if: runner.os == 'macOS'
31
+ run: |
32
+ brew install python@${{ matrix.python-version }}
33
+ $(brew --prefix)/bin/python${{ matrix.python-version }} -m venv venv
34
+ echo "PATH=$(pwd)/venv/bin:$PATH" >> $GITHUB_ENV
35
+
36
+ - name: Install dependencies
37
+ run: |
38
+ python3 -m pip install --upgrade pip build setuptools
39
+ python3 -m pip install pre-commit
40
+
41
+ - name: Code quality checks
42
+ run: pre-commit run --all-files
43
+
44
+ - name: Build wheel
45
+ run: python3 -m build --wheel
46
+
47
+ - name: Install the built wheel
48
+ run: |
49
+ # Find the built wheel
50
+ WHEEL_FILE=$(ls dist/*.whl | head -n 1)
51
+ echo "Installing wheel: $WHEEL_FILE"
52
+ pip install "$WHEEL_FILE"
53
+ shell: bash
54
+ if: runner.os != 'Windows'
55
+
56
+ - name: Install the built wheel (Windows)
57
+ run: |
58
+ for /f %%i in ('dir /b dist\*.whl') do set WHEEL_FILE=dist\%%i
59
+ echo Installing wheel: %WHEEL_FILE%
60
+ pip install %WHEEL_FILE%
61
+ shell: cmd
62
+ if: runner.os == 'Windows'
@@ -0,0 +1,44 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Release
10
+
11
+ on:
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ deploy:
19
+
20
+ runs-on: ubuntu-latest
21
+ environment:
22
+ name: pypi
23
+ url: https://pypi.org/p/cfclient
24
+ permissions:
25
+ id-token: write
26
+
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ with:
30
+ fetch-depth: 0
31
+ - name: Set up Python
32
+ uses: actions/setup-python@v4
33
+ with:
34
+ python-version: '3.x'
35
+ - name: Install dependencies
36
+ run: |
37
+ python -m pip install --upgrade pip
38
+ pip install build
39
+ - name: Build package
40
+ run: python -m build
41
+ - name: Publish package
42
+ uses: pypa/gh-action-pypi-publish@release/v1
43
+ with:
44
+ verbose: true
@@ -0,0 +1,46 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Test Release
10
+
11
+ on:
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ deploy:
19
+
20
+ runs-on: ubuntu-latest
21
+
22
+ environment:
23
+ name: pypi-test
24
+ url: https://pypi.org/p/cfclient
25
+ permissions:
26
+ id-token: write
27
+
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ with:
31
+ fetch-depth: 0
32
+ - name: Set up Python
33
+ uses: actions/setup-python@v4
34
+ with:
35
+ python-version: '3.x'
36
+ - name: Install dependencies
37
+ run: |
38
+ python -m pip install --upgrade pip
39
+ pip install build
40
+ - name: Build package
41
+ run: python -m build
42
+ - name: Publish package to TestPyPI
43
+ uses: pypa/gh-action-pypi-publish@release/v1
44
+ with:
45
+ repository-url: https://test.pypi.org/legacy/
46
+ verbose: true
@@ -0,0 +1,33 @@
1
+ syntax: glob
2
+ *.pyc
3
+ *~
4
+ config.json
5
+ dist/*
6
+ build/*
7
+ cache
8
+ src/cfclient.egg-info/*
9
+ src/cfclient/third_party/*
10
+ version.py
11
+ log_param_doc.json
12
+
13
+ # PC client settings
14
+ conf/*
15
+
16
+ # Eclipse settings
17
+ .project
18
+ .pydevproject
19
+ .settings/*
20
+ msvcp90.dll
21
+
22
+ # PyCharm
23
+ .idea/*
24
+ .DS_Store
25
+
26
+ # vscode
27
+ .vscode/
28
+
29
+ # Jykell files
30
+ docs/.jekyll-metadata
31
+
32
+ # Python venv
33
+ venv/
@@ -0,0 +1,5 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: 7192665e31cea6ace58a71e086c7248d7e5610c2
4
+ hooks:
5
+ - id: flake8
@@ -0,0 +1,7 @@
1
+ cmake_minimum_required(VERSION 2.8.3)
2
+ project(cfclient)
3
+ find_package(catkin REQUIRED)
4
+ catkin_package()
5
+ catkin_python_setup()
6
+ install(PROGRAMS bin/cfclient bin/cfheadless
7
+ DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
@@ -2,5 +2,4 @@ include README.md
2
2
  recursive-include src/cfclient/configs *.json
3
3
  recursive-include src/cfclient/ui *.ui
4
4
  recursive-include src/cfclient/resources *
5
- include src/cfclient/version.json
6
- include gitversion.py
5
+ include src/cfclient/version.py
@@ -1,28 +1,45 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: cfclient
3
- Version: 2024.11
4
- Summary: Bitcraze Cazyflie quadcopter client
5
- Home-page: http://www.bitcraze.io
6
- Author: Bitcraze team
7
- Author-email: contact@bitcraze.se
8
- Keywords: quadcopter crazyflie
3
+ Version: 2025.2
4
+ Summary: Crazyflie PC client
5
+ Author-email: Bitcraze and contributors <contact@bitcraze.io>
6
+ License: GPLv2+
7
+ Project-URL: Homepage, https://www.bitcraze.io
8
+ Project-URL: Documentation, https://www.bitcraze.io/documentation/repository/crazyflie-clients-python/master/
9
+ Project-URL: Repository, https://github.com/bitcraze/crazyflie-clients-python
10
+ Project-URL: Issues, https://github.com/bitcraze/crazyflie-clients-python/issues
11
+ Keywords: quadcopter,crazyflie
12
+ Classifier: Development Status :: 5 - Production/Stable
9
13
  Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)
10
- Classifier: Programming Language :: Python :: 3.4
11
- Classifier: Programming Language :: Python :: 3.5
14
+ Classifier: Topic :: Scientific/Engineering
15
+ Classifier: Topic :: Scientific/Engineering :: Visualization
16
+ Classifier: Topic :: Software Development :: User Interfaces
17
+ Classifier: Intended Audience :: End Users/Desktop
18
+ Classifier: Intended Audience :: Science/Research
19
+ Classifier: Intended Audience :: Education
20
+ Classifier: Intended Audience :: Developers
21
+ Classifier: Operating System :: POSIX :: Linux
22
+ Classifier: Operating System :: MacOS
23
+ Classifier: Operating System :: Microsoft :: Windows
24
+ Classifier: Programming Language :: Python :: 3.10
25
+ Classifier: Programming Language :: Python :: 3.11
26
+ Classifier: Programming Language :: Python :: 3.12
27
+ Classifier: Programming Language :: Python :: 3.13
28
+ Requires-Python: >=3.10
12
29
  Description-Content-Type: text/markdown
13
30
  License-File: LICENSE.txt
14
- Requires-Dist: cflib>=0.1.27
31
+ Requires-Dist: cflib>=0.1.28
15
32
  Requires-Dist: setuptools
16
33
  Requires-Dist: appdirs~=1.4.0
17
34
  Requires-Dist: pyzmq~=26.0
18
35
  Requires-Dist: pyqtgraph~=0.13
19
36
  Requires-Dist: PyYAML~=6.0.1
20
- Requires-Dist: numpy~=1.20
21
- Requires-Dist: vispy~=0.14.2
37
+ Requires-Dist: numpy~=1.26
38
+ Requires-Dist: vispy~=0.14.3
22
39
  Requires-Dist: pyopengl~=3.1.7
23
40
  Requires-Dist: pyserial~=3.5
24
- Requires-Dist: pyqt6>=6.4
25
- Requires-Dist: PyQt6-sip>=13.4
41
+ Requires-Dist: PyQt6~=6.7.1
42
+ Requires-Dist: PyQt6-sip~=13.8
26
43
  Requires-Dist: pysdl2~=0.9.14; platform_system == "Windows" or platform_system == "Darwin"
27
44
  Requires-Dist: pysdl2-dll==2.24.0; platform_system == "Windows" or platform_system == "Darwin"
28
45
  Provides-Extra: dev
@@ -0,0 +1,46 @@
1
+ Crazyflie Python client/API
2
+ ===========================
3
+
4
+ Checks
5
+ ------
6
+ - Verify that configuration files are still working
7
+ - Verify that params are working
8
+ - Param list shows all params
9
+ - Possible to set a param
10
+ - Verify that log is working
11
+ - Log list shows all loggable variables
12
+ - Possible to create log configuration
13
+ - Possible to plot log configuration
14
+ - Possible to start/stop log configuration
15
+ - Possible to write logged data from log configuration to file
16
+ - Verify that the following works on all OSes supported
17
+ - Verify that input devices are working
18
+ - No input devices
19
+ - One input devices
20
+ - Multiple input devices
21
+ - Map device from scratch and by loading previous configuration
22
+ - Scan and connect to Crazyflie via Crazyradio
23
+ - Scan and connect to Crazyflie via USB
24
+ - Negative tests such as
25
+ - Disconnect Crazyflie via USB when connected
26
+ - Disconnect Crazyradio when connected
27
+ - Showing the Debug tab in the About dialog
28
+ - Verify that it's possible to change the Crazyflie configuration block
29
+ - Verify bootloading, both from UI and cfload
30
+ - Verify that it's possible to connect to a Crazyflie and control it
31
+
32
+ Preparations
33
+ ------------
34
+ - Connect to the latest firmware release, download the param/log TOC and commit the cache
35
+ - Make sure that all packages and resources is added to the setup.py ```setup_args```
36
+
37
+ Build distribution
38
+ ------------------
39
+ 1. Reset tree into a clean tree with "git reset --hard HEAD"
40
+ - **Warning: this removes all changes from the source tree!**
41
+ 2. Tag commit with "year.month[.patch]". For example 2014.12.2 or 2015.2 and push the tag to Github
42
+ 3. ```python setup.py sdist```
43
+
44
+ Distribute
45
+ ----------
46
+ 1. Upload the release from ```dist/cfclient-*``` to Github release for this tag
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python3
2
+ from cfclient.gui import main
3
+
4
+ if __name__ == "__main__":
5
+ main()
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python3
2
+ from cfclient.headless import main
3
+
4
+ if __name__ == "__main__":
5
+ main()
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python3
2
+ from cfloader import main
3
+
4
+ if __name__ == "__main__":
5
+ main()
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python3
2
+ from cfzmq import main
3
+
4
+ if __name__ == "__main__":
5
+ main()
Binary file