cfclient 2024.7.1__py3-none-any.whl → 2025.12.1__py3-none-any.whl

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.
Files changed (55) hide show
  1. cfclient/__init__.py +9 -7
  2. cfclient/configs/config.json +1 -1
  3. cfclient/configs/log/PID_tuning/Attitude.json +46 -0
  4. cfclient/configs/log/PID_tuning/Attitude_rate.json +46 -0
  5. cfclient/configs/log/PID_tuning/Position.json +46 -0
  6. cfclient/configs/log/PID_tuning/Velocity.json +46 -0
  7. cfclient/configs/log/PID_tuning_components/Pitch.json +22 -0
  8. cfclient/configs/log/PID_tuning_components/Pitch_rate.json +22 -0
  9. cfclient/configs/log/PID_tuning_components/Position_x.json +22 -0
  10. cfclient/configs/log/PID_tuning_components/Position_y.json +22 -0
  11. cfclient/configs/log/PID_tuning_components/Position_z.json +22 -0
  12. cfclient/configs/log/PID_tuning_components/Roll.json +22 -0
  13. cfclient/configs/log/PID_tuning_components/Roll_rate.json +22 -0
  14. cfclient/configs/log/PID_tuning_components/Velocity_x.json +22 -0
  15. cfclient/configs/log/PID_tuning_components/Velocity_y.json +22 -0
  16. cfclient/configs/log/PID_tuning_components/Velocity_z.json +22 -0
  17. cfclient/configs/log/PID_tuning_components/Yaw.json +22 -0
  18. cfclient/configs/log/PID_tuning_components/Yaw_rate.json +22 -0
  19. cfclient/resources/log_param_doc.json +1 -1
  20. cfclient/ui/dialogs/about.py +5 -1
  21. cfclient/ui/dialogs/basestation_mode_dialog.py +12 -1
  22. cfclient/ui/dialogs/bootloader.py +76 -6
  23. cfclient/ui/dialogs/bootloader.ui +110 -24
  24. cfclient/ui/dialogs/cf2config.ui +1 -1
  25. cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py +0 -12
  26. cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui +0 -7
  27. cfclient/ui/icons/bl.webp +0 -0
  28. cfclient/ui/icons/bolt.webp +0 -0
  29. cfclient/ui/icons/cf21.webp +0 -0
  30. cfclient/ui/icons/flapper.webp +0 -0
  31. cfclient/ui/icons/tag.webp +0 -0
  32. cfclient/ui/main.py +3 -3
  33. cfclient/ui/main.ui +1 -1
  34. cfclient/ui/tabs/ColorLEDTab.py +752 -0
  35. cfclient/ui/tabs/FlightTab.py +11 -108
  36. cfclient/ui/tabs/{LEDTab.py → LEDRingTab.py} +126 -12
  37. cfclient/ui/tabs/LogTab.py +2 -2
  38. cfclient/ui/tabs/ParamTab.py +90 -4
  39. cfclient/ui/tabs/__init__.py +4 -2
  40. cfclient/ui/tabs/colorLEDTab.ui +624 -0
  41. cfclient/ui/tabs/consoleTab.ui +1 -1
  42. cfclient/ui/tabs/flightTab.ui +28 -71
  43. cfclient/ui/tabs/{ledTab.ui → ledRingTab.ui} +63 -46
  44. cfclient/utils/input/__init__.py +3 -3
  45. cfclient/utils/periodictimer.py +1 -1
  46. cfclient/version.py +34 -0
  47. cfclient-2025.12.1.dist-info/METADATA +70 -0
  48. {cfclient-2024.7.1.dist-info → cfclient-2025.12.1.dist-info}/RECORD +54 -28
  49. {cfclient-2024.7.1.dist-info → cfclient-2025.12.1.dist-info}/WHEEL +1 -1
  50. {cfclient-2024.7.1.dist-info → cfclient-2025.12.1.dist-info}/top_level.txt +1 -0
  51. cfconfig/Makefile +51 -0
  52. cfconfig/configblock.py +111 -0
  53. cfclient-2024.7.1.dist-info/METADATA +0 -53
  54. {cfclient-2024.7.1.dist-info → cfclient-2025.12.1.dist-info}/entry_points.txt +0 -0
  55. {cfclient-2024.7.1.dist-info → cfclient-2025.12.1.dist-info/licenses}/LICENSE.txt +0 -0
