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
@@ -1,7 +1,8 @@
1
- cfclient/__init__.py,sha256=mHqMqALxhipAqAv-X9Xv-Za4C-T9iNXggneimRkBARQ,1905
1
+ cfclient/__init__.py,sha256=1-s1f5yEocDIsIQYUukuImVujGb0OANFKMQ-qOz_Iso,1986
2
2
  cfclient/gui.py,sha256=98OT0wTR_itVbiO_E6vjOkL2f0H9XUvjsCCCXQEuLRQ,6419
3
3
  cfclient/headless.py,sha256=Hgp81TLpvKyo00oAEn5nBW49BC4RNZEXcYNXDrLyJn8,6287
4
- cfclient/configs/config.json,sha256=WT4ptz3q_3hoDASSLECniUErGIwTXLBfkEH97egdpJk,842
4
+ cfclient/version.py,sha256=DLdcBM2nfvHCiDJTY0T6yHWVUp0kQq_XE8qFRkVRpQ0,712
5
+ cfclient/configs/config.json,sha256=kh4c9Z5jFU7I3Rrfa4RXUlk5EdVNJcs9QJiT6luqu2Y,863
5
6
  cfclient/configs/input/Generic_OS_X.json,sha256=LwAYms0RC2gutp2v_b5QcsjAFYNsEO40AeS__2zn07Q,1057
6
7
  cfclient/configs/input/Joystick.json,sha256=4VrLEX6o2T5AogPZjFLNjaNx415fLwkrS8Htop7zSD0,2005
7
8
  cfclient/configs/input/PS3_Mode_1.json,sha256=1zsI0N0j5V4Wy9uGLnlKLpq_b27x0sfuJoXYOupmG_Y,1145
@@ -12,61 +13,84 @@ cfclient/configs/input/PS4_Mode_2.json,sha256=iqXWmysjeB9YrizxO64HTzYigG3EIK_lwi
12
13
  cfclient/configs/input/PS4_shoulder_btns_yaw.json,sha256=A1FLfueb22eyuU_kAsWfrCULgsSdvGKsUWeUgH6315E,1914
13
14
  cfclient/configs/input/xbox360_mode1.json,sha256=_beeR0vJsVeCFKTvrv9tSfn0q4_2cUowilABWI3aywk,1845
14
15
  cfclient/configs/log/stabilizer.json,sha256=GLS6SFk7atFPm1wzDVVTe4cxu36WJyECfAZVA_V0QD4,387
15
- cfclient/resources/log_param_doc.json,sha256=r_7RC0dsc7xADuK7DiBV-WO1iF22O4Nb-JmYMfz33Sw,134721
16
+ cfclient/configs/log/PID_tuning/Attitude.json,sha256=u7HG2qtjag52hCF5CAMkTRauK_4GeqyPl0YUDf8Qtws,971
17
+ cfclient/configs/log/PID_tuning/Attitude_rate.json,sha256=8z28vW7o_law6P_CfcuBm-OsKddEh5kDBKcAJB33YxI,953
18
+ cfclient/configs/log/PID_tuning/Position.json,sha256=JUtrvDi16zLKRAWVNOQoH2Bo81Vi08-xHdM4xK8k41A,959
19
+ cfclient/configs/log/PID_tuning/Velocity.json,sha256=c3gugwFjvqH362etgV4s1XmHaAtEseFDbo_WM04SJ3E,965
20
+ cfclient/configs/log/PID_tuning_components/Pitch.json,sha256=893uMWAk-9GfEXHS3w-P4oxI0UQa1WyHCql0R_JgPIo,405
21
+ cfclient/configs/log/PID_tuning_components/Pitch_rate.json,sha256=9oGf68Hv6Mf7yWecJpy7LCiw2XExuA6wpqIJ8HUKDHE,401
22
+ cfclient/configs/log/PID_tuning_components/Position_x.json,sha256=XN-JL-cP-xJBmZ6rn9FLEtauM45hsVPANNTgG_7eVog,403
23
+ cfclient/configs/log/PID_tuning_components/Position_y.json,sha256=gFuHE4rUr9Ipx4y7n3vk_kSwIVxjbfwWJDHDhOU4yzI,403
24
+ cfclient/configs/log/PID_tuning_components/Position_z.json,sha256=6s7sxvxXOABBDuoYg6ld0BYACKed3fBDMVUeKeSFPWg,403
25
+ cfclient/configs/log/PID_tuning_components/Roll.json,sha256=a9YUTEKiNHuDy4kyRClWTX4Q2jGV0uoKYe30k4rzrYc,401
26
+ cfclient/configs/log/PID_tuning_components/Roll_rate.json,sha256=8mSJXn3vU_XRkJUo_6Wz2vKiU4X3TzlQsTO3s2HJTjs,398
27
+ cfclient/configs/log/PID_tuning_components/Velocity_x.json,sha256=GwNRKgdIT6dmP6KWHxgdAcWm3kU9s-7bBE7-gp0XPhU,405
28
+ cfclient/configs/log/PID_tuning_components/Velocity_y.json,sha256=dgLf8_KYeJWJ-IYK3RyWaVQA-1wDC82OdY5w3WOoNvw,405
29
+ cfclient/configs/log/PID_tuning_components/Velocity_z.json,sha256=4Ft9zscDrthqpgrTOlXZMP1NTO4FvjO5XiszQ5ejvCA,405
30
+ cfclient/configs/log/PID_tuning_components/Yaw.json,sha256=hAypXUh8auOBvDHVN-NNYhNTJWpsxh3JZov7jLCidzQ,399
31
+ cfclient/configs/log/PID_tuning_components/Yaw_rate.json,sha256=OviQ8oqp8zerQxNBawzSfnNnfugvcOWYVKUtkmNJwjw,397
32
+ cfclient/resources/log_param_doc.json,sha256=Qk6IPj1WXZgO3Syg5pK9q4-Tpp-0Im2MpGB_E1aKLzg,137928
16
33
  cfclient/resources/map.html,sha256=pGwY2GW0F1rAtSImKbu-cFZyb6tJGwrDhkAgOZ98S68,360
