micrOSDevToolKit 2.9.10__py3-none-any.whl → 2.10.2__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 (41) hide show
  1. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +19 -19
  2. micrOS/source/Common.py +4 -4
  3. micrOS/source/InterConnect.py +14 -11
  4. micrOS/source/LM_espnow.py +27 -1
  5. micrOS/source/LM_intercon.py +3 -0
  6. micrOS/source/LM_light_sensor.py +7 -15
  7. micrOS/source/LM_oled_ui.py +18 -22
  8. micrOS/source/LM_oledui.py +13 -16
  9. micrOS/source/LM_presence.py +8 -11
  10. micrOS/source/LM_system.py +7 -6
  11. micrOS/source/LM_telegram.py +21 -16
  12. micrOS/source/Shell.py +22 -19
  13. micrOS/source/Tasks.py +30 -15
  14. micrOS/source/Web.py +3 -2
  15. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  16. {micrOSDevToolKit-2.9.10.dist-info → micrOSDevToolKit-2.10.2.dist-info}/METADATA +60 -28
  17. {micrOSDevToolKit-2.9.10.dist-info → micrOSDevToolKit-2.10.2.dist-info}/RECORD +41 -38
  18. toolkit/DevEnvOTA.py +13 -9
  19. toolkit/dashboard_apps/SystemTest.py +17 -6
  20. toolkit/lib/Repository.py +64 -0
  21. toolkit/lib/micrOSClient.py +25 -6
  22. toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  23. toolkit/simulator_lib/aioespnow.py +28 -0
  24. toolkit/socketClient.py +2 -3
  25. toolkit/workspace/precompiled/Common.mpy +0 -0
  26. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  27. toolkit/workspace/precompiled/LM_espnow.py +27 -1
  28. toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  29. toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  30. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  31. toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
  32. toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  33. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  34. toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  35. toolkit/workspace/precompiled/Shell.mpy +0 -0
  36. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  37. toolkit/workspace/precompiled/Web.mpy +0 -0
  38. {micrOSDevToolKit-2.9.10.data → micrOSDevToolKit-2.10.2.data}/scripts/devToolKit.py +0 -0
  39. {micrOSDevToolKit-2.9.10.dist-info → micrOSDevToolKit-2.10.2.dist-info}/LICENSE +0 -0
  40. {micrOSDevToolKit-2.9.10.dist-info → micrOSDevToolKit-2.10.2.dist-info}/WHEEL +0 -0
  41. {micrOSDevToolKit-2.9.10.dist-info → micrOSDevToolKit-2.10.2.dist-info}/top_level.txt +0 -0
@@ -32,9 +32,9 @@ 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=8-NZSImslog5jRt31IYIPyCUzYyomKWmp2NI_sEILsE,5759
35
+ micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json,sha256=zhIWl4uMC9VNiTB0WY2zylxxXdjSfWyH3DvWPFQIK2Y,5759
36
36
  micrOS/source/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
37
- micrOS/source/Common.py,sha256=PAdtseGY6QxUM-5elOAcApUv8AwGQ_smsYex0FeV5w8,7937
37
+ micrOS/source/Common.py,sha256=LEdYxNT7M5aVEIyx0nPoODOYgsVsY7Japxe9diZpU5A,8020
38
38
  micrOS/source/Config.py,sha256=E3OTMRI1_T94GMADcvG7MKiuGsKsnbLn17KXHcjhqXM,8795
39
39
  micrOS/source/Debug.py,sha256=_7HZzZ2OKJrcNqeYsG1ZykBa6iN8YTj-K5FFXlEAcRw,5300
40
40
  micrOS/source/Espnow.py,sha256=_D9XYTT0gQBEWTLzBLCLCbHdFDwjHyMMO94YPtEJlsQ,5510
@@ -47,7 +47,7 @@ micrOS/source/IO_m5stamp.py,sha256=KyOGvmcWv_gqdajp4zb4-1zARMyYNxhVc-3ZVGlK4gw,1
47
47
  micrOS/source/IO_qtpy.py,sha256=glZvTTmmrJ6qwVC1fJ-pJwk4WEoZVH1KEPCpiHI66Ik,2471
48
48
  micrOS/source/IO_rp2.py,sha256=8ISwnkFvlyeQJlrZiX3xABE9_Pu4u8HhYRVpIFvZdro,131
49
49
  micrOS/source/IO_tinypico.py,sha256=S9utgFQdRLjzasylJc2HITRwy9FOb9q5cJIQdkw1UF0,2356
50
- micrOS/source/InterConnect.py,sha256=r_k7_KhAScFoFV3Vhr1D8TxgDc6pJ4Rd3bSqaEL-V3I,7739
50
+ micrOS/source/InterConnect.py,sha256=wYMoNU3GS1VzLeQfcHTYQ3JGnpXLmTm4GyUm7EmH5Qg,7859
51
51
  micrOS/source/Interrupts.py,sha256=lbDZcFTWfrjbJur1Q_hGJM1ZDsRRMWmSXREAHFogqLc,7551
52
52
  micrOS/source/LM_L298N_DCmotor.py,sha256=TsD74hXwfPwmUjHWe6r6wE49nQ82fVygevxwsCasmx8,2426
53
53
  micrOS/source/LM_L9110_DCmotor.py,sha256=sf6TtuXRrfElhm_9rbp4bPjnKGTwO3PnuXVCC5Ob7Us,1847
@@ -67,26 +67,26 @@ 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
74
74
  micrOS/source/LM_i2c.py,sha256=WKuKxC85TKBSAT8SO4cm8OCPyceAsohHCQFTmomp8iA,1533
75
75
  micrOS/source/LM_i2s_mic.py,sha256=1Yu6RLYvSWWHT4KL1kCAuy_avV_z6WJXgIwWuQ73jcA,12271