@@ -17,12 +17,12 @@
17
17
  <item>
18
18
  <widget class="QSplitter" name="splitter_2">
19
19
  <property name="orientation">
20
- <enum>Qt::Horizontal</enum>
20
+ <enum>Qt::Orientation::Horizontal</enum>
21
21
  </property>
22
22
  <widget class="QWidget" name="layoutWidget">
23
23
  <layout class="QVBoxLayout" name="verticalLayout">
24
24
  <property name="sizeConstraint">
25
- <enum>QLayout::SetMaximumSize</enum>
25
+ <enum>QLayout::SizeConstraint::SetMaximumSize</enum>
26
26
  </property>
27
27
  <item>
28
28
  <widget class="QGroupBox" name="groupBox_2">
@@ -142,10 +142,10 @@
142
142
  <item row="0" column="1">
143
143
  <spacer name="verticalSpacer_3">
144
144
  <property name="orientation">
145
- <enum>Qt::Vertical</enum>
145
+ <enum>Qt::Orientation::Vertical</enum>
146
146
  </property>
147
147
  <property name="sizeType">
148
- <enum>QSizePolicy::Maximum</enum>
148
+ <enum>QSizePolicy::Policy::Maximum</enum>
149
149
  </property>
150
150
  <property name="sizeHint" stdset="0">
151
151
  <size>
@@ -203,7 +203,7 @@
203
203
  <item row="0" column="0">
204
204
  <widget class="QLabel" name="label_7">
205
205
  <property name="layoutDirection">
206
- <enum>Qt::LeftToRight</enum>
206
+ <enum>Qt::LayoutDirection::LeftToRight</enum>
207
207
  </property>
208
208
  <property name="text">
209
209
  <string>Max angle/rate</string>
@@ -360,53 +360,10 @@
360
360
  </layout>
361
361
  </widget>
362
362
  </item>
363
- <item>
364
- <widget class="QGroupBox" name="groupBox_4">
365
- <property name="minimumSize">
366
- <size>
367
- <width>160</width>
368
- <height>0</height>
369
- </size>
370
- </property>
371
- <property name="title">
372
- <string>Expansion boards</string>
373
- </property>
374
- <layout class="QGridLayout" name="gridLayout_6">
375
- <item row="0" column="0">
376
- <layout class="QGridLayout" name="gridLayout_2">
377
- <item row="0" column="1">
378
- <widget class="QComboBox" name="_led_ring_effect">
379
- <property name="enabled">
380
- <bool>false</bool>
381
- </property>
382
- </widget>
383
- </item>
384
- <item row="0" column="0">
385
- <widget class="QLabel" name="label_8">
386
- <property name="text">
387
- <string>LED-ring effect</string>
388
- </property>
389
- </widget>
390
- </item>
391
- <item row="1" column="1">
392
- <widget class="QCheckBox" name="_led_ring_headlight">
393
- <property name="enabled">
394
- <bool>false</bool>
395
- </property>
396
- <property name="text">
397
- <string>LED-ring headlight</string>
398
- </property>
399
- </widget>
400
- </item>
401
- </layout>
402
- </item>
403
- </layout>
404
- </widget>
405
- </item>
406
363
  <item>
407
364
  <spacer name="verticalSpacer">
408
365
  <property name="orientation">
409
- <enum>Qt::Vertical</enum>
366
+ <enum>Qt::Orientation::Vertical</enum>
410
367
  </property>
411
368
  <property name="sizeHint" stdset="0">
412
369
  <size>
@@ -459,7 +416,7 @@
459
416
  <widget class="QWidget" name="layoutWidget">
460
417
  <layout class="QHBoxLayout" name="horizontalLayout_2">
461
418
  <property name="sizeConstraint">
462
- <enum>QLayout::SetDefaultConstraint</enum>
419
+ <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
463
420
  </property>
464
421
  <item>
465
422
  <widget class="QGroupBox" name="groupBox">
@@ -476,7 +433,7 @@
476
433
  <item row="0" column="0">
477
434
  <widget class="QSplitter" name="splitter">
478
435
  <property name="orientation">
479
- <enum>Qt::Vertical</enum>
436
+ <enum>Qt::Orientation::Vertical</enum>
480
437
  </property>