17
34
  cfclient/resources/map.js,sha256=0KyyJ-5W5qnrlEgTsp_oHk7b3w8k9qoyX4XjhThOkrU,839
18
35
  cfclient/ui/__init__.py,sha256=8XHGfW8w3DnQGiL6R7GVob1KrKg4waKNzvSy79lRjMs,1342
19
36
  cfclient/ui/connectivity_manager.py,sha256=DdkHL48pBOI9lctc2peHqzQy7u7-sGZTVHYdmd2T3Sk,8275
20
- cfclient/ui/main.py,sha256=kaJ4E1LuzzsOyJ9Lb03vhMML35CI3C4HYRM20wpxcMQ,36924
21
- cfclient/ui/main.ui,sha256=2lakxEMS7DMute4c0QPN_kOQyEqDD-e1zPAJeKb2CpE,16092
37
+ cfclient/ui/main.py,sha256=X5_alyqcBsvVTwiDLK2L09YdFdJNvj9qcrNaLSmUzTs,36956
38
+ cfclient/ui/main.ui,sha256=Np1l54_f3EKsa8E8MtqqRcVYivsCBe2fCAx1Fpt_AYc,16092
22
39
  cfclient/ui/pluginhelper.py,sha256=dSq6sCz5TbESfdTPzRzLExHnIZeKdDyw3cuWSViXqL8,1590
23
40
  cfclient/ui/pose_logger.py,sha256=1vADKP4-iCj9avqcuPI_amtZg3IKeCVTX0zYao3HPCE,4041
24
41
  cfclient/ui/tab_toolbox.py,sha256=8O_rQSX2cVFZOMiHxzCgq6TzdS5MLQahit89JeBCpQ8,7061
25
42
  cfclient/ui/dialogs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- cfclient/ui/dialogs/about.py,sha256=Xfq1V6Cg4FuxLxJJYkd4sp55p0w7tevnTm7IETYZuaE,7962
43
+ cfclient/ui/dialogs/about.py,sha256=1Bf769zuQE8yPTrIf7Og7zG8k4P3dJQLkZc0L3DA2Qo,8211
27
44
  cfclient/ui/dialogs/about.ui,sha256=K_YI-SuZMu9tAZN8fAiAJjwAG2QD6epaWOcGz-5asYU,7279
28
45
  cfclient/ui/dialogs/anchor_position_dialog.py,sha256=46lYyQAm01d9b5qY6LB6s9lfzfoPpKz4X8oA4ijBX5I,9379
29
46
  cfclient/ui/dialogs/anchor_position_dialog.ui,sha256=oQr8_DqKM33tajt8Ha_WVNinqTyH1VLpsxW8XBP32Aw,3679