76
- micrOS/source/LM_intercon.py,sha256=BRk8o2ksGdYTSrykTsXdkrncQZWsFYbQDHQjkwl-uy0,1680
76
+ micrOS/source/LM_intercon.py,sha256=QFXeYlrgpVeBPOjrhgWk6IWH-MM1-hPjsf-JSXn7vgk,1806
77
77
  micrOS/source/LM_keychain.py,sha256=-GN-Xzoour2vjg5MyZtmbcxo8LdSn6dYrk1wSliNQh4,12695
78
78
  micrOS/source/LM_ld2410.py,sha256=dWBsIkI0ryomn0zDrmz5YxaGcoH5TqjAsi2qwGd8UZM,6524
79
- micrOS/source/LM_light_sensor.py,sha256=FtgAhHLJvXq_ew3sNutqX2z-Poo6Yl_Tc_bmP6GW3dU,4669
79
+ micrOS/source/LM_light_sensor.py,sha256=xzsPmiLQHx5v8pyNQC0UNXFa76qsV-CqFACY7UZmVKk,4561
80
80
  micrOS/source/LM_neoeffects.py,sha256=kfReEz9pTB0GRSat6--86PZtjfiT_S9ilfb-igt-bbg,10929
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=rs-YmYdJQy3AVokxF_oBrkjFFGGhRdnxKoHjmO-x158,21611
85
- micrOS/source/LM_oledui.py,sha256=hYt_3hWPdrZBOreVdupJxHhk9-xHkmuiqmEIA08mB2M,35407
84
+ micrOS/source/LM_oled_ui.py,sha256=65OwlWD4X4b3r64XalDTdp0fNakWY1jpnIZvNBoSyno,21655
85
+ micrOS/source/LM_oledui.py,sha256=ym502-2eNN_e9qCysBjszrfPYdJek-izf2W2UyF_g1g,35429
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
88
88
  micrOS/source/LM_ph_sensor.py,sha256=QBVF6cHX3l9jsKcbEZprpyFtwRVLbup-_A7RmRYsdp8,1355
89
- micrOS/source/LM_presence.py,sha256=ihOr20szXPaMWh36n5pip60_xkOHCHpkXA4e3F1K3OE,8849
89
+ micrOS/source/LM_presence.py,sha256=xHB-U_Ywp6F-DEOFlYmjx0QFFQGwKgh8RS77r805YhQ,8830
90
90
  micrOS/source/LM_rencoder.py,sha256=9w00JP8UKC_GEKr18xgZ5axX9xc_wVeR9XlWpVR2Qzw,3973
91
91
  micrOS/source/LM_rest.py,sha256=NmkAPcSCIc_eSNYMy64Kb4fa4_JEpNXkmCSXF_zEkNk,2673
92
92
  micrOS/source/LM_rgb.py,sha256=ohzGxqC-dXIVc_YPXOtmmI9vRBFFjK-OfvsTnAFaDVM,11949
@@ -99,8 +99,8 @@ 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=A3k2ToZmk1kSSnrcq15R5HSDjupTL0LSChO4go9r3BE,6541
103
- micrOS/source/LM_telegram.py,sha256=n5mZeompavjfFXyCUiHYmmeusY-rJRuVbWOb9tNOZ4E,14848
102
+ micrOS/source/LM_system.py,sha256=p_QvbigWe1Pp8Vdjm_ebi1EW6mFG18lB6L8mP9rYTwM,6588
103
+ micrOS/source/LM_telegram.py,sha256=DY4WEzthGExQ0A6iE6LCMYrXaMLAjsU5OsmY92X3kgg,15153
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
@@ -109,11 +109,11 @@ micrOS/source/Network.py,sha256=wLhAPiRyi376TKJA7tzCQidDBHq-AbZGGp7JabHIyl8,9417
109
109
  micrOS/source/Notify.py,sha256=jVf7wg7b7ehuh12A8tlYz5ZU00NQEgpVuTK0lN6cNcY,2645
110
110
  micrOS/source/Scheduler.py,sha256=K6fw807UJnOmbfzgeJQGzGbTL4s2sTIB120ZcS5qrLs,9648
111
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
112
+ micrOS/source/Shell.py,sha256=hgvP41HinmQKBW7cbiit9jkNZcTyZ6jucJnoO6htxGo,12896
113
+ micrOS/source/Tasks.py,sha256=dl5Vol9WY5bnmsPr-DdLCn1So2W9mStHw16F-JeYPww,23244
114
114
  micrOS/source/Time.py,sha256=vTl8-sL-iO4l9eZMVCHTJ6oUwfhPiB1VHXTrrg-l59Y,6344
115
115
  micrOS/source/Types.py,sha256=3O_Vb1jN92RPtvgbV8ui6_iFzDOD-BUzVXlPB7PgmM4,3507
116
- micrOS/source/Web.py,sha256=BAp7mFYzJwmzUGFc6O7DZDDKKPGjgW5EY5lRcfx-SU0,8893
116
+ micrOS/source/Web.py,sha256=KxRc6zt_8acAJyL9uv2JW2c27qtzYgi673ob0kxfxpE,8933
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
@@ -127,12 +127,12 @@ micrOS/source/urequests.py,sha256=p7_8X9SrWk4wXhAZKpVPd-PZBHHToX8b1gwhFEi96FM,90
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
- micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=qugnjE4Q1mMrR3VJaMhq71hsOoWLuft2lwv4O8Bo6ts,10366
130
+ micrOS/source/__pycache__/Common.cpython-312.pyc,sha256=DbSNgmSjJTDfmDemMp3Us-0uDCm2bxE000P7a-6ye3s,10455
131
131
  micrOS/source/__pycache__/Logger.cpython-312.pyc,sha256=CCdkMRG0lBy7nVsc4DHwdRK0Ap0Mu9yB5fa_Hxx-RHY,5075
132
132
  micrOS/source/__pycache__/Server.cpython-312.pyc,sha256=xy1ImeXPtGhtYlAWpuWaxLmJO2nLVGdefOuqltABR9k,20615
133
- micrOSDevToolKit-2.9.10.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
133
+ micrOSDevToolKit-2.10.2.data/scripts/devToolKit.py,sha256=4GutIOErF1ny0HSNWQZzEneZdUWhSdqKPBjpRFTr5do,11192
134
134
  toolkit/DevEnvCompile.py,sha256=H19-60ZpHzP30C-wqR5QTzMDHHpWrTk0Uzh--TZHxvw,12148
