cfclient 2017.4__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 (140) hide show
  1. cfclient/__init__.py +16 -11
  2. cfclient/configs/config.json +4 -3
  3. cfclient/configs/input/Generic_OS_X.json +1 -0
  4. cfclient/configs/input/Joystick.json +1 -0
  5. cfclient/configs/input/PS3_Mode_1.json +1 -0
  6. cfclient/configs/input/PS3_Mode_2.json +1 -0
  7. cfclient/configs/input/PS3_Mode_3.json +1 -0
  8. cfclient/configs/input/PS4_Mode_1.json +1 -0
  9. cfclient/configs/input/PS4_Mode_2.json +1 -0
  10. cfclient/configs/input/PS4_shoulder_btns_yaw.json +1 -0
  11. cfclient/configs/input/xbox360_mode1.json +1 -0
  12. cfclient/configs/log/PID_tuning/Attitude.json +46 -0
  13. cfclient/configs/log/PID_tuning/Attitude_rate.json +46 -0
  14. cfclient/configs/log/PID_tuning/Position.json +46 -0
  15. cfclient/configs/log/PID_tuning/Velocity.json +46 -0
  16. cfclient/configs/log/PID_tuning_components/Pitch.json +22 -0
  17. cfclient/configs/log/PID_tuning_components/Pitch_rate.json +22 -0
  18. cfclient/configs/log/PID_tuning_components/Position_x.json +22 -0
  19. cfclient/configs/log/PID_tuning_components/Position_y.json +22 -0
  20. cfclient/configs/log/PID_tuning_components/Position_z.json +22 -0
  21. cfclient/configs/log/PID_tuning_components/Roll.json +22 -0
  22. cfclient/configs/log/PID_tuning_components/Roll_rate.json +22 -0
  23. cfclient/configs/log/PID_tuning_components/Velocity_x.json +22 -0
  24. cfclient/configs/log/PID_tuning_components/Velocity_y.json +22 -0
  25. cfclient/configs/log/PID_tuning_components/Velocity_z.json +22 -0
  26. cfclient/configs/log/PID_tuning_components/Yaw.json +22 -0
  27. cfclient/configs/log/PID_tuning_components/Yaw_rate.json +22 -0
  28. cfclient/gui.py +44 -9
  29. cfclient/headless.py +3 -12
  30. cfclient/resources/log_param_doc.json +1 -0
  31. cfclient/ui/connectivity_manager.py +198 -0
  32. cfclient/ui/dialogs/about.py +53 -36
  33. cfclient/ui/dialogs/about.ui +23 -3
  34. cfclient/ui/dialogs/anchor_position_dialog.py +252 -0
  35. cfclient/ui/dialogs/anchor_position_dialog.ui +138 -0
  36. cfclient/ui/dialogs/basestation_mode_dialog.py +185 -0
  37. cfclient/ui/dialogs/basestation_mode_dialog.ui +186 -0
  38. cfclient/ui/dialogs/bootloader.py +448 -85
  39. cfclient/ui/dialogs/bootloader.ui +387 -134
  40. cfclient/ui/dialogs/cf2config.py +4 -4
  41. cfclient/ui/dialogs/cf2config.ui +3 -4
  42. cfclient/ui/dialogs/inputconfigdialogue.py +24 -19
  43. cfclient/ui/dialogs/inputconfigdialogue.ui +53 -30
  44. cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py +220 -0
  45. cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui +110 -0
  46. cfclient/ui/dialogs/lighthouse_system_type_dialog.py +93 -0
  47. cfclient/ui/dialogs/lighthouse_system_type_dialog.ui +121 -0
  48. cfclient/ui/dialogs/logconfigdialogue.py +401 -101
  49. cfclient/ui/dialogs/logconfigdialogue.ui +117 -72
  50. cfclient/ui/icons/bl.webp +0 -0
  51. cfclient/ui/icons/bolt.webp +0 -0
  52. cfclient/ui/icons/cf21.webp +0 -0
  53. cfclient/ui/icons/checkmark_black.png +0 -0
  54. cfclient/ui/icons/checkmark_white.png +0 -0
  55. cfclient/ui/icons/create.png +0 -0
  56. cfclient/ui/icons/delete.png +0 -0
  57. cfclient/ui/icons/flapper.webp +0 -0
  58. cfclient/ui/icons/tag.webp +0 -0
  59. cfclient/ui/main.py +328 -258
  60. cfclient/ui/main.ui +184 -80
  61. cfclient/ui/pluginhelper.py +7 -1
  62. cfclient/ui/pose_logger.py +116 -0
  63. cfclient/ui/tab_toolbox.py +208 -0
  64. cfclient/ui/tabs/ColorLEDTab.py +752 -0
  65. cfclient/ui/tabs/ConsoleTab.py +48 -13
  66. cfclient/ui/{toolboxes → tabs}/CrtpSharkToolbox.py +19 -34
  67. cfclient/ui/tabs/ExampleTab.py +9 -16
  68. cfclient/ui/tabs/FlightTab.py +437 -325
  69. cfclient/ui/tabs/GpsTab.py +14 -20
  70. cfclient/ui/tabs/LEDRingTab.py +277 -0
  71. cfclient/ui/tabs/LogBlockDebugTab.py +20 -27
  72. cfclient/ui/tabs/LogBlockTab.py +35 -35
  73. cfclient/ui/tabs/LogClientTab.py +85 -0
  74. cfclient/ui/tabs/LogTab.py +50 -27
  75. cfclient/ui/tabs/ParamTab.py +443 -57
  76. cfclient/ui/tabs/PlotTab.py +23 -25
  77. cfclient/ui/tabs/TuningTab.py +292 -0
  78. cfclient/ui/tabs/__init__.py +12 -2
  79. cfclient/ui/tabs/colorLEDTab.ui +624 -0
  80. cfclient/ui/tabs/consoleTab.ui +46 -0
  81. cfclient/ui/tabs/flightActionContainer.ui +103 -0
  82. cfclient/ui/tabs/flightTab.ui +724 -237
  83. cfclient/ui/tabs/{ledTab.ui → ledRingTab.ui} +63 -46
  84. cfclient/ui/tabs/lighthouse_tab.py +714 -0
  85. cfclient/ui/tabs/lighthouse_tab.ui +430 -0
  86. cfclient/ui/tabs/locopositioning_tab.py +606 -389
  87. cfclient/ui/tabs/locopositioning_tab.ui +370 -253
  88. cfclient/ui/tabs/logClientTab.ui +52 -0
  89. cfclient/ui/tabs/logTab.ui +1 -1
  90. cfclient/ui/tabs/paramTab.ui +204 -3
  91. cfclient/ui/tabs/tuningTab.ui +773 -0
  92. cfclient/ui/widgets/ai.py +37 -39
  93. cfclient/ui/widgets/hexspinbox.py +16 -10
  94. cfclient/ui/widgets/plotter.ui +39 -47
  95. cfclient/ui/widgets/plotwidget.py +57 -22
  96. cfclient/ui/widgets/super_slider.py +112 -0
  97. cfclient/ui/wizards/__init__.py +0 -0
  98. cfclient/ui/wizards/bslh_1.png +0 -0
  99. cfclient/ui/wizards/bslh_2.png +0 -0
  100. cfclient/ui/wizards/bslh_3.png +0 -0
  101. cfclient/ui/wizards/bslh_4.png +0 -0
  102. cfclient/ui/wizards/bslh_5.png +0 -0
  103. cfclient/ui/wizards/lighthouse_geo_bs_estimation_wizard.py +465 -0
  104. cfclient/utils/config_manager.py +5 -4
  105. cfclient/utils/input/__init__.py +77 -19
  106. cfclient/utils/input/inputinterfaces/wiimote.py +2 -2
  107. cfclient/utils/input/inputreaderinterface.py +17 -7
  108. cfclient/utils/input/inputreaders/__init__.py +17 -0
  109. cfclient/utils/logconfigreader.py +245 -25
  110. cfclient/utils/logdatawriter.py +3 -1
  111. cfclient/utils/periodictimer.py +1 -1
  112. cfclient/utils/ui.py +336 -0
  113. cfclient/utils/zmq_led_driver.py +5 -0
  114. cfclient/utils/zmq_param.py +6 -0
  115. cfclient/version.py +34 -1
  116. cfclient-2025.12.1.dist-info/METADATA +70 -0
  117. cfclient-2025.12.1.dist-info/RECORD +152 -0
  118. {cfclient-2017.4.dist-info → cfclient-2025.12.1.dist-info}/WHEEL +1 -1
  119. {cfclient-2017.4.dist-info → cfclient-2025.12.1.dist-info}/entry_points.txt +0 -1
  120. cfclient-2025.12.1.dist-info/licenses/LICENSE.txt +350 -0
  121. {cfclient-2017.4.dist-info → cfclient-2025.12.1.dist-info}/top_level.txt +1 -0
  122. cfconfig/Makefile +51 -0
  123. cfconfig/configblock.py +111 -0
  124. cfloader/__init__.py +41 -55
  125. cfzmq/__init__.py +22 -14
  126. cfclient/ui/dialogs/cf1config.py +0 -265
  127. cfclient/ui/dialogs/cf1config.ui +0 -260
  128. cfclient/ui/tab.py +0 -96
  129. cfclient/ui/tabs/LEDTab.py +0 -169
  130. cfclient/ui/toolboxes/ConsoleToolbox.py +0 -69
  131. cfclient/ui/toolboxes/DebugDriverToolbox.py +0 -107
  132. cfclient/ui/toolboxes/__init__.py +0 -45
  133. cfclient/ui/toolboxes/consoleToolbox.ui +0 -62
  134. cfclient/ui/toolboxes/debugDriverToolbox.ui +0 -86
  135. cfclient-2017.4.dist-info/DESCRIPTION.rst +0 -3
  136. cfclient-2017.4.dist-info/METADATA +0 -22
  137. cfclient-2017.4.dist-info/RECORD +0 -104
  138. cfclient-2017.4.dist-info/metadata.json +0 -1
  139. /cfclient/{icon-256.png → ui/icons/icon-256.png} +0 -0
  140. /cfclient/ui/{toolboxes → tabs}/crtpSharkToolbox.ui +0 -0