481
438
  <widget class="QWidget" name="layoutWidget">
482
439
  <layout class="QVBoxLayout" name="verticalLayout_4"/>
@@ -484,7 +441,7 @@
484
441
  <widget class="QWidget" name="layoutWidget">
485
442
  <layout class="QGridLayout" name="gridLayout_5" rowstretch="0,0,0,0,0,0,0,0">
486
443
  <property name="sizeConstraint">
487
- <enum>QLayout::SetMinimumSize</enum>
444
+ <enum>QLayout::SizeConstraint::SetMinimumSize</enum>
488
445
  </property>
489
446
  <property name="horizontalSpacing">
490
447
  <number>6</number>
@@ -498,7 +455,7 @@
498
455
  <string>Thrust</string>
499
456
  </property>
500
457
  <property name="alignment">
501
- <set>Qt::AlignCenter</set>
458
+ <set>Qt::AlignmentFlag::AlignCenter</set>
502
459
  </property>
503
460
  </widget>
504
461
  </item>
@@ -511,7 +468,7 @@
511
468
  <number>0</number>
512
469
  </property>
513
470
  <property name="orientation">
514
- <enum>Qt::Vertical</enum>
471
+ <enum>Qt::Orientation::Vertical</enum>
515
472
  </property>
516
473
  </widget>
517
474
  </item>
@@ -553,7 +510,7 @@
553
510
  <number>0</number>
554
511
  </property>
555
512
  <property name="orientation">
556
- <enum>Qt::Vertical</enum>
513
+ <enum>Qt::Orientation::Vertical</enum>
557
514
  </property>
558
515
  </widget>
559
516
  </item>
@@ -602,7 +559,7 @@
602
559
  <number>0</number>
603
560
  </property>
604
561
  <property name="orientation">
605
- <enum>Qt::Vertical</enum>
562
+ <enum>Qt::Orientation::Vertical</enum>
606
563
  </property>
607
564
  </widget>
608
565
  </item>
@@ -616,7 +573,7 @@
616
573
  <item row="0" column="13">
617
574
  <spacer name="horizontalSpacer_2">
618
575
  <property name="orientation">
619
- <enum>Qt::Horizontal</enum>
576
+ <enum>Qt::Orientation::Horizontal</enum>
620
577
  </property>
621
578
  <property name="sizeHint" stdset="0">
622
579
  <size>
@@ -673,10 +630,10 @@
673
630
  <number>24</number>
674
631
  </property>
675
632
  <property name="alignment">
676
- <set>Qt::AlignCenter</set>
633
+ <set>Qt::AlignmentFlag::AlignCenter</set>
677
634
  </property>
678
635
  <property name="orientation">
679
- <enum>Qt::Vertical</enum>
636
+ <enum>Qt::Orientation::Vertical</enum>
680
637
  </property>
681
638
  <property name="invertedAppearance">
682
639
  <bool>false</bool>
@@ -695,17 +652,17 @@
695
652
  <string>Gamepad Input</string>
696
653
  </property>
697
654
  <property name="alignment">
698
- <set>Qt::AlignCenter</set>
655
+ <set>Qt::AlignmentFlag::AlignCenter</set>
699
656
  </property>
700
657
  </widget>
701
658
  </item>
702
659
  <item row="1" column="3">
703
660
  <spacer name="horizontalSpacer">
704
661
  <property name="orientation">
705
- <enum>Qt::Horizontal</enum>
662
+ <enum>Qt::Orientation::Horizontal</enum>
706
663
  </property>
707
664
  <property name="sizeType">
708
- <enum>QSizePolicy::Fixed</enum>
665
+ <enum>QSizePolicy::Policy::Fixed</enum>
709
666
  </property>
710
667
  <property name="sizeHint" stdset="0">
711
668
  <size>
@@ -767,7 +724,7 @@
767
724
  <string>Command Based Flight Control</string>
768
725
  </property>
769
726
  <property name="alignment">
770
- <set>Qt::AlignCenter</set>
727
+ <set>Qt::AlignmentFlag::AlignCenter</set>
771
728
  </property>
772
729
  <property name="Enabled" stdset="0">
773
730
  <bool>false</bool>
@@ -805,7 +762,7 @@
805
762
  <item row="0" column="1" rowspan="2" colspan="2">