135
- toolkit/DevEnvOTA.py,sha256=OkEtO5cpym-kEgGpE3TQbyZ-nQOzZpGzbFdbgCibe7I,25356
135
+ toolkit/DevEnvOTA.py,sha256=vNa827MOhbNQbeMGGu72YmGlNN_Tm9D6Trdnz3YGpyU,25499
136
136
  toolkit/DevEnvUSB.py,sha256=G-Ram-OR27flvVhul8J_ObiMY07Wjvom6Prc4dTfkmo,34108
137
137
  toolkit/Gateway.py,sha256=OSsJYeAmFhNnb1uu2bjLvZzE3A32O7lza8-NxlGr1DQ,25335
138
138
  toolkit/LM_to_compile.dat,sha256=TmcSZcPNVtJKWdyMxY1YtHPnqbD6zcI7B7FISbr6as4,579
@@ -143,7 +143,7 @@ toolkit/img_stream.html,sha256=ZGyrUgpi-JhMl4euS-TTjwwGrg66a2pGUQCopWiveds,5135
143
143
  toolkit/index.html,sha256=agTgT1d4FH8l2h47Hfb4Lv061BW9shsCAgq1abO5hlI,10998
144
144
  toolkit/micrOSdashboard.py,sha256=SOBzGU1b-NIn40GMd2gE01Fuo8HZP5d1XyVG24RkPeA,54433
145
145
  toolkit/micrOSlint.py,sha256=HEv6q32Iy5FHx3tn_yA-iMJEeElOVNJIVN51sshv1go,25142
146
- toolkit/socketClient.py,sha256=aDKQl_I422KFoy0RcjPBIcHXgrBPwLRn9MpxuXEtUF8,18610
146
+ toolkit/socketClient.py,sha256=lZ67lpE3IcZPpVlUjxpxdYNfLuzbLY0QgzOjTpoXalg,18556
147
147
  toolkit/dashboard_apps/BackupRestore.py,sha256=udhuFpCawO0mwyiN4vFMfV8wONqHnUjYvL0udJzkq44,5897
148
148
  toolkit/dashboard_apps/CCTDemo.py,sha256=oV7k6sxepOxEa7tBNcuK5IHgKnv01sIQRPvUljic8NI,1125
149
149
  toolkit/dashboard_apps/CCTTest.py,sha256=saU4L8gOst31bno44vlwaeSzqrIBppW2DrZf2KV7_4o,3641
@@ -159,7 +159,7 @@ toolkit/dashboard_apps/RGBTest.py,sha256=QIky1Ts87h52VS9vHs3rYoEYvwFX02BlJxzK-uE
159
159
  toolkit/dashboard_apps/RoboArm.py,sha256=fqsBFTLEKXLyuZtZhbsNMNLCVtJw3gHWE-37EzjRttw,1814
160
160
  toolkit/dashboard_apps/SED_test.py,sha256=hQG8F2isZvCEsb0EvUdvcowLtJ86vrhLMOvpe9EPcJM,2703
161
161
  toolkit/dashboard_apps/SensorsTest.py,sha256=h6Sqz9HzjUawKuvxBPMltgWAycIXUUqlLANZqlF030M,1472
162
- toolkit/dashboard_apps/SystemTest.py,sha256=NaqTUWA5ub_8dHZQBrcO1n7nU95aPKVIjEn8nbaa2mI,25335
162
+ toolkit/dashboard_apps/SystemTest.py,sha256=J87ZSWP-QI5qx0EBSFZwS7f6nsZ7bhdPFaqtKfNjDcI,25740
163
163
  toolkit/dashboard_apps/Template_app.py,sha256=1OLO-xA6qNKyDCj-J7nHkA3Eis4ZKnHfhMcaSqHNX4A,758
164
164
  toolkit/dashboard_apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
165
  toolkit/dashboard_apps/_app_base.py,sha256=wNurhv7AT2imsiVO3rkwPlRkss-2UQU9KsRoXjeb7rk,1007
@@ -168,6 +168,7 @@ toolkit/dashboard_apps/_micPlotting.py,sha256=zYXhyYKyyA_13ZQybccO4a6t8uyaFJNxlh
168
168
  toolkit/dashboard_apps/_presencePlotting.py,sha256=cHWR_4YqbNLB6d4mmHjGCYb3Dg5rqWIyu2lpnz0l-Hs,3737
169
169
  toolkit/dashboard_apps/uLightDemo.py,sha256=Q8PL56coysM71qV9SCU05yTyCsAMhtzDSjVeg_CkBtc,3163
170
170
  toolkit/lib/LocalMachine.py,sha256=m5xaWRx1PumKFLQ5_O8vVxC4NTclF1h9J3__pK8N-C4,18734
171
+ toolkit/lib/Repository.py,sha256=DVoS67rCJzHtJvPTZt-r4Gkmt28ZuC7UYdSAuczsPs0,2440
171
172
  toolkit/lib/SafeInput.py,sha256=gMXsMalPcFCwlN6niJlG2twOHfoGsEgHL9-Uh2YQJHE,855
172
173
  toolkit/lib/SearchDevices.py,sha256=1nnJDwo_U5cCN2xsdNUT6EQqdt2fW-qAWXWzyzXzyyc,5813
173
174
  toolkit/lib/SerialDriverHandler.py,sha256=Zn0zeq4mshTMVc6fzycvrOZiKt6w6YOxJcTWw3BMN2M,7344
@@ -175,11 +176,12 @@ toolkit/lib/TerminalColors.py,sha256=Ly_8o9-eBmka1dqA2M3DBlcd1zvCCO2K_BnQ1XbqxcE
175
176
  toolkit/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
177
  toolkit/lib/file_extensions.py,sha256=0DpayBGjKQg7y2ZGJXf5wVPnre_4C5j-7YIViNGvYz4,372
