micrOSDevToolKit 2.9.8__py3-none-any.whl → 2.9.11__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.

Potentially problematic release.


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

Files changed (59) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +21 -21
  2. micrOS/source/LM_espnow.py +27 -1
  3. micrOS/source/LM_oled_ui.py +1 -1
  4. micrOS/source/LM_system.py +4 -4
  5. micrOS/source/Notify.py +4 -0
  6. micrOS/source/Server.py +1 -1
  7. micrOS/source/Shell.py +3 -3
  8. micrOS/source/Tasks.py +1 -1
  9. micrOS/source/Time.py +7 -8
  10. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  11. micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  12. micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  13. micrOS/source/micrOSloader.py +0 -1
  14. micrOS/source/urequests.py +14 -7
  15. {micrOSDevToolKit-2.9.8.data → micrOSDevToolKit-2.9.11.data}/scripts/devToolKit.py +10 -0
  16. {micrOSDevToolKit-2.9.8.dist-info → micrOSDevToolKit-2.9.11.dist-info}/METADATA +66 -21
  17. {micrOSDevToolKit-2.9.8.dist-info → micrOSDevToolKit-2.9.11.dist-info}/RECORD +57 -50
  18. {micrOSDevToolKit-2.9.8.dist-info → micrOSDevToolKit-2.9.11.dist-info}/WHEEL +1 -1
  19. toolkit/DevEnvOTA.py +13 -9
  20. toolkit/DevEnvUSB.py +6 -5
  21. toolkit/MicrOSDevEnv.py +19 -5
  22. toolkit/WebRepl.py +73 -0
  23. toolkit/dashboard_apps/BackupRestore.py +20 -35
  24. toolkit/dashboard_apps/CCTDemo.py +12 -17
  25. toolkit/dashboard_apps/CCTTest.py +20 -24
  26. toolkit/dashboard_apps/CamStream.py +2 -6
  27. toolkit/dashboard_apps/CatGame.py +14 -16
  28. toolkit/dashboard_apps/Dimmer.py +11 -21
  29. toolkit/dashboard_apps/GetVersion.py +11 -19
  30. toolkit/dashboard_apps/MicrophoneTest.py +1 -6
  31. toolkit/dashboard_apps/NeoEffectsDemo.py +28 -34
  32. toolkit/dashboard_apps/NeopixelTest.py +20 -25
  33. toolkit/dashboard_apps/PresenceTest.py +2 -8
  34. toolkit/dashboard_apps/RGBTest.py +20 -24
  35. toolkit/dashboard_apps/RoboArm.py +24 -32
  36. toolkit/dashboard_apps/SED_test.py +10 -14
  37. toolkit/dashboard_apps/SensorsTest.py +61 -0
  38. toolkit/dashboard_apps/SystemTest.py +151 -77
  39. toolkit/dashboard_apps/Template_app.py +11 -23
  40. toolkit/dashboard_apps/_app_base.py +34 -0
  41. toolkit/dashboard_apps/uLightDemo.py +15 -24
  42. toolkit/lib/Repository.py +64 -0
  43. toolkit/lib/micrOSClient.py +16 -11
  44. toolkit/micrOSlint.py +3 -3
  45. toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  46. toolkit/simulator_lib/aioespnow.py +28 -0
  47. toolkit/socketClient.py +0 -1
  48. toolkit/workspace/precompiled/LM_espnow.py +27 -1
  49. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  50. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  51. toolkit/workspace/precompiled/Notify.mpy +0 -0
  52. toolkit/workspace/precompiled/Shell.mpy +0 -0
  53. toolkit/workspace/precompiled/Time.mpy +0 -0
  54. toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  55. toolkit/workspace/precompiled/urequests.mpy +0 -0
  56. toolkit/dashboard_apps/AirQualityBME280.py +0 -36
  57. toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
  58. {micrOSDevToolKit-2.9.8.dist-info → micrOSDevToolKit-2.9.11.dist-info}/LICENSE +0 -0
  59. {micrOSDevToolKit-2.9.8.dist-info → micrOSDevToolKit-2.9.11.dist-info}/top_level.txt +0 -0
@@ -32,7 +32,7 @@ micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin,sha256=S-sv_QeL_Tylg1
32
32
  micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin,sha256=VbOF_F0YeqttkQd2ePTW66Jd34RU8u9ccFfcv8kxO_U,1662672
33
33
  micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2,sha256=v4aYIbWaE94_f6DDzBWS-a9L1BzlcdkZwld9R7bOVA4,1727488
34
34
  micrOS/micropython/tinypico-20241129-v1.24.1.bin,sha256=Kf3cr766a5SK99CZy8bwdWjwvAZxls3tBYvaHBsw7ac,1527200
35
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=BfQMBB3Vw1CyZATDJtOY_W31GT1p3DCdfsT6pdDMb6c,5759
35
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=hUcG245oSHjZoAqx0yjbKXGGUHWNa7p0kcyDvMwxEKo,5759
36
36
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
37
37
  micrOS/source/Common.py,sha256=PAdtseGY6QxUM-5elOAcApUv8AwGQ_smsYex0FeV5w8,7937
38
38
  micrOS/source/Config.py,sha256=E3OTMRI1_T94GMADcvG7MKiuGsKsnbLn17KXHcjhqXM,8795
@@ -67,7 +67,7 @@ micrOS/source/LM_dimmer.py,sha256=Jhpeh0Kq7Dnt9nA8PVobENbsf1x-U7rOv9EGGdhC_30,83
67
67
  micrOS/source/LM_distance.py,sha256=iVqQchaUOvK8Ilzr7qMi-ESvS_U8RsBwdqNHY_4qZ-c,4394
68
68
  micrOS/source/LM_ds18.py,sha256=mLaH97j8d4lUXcjS8hNtwU8hL5Ybt-Q1WuoiWPnk5Ho,1807
69
69
  micrOS/source/LM_esp32.py,sha256=yUIMWsfimCAhgyV4pT4sh-kqE_mDL83cmAZji_2uFpI,1738
70
- micrOS/source/LM_espnow.py,sha256=0ihRds2Uzl5neSfVHxFP4Zdj9o66fN-NPqKe2iMYblw,475
70
+ micrOS/source/LM_espnow.py,sha256=Tto5JGnhbqyKT0hzDlJ_G-o_34dVf0CIaiMPbP-xbHU,1070
71
71
  micrOS/source/LM_gameOfLife.py,sha256=Mvr_S5zsJ6x_pMCGrkdgl5QdejNQjAF9mBYLN5-OA38,7685
72
72
  micrOS/source/LM_genIO.py,sha256=rTiFByly8ImjHBgc2RceGczGp1rzti7Juz_Vvg5hrtc,5013
73
73
  micrOS/source/LM_haptic.py,sha256=W0WiuOCxIu9RB-pWu8r8fvHmvuseet1UI7RSc9WO8zo,2862
@@ -81,7 +81,7 @@ micrOS/source/LM_neoeffects.py,sha256=kfReEz9pTB0GRSat6--86PZtjfiT_S9ilfb-igt-bb
81
81
  micrOS/source/LM_neopixel.py,sha256=4TWwlmW6bnnmS76fVZVri6bI2zPXbiPJ9spEtA7NTjE,13260
82
82
  micrOS/source/LM_oled.py,sha256=ZwLndxWuY1Ii5d06YEf9Z_jxmTyoOYRL-BO3VhJ0b14,9903
83
83
  micrOS/source/LM_oled_sh1106.py,sha256=av2_ftFHvfAIxcPYHbrOMQNZgM1Go6MQzBu5cIeVK4w,11723