@@ -0,0 +1,624 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>Form</class>
4
+ <widget class="QWidget" name="Form">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>1406</width>
10
+ <height>812</height>
11
+ </rect>
12
+ </property>
13
+ <property name="windowTitle">
14
+ <string>Plot</string>
15
+ </property>
16
+ <layout class="QHBoxLayout" name="horizontalLayout">
17
+ <item>
18
+ <layout class="QGridLayout" name="gridLayout">
19
+ <item row="2" column="0">
20
+ <spacer name="verticalSpacer">
21
+ <property name="orientation">
22
+ <enum>Qt::Orientation::Vertical</enum>
23
+ </property>
24
+ <property name="sizeHint" stdset="0">
25
+ <size>
26
+ <width>20</width>
27
+ <height>40</height>
28
+ </size>
29
+ </property>
30
+ </spacer>
31
+ </item>
32
+ <item row="1" column="0">
33
+ <layout class="QVBoxLayout" name="verticalLayout_3"/>
34
+ </item>
35
+ <item row="0" column="0">
36
+ <layout class="QVBoxLayout" name="verticalLayout_6">
37
+ <item>
38
+ <widget class="QGroupBox" name="groupBox_color">
39
+ <property name="minimumSize">
40
+ <size>
41
+ <width>100</width>
42
+ <height>500</height>
43
+ </size>
44
+ </property>
45
+ <property name="maximumSize">
46
+ <size>
47
+ <width>450</width>
48
+ <height>1000</height>
49
+ </size>
50
+ </property>
51
+ <property name="title">
52
+ <string>Select Color</string>
53
+ </property>
54
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
55
+ <item>
56
+ <layout class="QGridLayout" name="gridLayout_3">
57
+ <item row="1" column="0">
58
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
59
+ <property name="leftMargin">
60
+ <number>0</number>
61
+ </property>
62
+ <property name="topMargin">
63
+ <number>0</number>
64
+ </property>
65
+ <property name="bottomMargin">
66
+ <number>5</number>
67
+ </property>
68
+ <item>
69
+ <widget class="QFrame" name="color_preview">
70
+ <property name="minimumSize">
71
+ <size>
72
+ <width>70</width>
73
+ <height>30</height>
74
+ </size>
75
+ </property>
76
+ <property name="maximumSize">
77
+ <size>
78
+ <width>70</width>
79
+ <height>30</height>
80
+ </size>
81
+ </property>
82
+ <property name="frameShape">
83
+ <enum>QFrame::Shape::Box</enum>
84
+ </property>
85
+ <property name="frameShadow">
86
+ <enum>QFrame::Shadow::Raised</enum>
87
+ </property>
88
+ </widget>
89
+ </item>
90
+ <item>
91
+ <widget class="QLineEdit" name="hex_input">
92
+ <property name="maximumSize">
93
+ <size>
94
+ <width>100</width>
95
+ <height>16777215</height>
96
+ </size>
97
+ </property>
98
+ <property name="text">
99
+ <string>#</string>
100
+ </property>
101
+ </widget>
102
+ </item>
103
+ <item>
104
+ <layout class="QFormLayout" name="formLayout"/>
105
+ </item>
106
+ <item>
107
+ <widget class="QLabel" name="hex_error_label">
108
+ <property name="text">
109
+ <string/>
110
+ </property>
111
+ </widget>
112
+ </item>
113
+ <item>
114
+ <spacer name="horizontalSpacer">
115
+ <property name="orientation">
116
+ <enum>Qt::Orientation::Horizontal</enum>
117
+ </property>
118
+ <property name="sizeHint" stdset="0">
119
+ <size>
120
+ <width>40</width>
121
+ <height>20</height>
122
+ </size>
123
+ </property>
124
+ </spacer>
125
+ </item>
126
+ </layout>
127
+ </item>
128
+ <item row="2" column="0">
129
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
130
+ <property name="spacing">
131
+ <number>5</number>
132
+ </property>
133
+ <property name="sizeConstraint">
134
+ <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
135
+ </property>
136
+ <property name="leftMargin">
137
+ <number>0</number>
138
+ </property>
139
+ <item>
140
+ <widget class="QSlider" name="hue_bar">
141
+ <property name="maximumSize">
142
+ <size>
143
+ <width>20</width>
144
+ <height>300</height>
145
+ </size>
146
+ </property>
147
+ <property name="layoutDirection">
148
+ <enum>Qt::LayoutDirection::LeftToRight</enum>
149
+ </property>
150
+ <property name="autoFillBackground">
151
+ <bool>false</bool>
152
+ </property>
153
+ <property name="styleSheet">
154
+ <string notr="true">/* --- Enabled rainbow groove --- */
155
+ QSlider::groove:vertical:enabled {
156
+ border-radius: 4px;
157
+ border: 1px solid #444;
158
+ background:
159
+ qlineargradient(
160
+ x1:0, y1:1, x2:0, y2:0,
161
+ stop:0 rgba(255, 255, 255, 0.15),
162
+ stop:0.5 rgba(255, 255, 255, 0),
163
+ stop:1 rgba(0, 0, 0, 0.25)),
164
+ qlineargradient(
165
+ x1:0, y1:1, x2:0, y2:0,
166
+ stop:0 red,
167
+ stop:0.17 yellow,
168
+ stop:0.33 green,
169
+ stop:0.5 cyan,
170
+ stop:0.67 blue,
171
+ stop:0.83 magenta,
172
+ stop:1 red);
173
+ }
174
+
175
+ /* --- Disabled groove: greyed out --- */
176
+ QSlider::groove:vertical:disabled {
177
+ border-radius: 4px;
178
+ border: 1px solid #444;
179
+ background: qlineargradient(
180
+ x1:0, y1:1, x2:0, y2:0,
181
+ stop:0 #777,
182
+ stop:1 #222
183
+ );
184
+ }
185
+
186
+ /* --- Handle styles --- */
187
+ QSlider::handle:vertical:enabled {
188
+ background: #eee;
189
+ border: 1px solid #444;
190
+ width: 10px;
191
+ height: 10px;
192
+ margin: -2px 0;
193
+ border-radius: 5px;
194
+ }
195
+
196
+ QSlider::handle:vertical:disabled {
197
+ background: #888;
198
+ border: 1px solid #555;
199
+ width: 10px;
200
+ height: 10px;
201
+ margin: -2px 0;
202
+ border-radius: 5px;
203
+ }</string>
204
+ </property>
205
+ <property name="orientation">
206
+ <enum>Qt::Orientation::Vertical</enum>
207
+ </property>
208
+ </widget>
209
+ </item>
210
+ <item>
211
+ <widget class="QLabel" name="sv_area">
212
+ <property name="minimumSize">
213
+ <size>
214
+ <width>400</width>
215
+ <height>300</height>
216
+ </size>
217
+ </property>
218
+ <property name="maximumSize">
219
+ <size>
220
+ <width>400</width>
221
+ <height>300</height>
222
+ </size>
223
+ </property>
224
+ <property name="layoutDirection">
225
+ <enum>Qt::LayoutDirection::LeftToRight</enum>
226
+ </property>
227
+ <property name="text">
228
+ <string/>
229
+ </property>
230
+ </widget>
231
+ </item>
232
+ <item>
233
+ <spacer name="horizontalSpacer_2">
234
+ <property name="orientation">
235
+ <enum>Qt::Orientation::Horizontal</enum>
236
+ </property>
237
+ <property name="sizeHint" stdset="0">
238
+ <size>
239
+ <width>40</width>
240
+ <height>20</height>
241
+ </size>
242
+ </property>
243
+ </spacer>
244
+ </item>
245
+ </layout>
246
+ </item>
247
+ <item row="4" column="0">
248
+ <widget class="QGroupBox" name="gropBox_stats">
249
+ <property name="minimumSize">
250
+ <size>
251
+ <width>200</width>
252
+ <height>100</height>
253
+ </size>
254
+ </property>
255
+ <property name="maximumSize">
256
+ <size>
257
+ <width>450</width>
258
+ <height>16777215</height>
259
+ </size>
260
+ </property>
261
+ <property name="title">
262
+ <string>Information</string>
263
+ </property>
264
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
265
+ <item>
266
+ <layout class="QFormLayout" name="formLayout_2">
267
+ <property name="horizontalSpacing">
268
+ <number>15</number>
269
+ </property>
270
+ <property name="verticalSpacing">
271
+ <number>0</number>
272
+ </property>
273
+ <item row="0" column="0">
274
+ <widget class="QLabel" name="information_text">
275
+ <property name="text">
276
+ <string/>
277
+ </property>
278
+ </widget>
279
+ </item>
280
+ </layout>
281
+ </item>
282
+ </layout>
283
+ </widget>
284
+ </item>
285
+ <item row="3" column="0">
286
+ <layout class="QGridLayout" name="gridLayout_5">
287
+ <property name="topMargin">
288
+ <number>20</number>
289
+ </property>
290
+ <property name="rightMargin">
291
+ <number>10</number>
292
+ </property>
293
+ <item row="3" column="0">
294
+ <widget class="QPushButton" name="color_button9">
295
+ <property name="minimumSize">
296
+ <size>
297
+ <width>50</width>
298
+ <height>30</height>
299
+ </size>
300
+ </property>
301
+ <property name="maximumSize">
302
+ <size>
303
+ <width>50</width>
304
+ <height>30</height>
305
+ </size>
306
+ </property>
307
+ <property name="styleSheet">
308
+ <string notr="true">QPushButton:disabled {
309
+ background-color: #777777;
310
+ }
311
+
312
+ QPushButton {
313
+ background-color: #ff0099;
314
+ }</string>
315
+ </property>
316
+ <property name="text">
317
+ <string/>
318
+ </property>
319
+ </widget>
320
+ </item>
321
+ <item row="0" column="6">
322
+ <widget class="QPushButton" name="color_button6">
323
+ <property name="minimumSize">
324
+ <size>
325
+ <width>50</width>
326
+ <height>30</height>
327
+ </size>
328
+ </property>
329
+ <property name="maximumSize">
330
+ <size>
331
+ <width>50</width>
332
+ <height>30</height>
333
+ </size>
334
+ </property>
335
+ <property name="styleSheet">
336
+ <string notr="true">QPushButton:disabled {
337
+ background-color: #777777;
338
+ }
339
+
340
+ QPushButton {
341
+ background-color: #01FD01;
342
+ }</string>
343
+ </property>
344
+ <property name="text">
345
+ <string/>
346
+ </property>
347
+ </widget>
348
+ </item>
349
+ <item row="0" column="4">
350
+ <widget class="QPushButton" name="color_button4">
351
+ <property name="minimumSize">
352
+ <size>
353
+ <width>50</width>
354
+ <height>30</height>
355
+ </size>
356
+ </property>
357
+ <property name="maximumSize">
358
+ <size>
359
+ <width>50</width>
360
+ <height>30</height>
361
+ </size>
362
+ </property>
363
+ <property name="styleSheet">
364
+ <string notr="true">QPushButton:disabled {
365
+ background-color: #777777;
366
+ }
367
+
368
+ QPushButton {
369
+ background-color: #FF6A00;
370
+ }</string>
371
+ </property>
372
+ <property name="text">
373
+ <string/>
374
+ </property>
375
+ </widget>
376
+ </item>
377
+ <item row="0" column="2">
378
+ <widget class="QPushButton" name="color_button3">
379
+ <property name="minimumSize">
380
+ <size>
381
+ <width>50</width>
382
+ <height>30</height>
383
+ </size>
384
+ </property>
385
+ <property name="maximumSize">
386
+ <size>
387
+ <width>50</width>
388
+ <height>30</height>
389
+ </size>
390
+ </property>
391
+ <property name="tabletTracking">
392
+ <bool>false</bool>
393
+ </property>
394
+ <property name="styleSheet">
395
+ <string notr="true">QPushButton:disabled {
396
+ background-color: #777777;
397
+ }
398
+
399
+ QPushButton {
400
+ background-color: #ff0000;
401
+ }</string>
402
+ </property>
403
+ <property name="text">
404
+ <string/>
405
+ </property>
406
+ </widget>
407
+ </item>
408
+ <item row="3" column="1">
409
+ <widget class="QPushButton" name="color_button10">
410
+ <property name="minimumSize">
411
+ <size>
412
+ <width>50</width>
413
+ <height>30</height>
414
+ </size>
415
+ </property>
416
+ <property name="maximumSize">
417
+ <size>
418
+ <width>50</width>
419
+ <height>30</height>
420
+ </size>
421
+ </property>
422
+ <property name="styleSheet">
423
+ <string notr="true">QPushButton:disabled {
424
+ background-color: #777777;
425
+ }
426
+
427
+ QPushButton {
428
+ background-color: #BD01FD;
429
+ }</string>
430
+ </property>
431
+ <property name="text">
432
+ <string/>
433
+ </property>
434
+ </widget>
435
+ </item>
436
+ <item row="0" column="7">
437
+ <widget class="QPushButton" name="color_button7">
438
+ <property name="minimumSize">
439
+ <size>
440
+ <width>50</width>
441
+ <height>30</height>
442
+ </size>
443
+ </property>
444
+ <property name="maximumSize">
445
+ <size>
446
+ <width>50</width>
447
+ <height>30</height>
448
+ </size>
449
+ </property>
450
+ <property name="styleSheet">
451
+ <string notr="true">QPushButton:disabled {
452
+ background-color: #777777;
453
+ }
454
+
455
+ QPushButton {
456
+ background-color: #0099ff;
457
+ }</string>
458
+ </property>
459
+ <property name="text">
460
+ <string/>
461
+ </property>
462
+ </widget>
463
+ </item>
464
+ <item row="0" column="5">
465
+ <widget class="QPushButton" name="color_button5">
466
+ <property name="minimumSize">
467
+ <size>
468
+ <width>50</width>
469
+ <height>30</height>
470
+ </size>
471
+ </property>
472
+ <property name="maximumSize">
473
+ <size>
474
+ <width>50</width>
475
+ <height>30</height>
476
+ </size>
477
+ </property>
478
+ <property name="styleSheet">
479
+ <string notr="true">QPushButton:disabled {
480
+ background-color: #777777;
481
+ }
482
+
483
+ QPushButton {
484
+ background-color: #ffff00;
485
+ }</string>
486
+ </property>
487
+ <property name="text">
488
+ <string/>
489
+ </property>
490
+ </widget>
491
+ </item>
492
+ <item row="3" column="2">
493
+ <widget class="QPushButton" name="add_color_button">
494
+ <property name="minimumSize">
495
+ <size>
496
+ <width>50</width>
497
+ <height>30</height>
498
+ </size>
499
+ </property>
500
+ <property name="maximumSize">
501
+ <size>
502
+ <width>50</width>
503
+ <height>30</height>
504
+ </size>
505
+ </property>
506
+ <property name="text">
507
+ <string>+</string>
508
+ </property>
509
+ </widget>
510
+ </item>
511
+ <item row="0" column="8">
512
+ <widget class="QPushButton" name="color_button8">
513
+ <property name="minimumSize">
514
+ <size>
515
+ <width>50</width>
516
+ <height>30</height>
517
+ </size>
518
+ </property>
519
+ <property name="maximumSize">
520
+ <size>
521
+ <width>50</width>
522
+ <height>30</height>
523
+ </size>
524
+ </property>
525
+ <property name="styleSheet">
526
+ <string notr="true">QPushButton:disabled {
527
+ background-color: #777777;
528
+ }
529
+
530
+ QPushButton {
531
+ background-color: #0000ff;
532
+ }</string>
533
+ </property>
534
+ <property name="text">
535
+ <string/>
536
+ </property>
537
+ </widget>
538
+ </item>
539
+ <item row="0" column="1">
540
+ <widget class="QPushButton" name="color_button2">
541
+ <property name="minimumSize">
542
+ <size>
543
+ <width>50</width>
544
+ <height>30</height>
545
+ </size>
546
+ </property>
547
+ <property name="maximumSize">
548
+ <size>
549
+ <width>50</width>
550
+ <height>30</height>
551
+ </size>
552
+ </property>
553
+ <property name="styleSheet">
554
+ <string notr="true">QPushButton:disabled {
555
+ background-color: #777777;
556
+ }
557
+
558
+ QPushButton {
559
+ background-color: #ffffff;
560
+ }</string>
561
+ </property>
562
+ <property name="text">
563
+ <string/>
564
+ </property>
565
+ </widget>
566
+ </item>
567
+ <item row="0" column="0">
568
+ <widget class="QPushButton" name="color_button1">
569
+ <property name="minimumSize">
570
+ <size>
571
+ <width>50</width>
572
+ <height>30</height>
573
+ </size>
574
+ </property>
575
+ <property name="maximumSize">
576
+ <size>
577
+ <width>50</width>
578
+ <height>30</height>
579
+ </size>
580
+ </property>
581
+ <property name="styleSheet">
582
+ <string notr="true">QPushButton:disabled {
583
+ background-color: #777777;
584
+ }
585
+
586
+ QPushButton {
587
+ background-color: #000000;
588
+ }</string>
589
+ </property>
590
+ <property name="text">
591
+ <string/>
592
+ </property>
593
+ </widget>
594
+ </item>
595
+ </layout>
596
+ </item>
597
+ <item row="0" column="0">
598
+ <layout class="QVBoxLayout" name="verticalLayout">
599
+ <item>
600
+ <widget class="QLabel" name="label">
601
+ <property name="text">
602
+ <string>Deck Position</string>
603
+ </property>
604
+ </widget>
605
+ </item>
606
+ <item>
607
+ <widget class="QComboBox" name="positionDropdown"/>
608
+ </item>
609
+ </layout>
610
+ </item>
611
+ </layout>
612
+ </item>
613
+ </layout>
614
+ </widget>
615
+ </item>
616
+ </layout>
617
+ </item>
618
+ </layout>
619
+ </item>
620
+ </layout>
621
+ </widget>
622
+ <resources/>
623
+ <connections/>
624
+ </ui>
@@ -41,6 +41,52 @@
41
41
  </property>