177
178
  toolkit/lib/macroScript.py,sha256=DQR8cFoks7fa0dgRUfGhTpEdUJWNQ1vikRoqukRKx14,14014
178
- toolkit/lib/micrOSClient.py,sha256=fLRkyOjbYQkFzcqeC3yDLa4IymarSOitbxJERa_jeHI,18752
179
+ toolkit/lib/micrOSClient.py,sha256=q1zN3nqW9t36sHqYt0fKsP61tPSC-u21-7WYqbJcO0Q,19346
179
180
  toolkit/lib/micrOSClientHistory.py,sha256=EyCqbFeMy940bfXq4Yfu8dcvb7GnBvuHHxOAIgmW1FQ,4736
180
181
  toolkit/lib/pip_package_installer.py,sha256=jpC-y1KR72_PJlqyUR6-U5b6l1szVqnIZ4nrSgUsOTM,4262
181
182
  toolkit/simulator_lib/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
182
183
  toolkit/simulator_lib/IO_darwin.py,sha256=f8HOfQKJvniShvjpBe6f4nisr6oJd9SnvxPsbdNIGQk,2336
184
+ toolkit/simulator_lib/aioespnow.py,sha256=NPAX85zLCb6ZJVW8n18tULV4NbHK1IzHYMR43QXAxUQ,480
183
185
  toolkit/simulator_lib/camera.py,sha256=BIyj6dF_PoszzTZ3Ea_-gsJ3aly_xGy5NMKeJGVSbFI,1485
184
186
  toolkit/simulator_lib/dht.py,sha256=WB56YlZJYop4a2wnFWyWSI9FsPC_zH885a-A4rDNGKo,278
185
187
  toolkit/simulator_lib/dotstar.py,sha256=Le6RvSAz3byjiF2RX4JWB8LVsNQtfMqPfM47fg-YFzs,95
@@ -207,6 +209,7 @@ toolkit/simulator_lib/view01.jpg,sha256=YI_faDB9yyFLzJKTCu1nW4XXxyvGPLfgdYtzW7vm
207
209
  toolkit/simulator_lib/view02.jpg,sha256=7EWtt8StDpLw3yDMG1nD8XjJgsC0ixpAq3SwPCb842k,35580
208
210
  toolkit/simulator_lib/webrepl.py,sha256=owxkwtNlV9zrE2inPtoLCc8U2QgmZOhxpcsX3wMPbik,37
209
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
210
213
  toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc,sha256=hzK7NNmBQsIigz7Gof9FNblwVnP4Ffc3cILPLI-US6w,3152
211
214
  toolkit/simulator_lib/__pycache__/dht.cpython-312.pyc,sha256=-02X-tLNXpZIb2DhJI_-Qi1m-MmddzbQIpZUZVH9HZk,946
212
215
  toolkit/simulator_lib/__pycache__/dht.cpython-39.pyc,sha256=YwCF50_3cJ9QvAaVa5Mkl0EeASSIr8gwPtREzFcCEmk,878
@@ -270,7 +273,7 @@ toolkit/user_data/webhooks/macro.py,sha256=E_Um6fc9P6sBKvChyrKgksHmBmaFUuq_Xxy8I
270
273
  toolkit/user_data/webhooks/template.macro,sha256=XikSl3FsD6W9pUx3sqavM5tWIMBquFx9f3bh_CB8k-A,631
271
274
  toolkit/user_data/webhooks/template.py,sha256=WssXY2BDKIwvObq0SpFCjjpEGzgbLlozFTug4ANswWM,342
272
275
  toolkit/workspace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
- toolkit/workspace/precompiled/Common.mpy,sha256=2bUIMJPc9AAVGtgzI_6DaNqF6T-kLyyd4Ys_yjrgI9A,2140
276
+ toolkit/workspace/precompiled/Common.mpy,sha256=30q9Yqa0QgfEaLk_Xb85XizYbBE8HPcmR-gEfkVWzDI,2151
274
277
  toolkit/workspace/precompiled/Config.mpy,sha256=A9ew69drKFA0SbfIvuTdeaXZQSvmwX0gDlnQa_8i-IE,3082
275
278
  toolkit/workspace/precompiled/Debug.mpy,sha256=OpoE-QcllAnASSnAC0V364G7zHjbYI_0jSPzPRBhWkI,1823
276
279
  toolkit/workspace/precompiled/Espnow.mpy,sha256=6201uzjatkJ9QHh7JXiLoX_mPxJCMJ90H4v6vgduc0Q,1834
@@ -283,7 +286,7 @@ toolkit/workspace/precompiled/IO_m5stamp.mpy,sha256=cn991tZyBZd4W3iO10EiLW29g8mV
283
286
  toolkit/workspace/precompiled/IO_qtpy.mpy,sha256=eHy5zmBlv3Yn6KgubYEBMWeC8OAdQRWtfJPRoppJnaE,872
284
287
  toolkit/workspace/precompiled/IO_rp2.mpy,sha256=eODuSmUmahkSp__Fb3j0M6dJdhhnC5Xq3agOMFo5pwk,60
285
288
  toolkit/workspace/precompiled/IO_tinypico.mpy,sha256=GS1NSeCBed-xLa3ZpVrk8UQONlgMgaukuH6BzTcDbFU,559
286
- toolkit/workspace/precompiled/InterConnect.mpy,sha256=tybNHMajxI6nQQOMjIHTcPSiCq2AYJE1OCZNZ15jN-c,2342
289
+ toolkit/workspace/precompiled/InterConnect.mpy,sha256=kvjpZZ4DYu-BAX2aK-Kuby-iTB9gh58CYG5HP4bTyCU,2362
287
290
  toolkit/workspace/precompiled/Interrupts.mpy,sha256=5lOWBB8qoF3YIOzNem4_9W-NWxCZsSbtGTusfUsql2E,2132
288
291
  toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy,sha256=1QPhQTw3YijVSh0pkaxCfEAjb1M5FAafyGe_J7xLUJM,878
289
292
  toolkit/workspace/precompiled/LM_L9110_DCmotor.py,sha256=sf6TtuXRrfElhm_9rbp4bPjnKGTwO3PnuXVCC5Ob7Us,1847