84
- micrOS/source/LM_oled_ui.py,sha256=Mj6ZARI8sPKLAgXodeOPNMZkAkjdB9wtEspUWPJKqok,21610
84
+ micrOS/source/LM_oled_ui.py,sha256=rs-YmYdJQy3AVokxF_oBrkjFFGGhRdnxKoHjmO-x158,21611
85
85
  micrOS/source/LM_oledui.py,sha256=hYt_3hWPdrZBOreVdupJxHhk9-xHkmuiqmEIA08mB2M,35407
86
86
  micrOS/source/LM_pacman.py,sha256=k_R0X0YGkRc6-NoF5fvqng7lD5RNmV-rsVa-uBcrleE,8227
87
87
  micrOS/source/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
@@ -99,71 +99,76 @@ micrOS/source/LM_servo.py,sha256=83YPK5qlHuEOo3jTn5wXRsvPzzJPp0ZtCW-BhHHMBK0,348
99
99
  micrOS/source/LM_sound_event.py,sha256=9BZnrT8Jc2HL-28yVZE5sdeTa8Biq1qkQiTJsTw8y08,27500
100
100
  micrOS/source/LM_stepper.py,sha256=CkI4QBe2KJ7E5DKL7Z23oAMPDUFlUt7btAvqrn4H6Kg,4278
101
101
  micrOS/source/LM_switch.py,sha256=uxw2opz41OpBiBfb5ioojsUzPsETnkinkDXI4NRHMZs,7819
102
- micrOS/source/LM_system.py,sha256=4roohSqd9VefNRx_BWBJOVkVuv4J5nK1fsqIZmwhkYw,6529
102
+ micrOS/source/LM_system.py,sha256=A3k2ToZmk1kSSnrcq15R5HSDjupTL0LSChO4go9r3BE,6541
103
103
  micrOS/source/LM_telegram.py,sha256=n5mZeompavjfFXyCUiHYmmeusY-rJRuVbWOb9tNOZ4E,14848
104
104
  micrOS/source/LM_tinyrgb.py,sha256=kChL607HPTl3Z2hYN2XnzXXfZ6omdP78PQutHdbdfCo,3031
105
105
  micrOS/source/LM_trackball.py,sha256=N2hhy3wuk55-ja4dmENpfthBolIEj28d2pzcjel5OKg,9716
106
106
  micrOS/source/LM_veml7700.py,sha256=3eb6-HuMA_tYBA0cJHUsZzOBriHacIpVSrK-1iB3_pY,5762
107
107
  micrOS/source/Logger.py,sha256=CtmjmQc9hzCystEzY0AtopjRnSy5T6AdWwpj2KTmGWg,3942
108
108
  micrOS/source/Network.py,sha256=wLhAPiRyi376TKJA7tzCQidDBHq-AbZGGp7JabHIyl8,9417
109
- micrOS/source/Notify.py,sha256=OhjdDK3Gq9lPlbuM7sV36ZDUKnRg2-gTlAH8KbInLfs,2493
109
+ micrOS/source/Notify.py,sha256=jVf7wg7b7ehuh12A8tlYz5ZU00NQEgpVuTK0lN6cNcY,2645
110
110
  micrOS/source/Scheduler.py,sha256=K6fw807UJnOmbfzgeJQGzGbTL4s2sTIB120ZcS5qrLs,9648
111
- micrOS/source/Server.py,sha256=P8cGFbh0cJU-raUrFMSLUgMzKs9OddKiIrcBWQyOQt8,16234
112
- micrOS/source/Shell.py,sha256=Q3EMngNIm4997kP5stygzxfJ2-v_Zka2Hxf82c12WvA,12389
113
- micrOS/source/Tasks.py,sha256=YMYt86TWnUBWa8j1DQjbOavYpktCizzfZXaKXrb6Fmo,22498
114
- micrOS/source/Time.py,sha256=96XMJjHCPwQ2qNuBD2Un7FXxzXZNbV1xCQn-RujsggU,6351
111
+ micrOS/source/Server.py,sha256=HMkHWofMmtpTQtKiGy_Gh6R2xHy4Vpud_aT2zhC4l58,16245
112
+ micrOS/source/Shell.py,sha256=a8nIVnmoGgkq-7i3jCOrQFPQagxJWiUHgXd1I9pmaG8,12453
113
+ micrOS/source/Tasks.py,sha256=qAcniMejAHwpRK1cq-jcN4vQ1AotU0YqmH7Y5_pQy70,22510
114
+ micrOS/source/Time.py,sha256=vTl8-sL-iO4l9eZMVCHTJ6oUwfhPiB1VHXTrrg-l59Y,6344
115
115
  micrOS/source/Types.py,sha256=3O_Vb1jN92RPtvgbV8ui6_iFzDOD-BUzVXlPB7PgmM4,3507
116
116
  micrOS/source/Web.py,sha256=BAp7mFYzJwmzUGFc6O7DZDDKKPGjgW5EY5lRcfx-SU0,8893
117
117
  micrOS/source/dashboard.html,sha256=xBZOZ8AMO55QheuZ41Sl0Arvb44qnnai9D67A8YxlVE,2641
118
118
  micrOS/source/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9JJPfF-dxVclw,1656
119
119
  micrOS/source/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
120
120
  micrOS/source/micrOS.py,sha256=3PQR7_xNLsI7KJtPJQUudIgpL2JIe7pctCjXH-bwFtA,2556
121
- micrOS/source/micrOSloader.py,sha256=mJjaysDm-60afaICr-TfPLqMT-3r_azGxE1ShYrDKeQ,4795
121
+ micrOS/source/micrOSloader.py,sha256=IgiQgUm97raQB0yHxUjQtvXSjsCdA_1OwSkRwwNLDzU,4794
122
122
  micrOS/source/microIO.py,sha256=pFRvRlEK9OulVmdXOTbcnHHhSKt-JuEpjUr9GzY-rUQ,7087
123
123
  micrOS/source/reset.py,sha256=i7wsPkOXE7Mm0xOiw1CjqCvCdNjBvYswn9CRDvE2VbE,248
124
124
  micrOS/source/uapi.js,sha256=fZ0E9-ZndCoUNQq1yJ7yUCiLYxe3p8hzSFnlN2R9roc,2959
125
125
  micrOS/source/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF58c,4581
126
- micrOS/source/urequests.py,sha256=h4HL4d6Vl_3DHhG_b6lmxBnqrA6YimBs6ai3q6y3JSw,8853
126
+ micrOS/source/urequests.py,sha256=p7_8X9SrWk4wXhAZKpVPd-PZBHHToX8b1gwhFEi96FM,9089
127
127
  micrOS/source/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
128
128
  micrOS/source/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
129
129
  micrOS/source/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
130
- micrOSDevToolKit-2.9.8.data/scripts/devToolKit.py,sha256=WuPc3esCEtw9lN20nEsNUh4EaZEnb62GAtxDOFbVugA,10771
130
+ micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=qugnjE4Q1mMrR3VJaMhq71hsOoWLuft2lwv4O8Bo6ts,10366
131
+ micrOS/source/__pycache__/Logger.cpython-312.pyc,sha256=CCdkMRG0lBy7nVsc4DHwdRK0Ap0Mu9yB5fa_Hxx-RHY,5075
132
+ micrOS/source/__pycache__/Server.cpython-312.pyc,sha256=xy1ImeXPtGhtYlAWpuWaxLmJO2nLVGdefOuqltABR9k,20615
133
+ micrOSDevToolKit-2.9.11.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
131
134
  toolkit/DevEnvCompile.py,sha256=H19-60ZpHzP30C-wqR5QTzMDHHpWrTk0Uzh--TZHxvw,12148