30
- cfclient/ui/dialogs/basestation_mode_dialog.py,sha256=cYUCXIaVkhxUjy7yXV-zpgUqkanAJajL9F06I75yccY,5863
47
+ cfclient/ui/dialogs/basestation_mode_dialog.py,sha256=wVai9l-lQ2LBks2ctXeZUsq1DUVwRQ68RCcX5oBFBvE,6251
31
48
  cfclient/ui/dialogs/basestation_mode_dialog.ui,sha256=GKBilbHMECKWyoE3WUnCeB084f0rC270yx8f5Kq-JKg,5050
32
- cfclient/ui/dialogs/bootloader.py,sha256=s_123xTeCnspEsrzdTS10BSZBkxKIV4G2FAoBPMwnU8,22297
33
- cfclient/ui/dialogs/bootloader.ui,sha256=tlcOIxP5cByT7Z5HRXZMUfX45yp_HGzFIWaVYAljKQg,11924
49
+ cfclient/ui/dialogs/bootloader.py,sha256=V6TUnm8iOg44rYGf8CxoNavsPzYpIma0dPMnUvIXYG4,25215
50
+ cfclient/ui/dialogs/bootloader.ui,sha256=kl1FF-0ZbxfwuCvlyRBj3yLiQQxEWkJCmg_OsCzKMOQ,15216
34
51
  cfclient/ui/dialogs/cf2config.py,sha256=2xYeTeTpK1h42HReInwfr06dvnXmSseiS8D_VDcTmyo,4201
35
- cfclient/ui/dialogs/cf2config.ui,sha256=9WaHdFh1CMZXThH25QE9b2LBMyW3YDGFN3AIFI3IZTQ,5850
52
+ cfclient/ui/dialogs/cf2config.ui,sha256=gistq-KuUB6E7SMub6ElCG2u3XpUe6i-a19VHcYv7vg,5850
36
53
  cfclient/ui/dialogs/inputconfigdialogue.py,sha256=4yhPRTc2-l5yDu2VvavuQUEt629wEkJ3T38YexA3I4w,17922
37
54
  cfclient/ui/dialogs/inputconfigdialogue.ui,sha256=5zJ5-S639ctNiPvR_GlBHpbFayQahK4JuQ3ggbOlnSc,24426
38
- cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py,sha256=QP9zm4fK_IGzJtU81q5yc37JEAQ3In4u1bn-Gwy9X2E,8982
39
- cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui,sha256=8Eu6eLYtu7CqlkIwU5GLF777oNe1SEgzBwsniVxaCXU,3094
55
+ cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.py,sha256=RmmVv8GSVTDl__D_hn2sQXfz3VKi9zygJkJv54VikOM,8421
56
+ cfclient/ui/dialogs/lighthouse_bs_geometry_dialog.ui,sha256=KWISXmuFQBR3ogu2FCi_0-e36oJ2h4HefgdsnywECL0,2865
40
57
  cfclient/ui/dialogs/lighthouse_system_type_dialog.py,sha256=vff5me_1PMvVOVTv9WCw9X7wKY_G4XCWwKOusuRSrEE,2999
41
58
  cfclient/ui/dialogs/lighthouse_system_type_dialog.ui,sha256=0aWRgeXOGptg-gY4qn3OvFWg5To09Y9_V3Lbx3wOx4A,3279
42
59
  cfclient/ui/dialogs/logconfigdialogue.py,sha256=Qbtb4ISxTi-a3_GaYKRDm_dEK1XswctDbdffWoFf8Fk,22543
43
60
  cfclient/ui/dialogs/logconfigdialogue.ui,sha256=vurEY2SWHRyw-ZhE5Z1UbeC9KwGOaPEHE6si6drmvXM,9128
61
+ cfclient/ui/icons/bl.webp,sha256=dS3-vxoq63ZRgCbYt7UPn4g2cEIJ7y23cFMGPmHJ48Y,42458
62
+ cfclient/ui/icons/bolt.webp,sha256=ofkF8I-Dthhccl9R46ACBhXmRLZfc8nAWwZU0eLRdxI,22886
63
+ cfclient/ui/icons/cf21.webp,sha256=vi0rnQSJcZvEomZGlAUShmSeTPdfmGC1iKf_0N6LI_M,20848
44
64
  cfclient/ui/icons/checkmark_black.png,sha256=NwtLwrfLfjp2739iYbSzy8L_y_KBaizKodtF_PtPXXs,440
45
65
  cfclient/ui/icons/checkmark_white.png,sha256=vFPIddxRRNzEbDQBpHJwRW5g-nrSt6bUB-NLonhZ4Eo,289