806
763
  <layout class="QGridLayout" name="horizontalLayout">
807
764
  <property name="sizeConstraint">
808
- <enum>QLayout::SetDefaultConstraint</enum>
765
+ <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
809
766
  </property>
810
767
  <property name="leftMargin">
811
768
  <number>10</number>
@@ -980,10 +937,10 @@
980
937
  <item row="1" column="13">
981
938
  <spacer name="horizontalSpacer_4">
982
939
  <property name="orientation">
983
- <enum>Qt::Horizontal</enum>
940
+ <enum>Qt::Orientation::Horizontal</enum>
984
941
  </property>
985
942
  <property name="sizeType">
986
- <enum>QSizePolicy::Fixed</enum>
943
+ <enum>QSizePolicy::Policy::Fixed</enum>
987
944
  </property>
988
945
  <property name="sizeHint" stdset="0">
989
946
  <size>
@@ -1043,10 +1000,10 @@
1043
1000
  <item row="1" column="6">
1044
1001
  <spacer name="horizontalSpacer_3">
1045
1002
  <property name="orientation">
1046
- <enum>Qt::Horizontal</enum>
1003
+ <enum>Qt::Orientation::Horizontal</enum>
1047
1004
  </property>
1048
1005
  <property name="sizeType">
1049
- <enum>QSizePolicy::Fixed</enum>
1006
+ <enum>QSizePolicy::Policy::Fixed</enum>
1050
1007
  </property>
1051
1008
  <property name="sizeHint" stdset="0">
1052
1009
  <size>
@@ -1068,7 +1025,7 @@
1068
1025
  <string>State Estimate</string>
1069
1026
  </property>
1070
1027
  <property name="alignment">
1071
- <set>Qt::AlignCenter</set>
1028
+ <set>Qt::AlignmentFlag::AlignCenter</set>
1072
1029
  </property>
1073
1030
  </widget>
1074
1031
  </item>
@@ -1122,7 +1079,7 @@
1122
1079
  <number>0</number>
1123
1080
  </property>
1124
1081
  <property name="orientation">
1125
- <enum>Qt::Vertical</enum>
1082
+ <enum>Qt::Orientation::Vertical</enum>
1126
1083
  </property>
1127
1084
  </widget>
1128
1085
  </item>
@@ -1163,7 +1120,7 @@
1163
1120
  <string>Supervisor</string>
1164
1121
  </property>
1165
1122
  <property name="alignment">
1166
- <set>Qt::AlignCenter</set>
1123
+ <set>Qt::AlignmentFlag::AlignCenter</set>
1167
1124
  </property>
1168
1125
  </widget>
1169
1126
  </item>
@@ -17,7 +17,7 @@
17
17
  <item>
18
18
  <spacer name="horizontalSpacer">
19
19
  <property name="orientation">
20
- <enum>Qt::Horizontal</enum>
20
+ <enum>Qt::Orientation::Horizontal</enum>
21
21
  </property>
22
22
  <property name="sizeHint" stdset="0">
23
23
  <size>
@@ -240,37 +240,46 @@
240
240
  </item>
241
241
  <item>
242
242
  <layout class="QGridLayout" name="gridLayout_2">
243
- <item row="0" column="0">
244
- <widget class="QSlider" name="_intensity_slider">
245
- <property name="enabled">
246
- <bool>false</bool>
247
- </property>
248
- <property name="minimum">
249
- <number>1</number>
250
- </property>
251
- <property name="maximum">
252
- <number>100</number>
253
- </property>
254
- <property name="value">
255
- <number>100</number>
256
- </property>
257
- <property name="orientation">
258
- <enum>Qt::Vertical</enum>
259
- </property>
260
- <property name="invertedAppearance">
261
- <bool>false</bool>
262
- </property>
263
- <property name="tickPosition">
264
- <enum>QSlider::NoTicks</enum>
265
- </property>
266
- <property name="tickInterval">
267
- <number>10</number>
268
- </property>
269
- </widget>
270
- </item>
271
243
  <item row="0" column="1">
272
244
  <layout class="QGridLayout" name="gridLayout_3">