132
- toolkit/DevEnvOTA.py,sha256=OkEtO5cpym-kEgGpE3TQbyZ-nQOzZpGzbFdbgCibe7I,25356
133
- toolkit/DevEnvUSB.py,sha256=-Fdigxi8asEJG4npQpvbpgjHhESq0gz0rL6lthRupVA,33848
135
+ toolkit/DevEnvOTA.py,sha256=vNa827MOhbNQbeMGGu72YmGlNN_Tm9D6Trdnz3YGpyU,25499
136
+ toolkit/DevEnvUSB.py,sha256=G-Ram-OR27flvVhul8J_ObiMY07Wjvom6Prc4dTfkmo,34108
134
137
  toolkit/Gateway.py,sha256=OSsJYeAmFhNnb1uu2bjLvZzE3A32O7lza8-NxlGr1DQ,25335
135
138
  toolkit/LM_to_compile.dat,sha256=TmcSZcPNVtJKWdyMxY1YtHPnqbD6zcI7B7FISbr6as4,579
136
- toolkit/MicrOSDevEnv.py,sha256=XqR7ZTPp-M6s36mH7-slwt_gk2ybqd0daX9qOrBqJMw,12922
139
+ toolkit/MicrOSDevEnv.py,sha256=xMsfbImyPAkiRh8wz1EYyWSWX8FvJIrGjwjjRC3q7d8,13562
140
+ toolkit/WebRepl.py,sha256=805SJGoflJztyFR4DFxP80KVvNEeJfqZxlYeA3uD680,2696
137
141
  toolkit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
142
  toolkit/img_stream.html,sha256=ZGyrUgpi-JhMl4euS-TTjwwGrg66a2pGUQCopWiveds,5135
139
143
  toolkit/index.html,sha256=agTgT1d4FH8l2h47Hfb4Lv061BW9shsCAgq1abO5hlI,10998
140
144
  toolkit/micrOSdashboard.py,sha256=SOBzGU1b-NIn40GMd2gE01Fuo8HZP5d1XyVG24RkPeA,54433
141
- toolkit/micrOSlint.py,sha256=8Oi6y9_3E0R6NZRTI5EpX_Z_9Y3AW_PuCYume-7UsDc,25105
142
- toolkit/socketClient.py,sha256=fUx5Wuy76sboIwYxKsY52Si6F2G7q06iVwb3pTwnXvI,18624
143
- toolkit/dashboard_apps/AirQualityBME280.py,sha256=ufYAn_eFpCIcNSQUW6AGQN6Uh_5A3xVqSyoWegUNBuY,747
144
- toolkit/dashboard_apps/AirQualityDHT22_CO2.py,sha256=TG8Wkx7WOaGM1rpqD6t2rKFES0aqdCJvK-f5I5IK3a4,749
145
- toolkit/dashboard_apps/BackupRestore.py,sha256=zRkj6KDFnO9Cj6QUpE0Av39OQZcI8CycQcrqbvWBHqU,6339
146
- toolkit/dashboard_apps/CCTDemo.py,sha256=jQa6BOJnLMXquN_8zz2G5r-zKSGlqi1FTH3ig59X4tA,1278
147
- toolkit/dashboard_apps/CCTTest.py,sha256=IOJXLEgP_qw6YYmWVayohrzY8h5ZXOgn4W334ZCyGH4,3798
148
- toolkit/dashboard_apps/CamStream.py,sha256=GNQJvKrdAPem0Qu9QMffofxgRcBviraV-RlAT8qihaU,402
149
- toolkit/dashboard_apps/CatGame.py,sha256=nP1zGIHTyQGHemQ5O5fZL2xfGINxfp_ZiFdP5KORHPk,1487
150
- toolkit/dashboard_apps/Dimmer.py,sha256=jZnuCB1TI2TghiGwyEQRY3GkYWpEdaHbOhglLFtIeeM,937
151
- toolkit/dashboard_apps/GetVersion.py,sha256=q02pZ0Yr49LI7E8xieGZ0kghTQAIDFvPingrCX1rTWU,698
152
- toolkit/dashboard_apps/MicrophoneTest.py,sha256=FyYzRkD2PormqVP29xxnmDvp6lHgxFiXIiYgqTur6ek,417
153
- toolkit/dashboard_apps/NeoEffectsDemo.py,sha256=Eh5IK8iB1Gi-SOXqGHkT5jgDchCqhE3mB6Evm1gVcz4,2409
154
- toolkit/dashboard_apps/NeopixelTest.py,sha256=ZwIh6UTMNHmt7FvVa0-p6ywxWAlbVzoRToNESAdqPqI,3938
155
- toolkit/dashboard_apps/PresenceTest.py,sha256=MnWjqh3W3qAR9pKdjrOfx74numQw6-acrRzD1c-sDyQ,412
156
- toolkit/dashboard_apps/RGBTest.py,sha256=x9ehV6EGH2B4syKGEQrZQbMy1pBsB1M6in8idJ73Jrw,3920
157
- toolkit/dashboard_apps/RoboArm.py,sha256=STFIYYy0Li6gLdJx7eu3FZOucF_f5jupHVNFzU-Ta-Q,2084
158
- toolkit/dashboard_apps/SED_test.py,sha256=ASVRcoVQiS80tvjQHBnXd69aAioJ4lt_UnL1KAy01sM,2782
159
- toolkit/dashboard_apps/SystemTest.py,sha256=vnA24QbmW6hO34xHKECKjEiX1b1yGAenHEWXCdilRFw,21910
160
- toolkit/dashboard_apps/Template_app.py,sha256=fKF43E-XqibavvjUrCQzG-kMSTCe-sb3ckbLwDgGuTc,1002
145
+ toolkit/micrOSlint.py,sha256=HEv6q32Iy5FHx3tn_yA-iMJEeElOVNJIVN51sshv1go,25142
146
+ toolkit/socketClient.py,sha256=aDKQl_I422KFoy0RcjPBIcHXgrBPwLRn9MpxuXEtUF8,18610
147
+ toolkit/dashboard_apps/BackupRestore.py,sha256=udhuFpCawO0mwyiN4vFMfV8wONqHnUjYvL0udJzkq44,5897
148
+ toolkit/dashboard_apps/CCTDemo.py,sha256=oV7k6sxepOxEa7tBNcuK5IHgKnv01sIQRPvUljic8NI,1125
149
+ toolkit/dashboard_apps/CCTTest.py,sha256=saU4L8gOst31bno44vlwaeSzqrIBppW2DrZf2KV7_4o,3641
150
+ toolkit/dashboard_apps/CamStream.py,sha256=U4wvP0p-5V9mUrC-w_Heg41g5f1I4s6zXvgETRhMras,325
151
+ toolkit/dashboard_apps/CatGame.py,sha256=SC6wihVYHvoN6Q6-HCc7vqCNFPP0_rjWbAgVeQib3Po,1414
152
+ toolkit/dashboard_apps/Dimmer.py,sha256=tyOC-m7GTWm3Jl7vyxHUOBrO4Dt6arDLr34uryH2UvI,765
153
+ toolkit/dashboard_apps/GetVersion.py,sha256=Tv0IihJPGVBb83Y8NH0VNs6QrKFf1BvLjgxalqvdlWw,506
154
+ toolkit/dashboard_apps/MicrophoneTest.py,sha256=eERgltLZekNewYEcCGI7TjvbDYJC8tuzV_NoEHNz-kI,329
155
+ toolkit/dashboard_apps/NeoEffectsDemo.py,sha256=SA3uPRpUX2KF7OEh_9E5cLay9d5NG1JWR9W6byIt5uo,1923
156
+ toolkit/dashboard_apps/NeopixelTest.py,sha256=ht1rZrI4GIE6pUYz7uoncGktMKsaPBGG9Ic_bj3Bo0o,3780
157
+ toolkit/dashboard_apps/PresenceTest.py,sha256=W1hAJmDP5vkXL_Bqq1HSf4RBSRJKHea9KOkHcZQ5rGU,333
158
+ toolkit/dashboard_apps/RGBTest.py,sha256=QIky1Ts87h52VS9vHs3rYoEYvwFX02BlJxzK-uEuKHc,3763
159
+ toolkit/dashboard_apps/RoboArm.py,sha256=fqsBFTLEKXLyuZtZhbsNMNLCVtJw3gHWE-37EzjRttw,1814
160
+ toolkit/dashboard_apps/SED_test.py,sha256=hQG8F2isZvCEsb0EvUdvcowLtJ86vrhLMOvpe9EPcJM,2703
161
+ toolkit/dashboard_apps/SensorsTest.py,sha256=h6Sqz9HzjUawKuvxBPMltgWAycIXUUqlLANZqlF030M,1472
162
+ toolkit/dashboard_apps/SystemTest.py,sha256=NaqTUWA5ub_8dHZQBrcO1n7nU95aPKVIjEn8nbaa2mI,25335
163
+ toolkit/dashboard_apps/Template_app.py,sha256=1OLO-xA6qNKyDCj-J7nHkA3Eis4ZKnHfhMcaSqHNX4A,758
161
164
  toolkit/dashboard_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