46
66
  cfclient/ui/icons/create.png,sha256=Va8a2cE6X1qTv7o3UjPsn8GQfZcdTgy8KvHkf-5W9Yo,1361
47
67
  cfclient/ui/icons/delete.png,sha256=s82vdaCgOMkvD1sxbwZZZAEblSK0BZcLKpa66I7j6M4,387
68
+ cfclient/ui/icons/flapper.webp,sha256=b09atPldpCGyzTqZHByUcDBZnKgcZCpoKLvlVVmrXZk,19270
48
69
  cfclient/ui/icons/icon-256.png,sha256=SrUxND4cRHSRC_0LCPHIzwYRo1r9ygR1aw_D0BRxfoM,6554
70
+ cfclient/ui/icons/tag.webp,sha256=ICAxETHJQ_ZI0vC_b-JuQBLC_LDbTkxBXnnZ1-JeONI,22776
71
+ cfclient/ui/tabs/ColorLEDTab.py,sha256=TG4fMRAt9uqmznDpEwEULQIIz1xcprGD2RWOiD6VTX0,27278
49
72
  cfclient/ui/tabs/ConsoleTab.py,sha256=IP8FB_ev4iq5Bp4FfH9PrIIcEk_vtfdgaD3LYCv4ytw,5191
50
73
  cfclient/ui/tabs/CrtpSharkToolbox.py,sha256=2TLhfunC7vqLBzl8Ld3sPPPrPbBvazfPU4UOV7woo24,4242
51
74
  cfclient/ui/tabs/ExampleTab.py,sha256=PQZVNV2Rn0hp_WyY0jOQmUJKvZNMJSwIM77JIJOfgQg,3736
52
- cfclient/ui/tabs/FlightTab.py,sha256=X5LfDENEPjYP9IrBKOWcrX502IUjC08pcLR0S5yyabY,36526
75
+ cfclient/ui/tabs/FlightTab.py,sha256=rQ4hvEwAVtWdKfULOA1M1G2ZAzvjuUjmAMbttkc55ZY,32969
53
76
  cfclient/ui/tabs/GpsTab.py,sha256=TZKoiSQomc-TSnQ4iXanMzmp4BnO07BGjbEFFmW0Tak,6118
54
- cfclient/ui/tabs/LEDTab.py,sha256=H0ujpD5XSejdGQf67eJppirJ3eeMLQzX7EZOKj7Vl3A,5767
77
+ cfclient/ui/tabs/LEDRingTab.py,sha256=6HeedcV4HFNkF9PCWm2Yxeag_rI4PukG9fOU-IEZ3ss,10112
55
78
  cfclient/ui/tabs/LogBlockDebugTab.py,sha256=mamAHKwrqifiXFu5zxROB2HCvxBuvh0A8Yjpf8Agczc,3892
56
79
  cfclient/ui/tabs/LogBlockTab.py,sha256=Iktp20J8Rzxoaf8grcSw1n14DSmH_X32tmCRH_nT-oc,12327
57
80
  cfclient/ui/tabs/LogClientTab.py,sha256=cEogxYAM0rkMHLbmJqp_6sNIIefqCGdZnbJZQXNpvEE,2630
58
- cfclient/ui/tabs/LogTab.py,sha256=vd3ybCP5w96z5S-AvhUvjhHMoL2UJ18fdvJ9MW7nBCc,4508
59
- cfclient/ui/tabs/ParamTab.py,sha256=is0cWJlxjJVBMP2HTZhtNDZA5X6svLwRs-nfpcezu9c,21583
81
+ cfclient/ui/tabs/LogTab.py,sha256=A1xj0xlW25QjrpdnRYzrKXChGitf4MAePA_XWd2dtTM,4568
82
+ cfclient/ui/tabs/ParamTab.py,sha256=Ans2k_I4OAodBYbK1zdjnn_h1EVgSTYmOKBPBNmauNI,25447
60
83
  cfclient/ui/tabs/PlotTab.py,sha256=M9HRunURxqQHlLqCeQSZaz_lYl3HA-oK0Y2BGBT2b4w,9097
61
84
  cfclient/ui/tabs/TuningTab.py,sha256=iJHz0LehnfAb4iIPR_MMY5m-8iCtVhbAxm6_h_yobvc,13217