42
42
  </widget>
43
43
  </item>
44
+ <item>
45
+ <widget class="QPushButton" name="_dumpAssertInformation">
46
+ <property name="enabled">
47
+ <bool>false</bool>
48
+ </property>
49
+ <property name="text">
50
+ <string>Assert info</string>
51
+ </property>
52
+ </widget>
53
+ </item>
54
+ <item>
55
+ <widget class="QPushButton" name="_propellerTestButton">
56
+ <property name="enabled">
57
+ <bool>false</bool>
58
+ </property>
59
+ <property name="toolTip">
60
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600; font-style:italic;&quot;&gt;Experimental feature:&lt;/span&gt;&lt;span style=&quot; font-weight:600;&quot;&gt; Tests propellers and motors&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Place the Crazyflie on a flat hard surface and run the propeller test.&lt;/p&gt;&lt;p&gt;The crazyflie will run the motors in sequence and beeps the motors that are above the vibration threshold.&lt;/p&gt;&lt;p&gt;The results are also printed on the console.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
61
+ </property>
62
+ <property name="text">
63
+ <string>Propeller test</string>
64
+ </property>
65
+ </widget>
66
+ </item>
67
+ <item>
68
+ <widget class="QPushButton" name="_batteryTestButton">
69
+ <property name="enabled">
70
+ <bool>false</bool>
71
+ </property>
72
+ <property name="toolTip">
73
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600; font-style:italic;&quot;&gt;Experimental feature:&lt;/span&gt;&lt;span style=&quot; font-weight:600;&quot;&gt; Test battery (power path)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This test will very shortly spin the motors at pull power and measure the voltage drop. This voltage drop should not be to high. If it is, the battery is probably bad, but it could also be the connector or other components in the power path that adds resistance.&lt;/p&gt;&lt;p&gt;The results are printed on the console and can be read from the health.batterySag and health.batteryPass log variables.&lt;/p&gt;&lt;p&gt;This feature is meant for the Crazyflie 2.x only and should probably not be used by e.g. Crazyflie Bolt or BigQuad. For them the test could even be dangerous.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
74
+ </property>
75
+ <property name="text">
76
+ <string>Battery test</string>
77
+ </property>
78
+ </widget>
79
+ </item>
80
+ <item>
81
+ <widget class="QPushButton" name="_storageStatsButton">
82
+ <property name="enabled">
83
+ <bool>false</bool>
84
+ </property>
85
+ <property name="text">
86
+ <string>Storage Stats</string>
87
+ </property>
88
+ </widget>
89
+ </item>
44
90
  <item>
45
91
  <spacer name="verticalSpacer">
46
92
  <property name="orientation">