+ toolkit/dashboard_apps/_app_base.py,sha256=wNurhv7AT2imsiVO3rkwPlRkss-2UQU9KsRoXjeb7rk,1007
162
166
  toolkit/dashboard_apps/_capture.py,sha256=75aS8ajhEYWNqoG2DwQgqJyArMouGHZNN-0mo1RH9bU,3076
163
167
  toolkit/dashboard_apps/_micPlotting.py,sha256=zYXhyYKyyA_13ZQybccO4a6t8uyaFJNxlhZfUD6nE90,6394
164
168
  toolkit/dashboard_apps/_presencePlotting.py,sha256=cHWR_4YqbNLB6d4mmHjGCYb3Dg5rqWIyu2lpnz0l-Hs,3737
165
- toolkit/dashboard_apps/uLightDemo.py,sha256=HDi4GyN1VN4Lo9TYG_SFBm4TEd921H6SaDE8_pjR_7s,3380
169
+ toolkit/dashboard_apps/uLightDemo.py,sha256=Q8PL56coysM71qV9SCU05yTyCsAMhtzDSjVeg_CkBtc,3163
166
170
  toolkit/lib/LocalMachine.py,sha256=m5xaWRx1PumKFLQ5_O8vVxC4NTclF1h9J3__pK8N-C4,18734
171
+ toolkit/lib/Repository.py,sha256=DVoS67rCJzHtJvPTZt-r4Gkmt28ZuC7UYdSAuczsPs0,2440
167
172
  toolkit/lib/SafeInput.py,sha256=gMXsMalPcFCwlN6niJlG2twOHfoGsEgHL9-Uh2YQJHE,855
168
173
  toolkit/lib/SearchDevices.py,sha256=1nnJDwo_U5cCN2xsdNUT6EQqdt2fW-qAWXWzyzXzyyc,5813
169
174
  toolkit/lib/SerialDriverHandler.py,sha256=Zn0zeq4mshTMVc6fzycvrOZiKt6w6YOxJcTWw3BMN2M,7344
@@ -171,11 +176,12 @@ toolkit/lib/TerminalColors.py,sha256=Ly_8o9-eBmka1dqA2M3DBlcd1zvCCO2K_BnQ1XbqxcE
171
176
  toolkit/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
177
  toolkit/lib/file_extensions.py,sha256=0DpayBGjKQg7y2ZGJXf5wVPnre_4C5j-7YIViNGvYz4,372
173
178
  toolkit/lib/macroScript.py,sha256=DQR8cFoks7fa0dgRUfGhTpEdUJWNQ1vikRoqukRKx14,14014
174
- toolkit/lib/micrOSClient.py,sha256=LmNI-FF-UjuxSVGWNnAt-eRmXI0a6P5tcPV_cI0uiRI,18360
179
+ toolkit/lib/micrOSClient.py,sha256=fLRkyOjbYQkFzcqeC3yDLa4IymarSOitbxJERa_jeHI,18752
175
180
  toolkit/lib/micrOSClientHistory.py,sha256=EyCqbFeMy940bfXq4Yfu8dcvb7GnBvuHHxOAIgmW1FQ,4736
176
181
  toolkit/lib/pip_package_installer.py,sha256=jpC-y1KR72_PJlqyUR6-U5b6l1szVqnIZ4nrSgUsOTM,4262
177
182
  toolkit/simulator_lib/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
178
183
  toolkit/simulator_lib/IO_darwin.py,sha256=f8HOfQKJvniShvjpBe6f4nisr6oJd9SnvxPsbdNIGQk,2336
184
+ toolkit/simulator_lib/aioespnow.py,sha256=NPAX85zLCb6ZJVW8n18tULV4NbHK1IzHYMR43QXAxUQ,480
179
185
  toolkit/simulator_lib/camera.py,sha256=BIyj6dF_PoszzTZ3Ea_-gsJ3aly_xGy5NMKeJGVSbFI,1485
180
186
  toolkit/simulator_lib/dht.py,sha256=WB56YlZJYop4a2wnFWyWSI9FsPC_zH885a-A4rDNGKo,278
181
187
  toolkit/simulator_lib/dotstar.py,sha256=Le6RvSAz3byjiF2RX4JWB8LVsNQtfMqPfM47fg-YFzs,95
@@ -203,6 +209,7 @@ toolkit/simulator_lib/view01.jpg,sha256=YI_faDB9yyFLzJKTCu1nW4XXxyvGPLfgdYtzW7vm
203
209
  toolkit/simulator_lib/view02.jpg,sha256=7EWtt8StDpLw3yDMG1nD8XjJgsC0ixpAq3SwPCb842k,35580
204
210
  toolkit/simulator_lib/webrepl.py,sha256=owxkwtNlV9zrE2inPtoLCc8U2QgmZOhxpcsX3wMPbik,37
205
211
  toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc,sha256=LKUIXwaw3DBrvvRhIFi93xolxnI6W7CR6WePeApVo7I,1823
212
+ toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc,sha256=25jb4hcOhdbJnWJCH_Vh0Uwc6I8tvpFw3xpFznP4BQA,1555
206
213
  toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc,sha256=hzK7NNmBQsIigz7Gof9FNblwVnP4Ffc3cILPLI-US6w,3152
207
214
  toolkit/simulator_lib/__pycache__/dht.cpython-312.pyc,sha256=-02X-tLNXpZIb2DhJI_-Qi1m-MmddzbQIpZUZVH9HZk,946
208
215
  toolkit/simulator_lib/__pycache__/dht.cpython-39.pyc,sha256=YwCF50_3cJ9QvAaVa5Mkl0EeASSIr8gwPtREzFcCEmk,878
@@ -299,7 +306,7 @@ toolkit/workspace/precompiled/LM_dimmer.mpy,sha256=dRdDr3WfFy-um3-fRiK4IuZdwBTUD
299
306
  toolkit/workspace/precompiled/LM_distance.mpy,sha256=6VoSsyd-hQ4P16USDnSqpq5gpi0v2WbseeHnTFJxuJA,1506
300
307
  toolkit/workspace/precompiled/LM_ds18.mpy,sha256=1TYvc8hj1ypE1v52l6u83e8XqUi0_Rjwil-BnYXDSKI,644
301
308
  toolkit/workspace/precompiled/LM_esp32.py,sha256=yUIMWsfimCAhgyV4pT4sh-kqE_mDL83cmAZji_2uFpI,1738