273
- <item row="1" column="0">
245
+ <item row="4" column="0">
246
+ <widget class="QComboBox" name="_led_ring_effect"/>
247
+ </item>
248
+ <item row="3" column="0">
249
+ <widget class="QLabel" name="label_2">
250
+ <property name="text">
251
+ <string>Effects</string>
252
+ </property>
253
+ </widget>
254
+ </item>
255
+ <item row="6" column="0">
256
+ <widget class="QLabel" name="label">
257
+ <property name="text">
258
+ <string>Intensity</string>
259
+ </property>
260
+ </widget>
261
+ </item>
262
+ <item row="9" column="0">
263
+ <spacer name="verticalSpacer">
264
+ <property name="orientation">
265
+ <enum>Qt::Orientation::Vertical</enum>
266
+ </property>
267
+ <property name="sizeHint" stdset="0">
268
+ <size>
269
+ <width>20</width>
270
+ <height>40</height>
271
+ </size>
272
+ </property>
273
+ </spacer>
274
+ </item>
275
+ <item row="5" column="0">
276
+ <widget class="QCheckBox" name="_led_ring_headlight">
277
+ <property name="text">
278
+ <string>Headlight</string>
279
+ </property>
280
+ </widget>
281
+ </item>
282
+ <item row="7" column="0">
274
283
  <widget class="QSpinBox" name="_intensity_spin">
275
284
  <property name="enabled">
276
285
  <bool>false</bool>
@@ -292,25 +301,33 @@
292
301
  </property>
293
302
  </widget>
294
303
  </item>
295
- <item row="0" column="0">
296
- <widget class="QLabel" name="label">
297
- <property name="text">
298
- <string>Intensity</string>
304
+ <item row="8" column="0">
305
+ <widget class="QSlider" name="_intensity_slider">
306
+ <property name="enabled">
307
+ <bool>false</bool>
308
+ </property>
309
+ <property name="minimum">
310
+ <number>1</number>
311
+ </property>
312
+ <property name="maximum">
313
+ <number>100</number>
314
+ </property>
315
+ <property name="value">
316
+ <number>100</number>
299
317
  </property>
300
- </widget>
301
- </item>
302
- <item row="2" column="0">
303
- <spacer name="verticalSpacer">
304
318
  <property name="orientation">
305
- <enum>Qt::Vertical</enum>
319
+ <enum>Qt::Orientation::Horizontal</enum>
306
320
  </property>
307
- <property name="sizeHint" stdset="0">
308
- <size>
309
- <width>20</width>
310
- <height>40</height>
311
- </size>
321
+ <property name="invertedAppearance">
322
+ <bool>false</bool>
312
323
  </property>
313
- </spacer>
324
+ <property name="tickPosition">
325
+ <enum>QSlider::TickPosition::NoTicks</enum>
326
+ </property>
327
+ <property name="tickInterval">
328
+ <number>10</number>
329
+ </property>
330
+ </widget>
314
331
  </item>
315
332
  </layout>
316
333
  </item>
@@ -319,7 +336,7 @@
319
336
  <item>
320
337
  <spacer name="horizontalSpacer_2">
321
338
  <property name="orientation">
322
- <enum>Qt::Horizontal</enum>
339
+ <enum>Qt::Orientation::Horizontal</enum>
323
340
  </property>
324
341
  <property name="sizeHint" stdset="0">
325
342
  <size>
@@ -453,7 +453,7 @@ class JoystickReader(object):
453
453
  vx = data.roll
454
454
  vy = data.pitch
455
455
  vz = data.thrust
456
- yawrate = data.yaw
456
+ yawrate = -data.yaw
457
457
  # The odd use of vx and vy is to map forward on the
458
458
  # physical joystick to positive X-axis
459
459
  self.assisted_input_updated.call(vy, -vx, vz, yawrate)
@@ -473,7 +473,7 @@ class JoystickReader(object):
473
473
  if self._target_height < MIN_HOVER_HEIGHT:
474
474
  self._target_height = MIN_HOVER_HEIGHT
475
475
 
476
- yawrate = data.yaw
476
+ yawrate = -data.yaw
477
477
  # The odd use of vx and vy is to map forward on the
478
478
  # physical joystick to positive X-axis