@@ -303,26 +306,26 @@ toolkit/workspace/precompiled/LM_dimmer.mpy,sha256=dRdDr3WfFy-um3-fRiK4IuZdwBTUD
303
306
  toolkit/workspace/precompiled/LM_distance.mpy,sha256=6VoSsyd-hQ4P16USDnSqpq5gpi0v2WbseeHnTFJxuJA,1506
304
307
  toolkit/workspace/precompiled/LM_ds18.mpy,sha256=1TYvc8hj1ypE1v52l6u83e8XqUi0_Rjwil-BnYXDSKI,644
305
308
  toolkit/workspace/precompiled/LM_esp32.py,sha256=yUIMWsfimCAhgyV4pT4sh-kqE_mDL83cmAZji_2uFpI,1738
306
- toolkit/workspace/precompiled/LM_espnow.py,sha256=0ihRds2Uzl5neSfVHxFP4Zdj9o66fN-NPqKe2iMYblw,475
309
+ toolkit/workspace/precompiled/LM_espnow.py,sha256=Tto5JGnhbqyKT0hzDlJ_G-o_34dVf0CIaiMPbP-xbHU,1070
307
310
  toolkit/workspace/precompiled/LM_gameOfLife.mpy,sha256=mAOivt472fRGOcpgx6xShyfbrpT0GTbLhT2vujncS4w,2051
308
311
  toolkit/workspace/precompiled/LM_genIO.mpy,sha256=F9utR5Ng-QuTq5R5ISvYPO8xASEdSnndc1hFfxcNWOE,1722
309
312
  toolkit/workspace/precompiled/LM_haptic.mpy,sha256=46BgYkjC3AdNaJaKflFnY0oEUsd9qg6yGquX7jyFLnM,1276
310
313
  toolkit/workspace/precompiled/LM_i2c.py,sha256=WKuKxC85TKBSAT8SO4cm8OCPyceAsohHCQFTmomp8iA,1533
311
314
  toolkit/workspace/precompiled/LM_i2s_mic.mpy,sha256=lTYjVoLA8QF5JKauAY67Lugl0mhlBabwQwimO9EmOIk,3989
312
- toolkit/workspace/precompiled/LM_intercon.mpy,sha256=tmumM6s9WZquQ9dpvXb7NGBdJOC5PNniDbIXUHu5Bmo,621
315
+ toolkit/workspace/precompiled/LM_intercon.mpy,sha256=jlQECkdZ8LUGQ3yuwrW2gfjFYZhZKEVZRdAuNdWAGjA,621
313
316
  toolkit/workspace/precompiled/LM_keychain.mpy,sha256=cZVyHNny2uNsWfTNaGWBtZUr5bqQ76wEyFcxWx3Nagg,3627
314
317
  toolkit/workspace/precompiled/LM_ld2410.mpy,sha256=H7XHzLPkpyE-pRFZqBKn6M-Y5RtpNiV9prOPcmfZ6zg,2581
315
- toolkit/workspace/precompiled/LM_light_sensor.mpy,sha256=zGIj5mgDh0hTb1ih7WTjT0jNj0P-LLm6H0NlCcjqn5I,1511
318
+ toolkit/workspace/precompiled/LM_light_sensor.mpy,sha256=FQsOIOaioYpzBETO_2EM5NrOGGR15_-C44Fd5uz14eM,1538
316
319
  toolkit/workspace/precompiled/LM_neoeffects.mpy,sha256=lO0sxfiAgyASgYNjX3c_usY3TR9WeT3F2NHJkiJ182U,3091
317
320
  toolkit/workspace/precompiled/LM_neopixel.mpy,sha256=3o4Jvmc3Knr30VJ4b7JebpUsU7dBdcYBZzRD_9a4zBI,3663
318
321
  toolkit/workspace/precompiled/LM_oled.mpy,sha256=KQj4jfLwlmx2dT_GWbFzZE6FlMRPUgJvri5XbnSIod0,3154
319
322
  toolkit/workspace/precompiled/LM_oled_sh1106.mpy,sha256=0cQpu1MPkrPxvd1Fvln9c9lq9qPV6oi8iGNTZM4YbIY,3761
320
- toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=toUOIvcp8zIjsckWLMVNZK8i2KIvpLH2Xy8ORj0aPsI,6821
321
- toolkit/workspace/precompiled/LM_oledui.mpy,sha256=bSNnW6rlts7KM3YY-dTV34gG5r5zJMYvsqQorPb191E,11555
323
+ toolkit/workspace/precompiled/LM_oled_ui.mpy,sha256=nwYPXJ2Q_ogZCp1PcWlAXPzj9OlPWc82Okc1dcn-kVk,6865
324
+ toolkit/workspace/precompiled/LM_oledui.mpy,sha256=T7Fy0o_8H6h7oiVRYK43BuVb-RKZOyeJGUvHzeWHorQ,11562
322
325
  toolkit/workspace/precompiled/LM_pacman.mpy,sha256=njOwVrPKOtC4J5kRCtwV8E8hHTTTt7HzqV121HmCsxE,3507
323
326
  toolkit/workspace/precompiled/LM_pet_feeder.py,sha256=ILrozpnq2_ckkVDUROysMWRksKjflsKpIHvgHdvn-JA,2572
324
327
  toolkit/workspace/precompiled/LM_ph_sensor.py,sha256=QBVF6cHX3l9jsKcbEZprpyFtwRVLbup-_A7RmRYsdp8,1355
325
- toolkit/workspace/precompiled/LM_presence.mpy,sha256=xO3hw8VAEl7tqHM014Sb7JYOd2qr8TsLPFG-PzrAWSc,2742
328
+ toolkit/workspace/precompiled/LM_presence.mpy,sha256=vcu_qUj6oU-Cp_jepQRio3BxPe0SQFTBYkJex9JCcDM,2754
326
329
  toolkit/workspace/precompiled/LM_rencoder.py,sha256=9w00JP8UKC_GEKr18xgZ5axX9xc_wVeR9XlWpVR2Qzw,3973