302
- toolkit/workspace/precompiled/LM_espnow.py,sha256=0ihRds2Uzl5neSfVHxFP4Zdj9o66fN-NPqKe2iMYblw,475
309
+ toolkit/workspace/precompiled/LM_espnow.py,sha256=Tto5JGnhbqyKT0hzDlJ_G-o_34dVf0CIaiMPbP-xbHU,1070
303
310
  toolkit/workspace/precompiled/LM_gameOfLife.mpy,sha256=mAOivt472fRGOcpgx6xShyfbrpT0GTbLhT2vujncS4w,2051
304
311
  toolkit/workspace/precompiled/LM_genIO.mpy,sha256=F9utR5Ng-QuTq5R5ISvYPO8xASEdSnndc1hFfxcNWOE,1722
305
312
  toolkit/workspace/precompiled/LM_haptic.mpy,sha256=46BgYkjC3AdNaJaKflFnY0oEUsd9qg6yGquX7jyFLnM,1276
@@ -313,7 +320,7 @@ toolkit/workspace/precompiled/LM_neoeffects.mpy,sha256=lO0sxfiAgyASgYNjX3c_usY3T
313
320
  toolkit/workspace/precompiled/LM_neopixel.mpy,sha256=3o4Jvmc3Knr30VJ4b7JebpUsU7dBdcYBZzRD_9a4zBI,3663
314
321
  toolkit/workspace/precompiled/LM_oled.mpy,sha256=KQj4jfLwlmx2dT_GWbFzZE6FlMRPUgJvri5XbnSIod0,3154
315
322
  toolkit/workspace/precompiled/LM_oled_sh1106.mpy,sha256=0cQpu1MPkrPxvd1Fvln9c9lq9qPV6oi8iGNTZM4YbIY,3761
316
- toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=oqaq0PF7WRa2nBF4Tstr_Wl1aAxlMiWI-DjoMYS6J1s,6820
323
+ toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=toUOIvcp8zIjsckWLMVNZK8i2KIvpLH2Xy8ORj0aPsI,6821
317
324
  toolkit/workspace/precompiled/LM_oledui.mpy,sha256=bSNnW6rlts7KM3YY-dTV34gG5r5zJMYvsqQorPb191E,11555
318
325
  toolkit/workspace/precompiled/LM_pacman.mpy,sha256=njOwVrPKOtC4J5kRCtwV8E8hHTTTt7HzqV121HmCsxE,3507
319
326
  toolkit/workspace/precompiled/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
@@ -331,19 +338,19 @@ toolkit/workspace/precompiled/LM_servo.mpy,sha256=S1mH7tS6WK-vclAPQrWK46_IB2GlBZ
331
338
  toolkit/workspace/precompiled/LM_sound_event.mpy,sha256=QJ5xmKtK2sfA9lyROJRRpSAjypl10MkwLdW-QsXhRf8,7384
332
339
  toolkit/workspace/precompiled/LM_stepper.mpy,sha256=20Jpee74AjyjjMaHmgKbZvU5phcOvh8nQNSUDCAk_KE,1466
333
340
  toolkit/workspace/precompiled/LM_switch.mpy,sha256=58sjZQokfBYBZlplFQB5-t-3O-2mlsE3NXjvJ5FgD_U,2237
334
- toolkit/workspace/precompiled/LM_system.mpy,sha256=bSq9C615p3fL5f-RkHZaiipNFDiNnqnM5uV4ewMRKgs,2796
341
+ toolkit/workspace/precompiled/LM_system.mpy,sha256=Desld_4SY-bsOHdrNTx-jjqIx809cwuVnnx68HwZSZk,2802
335
342
  toolkit/workspace/precompiled/LM_telegram.mpy,sha256=5Y-YrdYjBLN7gmIqlE6WhbWhA3Dak4IVd7j_FQYOQho,4877
336
343
  toolkit/workspace/precompiled/LM_tinyrgb.mpy,sha256=qWR-e8DXuzmstxQlyic0YjwFaGiBBBWpf57Wyn1jjFc,1016
337
344
  toolkit/workspace/precompiled/LM_trackball.mpy,sha256=eDVf55dNJXd0Mzg1MZH0talUloPEGFNccE08vwbgn0g,3471
338
345
  toolkit/workspace/precompiled/LM_veml7700.mpy,sha256=NxOvdbrqyyhhwjm2d2dfrJK0dTK3NiP5kQ5GDXjXgq0,1953
339
346
  toolkit/workspace/precompiled/Logger.mpy,sha256=Nz33LQBUliSguxuy4EV3GWXLd9PFyqzivuNivWdLJ_w,1388
340
347
  toolkit/workspace/precompiled/Network.mpy,sha256=WtpvhGB2bvEe94dAHV40fpEyk-Fi0D6vL1q_m6k4qBg,3274
341
- toolkit/workspace/precompiled/Notify.mpy,sha256=O80dkyGl8iiiEj47Q6iDJuS5mrT8_e6IXfRMN80pMRU,894
348
+ toolkit/workspace/precompiled/Notify.mpy,sha256=ioeDVMh9qBtACWQMASrrhGkSfp1KKUN6d2rt0NpbClo,974
342
349
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=ctCj7FfXj5TchPPxe_9dmnTXWN88egtbAnmJ0N9u_1w,2202
343
350
  toolkit/workspace/precompiled/Server.mpy,sha256=dtSXLYpBcdz0DveB_S6nos46h-m6hwlQ-38G-iVQwKQ,4762
344
- toolkit/workspace/precompiled/Shell.mpy,sha256=cp1JXbp7QVB0tPfRnhPtc6mDiRBB2_R1fi89_xtm3NM,4335
351
+ toolkit/workspace/precompiled/Shell.mpy,sha256=-HCVQVnKCyKf1k-DsR_-MxN4PladJl3cMA6JwtRRxsA,4385
345
352
  toolkit/workspace/precompiled/Tasks.mpy,sha256=vL3tDV7Us3Wg7qtZA8ovqEsvLndOmu14GHcZF2_DtrY,6253
346
- toolkit/workspace/precompiled/Time.mpy,sha256=D6jvLP5tUKQdJGcn6Q4-ru-p0at6hnxfLC5bqC78gv0,2756
353
+ toolkit/workspace/precompiled/Time.mpy,sha256=AZAtFj-l2ERKUpWgQS4gyq_XUx1ddy4ZTTgpRxbWK9M,2773
347
354
  toolkit/workspace/precompiled/Types.mpy,sha256=LssRbPgvsWuR4d2m3R7VMIvsnkVp9nN0ltwaY2wGop8,1401
348
355
  toolkit/workspace/precompiled/Web.mpy,sha256=RuZNz2Yfe3MGoMV09nRLUS0MQ2CoJHHBVh7FnC9dYY4,3116
349
356
  toolkit/workspace/precompiled/_mpy.version,sha256=Kik-fvRGfWAmpEjKdJLq7nPOqYR_jVgB0aiXZ8LMvMA,6
@@ -351,17 +358,17 @@ toolkit/workspace/precompiled/dashboard.html,sha256=xBZOZ8AMO55QheuZ41Sl0Arvb44q
351
358
  toolkit/workspace/precompiled/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9JJPfF-dxVclw,1656
352
359
  toolkit/workspace/precompiled/main.py,sha256=cVlhoWwU9dSKEol0HWPihFAPzrUUvzSGwZNNMrpyfSY,440
353
360
  toolkit/workspace/precompiled/micrOS.mpy,sha256=x20-mxGB7mkvdcyulttyXhjdLvXeyXlpl57yctS3eTA,1129