62
- cfclient/ui/tabs/__init__.py,sha256=n_1-TsSh2H5YaaTP9u54tqRx1qIq0_pV9fPsCkTo-fc,2052
63
- cfclient/ui/tabs/consoleTab.ui,sha256=VOieXgnaEPyLSjErYiA4INiV_ne-s85Azlmxz1rx1Pk,4420
85
+ cfclient/ui/tabs/__init__.py,sha256=ucfOxJUh5CxQPWXSLt5ZfmME4sJmJBQ8cDMxhzcHec4,2118
86
+ cfclient/ui/tabs/colorLEDTab.ui,sha256=QApBTDZcKZMXlfLkyozLkfkF1Pfh5nB-olXPUifDvTQ,19603
87
+ cfclient/ui/tabs/consoleTab.ui,sha256=01CCRlvhhDf_iXSKpkmjjXDRsBdeTa01kmanlWU3uss,4420
64
88
  cfclient/ui/tabs/crtpSharkToolbox.ui,sha256=8wfoLVOI7qaHw6F8Mzq42eKv8-NiOQfYcA2yMEThuUk,2134
65
89
  cfclient/ui/tabs/exampleTab.ui,sha256=kJqTMt8fw8-yhRYtrVL1E0U2rxOI4xL2CM0mThBKvqc,429
66
90
  cfclient/ui/tabs/flightActionContainer.ui,sha256=BQLE17AF9kARb4U78JmiKFmHnMtR8tmUOTYHLgFau6w,2645
67
- cfclient/ui/tabs/flightTab.ui,sha256=1WiFVT6-N66nZ4ltarndIKtyGSvzaguFXk02AOT8Pa0,43628
91
+ cfclient/ui/tabs/flightTab.ui,sha256=p06XcsZsMh0C8pRcpKSsIX_xquLscmn10X4wc2Sqc_w,42584
68
92
  cfclient/ui/tabs/gpsTab.ui,sha256=IMtQRwhL7e8A-sv-_0nVm8FVCvo-uujJ9qdgg1aKTs0,5263
69
- cfclient/ui/tabs/ledTab.ui,sha256=gq4yaVrinoPJzC-USg_t4ccOiMMDVGkwkHXXM7GTcKw,8656
93
+ cfclient/ui/tabs/ledRingTab.ui,sha256=VB_pvCJMK9JQTre7LCOk98NVj0NoZa16ynHlvBJQf64,9307
70
94
  cfclient/ui/tabs/lighthouse_tab.py,sha256=N2tx45LLhGYZxcxDYjTMKrNgasYCEM15Hmr9J1451K4,27443
71
95
  cfclient/ui/tabs/lighthouse_tab.ui,sha256=46uLJoFr7iZ6BHBRy6oHxdL812ZajU509Zy-CnCsnjM,15349
72
96
  cfclient/ui/tabs/locopositioning_tab.py,sha256=F66j9ruKPk16f36x-6UfGIgFl-hLL6pMrUUrwZhG_kU,31507
@@ -96,12 +120,12 @@ cfclient/utils/config.py,sha256=yAcCJtixnzAGScKFLh1Pb5hg524OkYePkdwlGiXfxlE,3418
96
120
  cfclient/utils/config_manager.py,sha256=sqyIHv9s9ztof0v-YKp8fGk0ftYvId6ppUe77HvdB3g,6915
97
121
  cfclient/utils/logconfigreader.py,sha256=Y5RRhYm2Pk4R8s9W8EN643jbsiOMzDS_XJrBGth-cm0,13674
98
122
  cfclient/utils/logdatawriter.py,sha256=Qso_w3WeTksrSGcacfmRpOy4KMOTHytCQeIkuo9bO7o,4012
99
- cfclient/utils/periodictimer.py,sha256=_l26BtjebXJNnqqQ4L9RyC5-zvLfgSGhm_vH6tq3pjY,2594
123
+ cfclient/utils/periodictimer.py,sha256=HHE8lhBeYMGSZlcHyZGdaAtLdKuzuVuMzQUgFXzKDJI,2592
100
124
  cfclient/utils/singleton.py,sha256=yz-JMLr7F_rO6XpVn4VmGWt2c3vIascsZl0cUeoWqy0,1513
101
125
  cfclient/utils/ui.py,sha256=85MeNFeFIjNE2PYn-rjtpfSaOEqFiyZPOZlEfEDS_yo,9687
102
126
  cfclient/utils/zmq_led_driver.py,sha256=IJA4Q-FiqVEJH9lOOnFOTp85ygt56FBt4fOajrZ6Y2k,3591
103
127
  cfclient/utils/zmq_param.py,sha256=Ok2XqQrv6Y7aalLePgd-bW_lbC1Y5QD7HDnGjjMjMNw,3936