479
479
  self.hover_input_updated.call(vy, -vx, yawrate,
@@ -499,7 +499,7 @@ class JoystickReader(object):
499
499
  and data.assistedControl:
500
500
  roll = data.roll + self.trim_roll
501
501
  pitch = data.pitch + self.trim_pitch
502
- yawrate = data.yaw
502
+ yawrate = -data.yaw
503
503
  # Scale thrust to a value between -1.0 to 1.0
504
504
  vz = (data.thrust - 32767) / 32767.0
505
505
  # Integrate velocity setpoint
@@ -57,7 +57,7 @@ class PeriodicTimer:
57
57
  logger.warning("Timer already started, not restarting")
58
58
  return
59
59
  self._thread = _PeriodicTimerThread(self._period, self._callbacks)
60
- self._thread.setDaemon(True)
60
+ self._thread.daemon = True
61
61
  self._thread.start()
62
62
 
63
63
  def stop(self):
cfclient/version.py ADDED
@@ -0,0 +1,34 @@
1
+ # file generated by setuptools-scm
2
+ # don't change, don't track in version control
3
+
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
12
+
13
+ TYPE_CHECKING = False
14
+ if TYPE_CHECKING:
15
+ from typing import Tuple
16
+ from typing import Union
17
+
18
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
20
+ else:
21
+ VERSION_TUPLE = object
22
+ COMMIT_ID = object
23
+
24
+ version: str
25
+ __version__: str
26
+ __version_tuple__: VERSION_TUPLE
27
+ version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
30
+
31
+ __version__ = version = '2025.12.1'
32
+ __version_tuple__ = version_tuple = (2025, 12, 1)
33
+
34
+ __commit_id__ = commit_id = None
@@ -0,0 +1,70 @@
1
+ Metadata-Version: 2.4
2
+ Name: cfclient
3
+ Version: 2025.12.1
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
13
+ Classifier: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)
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
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE.txt
31
+ Requires-Dist: cflib~=0.1.31
32
+ Requires-Dist: setuptools
33
+ Requires-Dist: appdirs~=1.4.0
34
+ Requires-Dist: pyzmq~=26.0
35
+ Requires-Dist: pyqtgraph~=0.13
36
+ Requires-Dist: PyYAML~=6.0.1
37
+ Requires-Dist: numpy~=2.2
38
+ Requires-Dist: vispy~=0.15.2
39
+ Requires-Dist: pyopengl~=3.1.7
40
+ Requires-Dist: pyserial~=3.5
41
+ Requires-Dist: PyQt6~=6.7.1
42
+ Requires-Dist: PyQt6-sip~=13.8
43
+ Requires-Dist: pysdl2~=0.9.14; platform_system == "Windows" or platform_system == "Darwin"
44
+ Requires-Dist: pysdl2-dll==2.24.0; platform_system == "Windows" or platform_system == "Darwin"
45
+ Provides-Extra: dev
46
+ Requires-Dist: pre-commit; extra == "dev"
47
+ Requires-Dist: cx_freeze==5.1.1; platform_system == "Windows" and extra == "dev"
48
+ Requires-Dist: jinja2==2.10.3; platform_system == "Windows" and extra == "dev"
49
+ Dynamic: license-file
50
+
51
+ # Crazyflie PC client [![CI](https://github.com/bitcraze/crazyflie-clients-python/workflows/CI/badge.svg)](https://github.com/bitcraze/crazyflie-clients-python/actions?query=workflow%3ACI)
52
+
53
+ This repository contains host applications for the Crazyflie, including the PC client (`cfclient`), headless client (`cfheadless`), firmware loader (`cfloader`), and ZMQ interface (`cfzmq`).
54
+ These applications provide graphical and command-line interfaces for firmware flashing, flight control, parameter configuration, real-time data logging and visualization, and more.
55
+ All applications are built on [`cflib`](https://github.com/bitcraze/crazyflie-lib-python).
56
+
57
+ ## Installation
58
+ See the [installation instructions](docs/installation/install.md) in the GitHub docs folder.
59
+
60
+ ## Official Documentation
61
+
62
+ Check out the [Bitcraze crazyflie-client-python documentation](https://www.bitcraze.io/documentation/repository/crazyflie-clients-python/master/) on our website.
63
+
64
+ ## Contribute
65
+ Go to the [contribute page](https://www.bitcraze.io/contribute/) on our website to learn more.
66
+
67
+ ### Test code for contribution
68
+ Run the automated build locally to test your code
69
+
70
+ python3 tools/build/build