327
330
  toolkit/workspace/precompiled/LM_rest.mpy,sha256=U-2Pihzos6A2xLtcE33qWW6qtoYLH2UM_ZN8LmRrexg,1036
328
331
  toolkit/workspace/precompiled/LM_rgb.mpy,sha256=o12V42r67SvMkhLMINbUVAguShK_GN7AzqmtX4fOqCE,3467
@@ -335,8 +338,8 @@ toolkit/workspace/precompiled/LM_servo.mpy,sha256=S1mH7tS6WK-vclAPQrWK46_IB2GlBZ
335
338
  toolkit/workspace/precompiled/LM_sound_event.mpy,sha256=QJ5xmKtK2sfA9lyROJRRpSAjypl10MkwLdW-QsXhRf8,7384
336
339
  toolkit/workspace/precompiled/LM_stepper.mpy,sha256=20Jpee74AjyjjMaHmgKbZvU5phcOvh8nQNSUDCAk_KE,1466
337
340
  toolkit/workspace/precompiled/LM_switch.mpy,sha256=58sjZQokfBYBZlplFQB5-t-3O-2mlsE3NXjvJ5FgD_U,2237
338
- toolkit/workspace/precompiled/LM_system.mpy,sha256=Desld_4SY-bsOHdrNTx-jjqIx809cwuVnnx68HwZSZk,2802
339
- toolkit/workspace/precompiled/LM_telegram.mpy,sha256=5Y-YrdYjBLN7gmIqlE6WhbWhA3Dak4IVd7j_FQYOQho,4877
341
+ toolkit/workspace/precompiled/LM_system.mpy,sha256=Z5f_YXa9-XFTFOjl4ndE2zTrVETFtF5oG2ht3GqcejA,2831
342
+ toolkit/workspace/precompiled/LM_telegram.mpy,sha256=NhkPz77bvvXXXJhZAsN7WbKn40fzZlHPWQIDWPe4uCs,5080
340
343
  toolkit/workspace/precompiled/LM_tinyrgb.mpy,sha256=qWR-e8DXuzmstxQlyic0YjwFaGiBBBWpf57Wyn1jjFc,1016
341
344
  toolkit/workspace/precompiled/LM_trackball.mpy,sha256=eDVf55dNJXd0Mzg1MZH0talUloPEGFNccE08vwbgn0g,3471
342
345
  toolkit/workspace/precompiled/LM_veml7700.mpy,sha256=NxOvdbrqyyhhwjm2d2dfrJK0dTK3NiP5kQ5GDXjXgq0,1953
@@ -345,11 +348,11 @@ toolkit/workspace/precompiled/Network.mpy,sha256=WtpvhGB2bvEe94dAHV40fpEyk-Fi0D6
345
348
  toolkit/workspace/precompiled/Notify.mpy,sha256=ioeDVMh9qBtACWQMASrrhGkSfp1KKUN6d2rt0NpbClo,974
346
349
  toolkit/workspace/precompiled/Scheduler.mpy,sha256=ctCj7FfXj5TchPPxe_9dmnTXWN88egtbAnmJ0N9u_1w,2202
347
350
  toolkit/workspace/precompiled/Server.mpy,sha256=dtSXLYpBcdz0DveB_S6nos46h-m6hwlQ-38G-iVQwKQ,4762
348
- toolkit/workspace/precompiled/Shell.mpy,sha256=-HCVQVnKCyKf1k-DsR_-MxN4PladJl3cMA6JwtRRxsA,4385
349
- toolkit/workspace/precompiled/Tasks.mpy,sha256=vL3tDV7Us3Wg7qtZA8ovqEsvLndOmu14GHcZF2_DtrY,6253
351
+ toolkit/workspace/precompiled/Shell.mpy,sha256=tmtwNjJdCoKqrNZfBYW7JN9jt-XS6TEf7BTtApuICDw,4620
352
+ toolkit/workspace/precompiled/Tasks.mpy,sha256=RfYvJZwvY1wAOT3CWHGTlE9B8F-nZMmKgTAc3WElF5M,6459
350
353
  toolkit/workspace/precompiled/Time.mpy,sha256=AZAtFj-l2ERKUpWgQS4gyq_XUx1ddy4ZTTgpRxbWK9M,2773
351
354
  toolkit/workspace/precompiled/Types.mpy,sha256=LssRbPgvsWuR4d2m3R7VMIvsnkVp9nN0ltwaY2wGop8,1401
352
- toolkit/workspace/precompiled/Web.mpy,sha256=RuZNz2Yfe3MGoMV09nRLUS0MQ2CoJHHBVh7FnC9dYY4,3116
355
+ toolkit/workspace/precompiled/Web.mpy,sha256=-YbLZ4LeJtsXY1o2a2V7e3JBlqi9XldMxQjnbl_ps-g,3133
353
356
  toolkit/workspace/precompiled/_mpy.version,sha256=Kik-fvRGfWAmpEjKdJLq7nPOqYR_jVgB0aiXZ8LMvMA,6
354
357
  toolkit/workspace/precompiled/dashboard.html,sha256=xBZOZ8AMO55QheuZ41Sl0Arvb44qnnai9D67A8YxlVE,2641
355
358
  toolkit/workspace/precompiled/index.html,sha256=cv0hap5bhBoRR_z1KALC3fbjH2rQZY9JJPfF-dxVclw,1656
@@ -364,8 +367,8 @@ toolkit/workspace/precompiled/urequests.mpy,sha256=-JDY-DOtJrGdwQo0-P809zZu-cJBR
364
367
  toolkit/workspace/precompiled/ustyle.css,sha256=P-s8ENwAcWoZi5bocrK3_kVzEjaRFKtFvEF6JRh4MBY,1429
365
368
  toolkit/workspace/precompiled/uwidgets.js,sha256=BGeUSbNHn6PClgIgIE6QszwQVJ6j7lzgCBwvIX8cYgo,6631