104
- cfclient/utils/input/__init__.py,sha256=McaSSfoX-FRzeSrKoTg06_aoB5MIKh_bB3ZVFJH5kmE,22484
128
+ cfclient/utils/input/__init__.py,sha256=dGkzxKaf7INCUrjB2qOV63plxpPYvaO990TwLy2erFE,22487
105
129
  cfclient/utils/input/inputreaderinterface.py,sha256=4tNV7fdO6cSTgPEvAHlhR3QvY2t36nN5GzuCXx73wwo,9698
106
130
  cfclient/utils/input/inputinterfaces/__init__.py,sha256=kqBz9KEj6dgK8Wncr1i2xS2FzUgcY0OS7UOf3kwLi5A,3447
107
131
  cfclient/utils/input/inputinterfaces/leapmotion.py,sha256=-jPtWPCqqUisKfMLsgWgi11EszMPFbqu0tPXL0A5-aY,4780
@@ -114,13 +138,15 @@ cfclient/utils/input/mux/__init__.py,sha256=TXP6Fqnj3eCZ5jrpzDhCjTbdnLDjuHn5cYcF
114
138
  cfclient/utils/input/mux/nomux.py,sha256=HnQCoi-MqJvnOF3anyrlVMEWPJEBud_NYCoDFyJRC_o,1627
115
139
  cfclient/utils/input/mux/takeovermux.py,sha256=7aftcx7-Kv2m2Cgs-Fuvs8i6NtvtPICSjUNsD04NGmA,1771
116
140
  cfclient/utils/input/mux/takeoverselectivemux.py,sha256=nKX1mV331o37TrVT4FcsGdErFnzkyoxgSRj7rtBbZtI,2415
141
+ cfclient-2025.12.1.dist-info/licenses/LICENSE.txt,sha256=UMjaTs39CS8X5zNtH4UWpmDBTydaVVQSDG8j1N285mI,18415
142
+ cfconfig/Makefile,sha256=O2IZLnrGtKPfUC_eT_OWpAU5d9ULNjfBUdLi6VfPcK0,1775
143
+ cfconfig/configblock.py,sha256=aOzCnI-JJEyYI1-tJZMmzeB2p9bQL0M3fY9FZeNwQas,2901
117
144
  cfloader/__init__.py,sha256=Cg4mKk5YlQytgZ-LXifDwW1YmYUZpw4nXbk4OtJUMgE,6023
118
145
  cfloader/__main__.py,sha256=Ct5fO0RV6foPBMmTHpEASS6mZ-4roJKoXWL8lhuuda0,65
119
146
  cfzmq/__init__.py,sha256=ik4QKjZP9syOqpEjSnzv57u_VTa-Cb3QcpaeyVpL_gc,14025
120
147
  cfzmq/__main__.py,sha256=AoNwiCOwva0pyNZXMLRW5COKB6Fh3bPgQO-gE5hD_Cg,62
121
- cfclient-2024.7.1.dist-info/LICENSE.txt,sha256=UMjaTs39CS8X5zNtH4UWpmDBTydaVVQSDG8j1N285mI,18415
122
- cfclient-2024.7.1.dist-info/METADATA,sha256=-_SmDM6xjFgttf6R6SgIjwNpiqmCBuuQDyZLvbY9ReM,2397
123
- cfclient-2024.7.1.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
124
- cfclient-2024.7.1.dist-info/entry_points.txt,sha256=8_UbQo4eRlY2aks3MbiuNTTpaDvjVSsraMj_fVcrBtY,127
125
- cfclient-2024.7.1.dist-info/top_level.txt,sha256=dsv8BpTRO1hlMcx8ZUAQmJVvRB9j8VS8aJXovaxvjto,24
126
- cfclient-2024.7.1.dist-info/RECORD,,
148
+ cfclient-2025.12.1.dist-info/METADATA,sha256=BtiyyXqbwKau9IATuXYu1YlrOXxunhlifQmdNUoN_E4,3389
149
+ cfclient-2025.12.1.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
150
+ cfclient-2025.12.1.dist-info/entry_points.txt,sha256=8_UbQo4eRlY2aks3MbiuNTTpaDvjVSsraMj_fVcrBtY,127
151
+ cfclient-2025.12.1.dist-info/top_level.txt,sha256=kEMGlBZwPaeAdpoqXh5uBLBb0xaanO_wPW14T6BuJKs,33
152
+ cfclient-2025.12.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.2.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,4 @@
1
1
  cfclient
2
+ cfconfig
2
3
  cfloader