354
- toolkit/workspace/precompiled/micrOSloader.mpy,sha256=0bFFYYHrsnAVZko9Q7XpPoo0gkt2v_lY4V9R-4K_T_0,1747
361
+ toolkit/workspace/precompiled/micrOSloader.mpy,sha256=Gcznp2z2Zv4N4dHv7PE7d6bNSQPTdvHLeStCCHGNuEg,1747
355
362
  toolkit/workspace/precompiled/microIO.mpy,sha256=SWYlvjIHgcMsSVCuxWataoqI03T8Aq6u4TzeGU3I3fs,1638
356
363
  toolkit/workspace/precompiled/reset.mpy,sha256=D-ZwUk-oR8OAg5ERWJXErdPAGbx_3M13hK4IBawhIg0,217
357
364
  toolkit/workspace/precompiled/uapi.js,sha256=fZ0E9-ZndCoUNQq1yJ7yUCiLYxe3p8hzSFnlN2R9roc,2959
358
365
  toolkit/workspace/precompiled/udashboard.js,sha256=42mPR_NU3jOqUgLi7yZv2L7bN6uGqw9LpScDrGGF58c,4581
359
- toolkit/workspace/precompiled/urequests.mpy,sha256=HO-7YqLS_B32z1OEnu1j9GcqlkEY4wqAgKKNcaVRtvU,2320
366
+ toolkit/workspace/precompiled/urequests.mpy,sha256=-JDY-DOtJrGdwQo0-P809zZu-cJBRqKH3X4ZHuo38k4,2387
360
367
  toolkit/workspace/precompiled/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
361
368
  toolkit/workspace/precompiled/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
362
369
  toolkit/workspace/precompiled/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
363
- micrOSDevToolKit-2.9.8.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
364
- micrOSDevToolKit-2.9.8.dist-info/METADATA,sha256=TQB0kVvZgGXRSSRfbgQt-h4sjyLZd_DL8qVOqKU1msQ,53468
365
- micrOSDevToolKit-2.9.8.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
366
- micrOSDevToolKit-2.9.8.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
367
- micrOSDevToolKit-2.9.8.dist-info/RECORD,,
370
+ micrOSDevToolKit-2.9.11.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
371
+ micrOSDevToolKit-2.9.11.dist-info/METADATA,sha256=BqgNJ6O6FQZJclGKfkWwg2h04G8pL1_n1zVdaSVRsVY,55250
372
+ micrOSDevToolKit-2.9.11.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
373
+ micrOSDevToolKit-2.9.11.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
374
+ micrOSDevToolKit-2.9.11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
toolkit/DevEnvOTA.py CHANGED
@@ -12,6 +12,7 @@ try:
12
12
  from .lib.TerminalColors import Colors
13
13
  from .lib.SafeInput import input_with_timeout
14
14
  from .lib.file_extensions import check_all_extensions
15
+ from .lib.Repository import git_clone_archive, git_clone
15
16
  except Exception as e:
16
17
  print("Import warning __name__:{}: {}".format(__name__, e))
17
18
  from DevEnvCompile import Compile
@@ -19,8 +20,10 @@ except Exception as e:
19
20
  from lib.TerminalColors import Colors
20
21
  from lib.SafeInput import input_with_timeout
21
22
  from lib.file_extensions import check_all_extensions
22
- sys.path.append(MYPATH)
23
- import socketClient
23
+ from lib.Repository import git_clone_archive, git_clone
24
+
25
+ sys.path.append(MYPATH)
26
+ import socketClient
24
27
 
25
28
 
26
29
  #################################################
@@ -52,15 +55,17 @@ class OTA(Compile):
52
55
  # Change workdir
53
56
  workdir_handler = LocalMachine.SimplePopPushd()
54
57
  workdir_handler.pushd(os.path.dirname(os.path.dirname(webrepl_path)))
58
+ webrepl_url = 'https://github.com/micropython/webrepl.git'
55
59
 
56
- command = 'git clone {url} {name}'.format(
57
- name='webrepl',
58
- url='https://github.com/micropython/webrepl.git')
59
- self.console("Clone webrepl repo: {}".format(command))
60
+ self.console(f"Clone webrepl repo: {webrepl_url}")
60
61
  if self.dry_run:
61
- exitcode, stdout, stderr = 0, 'dry-run', ''
62
+ exitcode, stdout, stderr = 0, "", ""
62
63
  else:
63
- exitcode, stdout, stderr = LocalMachine.CommandHandler.run_command(command, shell=True)
64
+ # Git clone with command line tool
65
+ exitcode, stdout, stderr = git_clone(url=webrepl_url)
66
+ if exitcode != 0:
67
+ # Git clone archive - without git
68
+ exitcode, stdout, stderr = git_clone_archive(url=webrepl_url)
64
69
 
65
70
  # Restore workdir
66
71
  workdir_handler.popd()
@@ -156,7 +161,6 @@ class OTA(Compile):
156
161
  def update_with_webrepl(self, force=False, device=None, lm_only=False, loader_update=False, ota_password='ADmin123'):
157
162
  """
158
163
  OTA UPDATE via webrepl
159
- git clone https://github.com/micropython/webrepl.git
160
164
  info: https://techoverflow.net/2020/02/22/how-to-upload-files-to-micropython-using-webrepl-using-webrepl_cli-py/
161
165
  ./webrepl/webrepl_cli.py -p <password> <input_file> espressif.local:<output_file>
162
166
  """
toolkit/DevEnvUSB.py CHANGED
@@ -65,12 +65,13 @@ class USB(Compile):
65
65
  {'erase': '{esptool_interface} --chip esp32s3 --port {dev} erase_flash',
66
66
  'deploy': '{esptool_interface} --chip esp32s3 --port {dev} write_flash -z 0 {micropython}',
67
67
  'mpremote_cmd': 'mpremote',
68
- 'cmd_line_info': '[!!!] Fully automatic deployment.'},
68
+ 'cmd_line_info': '[!HINNT!] Press boot button under connecting the board over USB: enables flash erase'},
69
69
  'esp32s3':
70
70
  {'erase': '{esptool_interface} --chip esp32s3 --port {dev} erase_flash',
71
71
  'deploy': '{esptool_interface} --chip esp32s3 --port {dev} write_flash -z 0 {micropython}',
72
72
  'mpremote_cmd': 'mpremote',
73
- 'cmd_line_info': '[!!!] Fully automatic deployment.'},
73
+ #'ampy_cmd': 'ampy -p {dev} -b 115200 -d 2 {args}',
74
+ 'cmd_line_info': '[!HINNT!] Press boot button under connecting board over USB: enables flash erase'},
74
75
  'esp32c3':