366
369
  toolkit/workspace/precompiled/uwidgets_pro.js,sha256=gbkk3SVttEVvDCwde-pJhAh4k7GuCFPdcWNq32pcKPE,3639
367
- micrOSDevToolKit-2.9.10.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
368
- micrOSDevToolKit-2.9.10.dist-info/METADATA,sha256=YVrj02zAhSoulyDir7LmXfcWVUWoAIUhzxc1nN6aBsQ,53805
369
- micrOSDevToolKit-2.9.10.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
370
- micrOSDevToolKit-2.9.10.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
371
- micrOSDevToolKit-2.9.10.dist-info/RECORD,,
370
+ micrOSDevToolKit-2.10.2.dist-info/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
371
+ micrOSDevToolKit-2.10.2.dist-info/METADATA,sha256=WM1uEW7xxmdoHqnDNsWP3skrTFhWrfT-S8yQV7LpLO0,55150
372
+ micrOSDevToolKit-2.10.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
373
+ micrOSDevToolKit-2.10.2.dist-info/top_level.txt,sha256=rOGOIXqLBdGZAoDTiLdZ9B_leFB7bMv7YabLwuIc2bc,25
374
+ micrOSDevToolKit-2.10.2.dist-info/RECORD,,
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
  """
@@ -426,11 +426,22 @@ def check_intercon(host=None):
426
426
  break
427
427
  return _state, _output
428
428
 
429
+ def run_intercon_hello(tout):
430
+ nonlocal host
431
+ cmd_list = [f'hello >>{host}']
432
+ _output = CLIENT.execute(cmd_list, tout=8)
433
+ _new_intercon = True
434
+ if "hello:" in _output[1]: # TODO: remove...
435
+ # LEGACY WAY: FALLBACK
436
+ cmd_list = ['intercon sendcmd "{}" "hello" >json'.format(host)]
437
+ _output = CLIENT.execute(cmd_list, tout=tout)
438
+ _new_intercon = False
439
+ return _new_intercon, _output
440
+
429
441
  info_msg = '[ST] Check device-device connectivity'
430
442
  print(info_msg)
431
443
  host = 'test.local' if host is None else host
432
- cmd_list = ['intercon sendcmd "{}" "hello" >json'.format(host)]
433
- output = CLIENT.execute(cmd_list, tout=8)
444
+ new_intercon, output = run_intercon_hello(tout=8)
434
445
  output = _convert_return_to_dict(output)
435
446
  device_was_found = False
436
447
  if output[0] is False or output[1] is None:
@@ -443,7 +454,7 @@ def check_intercon(host=None):
443
454
  elif len(output[1]) > 1 and "hello" in output[1]['verdict']:
444
455
  response_state, response = _get_intercon_output(output[1]['tag'])
445
456
  # Valid input on online device
446
- output = "Device was found: {}:{}".format(host, f"{output}: {response}")
457
+ output = "Device was found: {}:{} version: {}".format(host, f"{output}: {response}", "NEW" if new_intercon else "LEGACY")
447
458
  state = True & response_state, f'{info_msg}:\n\t\t{output}'
448
459
  device_was_found = True
449
460
  else:
@@ -451,13 +462,13 @@ def check_intercon(host=None):
451
462
 
452
463
  if device_was_found:
453
464
  # DO Negative testing as well
454
- cmd_list = ['intercon sendcmd "notavailable.local" "hello" >json']
455
- output_neg = CLIENT.execute(cmd_list, tout=15)
465
+ host = "notavailable.local"
466
+ _, output_neg = run_intercon_hello(tout=20)
456
467
  output_neg = _convert_return_to_dict(output_neg)
457
468
  state_neg = False, output_neg
458
469
  if len(output_neg[1]) > 1 and "hello" in output_neg[1]['verdict']:
459
470
  response_state, response = _get_intercon_output(output_neg[1]['tag'])
460
- output_neg = f'Device was not found: "notavailable.local":{output_neg}: {response}'
471
+ output_neg = f'Device was not found: {host}":{output_neg}: {response}'
461
472
  state_neg = True & response_state, output_neg
462
473
  return state[0] & state_neg[0], "{}\n\t\tNegative test: {}".format(state[1], state_neg[1])
463
474
  return state
@@ -0,0 +1,64 @@
1
+ import requests
2
+ import zipfile
3
+ import io
4
+ import os
5
+
6
+ try:
7
+ from .LocalMachine import CommandHandler
8
+ except:
9
+ from LocalMachine import CommandHandler
10
+
11
+
12
+ def git_clone_archive(url):
13
+ """
14
+ Clone git repo as archive (without git installed)
15
+ Note: No git history, it is just a snapshot
16
+ :param url: https://github.com/micropython/webrepl
17
+ """
18
+ print(f"CLONE ARCHIVE: {url}")
19
+ url = url.replace(".git", "") if url.endswith(".git") else url
20
+ # URL of the repository zip archive (adjust branch name if needed)
21
+ target_name = url.split("/")[-1].strip()
22
+ zip_url = f"{url}/archive/refs/heads/master.zip"
23
+ response = requests.get(zip_url)
24
+ if response.status_code == 200:
25
+ # Read the downloaded content as a binary stream
26
+ with zipfile.ZipFile(io.BytesIO(response.content)) as z:
27
+ for member in z.infolist():
28
+ # Each member's filename is something like 'webrepl-master/filename'
29
+ # Remove the first directory component
30
+ parts = member.filename.split('/', 1)
31
+ if len(parts) > 1:
32
+ relative_path = parts[1]
33
+ else:
34
+ relative_path = parts[0]
35
+
36
+ # Build the target path relative to the current directory
37
+ target_path = os.path.join(target_name, relative_path)
38
+
39
+ if member.is_dir():
40
+ os.makedirs(target_path, exist_ok=True)
41
+ else:
42
+ os.makedirs(os.path.dirname(target_path), exist_ok=True)
43
+ with z.open(member) as source, open(target_path, 'wb') as target_file:
44
+ target_file.write(source.read())
45
+ print(f"\tRepository extracted successfully: {target_name}")
46
+ return 0, zip_url, ""
47
+ print(f"\tFailed to download repository archive: {target_name}")
48
+ return 1, zip_url, ""
49
+
50
+
51
+ def git_clone(url):
52
+ """
53
+ Git clone - subshell call
54
+ - git is needed to be preinstalled
55
+ """
56
+ print(f"GIT CLONE: {url}")
57
+ target_name = url.split("/")[-1].strip().replace(".git", "")
58
+ command = 'git clone {url} {name}'.format(name=target_name, url=url)
59
+ exitcode, stdout, stderr = CommandHandler.run_command(command, shell=True)
60
+ if exitcode == 0:
61
+ print(f"\tRepository was cloned successfully: {target_name}")
62
+ else:
63
+ print(f"\tRepository clone failed: {target_name}")
64
+ return exitcode, stdout, stderr
@@ -85,10 +85,22 @@ class micrOSClient:
85
85
 
86
86
  @staticmethod
87
87
  def validate_ipv4(str_in):
88
- pattern = "^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"
89
- if bool(re.match(pattern, str_in)):
90
- return True
91
- return False
88
+ parts = str_in.split(".")
89
+ # An IPv4 address must have exactly 4 parts
90
+ if len(parts) != 4:
91
+ return False
92
+ for part in parts:
93
+ # Each part must be a number and not empty
94
+ if not part.isdigit():
95
+ return False
96
+ num = int(part)
97
+ # Each number must be in the valid range (0-255)
98
+ if num < 0 or num > 255:
99
+ return False
100
+ # Prevents leading zeros (e.g., "01" is invalid)
101
+ if part != str(num):
102
+ return False
103
+ return True
92
104
 
93
105
  def __connect(self, timeout):
94
106
  # Server connection - create socket
@@ -312,13 +324,20 @@ class micrOSClient:
312
324
 
313
325
  history = load_command_history(self.telnet_prompt) # History: Beta feature
314
326
  print(self.telnet_prompt, end="")
327
+ is_empty = False # Empty input support
315
328
  while True:
316
329
  try:
317
- cmd = input() # CANNOT contain prompt - it is coming back from response data
318
- # send command
330
+ # INPUT HANDLING
331
+ cmd = input(self.telnet_prompt if is_empty else '') # CANNOT contain prompt - it is coming back from response data
332
+ if len(cmd.strip()) == 0:
333
+ is_empty = True
334
+ continue
335
+ is_empty = False
336
+ # SEND COMMAND
319
337
  output = self.send_cmd(cmd, timeout=timeout, stream=True)
320
338
  if not (history is None or output is None) and "Shell: for hints type help." not in output: # History: Beta feature
321
339
  history.add_history(cmd)
340
+ # OUTPUT HANDLING
322
341
  if 'Bye!' in str(output):
323
342
  break
324
343
  if output is None:
@@ -0,0 +1,28 @@
1
+
2
+
3
+ class AIOESPNow:
4
+
5
+ def __init__(self):
6
+ self._active = False
7
+ self.peers_table = None
8
+
9
+ def active(self, state=None):
10
+ if state is not None:
11
+ self._active = state
12
+ return self._active
13
+
14
+ def stats(self):
15
+ pass
16
+
17
+ def add_peer(self, mac):
18
+ pass
19
+
20
+ async def asend(self, mac, full_msg):
21
+ pass
22
+
23
+ def send(self, mac, full_msg):
24
+ pass
25
+
26
+ def __iter__(self):
27
+ return (i for i in range(0, 3))
28
+
toolkit/socketClient.py CHANGED
@@ -215,9 +215,8 @@ class ConnectionData:
215
215
  # Generate line printout
216
216
  base_info = "{uid}{spr1}{fuid}".format(uid=uid, spr1=spacer1, fuid=fuid)
217
217
  spacer1 = " " * (spr_offset2 - len(base_info))
218
- data_line_str = "{base}{spr2}{ip}\t{stat}\t\t{version}\t\t{elapt}" \
219
- .format(base=base_info, spr2=spacer1, ip=ip,
220
- stat=is_online, version=version_data, elapt=elapsed_time)
218
+ spacer2 = "\t" if len(version_data) > 7 else "\t\t"
219
+ data_line_str = f"{base_info}{spacer1}{ip}\t{is_online}\t\t{version_data}{spacer2}{elapsed_time}"
221
220
  return data_line_str, online_ip
222
221
  return None
223
222
 
Binary file
@@ -1,23 +1,49 @@
1
1
  import Espnow
2
2
 
3
3
  def load():
4
+ """
5
+ Initialize ESPNOW protocal
6
+ """
4
7
  return Espnow.initialize()
5
8
 
6
- def send(peer, msg='ping'):
9
+ def send(peer, msg='modules'):
10
+ """
11
+ Send message to peer (by mac address)
12
+ :param peer: mac address of espnow device
13
+ :param msg: message string/load module call
14
+ """
7
15
  return Espnow.espnow_send(peer, msg)
8
16
 
9
17
  def start_server():
18
+ """
19
+ Start ESPNOW server/listener
20
+ - this can receive espnow messages
21
+ - it includes Load Module execution logic (beta)
22
+ """
10
23
  return Espnow.espnow_server()
11
24
 
12
25
  def stats():
26
+ """
27
+ Get ESPNOW stats
28
+ """
13
29
  return Espnow.stats()
14
30
 
15
31
  def add_peer(peer):
32
+ """
33
+ Add ESPNOW peer to known hosts
34
+ - It is needed before first send(...)
35
+ """
16
36
  now = Espnow.initialize()
17
37
  return Espnow.add_peer(now, peer)
18
38
 
19
39
  def mac_address():
40
+ """
41
+ Get ESPNOW compatible mac address
42
+ """
20
43
  return Espnow.mac_address()
21
44
 
22
45
  def help():
46
+ """
47
+ [beta] ESPNOW sender/receiver with LM execution
48
+ """
23
49
  return 'load', 'send <peer> "ping"', 'start_server', 'add_peer <peer>', 'stats', 'mac_address'
Binary file
Binary file
Binary file
Binary file
Binary file