3
4
  cfzmq
cfconfig/Makefile ADDED
@@ -0,0 +1,51 @@
1
+
2
+ ######### JTAG and environment configuration ##########
3
+ OPENOCD_INTERFACE ?= interface/jtagkey.cfg
4
+ OPENOCD_TARGET ?= target/stm32.cfg
5
+ #######################################################
6
+
7
+ CONFIGFILE := cblock.cfg
8
+ BINFILE := cblock.bin
9
+
10
+ help:
11
+ @echo "Crazyflie config block makefile utility"
12
+ @echo
13
+ @echo "This script permits to read and write the config block of Crazyflie using"
14
+ @echo "openocd and any JTAG probe supported by it. The copter has to be connected"
15
+ @echo "to the jtag probe"
16
+ @echo
17
+ @echo "Available action:"
18
+ @echo " help : Display this message"
19
+ @echo " read : Read the configuration block from the copter using openOCD,"
20
+ @echo " decode it and save it in a configuration file"
21
+ @echo " write : Compile the configuration file to a block and write the block"
22
+ @echo " in the copter using openOCD"
23
+ @echo
24
+ @echo "Parameters that can be configured: [current value] (can be altered from command line)"
25
+ @echo " CONFIGFILE [$(CONFIGFILE)]"
26
+ @echo " BINFILE [$(BINFILE)]"
27
+ @echo " OCD_INTERFACE [$(OPENOCD_INTERFACE)]"
28
+ @echo " OCD_TARGET [$(OPENOCD_TARGET)]"
29
+
30
+ read: readbin bin2cfg
31
+
32
+ write: cfg2bin writebin
33
+
34
+ readbin:
35
+ openocd -d0 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets \
36
+ -c "reset halt" -c "dump_image $(BINFILE) 0x1FC00 1024" \
37
+ -c "reset run" -c shutdown
38
+
39
+ writebin:
40
+ openocd -d0 -f $(OPENOCD_INTERFACE) -f $(OPENOCD_TARGET) -c init -c targets \
41
+ -c "reset halt" -c "flash erase_sector 0 127 127" \
42
+ -c "flash write_bank 0 $(BINFILE) 0x1FC00" -c "verify_image $(BINFILE) 0x1FC00" \
43
+ -c "reset run" -c shutdown
44
+
45
+ bin2cfg:
46
+ ./configblock.py extract $(BINFILE) $(CONFIGFILE)
47
+
48
+ cfg2bin:
49
+ ./configblock.py generate $(CONFIGFILE) $(BINFILE)
50
+
51
+
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Configuration block compiler/decompiler
4
+ # Fully static version (to be considered as a prototype...)!
5
+ from configparser import ConfigParser
6
+ import struct
7
+ import sys
8
+ from functools import reduce
9
+
10
+ # Radio speed enum type
11
+ speeds = ["250K", "1M", "2M"]
12
+ radioSpeedPos = 2
13
+
14
+ defaultConfig = """#Crazyflie config block
15
+ #default version generated from squatch
16
+ [radio]
17
+ channel= 100
18
+ speed= 2M
19
+
20
+ [calib]
21
+ pitchTrim= 0.0
22
+ rollTrim= 0.0
23
+ """
24
+
25
+ config = """#Crazyflie config block
26
+ #Block version %d extracted from copter
27
+ [radio]
28
+ channel= %d
29
+ speed= %s
30
+
31
+ [calib]
32
+ pitchTrim= %f
33
+ rollTrim= %f
34
+ """
35
+
36
+ configVersion = 0
37
+ structFormat = "<BBBff"
38
+
39
+
40
+ def checksum256(st):
41
+ return reduce(lambda x, y: x + y, list(map(ord, st))) % 256
42
+
43
+
44
+ def compileBlock(configFile, binFile):
45
+ config = ConfigParser()
46
+
47
+ config.read(configFile)
48
+
49
+ block = (configVersion,)
50
+
51
+ block += (config.getint("radio", "channel"),)
52
+ block += (speeds.index(config.get("radio", "speed").upper()),)
53
+
54
+ block += (config.getfloat("calib", "pitchTrim"),)
55
+ block += (config.getfloat("calib", "rollTrim"),)
56
+
57
+ bin = struct.pack(structFormat, *block)
58
+
59
+ # Adding some magic:
60
+ bin = "0xBC" + bin
61
+
62
+ bin += struct.pack("B", 256 - checksum256(bin))
63
+
64
+ # print("Config block checksum: %02x" % bin[len(bin)-1])
65
+
66
+ bfile = open(binFile, "w")
67
+ bfile.write(bin)
68
+ bfile.close()
69
+
70
+ print("Config block compiled successfully to", binFile)
71
+
72
+
73
+ def decompileBlock(binFile, configFile):
74
+ bfile = open(binFile)
75
+ bin = bfile.read()
76
+ bfile.close()
77
+
78
+ if (bin[0:4] != "0xBC" or len(bin) < (struct.calcsize(structFormat) + 5) or
79
+ checksum256(bin[0:struct.calcsize(structFormat) + 5]) != 0):
80
+ print("Config block erased of altered, generating default file")
81
+ cfile = open(configFile, "w")
82
+ cfile.write(defaultConfig)
83
+ cfile.close()
84
+ else:
85
+ block = struct.unpack(structFormat,
86
+ bin[4:struct.calcsize(structFormat) + 4])
87
+ if block[0] != configVersion:
88
+ print("Error! wrong configuration block version, "
89
+ "this program must certainly be updated!")
90
+ return
91
+
92
+ block = (block[0:radioSpeedPos] + (speeds[block[radioSpeedPos]],) +
93
+ block[radioSpeedPos + 1:len(block)])
94
+
95
+ cfile = open(configFile, "w")
96
+ cfile.write(config % block)
97
+ cfile.close()
98
+ print("Config block successfully extracted to", configFile)
99
+
100
+
101
+ if __name__ == "__main__":
102
+ if (len(sys.argv) < 4 or
103
+ (sys.argv[1] != "generate" and sys.argv[1] != "extract")):
104
+ print("Configuration block compiler/decompiler.")
105
+ print(" Usage: %s <generate|extract> <infile> <outfile>"
106
+ % sys.argv[0])
107
+
108
+ if sys.argv[1] == "generate":
109
+ compileBlock(sys.argv[2], sys.argv[3])
110
+ else:
111
+ decompileBlock(sys.argv[2], sys.argv[3])
@@ -1,53 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: cfclient
3
- Version: 2024.7.1
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
9
- 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
12
- Description-Content-Type: text/markdown
13
- License-File: LICENSE.txt
14
- Requires-Dist: cflib >=0.1.26
15
- Requires-Dist: setuptools
16
- Requires-Dist: appdirs ~=1.4.0
17
- Requires-Dist: pyzmq ~=25.0
18
- Requires-Dist: pyqtgraph ~=0.13
19
- Requires-Dist: PyYAML ~=6.0.1
20
- Requires-Dist: numpy ~=1.20
21
- Requires-Dist: vispy ~=0.14.2
22
- Requires-Dist: pyopengl ~=3.1.7
23
- Requires-Dist: pyserial ~=3.5
24
- Requires-Dist: pyqt6 >=6.4
25
- Requires-Dist: PyQt6-sip >=13.4
26
- Requires-Dist: pysdl2 ~=0.9.14 ; platform_system == "Windows" or platform_system == "Darwin"
27
- Requires-Dist: pysdl2-dll ==2.24.0 ; platform_system == "Windows" or platform_system == "Darwin"
28
- Provides-Extra: dev
29
- Requires-Dist: pre-commit ; extra == 'dev'
30
- Requires-Dist: cx-freeze ==5.1.1 ; (platform_system == "Windows") and extra == 'dev'
31
- Requires-Dist: jinja2 ==2.10.3 ; (platform_system == "Windows") and extra == 'dev'
32
-
33
- # 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) [![cfclient](https://snapcraft.io//cfclient/badge.svg)](https://snapcraft.io/cfclient)
34
-
35
-
36
- The Crazyflie PC client enables flashing and controlling the Crazyflie.
37
- It implements the user interface and high-level control (for example gamepad handling).
38
- The communication with Crazyflie and the implementation of the CRTP protocol to control the Crazyflie is handled by the [cflib](https://github.com/bitcraze/crazyflie-lib-python) project.
39
-
40
- ## Installation
41
- See the [installation instructions](docs/installation/install.md) in the GitHub docs folder.
42
-
43
- ## Official Documentation
44
-
45
- Check out the [Bitcraze crazyflie-client-python documentation](https://www.bitcraze.io/documentation/repository/crazyflie-clients-python/master/) on our website.
46
-
47
- ## Contribute
48
- Go to the [contribute page](https://www.bitcraze.io/contribute/) on our website to learn more.
49
-
50
- ### Test code for contribution
51
- Run the automated build locally to test your code
52
-
53
- python3 tools/build/build