75
76
  {'erase': '{esptool_interface} --chip esp32c3 --port {dev} erase_flash',
76
77
  'deploy': '{esptool_interface} --chip esp32c3 --port {dev} --baud 460800 write_flash -z 0x0 {micropython}',
@@ -239,7 +240,7 @@ class USB(Compile):
239
240
  # Legacy ampy command (esp32 auto reboot tolerance...)
240
241
  command = self.dev_types_and_cmds[self.selected_device_type]['ampy_cmd'].format(dev=device, args=f'put {source}')
241
242
  else:
242
- command = f'{mpremote_cmd} cp {source} :{source}'
243
+ command = f'{mpremote_cmd} fs cp {source} :{source}' # new mpremote <1.24.1
243
244
  if ' ' in source:
244
245
  self.console("[{}%][SKIP] micrOS deploy via USB: {}".format(percent, command))
245
246
  continue
@@ -614,7 +615,7 @@ class USB(Compile):
614
615
  # Legacy ampy command (esp32 auto reboot tolerance...)
615
616
  command = self.dev_types_and_cmds[self.selected_device_type]['ampy_cmd'].format(dev=device, args='get node_config.json')
616
617
  else:
617
- command = f'{mpremote_cmd} cat node_config.json'
618
+ command = f'{mpremote_cmd} fs cat node_config.json' # new mpremote <1.24.1
618
619
  if not self.dry_run:
619
620
  exitcode, stdout, stderr = LocalMachine.CommandHandler.run_command(command, shell=True)
620
621
  self._archive_node_config()
@@ -671,7 +672,7 @@ class USB(Compile):
671
672
  # Legacy ampy command (esp32 auto reboot tolerance...)
672
673
  command = self.dev_types_and_cmds[self.selected_device_type]['ampy_cmd'].format(dev=device, args='ls')
673
674
  else:
674
- command = f"{mpremote_cmd} ls"
675
+ command = f"{mpremote_cmd} fs ls" # new mpremote <1.24.1
675
676
  if not self.dry_run:
676
677
  self.console("CMD: {}".format(command))
677
678
  exitcode, stdout, stderr = LocalMachine.CommandHandler.run_command(command, shell=True, debug=False)
toolkit/MicrOSDevEnv.py CHANGED
@@ -214,12 +214,22 @@ class MicrOSDevTool(OTA, USB):
214
214
  _url = hardcoded_manual["task"]["img"]
215
215
  hardcoded_manual['task']['img'] = f'<img src="{_url}" alt="tasks" height=150>'
216
216
  module_function_dict_html.update(hardcoded_manual)
217
- module_function_json = json.dumps(module_function_dict_html, indent=4)
218
217
  import json2html
219
218
  table_attributes = 'border="1" cellspacing="1" cellpadding="5" width="80%"'
220
- html_table = json2html.json2html.convert(json=module_function_json,
221
- table_attributes=table_attributes,
222
- clubbing=True, escape=False, encode=False)
219
+
220
+ sorted_modules_w_data = dict(sorted(module_function_dict_html.items(), key=lambda item: item[0].lower()))
221
+ module_shortcuts = ' | '.join(
222
+ f'<a href="#{mod_name.replace(" ", "_")}">{mod_name}</a>'
223
+ for mod_name in sorted_modules_w_data)
224
+ html_tables = module_shortcuts + "<br><hr><br>"
225
+ for key, value in sorted_modules_w_data.items():
226
+ anchor = key.replace(" ", "_") # Replace spaces with underscores for a valid anchor
227
+ html_tables += f'\n<br><br>\n<h2 id="{anchor}"><a href="#{anchor}">{key}</a></h2>\n'
228
+ html_tables += json2html.json2html.convert(json=value,
229
+ table_attributes=table_attributes,
230
+ clubbing=True,
231
+ escape=False,
232
+ encode=False)
223
233
 
224
234
  # http://corelangs.com/css/table/tablecolor.html
225
235
  # http://corelangs.com/css/table/tablecolor.html
@@ -267,11 +277,15 @@ Logical pin names aka pin map
267
277
  <li><a href="https://github.com/BxNxM/micrOS/blob/master/micrOS/source/IO_rp2.py" target="_blank">rp2 (experimental)</a></li>
268
278
  </ul>
269
279
 
280
+ <h2>
281
+ Built-in control modules for various peripheries.:
282
+ </h2>
283
+
270
284
  """
271
285
  html_body_end = """</body>
272
286
  </html>"""
273
287
 
274
- html_page = html_body_start + html_table + html_body_end
288
+ html_page = html_body_start + html_tables + html_body_end
275
289
  # Write html to file
276
290
  with open(static_help_html_path, 'w') as f:
277
291
  f.write(html_page)
toolkit/WebRepl.py ADDED
@@ -0,0 +1,73 @@
1
+ import sys
2
+ import os
3
+
4
+ MYDIR = os.path.dirname(__file__)
5
+ print("Module [WebRepl] path: {} __package__: {} __name__: {} __file__: {}".format(
6
+ sys.path[0], __package__, __name__, MYDIR))
7
+ try:
8
+ from .lib.TerminalColors import Colors
9
+ from .lib.LocalMachine import FileHandler, CommandHandler, SimplePopPushd
10
+ from .socketClient import ConnectionData
11
+ except Exception as e:
12
+ print("Import warning __name__:{}: {}".format(__name__, e))
13
+ from lib.TerminalColors import Colors
14
+ from lib.LocalMachine import FileHandler, CommandHandler, SimplePopPushd
15
+ from socketClient import ConnectionData
16
+
17
+ WEBREPL_DIR = os.path.join(MYDIR, "workspace/webrepl")
18
+ MAKE_HTML_WEBPAGE_PATH = os.path.join(WEBREPL_DIR, "make_html_js.py")
19
+ WEBREPL_WEBPAGE_PATH = os.path.join(WEBREPL_DIR, "webrepl.html")
20
+
21
+ def init_webrepl_frontend():
22
+ webrepldir_handler = SimplePopPushd()
23
+ webrepldir_handler.pushd(WEBREPL_DIR)
24
+
25
+ is_exists, ftype = FileHandler.path_is_exists(MAKE_HTML_WEBPAGE_PATH)
26
+ if is_exists and ftype == 'f':
27
+ print("RUN webrepl/make_html_js.py")
28
+ exitcode, _, stderr = CommandHandler.run_command(f"{sys.executable} {MAKE_HTML_WEBPAGE_PATH}", shell=True)
29
+ webrepldir_handler.popd()
30
+ if exitcode == 0:
31
+ return True
32
+ print(f"Cannot init {MAKE_HTML_WEBPAGE_PATH}: {stderr}")
33
+ return False
34
+ print(f"WEBREPL MAKE MISSING: {MAKE_HTML_WEBPAGE_PATH}")
35
+ return False
36
+
37
+ def open_webrepl_webpage(address=None, port=8266):
38
+ # file:///Users/usrname/micrOS/micrOS/toolkit/workspace/webrepl/webrepl.html#10.0.1.76:8266
39
+ fuid = ''
40
+ if address is None:
41
+ try:
42
+ address, _, fuid, _ = ConnectionData.select_device()
43
+ except KeyboardInterrupt:
44
+ address = None
45
+
46
+ device = "" if address is None else f"#{address}:{port}"
47
+ webrepl_html = f"file://{WEBREPL_WEBPAGE_PATH}{device}"
48
+ is_exists, ftype = FileHandler.path_is_exists(WEBREPL_WEBPAGE_PATH)
49
+ if is_exists and ftype == "f":
50
+ print(f"OPEN {fuid} webrepl {webrepl_html}")
51
+ if sys.platform == "darwin":
52
+ CommandHandler.run_command(f"open '{webrepl_html}'", shell=True)
53
+ elif sys.platform == "win32":
54
+ CommandHandler.run_command(f"start {webrepl_html}", shell=True)
55
+ elif sys.platform == "linux":
56
+ CommandHandler.run_command(f"xdg-open {webrepl_html}", shell=True)
57
+ else:
58
+ print("Unsupported OS")
59
+ return False
60
+ return True
61
+ print(f"{WEBREPL_WEBPAGE_PATH} not exists.")
62
+ return False
63
+
64
+
65
+ def open_webrepl():
66
+ state = init_webrepl_frontend()
67
+ if state:
68
+ open_webrepl_webpage()
69
+
70
+
71
+
72
+ if __name__ == "__main__":
73
+ open_webrepl()
@@ -5,27 +5,17 @@ import sys
5
5
  import json
6
6
  MYPATH = os.path.dirname(os.path.abspath(__file__))
7
7
  BACKUP_DIR = os.path.join(MYPATH, "../user_data/node_config_archive/")
8
- sys.path.append(os.path.dirname(MYPATH))
9
- import socketClient
10
8
  sys.path.append(os.path.join(MYPATH, '../lib/'))
11
9
  from TerminalColors import Colors
12
10
 
13
- # FILL OUT
14
- DEVICE = 'node01'
15
- PASSWD = None
11
+ try:
12
+ from ._app_base import AppBase
13
+ except:
14
+ from _app_base import AppBase
16
15
 
17
- def base_cmd():
18
- if PASSWD is None:
19
- return ['--dev', DEVICE]
20
- return ['--dev', DEVICE, '--password', PASSWD]
16
+ CLIENT = None
21
17
 
22
18
 
23
- def run_command(cmd):
24
- # EDIT YOUR COMMAND
25
- args = base_cmd() + cmd
26
- status, answer = socketClient.run(args)
27
- return status, answer
28
-
29
19
  ###########################################################
30
20
  def _value_type(value):
31
21
  value = value.strip()
@@ -42,15 +32,16 @@ def _value_type(value):
42
32
 
43
33
 
44
34
  def backup():
45
- print(f"\tBackup name format: {DEVICE}-<tag>-node_config.json")
46
- print(f"\t\t tag is optional (press simply enter): {DEVICE}-node_config.json")
47
- backup_tag = input(f"\tFill backup tag for {DEVICE}: ").strip()
35
+ device = CLIENT.get_device()
36
+ print(f"\tBackup name format: {device}-<tag>-node_config.json")
37
+ print(f"\t\t tag is optional (press simply enter): {device}-node_config.json")
38
+ backup_tag = input(f"\tFill backup tag for {device}: ").strip()
48
39
  backup_tag = "" if len(backup_tag) == 0 else f"-{backup_tag}"
49
- backup_name = f"{DEVICE}{backup_tag}-node_config.json"
40
+ backup_name = f"{device}{backup_tag}-node_config.json"
50
41
  backup_path = os.path.join(BACKUP_DIR, backup_name)
51
42
  print(f"\tBackup path: {backup_path}")
52
43
 
53
- status, answer = run_command(["conf", "dump"])
44
+ status, answer = CLIENT.run(["conf", "dump"])
54
45
  if status:
55
46
  configuration = {line.split(":")[0].strip(): _value_type(':'.join(line.split(":")[1:])) for line in answer.strip().split("\n") if ":" in line}
56
47
  with open(backup_path, 'w') as f:
@@ -61,7 +52,8 @@ def backup():
61
52
 
62
53
 
63
54
  def restore():
64
- print(f"\tRestore backup for: {DEVICE}")
55
+ device = CLIENT.get_device()
56
+ print(f"\tRestore backup for: {device}")
65
57
  diff_config = {}
66
58
 
67
59
  # SELECT AND LOAD CONFIG BACKUP
@@ -81,7 +73,7 @@ def restore():
81
73
  print(f"BACKUP CONFIG DICT:\n{backup_dict}")
82
74
 
83
75
  # LOAD LIVE DEVICE CONFIG - create config diff
84
- status, answer = run_command(["conf", "dump"])
76
+ status, answer = CLIENT.run(["conf", "dump"])
85
77
  if not status:
86
78
  return f"Cannot load live device config"
87
79
  live_configuration = {line.split(":")[0].strip(): _value_type(':'.join(line.split(":")[1:])) for line in answer.strip().split("\n") if ":" in line}
@@ -103,20 +95,16 @@ def restore():
103
95
  print(f"{Colors.WARN}SKIP restore...{Colors.NC}")
104
96
  return
105
97
 
106
- print(f"PACKAGE CONFIG DIFFS...{DEVICE}")
98
+ print(f"PACKAGE CONFIG DIFFS...{device}")
107
99
  conf_cmd_list = ["conf"]
108
100
  for key, value in diff_config.items():
109
101
  print(f"\tADD {key} : {value}")
110
102
  conf_cmd_list.append(f"{key} {value}")
111
103
  conf_cmd_list.append("reboot")
112
104
 
113
- verify = input(f"{Colors.WARN}This is BETA feature, are you sure?{Colors.NC} [YY/n]: ")
114
- if verify != "YY":
115
- print(f"{Colors.WARN}SKIP restore...{Colors.NC}")
116
- return
117
105
  # Restore
118
- print(f"APPLY CONFIG DIFFS...{DEVICE}")
119
- status, answer = run_command(conf_cmd_list)
106
+ print(f"APPLY CONFIG DIFFS...{device}")
107
+ status, answer = CLIENT.run(conf_cmd_list)
120
108
  if status:
121
109
  print(f"{Colors.OKGREEN}Backup was successfully restored:{Colors.NC} {backup_path}\nRebooting...")
122
110
  else:
@@ -148,15 +136,12 @@ def app(devfid=None, pwd=None):
148
136
  send command(s) over socket connection [socketClient.run(args)]
149
137
  list load module commands and send in single connection
150
138
  """
151
- global DEVICE, PASSWD
152
- if devfid is not None:
153
- DEVICE = devfid
154
- if pwd is not None:
155
- PASSWD = pwd
139
+ global CLIENT
140
+ CLIENT = AppBase(device=devfid, password=pwd)
156
141
 
157
142
  print(f"{Colors.WARN}Backup & Restore management{Colors.NC}\n")
158
143
  while True:
159
- print(f"{Colors.UNDERLINE}Operations on {DEVICE}{Colors.NC}")
144
+ print(f"{Colors.UNDERLINE}Operations on {CLIENT.get_device()}{Colors.NC}")
160
145
  print("\t[1] Backup")
161
146
  print("\t[2] Restore")
162
147
  print("\t[3] Delete backups")
@@ -2,38 +2,33 @@
2
2
 
3
3
  import os
4
4
  import sys
5
- import time
6
5
  MYPATH = os.path.dirname(os.path.abspath(__file__))
7
- sys.path.append(os.path.dirname(MYPATH))
8
- import socketClient
9
6
  sys.path.append(os.path.join(MYPATH, '../lib/'))
10
- from TerminalColors import Colors
11
7
 
12
- # FILL OUT
13
- DEVICE = 'node01'
8
+ try:
9
+ from ._app_base import AppBase
10
+ except:
11
+ from _app_base import AppBase
14
12
 
13
+ CLIENT = None
15
14
 
16
- def base_cmd():
17
- return ['--dev', DEVICE]
18
15
 
19
-
20
- def app(devfid=None):
16
+ def app(devfid=None, pwd=None):
21
17
  """
22
18
  devfid: selected device input
23
19
  send command(s) over socket connection [socketClient.run(args)]
24
20
  list load module commands and send in single connection
25
21
  """
26
- global DEVICE
27
- if devfid is not None:
28
- DEVICE = devfid
22
+ global CLIENT
23
+ CLIENT = AppBase(device=devfid, password=pwd)
29
24
 
30
- status, answer = socketClient.run(base_cmd() + ['cct white 50 400',
25
+ status, answer = CLIENT.run(['cct white 50 400',
31
26
  'cct brightness 50'])
32
- status, answer = socketClient.run(base_cmd() + ['cct brightness 100', 'cct brightness 20',
27
+ status, answer = CLIENT.run(['cct brightness 100', 'cct brightness 20',
33
28
  'cct brightness 60'])
34
- status, answer = socketClient.run(base_cmd() + ['cct white 400 50',
29
+ status, answer = CLIENT.run(['cct white 400 50',
35
30
  'cct brightness 100', 'cct brightness 20'])
36
- status, answer = socketClient.run(base_cmd() + ['cct white 600 700',
31
+ status, answer = CLIENT.run(['cct white 600 700',
37
32
  'cct white 50 300'])
38
33
 
39
34