micrOSDevToolKit 2.9.1__py3-none-any.whl → 2.26.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 (368) hide show
  1. env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  2. env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +17 -1
  3. micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
  4. micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
  5. micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
  6. micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
  7. micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
  8. micrOS/micropython/{esp32s3-20241129-v1.24.1.bin → esp32s3-4MBflash-20241129-v1.24.1.bin} +0 -0
  9. micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
  10. micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
  11. micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
  12. micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
  13. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +167 -163
  14. micrOS/source/Auth.py +37 -0
  15. micrOS/source/Common.py +361 -116
  16. micrOS/source/Config.py +32 -22
  17. micrOS/source/Debug.py +50 -94
  18. micrOS/source/Espnow.py +377 -100
  19. micrOS/source/Files.py +207 -0
  20. micrOS/source/Hooks.py +48 -20
  21. micrOS/source/InterConnect.py +126 -42
  22. micrOS/source/Interrupts.py +6 -6
  23. micrOS/source/Logger.py +63 -26
  24. micrOS/source/Network.py +41 -21
  25. micrOS/source/Notify.py +48 -22
  26. micrOS/source/Pacman.py +326 -0
  27. micrOS/source/Scheduler.py +14 -54
  28. micrOS/source/Server.py +67 -69
  29. micrOS/source/Shell.py +99 -91
  30. micrOS/source/Tasks.py +141 -95
  31. micrOS/source/Time.py +19 -18
  32. micrOS/source/Types.py +53 -9
  33. micrOS/source/Web.py +381 -76
  34. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  35. micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
  36. micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
  37. micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  38. micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
  39. micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  40. micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
  41. micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
  42. micrOS/source/config/_git.keep +0 -0
  43. micrOS/source/helpers.py +132 -0
  44. micrOS/source/micrOS.py +17 -7
  45. micrOS/source/micrOSloader.py +5 -12
  46. micrOS/source/microIO.py +44 -20
  47. micrOS/source/modules/IO_esp32c6.py +38 -0
  48. micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +37 -1
  49. micrOS/source/{IO_m5stamp.py → modules/IO_m5stamp.py} +35 -1
  50. micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +22 -17
  51. micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +38 -0
  52. micrOS/source/modules/LM_L298N.py +161 -0
  53. {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +3 -3
  54. micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +45 -27
  55. micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +3 -3
  56. micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +2 -2
  57. micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +3 -3
  58. micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +18 -25
  59. micrOS/source/{LM_cct.py → modules/LM_cct.py} +17 -21
  60. micrOS/source/modules/LM_cluster.py +255 -0
  61. micrOS/source/{LM_co2.py → modules/LM_co2.py} +3 -3
  62. micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +2 -2
  63. micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +2 -2
  64. micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +9 -9
  65. micrOS/source/{LM_distance.py → modules/LM_distance.py} +4 -6
  66. micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +2 -2
  67. micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +5 -0
  68. micrOS/source/modules/LM_espnow.py +53 -0
  69. micrOS/source/modules/LM_fileserver.py +265 -0
  70. micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +52 -37
  71. micrOS/source/{LM_haptic.py → modules/LM_haptic.py} +2 -2
  72. {toolkit/workspace/precompiled → micrOS/source/modules}/LM_i2c.py +5 -4
  73. micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +6 -7
  74. micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +2 -2
  75. micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +10 -21
  76. micrOS/source/modules/LM_mh_z19c.py +198 -0
  77. micrOS/source/modules/LM_neoeffects.py +284 -0
  78. micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +19 -23
  79. micrOS/source/{LM_oled.py → modules/LM_oled.py} +2 -2
  80. micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +3 -3
  81. micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +72 -64
  82. micrOS/source/modules/LM_pacman.py +320 -0
  83. micrOS/source/{LM_presence.py → modules/LM_presence.py} +11 -15
  84. micrOS/source/modules/LM_qmi8658.py +204 -0
  85. micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +2 -2
  86. micrOS/source/{LM_rest.py → modules/LM_rest.py} +4 -6
  87. micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +21 -29
  88. micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +8 -8
  89. micrOS/source/modules/LM_robustness.py +137 -0
  90. micrOS/source/{LM_servo.py → modules/LM_servo.py} +3 -3
  91. micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +5 -5
  92. micrOS/source/{LM_switch.py → modules/LM_switch.py} +11 -9
  93. micrOS/source/{LM_system.py → modules/LM_system.py} +38 -32
  94. micrOS/source/modules/LM_tcs3472.py +187 -0
  95. micrOS/source/{LM_telegram.py → modules/LM_telegram.py} +164 -116
  96. micrOS/source/{LM_trackball.py → modules/LM_trackball.py} +3 -3
  97. micrOS/source/{LM_veml7700.py → modules/LM_veml7700.py} +2 -2
  98. micrOS/source/modules/LM_web.py +38 -0
  99. micrOS/source/urequests.py +39 -15
  100. {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +4 -0
  101. micrOS/source/web/editor.js +440 -0
  102. micrOS/source/web/filesui.html +178 -0
  103. micrOS/source/web/filesui.js +338 -0
  104. {toolkit/workspace/precompiled → micrOS/source/web}/index.html +44 -2
  105. micrOS/source/{uapi.js → web/uapi.js} +48 -7
  106. micrOS/source/{ustyle.css → web/ustyle.css} +6 -3
  107. micrOS/utests/__init__.py +0 -0
  108. micrOS/utests/test_scheduler.py +435 -0
  109. {micrOSDevToolKit-2.9.1.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +33 -3
  110. {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +327 -268
  111. microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
  112. {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
  113. toolkit/DevEnvCompile.py +63 -33
  114. toolkit/DevEnvOTA.py +58 -22
  115. toolkit/DevEnvUSB.py +110 -55
  116. toolkit/Gateway.py +6 -6
  117. toolkit/LM_to_compile.dat +6 -4
  118. toolkit/MicrOSDevEnv.py +127 -57
  119. toolkit/WebRepl.py +73 -0
  120. toolkit/dashboard_apps/BackupRestore.py +20 -35
  121. toolkit/dashboard_apps/CCTDemo.py +12 -17
  122. toolkit/dashboard_apps/CCTTest.py +20 -24
  123. toolkit/dashboard_apps/CamStream.py +2 -6
  124. toolkit/dashboard_apps/CatGame.py +14 -16
  125. toolkit/dashboard_apps/Dimmer.py +11 -21
  126. toolkit/dashboard_apps/GetVersion.py +11 -19
  127. toolkit/dashboard_apps/MicrophoneTest.py +1 -6
  128. toolkit/dashboard_apps/NeoEffectsDemo.py +22 -35
  129. toolkit/dashboard_apps/NeopixelTest.py +20 -25
  130. toolkit/dashboard_apps/PresenceTest.py +2 -8
  131. toolkit/dashboard_apps/QMI8685_GYRO.py +68 -0
  132. toolkit/dashboard_apps/RGBTest.py +20 -24
  133. toolkit/dashboard_apps/RoboArm.py +24 -32
  134. toolkit/dashboard_apps/SED_test.py +10 -14
  135. toolkit/dashboard_apps/SensorsTest.py +61 -0
  136. toolkit/dashboard_apps/SystemTest.py +202 -105
  137. toolkit/dashboard_apps/Template_app.py +11 -23
  138. toolkit/dashboard_apps/_app_base.py +34 -0
  139. toolkit/dashboard_apps/_gyro_visualizer.py +78 -0
  140. toolkit/dashboard_apps/uLightDemo.py +15 -24
  141. toolkit/index.html +4 -4
  142. toolkit/lib/LocalMachine.py +6 -1
  143. toolkit/lib/MicrosFiles.py +46 -0
  144. toolkit/lib/Repository.py +64 -0
  145. toolkit/lib/TerminalColors.py +4 -0
  146. toolkit/lib/macroScript.py +6 -0
  147. toolkit/lib/micrOSClient.py +123 -50
  148. toolkit/lib/micrOSClientHistory.py +156 -0
  149. toolkit/lib/pip_package_installer.py +5 -2
  150. toolkit/micrOSdashboard.py +12 -17
  151. toolkit/micrOSlint.py +20 -8
  152. toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  153. toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  154. toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  155. toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  156. toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  157. toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
  158. toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  159. toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  160. toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
  161. toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  162. toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  163. toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  164. toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  165. toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
  166. toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  167. toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  168. toolkit/simulator_lib/aioespnow.py +28 -0
  169. toolkit/simulator_lib/dht.py +1 -1
  170. toolkit/simulator_lib/framebuf.py +49 -1
  171. toolkit/simulator_lib/machine.py +17 -2
  172. toolkit/simulator_lib/micropython.py +3 -3
  173. toolkit/simulator_lib/mip.py +165 -0
  174. toolkit/simulator_lib/neopixel.py +3 -2
  175. toolkit/simulator_lib/network.py +2 -1
  176. toolkit/simulator_lib/node_config.json +2 -3
  177. toolkit/simulator_lib/ntptime.py +1 -1
  178. toolkit/simulator_lib/{sim_console.py → sim_common.py} +2 -3
  179. toolkit/simulator_lib/simgc.py +6 -2
  180. toolkit/simulator_lib/simulator.py +137 -59
  181. toolkit/simulator_lib/uasyncio.py +33 -2
  182. toolkit/simulator_lib/uos.py +147 -0
  183. toolkit/simulator_lib/urandom.py +4 -0
  184. toolkit/socketClient.py +43 -23
  185. toolkit/user_data/webhooks/generic.py +1 -1
  186. toolkit/user_data/webhooks/macro.py +1 -1
  187. toolkit/user_data/webhooks/template.py +1 -1
  188. toolkit/workspace/precompiled/Auth.mpy +0 -0
  189. toolkit/workspace/precompiled/Common.mpy +0 -0
  190. toolkit/workspace/precompiled/Config.mpy +0 -0
  191. toolkit/workspace/precompiled/Debug.mpy +0 -0
  192. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  193. toolkit/workspace/precompiled/Files.mpy +0 -0
  194. toolkit/workspace/precompiled/Hooks.mpy +0 -0
  195. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  196. toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  197. toolkit/workspace/precompiled/Logger.mpy +0 -0
  198. toolkit/workspace/precompiled/Network.mpy +0 -0
  199. toolkit/workspace/precompiled/Notify.mpy +0 -0
  200. toolkit/workspace/precompiled/Pacman.mpy +0 -0
  201. toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  202. toolkit/workspace/precompiled/Server.mpy +0 -0
  203. toolkit/workspace/precompiled/Shell.mpy +0 -0
  204. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  205. toolkit/workspace/precompiled/Time.mpy +0 -0
  206. toolkit/workspace/precompiled/Types.mpy +0 -0
  207. toolkit/workspace/precompiled/Web.mpy +0 -0
  208. toolkit/workspace/precompiled/_mpy.version +1 -1
  209. toolkit/workspace/precompiled/config/_git.keep +0 -0
  210. toolkit/workspace/precompiled/helpers.mpy +0 -0
  211. toolkit/workspace/precompiled/micrOS.mpy +0 -0
  212. toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  213. toolkit/workspace/precompiled/microIO.mpy +0 -0
  214. toolkit/workspace/precompiled/{IO_esp32.mpy → modules/IO_esp32.mpy} +0 -0
  215. toolkit/workspace/precompiled/{IO_esp32c3.mpy → modules/IO_esp32c3.mpy} +0 -0
  216. toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
  217. toolkit/workspace/precompiled/{IO_esp32s2.mpy → modules/IO_esp32s2.mpy} +0 -0
  218. toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
  219. toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
  220. toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
  221. toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
  222. toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
  223. toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
  224. {micrOS/source → toolkit/workspace/precompiled/modules}/LM_L9110_DCmotor.py +3 -3
  225. toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
  226. toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +3 -3
  227. toolkit/workspace/precompiled/{LM_aht10.mpy → modules/LM_aht10.mpy} +0 -0
  228. toolkit/workspace/precompiled/{LM_bme280.mpy → modules/LM_bme280.mpy} +0 -0
  229. toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
  230. toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
  231. toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
  232. toolkit/workspace/precompiled/{LM_co2.mpy → modules/LM_co2.mpy} +0 -0
  233. toolkit/workspace/precompiled/{LM_dht11.mpy → modules/LM_dht11.mpy} +0 -0
  234. toolkit/workspace/precompiled/{LM_dht22.mpy → modules/LM_dht22.mpy} +0 -0
  235. toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
  236. toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
  237. toolkit/workspace/precompiled/{LM_ds18.mpy → modules/LM_ds18.mpy} +0 -0
  238. toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +5 -0
  239. toolkit/workspace/precompiled/modules/LM_espnow.py +53 -0
  240. toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
  241. toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
  242. toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
  243. toolkit/workspace/precompiled/{LM_haptic.mpy → modules/LM_haptic.mpy} +0 -0
  244. {micrOS/source → toolkit/workspace/precompiled/modules}/LM_i2c.py +5 -4
  245. toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
  246. toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
  247. toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
  248. toolkit/workspace/precompiled/modules/LM_mh_z19c.py +198 -0
  249. toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
  250. toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
  251. toolkit/workspace/precompiled/{LM_oled.mpy → modules/LM_oled.mpy} +0 -0
  252. toolkit/workspace/precompiled/{LM_oled_sh1106.mpy → modules/LM_oled_sh1106.mpy} +0 -0
  253. toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  254. toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  255. toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
  256. toolkit/workspace/precompiled/modules/LM_qmi8658.py +204 -0
  257. toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +2 -2
  258. toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
  259. toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
  260. toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
  261. toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
  262. toolkit/workspace/precompiled/modules/LM_robustness.py +137 -0
  263. toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
  264. toolkit/workspace/precompiled/{LM_sound_event.mpy → modules/LM_sound_event.mpy} +0 -0
  265. toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
  266. toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
  267. toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
  268. toolkit/workspace/precompiled/modules/LM_tcs3472.py +187 -0
  269. toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
  270. toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
  271. toolkit/workspace/precompiled/{LM_trackball.mpy → modules/LM_trackball.mpy} +0 -0
  272. toolkit/workspace/precompiled/{LM_veml7700.mpy → modules/LM_veml7700.mpy} +0 -0
  273. toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
  274. toolkit/workspace/precompiled/urequests.mpy +0 -0
  275. {micrOS/source → toolkit/workspace/precompiled/web}/dashboard.html +4 -0
  276. toolkit/workspace/precompiled/web/editor.js +440 -0
  277. toolkit/workspace/precompiled/web/filesui.html +178 -0
  278. toolkit/workspace/precompiled/web/filesui.js +338 -0
  279. {micrOS/source → toolkit/workspace/precompiled/web}/index.html +44 -2
  280. toolkit/workspace/precompiled/{uapi.js → web/uapi.js} +48 -7
  281. toolkit/workspace/precompiled/{ustyle.css → web/ustyle.css} +6 -3
  282. micrOS/micropython/esp32-20241129-v1.24.1.bin +0 -0
  283. micrOS/micropython/esp32c3-20240222-v1.22.2.bin +0 -0
  284. micrOS/micropython/esp32s2-20240602-v1.23.0.bin +0 -0
  285. micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
  286. micrOS/micropython/esp32s2-LOLIN_MINI-20240602-v1.23.0.bin +0 -0
  287. micrOS/micropython/esp32s3-20240105-v1.22.1.bin +0 -0
  288. micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
  289. micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin +0 -0
  290. micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2 +0 -0
  291. micrOS/micropython/tinypico-20241129-v1.24.1.bin +0 -0
  292. micrOS/source/LM_L298N_DCmotor.py +0 -86
  293. micrOS/source/LM_catgame.py +0 -75
  294. micrOS/source/LM_dashboard_be.py +0 -37
  295. micrOS/source/LM_demo.py +0 -97
  296. micrOS/source/LM_espnow.py +0 -23
  297. micrOS/source/LM_intercon.py +0 -57
  298. micrOS/source/LM_keychain.py +0 -322
  299. micrOS/source/LM_lmpacman.py +0 -126
  300. micrOS/source/LM_neoeffects.py +0 -331
  301. micrOS/source/LM_oledui.py +0 -972
  302. micrOS/source/LM_pet_feeder.py +0 -78
  303. micrOS/source/LM_ph_sensor.py +0 -51
  304. micrOS/source/LM_robustness.py +0 -74
  305. micrOS/source/reset.py +0 -11
  306. micrOSDevToolKit-2.9.1.dist-info/RECORD +0 -365
  307. toolkit/dashboard_apps/AirQualityBME280.py +0 -36
  308. toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
  309. toolkit/lib/file_extensions.py +0 -16
  310. toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
  311. toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
  312. toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
  313. toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
  314. toolkit/workspace/precompiled/IO_m5stamp.mpy +0 -0
  315. toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
  316. toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
  317. toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
  318. toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
  319. toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
  320. toolkit/workspace/precompiled/LM_catgame.py +0 -75
  321. toolkit/workspace/precompiled/LM_cct.mpy +0 -0
  322. toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
  323. toolkit/workspace/precompiled/LM_demo.py +0 -97
  324. toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
  325. toolkit/workspace/precompiled/LM_distance.mpy +0 -0
  326. toolkit/workspace/precompiled/LM_espnow.py +0 -23
  327. toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
  328. toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
  329. toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  330. toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
  331. toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  332. toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
  333. toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
  334. toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
  335. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  336. toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
  337. toolkit/workspace/precompiled/LM_pet_feeder.py +0 -78
  338. toolkit/workspace/precompiled/LM_ph_sensor.py +0 -51
  339. toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  340. toolkit/workspace/precompiled/LM_rest.mpy +0 -0
  341. toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
  342. toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
  343. toolkit/workspace/precompiled/LM_robustness.py +0 -74
  344. toolkit/workspace/precompiled/LM_switch.mpy +0 -0
  345. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  346. toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  347. toolkit/workspace/precompiled/node_config.json +0 -1
  348. toolkit/workspace/precompiled/reset.mpy +0 -0
  349. /micrOS/source/{IO_esp32.py → modules/IO_esp32.py} +0 -0
  350. /micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +0 -0
  351. /micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +0 -0
  352. /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
  353. /micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +0 -0
  354. /micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +0 -0
  355. /micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +0 -0
  356. /micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +0 -0
  357. /micrOS/source/{LM_sound_event.py → modules/LM_sound_event.py} +0 -0
  358. /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
  359. /micrOS/source/{udashboard.js → web/udashboard.js} +0 -0
  360. /micrOS/source/{uwidgets.js → web/uwidgets.js} +0 -0
  361. /micrOS/source/{uwidgets_pro.js → web/uwidgets_pro.js} +0 -0
  362. {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
  363. {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info}/top_level.txt +0 -0
  364. /toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +0 -0
  365. /toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +0 -0
  366. /toolkit/workspace/precompiled/{udashboard.js → web/udashboard.js} +0 -0
  367. /toolkit/workspace/precompiled/{uwidgets.js → web/uwidgets.js} +0 -0
  368. /toolkit/workspace/precompiled/{uwidgets_pro.js → web/uwidgets_pro.js} +0 -0
@@ -2,28 +2,16 @@
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
7
  from TerminalColors import Colors
11
8
 
12
- # FILL OUT
13
- DEVICE = 'node01'
14
- PASSWD = None
15
-
16
- def base_cmd():
17
- if PASSWD is None:
18
- return ['--dev', DEVICE]
19
- return ['--dev', DEVICE, '--password', PASSWD]
20
-
21
- def run_command(cmd):
22
- # EDIT YOUR COMMAND
23
- args = base_cmd() + cmd
24
- status, answer = socketClient.run(args)
25
- return status, answer
9
+ try:
10
+ from ._app_base import AppBase
11
+ except:
12
+ from _app_base import AppBase
26
13
 
14
+ CLIENT = None
27
15
 
28
16
  def app(devfid=None, pwd=None):
29
17
  """
@@ -31,13 +19,13 @@ def app(devfid=None, pwd=None):
31
19
  send command(s) over socket connection [socketClient.run(args)]
32
20
  list load module commands and send in single connection
33
21
  """
34
- global DEVICE, PASSWD
35
- if devfid is not None:
36
- DEVICE = devfid
37
- if pwd is not None:
38
- PASSWD = pwd
22
+ global CLIENT
23
+ CLIENT = AppBase(device=devfid, password=pwd)
39
24
 
40
- status, answer = run_command(['help', 'version'])
25
+ output = CLIENT.execute(['help', 'version'])
26
+ status = output[0]
27
+ result = output[1]
28
+ print(f"{Colors.WARN}[{status}]{Colors.NC} {result}")
41
29
 
42
30
 
43
31
  if __name__ == "__main__":
@@ -0,0 +1,34 @@
1
+ #####################################
2
+ # APP CONFIG #
3
+ #####################################
4
+ import os, sys
5
+ MYPATH = os.path.dirname(os.path.abspath(__file__))
6
+ sys.path.append(os.path.dirname(MYPATH))
7
+ import socketClient
8
+
9
+ class AppBase:
10
+
11
+ def __init__(self, device:str, password:str):
12
+ self.device = device
13
+ self.password = password
14
+
15
+ def base_cmd(self) -> list:
16
+ if self.password is None:
17
+ return ['--dev', self.device]
18
+ return ['--dev', self.device, '--password', self.password]
19
+
20
+ def get_device(self):
21
+ return self.device
22
+
23
+ def execute(self, cmd_list, tout=5, verbose=False):
24
+ cmd_args = self.base_cmd() + cmd_list
25
+ print(f"Execute: {cmd_args}")
26
+ return socketClient.run(cmd_args, timeout=tout, verbose=verbose)
27
+
28
+ def run(self, cmd_list):
29
+ """Legacy"""
30
+ out = self.execute(cmd_list)
31
+ return out[0], out[1]
32
+
33
+ def connection_metrics(self):
34
+ return socketClient.connection_metrics(f"{self.device}.local")
@@ -0,0 +1,78 @@
1
+ import matplotlib.pyplot as plt
2
+ import matplotlib.animation as animation
3
+ import multiprocessing as mp
4
+ from collections import deque
5
+ from datetime import datetime
6
+ import matplotlib.dates as mdates
7
+
8
+ def visualizer_main(queue):
9
+ # Make figure wider and a bit taller
10
+ fig, (ax_accel, ax_gyro) = plt.subplots(2, 1, figsize=(14, 8))
11
+ plt.subplots_adjust(top=0.88, bottom=0.12, hspace=0.3)
12
+
13
+ history = 100
14
+ accel_data = {'x': deque([0] * history, maxlen=history),
15
+ 'y': deque([0] * history, maxlen=history),
16
+ 'z': deque([0] * history, maxlen=history)}
17
+ gyro_data = {'x': deque([0] * history, maxlen=history),
18
+ 'y': deque([0] * history, maxlen=history),
19
+ 'z': deque([0] * history, maxlen=history)}
20
+ time_axis = deque([datetime.now()] * history, maxlen=history)
21
+
22
+ # Increase line width here
23
+ line_width = 2.5
24
+
25
+ accel_lines = {
26
+ axis: ax_accel.plot([], [], label=f'accel_{axis}', linewidth=line_width)[0]
27
+ for axis in 'xyz'
28
+ }
29
+ gyro_lines = {
30
+ axis: ax_gyro.plot([], [], label=f'gyro_{axis}', linewidth=line_width)[0]
31
+ for axis in 'xyz'
32
+ }
33
+
34
+ ax_accel.set_ylim(-2, 2)
35
+ ax_gyro.set_ylim(-300, 300)
36
+
37
+ for ax in [ax_accel, ax_gyro]:
38
+ ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
39
+ ax.legend()
40
+ ax.grid(True)
41
+ ax.set_xlabel("Time (H:M:S)")
42
+
43
+ ax_accel.set_title("Acceleration")
44
+ ax_gyro.set_title("Gyroscope")
45
+
46
+ def update(_):
47
+ try:
48
+ while not queue.empty():
49
+ data = queue.get_nowait()
50
+ current_time = datetime.now()
51
+ time_axis.append(current_time)
52
+
53
+ for axis, val in zip('xyz', data['accel']):
54
+ accel_data[axis].append(val)
55
+ for axis, val in zip('xyz', data['gyro']):
56
+ gyro_data[axis].append(val)
57
+ except Exception as e:
58
+ print(f"Visualizer error: {e}")
59
+ return
60
+
61
+ for axis in 'xyz':
62
+ accel_lines[axis].set_data(time_axis, accel_data[axis])
63
+ gyro_lines[axis].set_data(time_axis, gyro_data[axis])
64
+
65
+ for ax in [ax_accel, ax_gyro]:
66
+ ax.set_xlim(time_axis[0], time_axis[-1])
67
+ ax.figure.autofmt_xdate()
68
+
69
+ return list(accel_lines.values()) + list(gyro_lines.values())
70
+
71
+ ani = animation.FuncAnimation(fig, update, interval=50)
72
+ plt.show()
73
+
74
+
75
+ if __name__ == "__main__":
76
+ mp.set_start_method('spawn')
77
+ queue = mp.Queue()
78
+ visualizer_main(queue)
@@ -4,28 +4,23 @@ import os
4
4
  import sys
5
5
  import time
6
6
  MYPATH = os.path.dirname(os.path.abspath(__file__))
7
- sys.path.append(os.path.dirname(MYPATH))
8
- import socketClient
9
7
  sys.path.append(os.path.join(MYPATH, '../lib/'))
10
8
  from TerminalColors import Colors
11
9
 
12
- # FILL OUT
13
- DEVICE = 'node01'
14
-
15
-
16
- def base_cmd():
17
- return ['--dev', DEVICE]
10
+ try:
11
+ from ._app_base import AppBase
12
+ except:
13
+ from _app_base import AppBase
18
14
 
15
+ CLIENT = None
19
16
 
20
17
  def light_demo(modules, smooth=True, sample=10):
21
18
  verdict = [True, []]
22
19
  smooth_str = '[smooth]' if smooth else '[simple]'
23
20
 
24
- if 'LM_rgb' in modules:
25
- args = base_cmd() + [f'rgb random {smooth}'] * sample + ['rgb toggle False']
26
- print(args)
21
+ if 'rgb' in modules:
27
22
  delta_t = time.time()
28
- status_rgb, answer_rgb = socketClient.run(args)
23
+ status_rgb, answer_rgb = CLIENT.run([f'rgb random {smooth}'] * sample + ['rgb toggle False'])
29
24
  delta_t = round((time.time() - delta_t) / sample, 2)
30
25
  if status_rgb:
31
26
  msg = f"{smooth_str} rgb module random color func: {Colors.OK}OK{Colors.NC} [{delta_t}sec]"
@@ -35,10 +30,9 @@ def light_demo(modules, smooth=True, sample=10):
35
30
  verdict[1].append(msg)
36
31
  verdict[0] &= False
37
32
 
38
- if 'LM_cct' in modules:
39
- args = base_cmd() + [f'cct random {smooth}'] * sample + ['cct toggle False']
33
+ if 'cct' in modules:
40
34
  delta_t = time.time()
41
- status_cct, answer_cct = socketClient.run(args)
35
+ status_cct, answer_cct = CLIENT.run([f'cct random {smooth}'] * sample + ['cct toggle False'])
42
36
  delta_t = round((time.time() - delta_t) / sample, 2)
43
37
  if status_cct:
44
38
  msg = f"{smooth_str} cct module random color func: {Colors.OK}OK{Colors.NC} [{delta_t}sec]"
@@ -48,10 +42,9 @@ def light_demo(modules, smooth=True, sample=10):
48
42
  verdict[1].append(msg)
49
43
  verdict[0] &= False
50
44
 
51
- if 'LM_neopixel' in modules:
52
- args = base_cmd() + [f'neopixel random {smooth}'] * sample + ['neopixel toggle False']
45
+ if 'neopixel' in modules:
53
46
  delta_t = time.time()
54
- status_neo, answer_neo = socketClient.run(args)
47
+ status_neo, answer_neo = CLIENT.run([f'neopixel random {smooth}'] * sample + ['neopixel toggle False'])
55
48
  delta_t = round((time.time() - delta_t) / sample, 2)
56
49
  if status_neo:
57
50
  msg = f"{smooth_str} neopixel module random color func: {Colors.OK}OK{Colors.NC} [{delta_t}sec]"
@@ -63,19 +56,17 @@ def light_demo(modules, smooth=True, sample=10):
63
56
  return verdict
64
57
 
65
58
 
66
- def app(devfid=None):
59
+ def app(devfid=None, pwd=None):
67
60
  """
68
61
  devfid: selected device input
69
62
  send command(s) over socket connection [socketClient.run(args)]
70
63
  list load module commands and send in single connection
71
64
  """
72
- global DEVICE
73
- if devfid is not None:
74
- DEVICE = devfid
65
+ global CLIENT
66
+ CLIENT = AppBase(device=devfid, password=pwd)
75
67
 
76
68
  # Get loaded modules
77
- args = base_cmd() + ['lmpacman module']
78
- status, modules = socketClient.run(args)
69
+ status, modules = CLIENT.run(['modules'])
79
70
  print("status: {}\nanswer: {}".format(status, modules))
80
71
 
81
72
  if not status:
toolkit/index.html CHANGED
@@ -11,15 +11,15 @@
11
11
  50% {background-position: 100% 50%;}
12
12
  100% {background-position: 0% 50%;}}
13
13
  body {
14
- height: 400vh;
15
- width: 200vh;
14
+ height: calc(100vh - 6%); /* Set the height to 100% of the viewport height */
15
+ width: calc(100vw - 6%); /* Set the width to 200% of the viewport height */
16
16
  padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
17
- margin: 40px;
17
+ margin: 3%;
18
18
  background: linear-gradient(110deg, #720000, #656565, #252525);
19
19
  background-size: 400% 400%;
20
20
  animation: backgroundAnimation 20s infinite;
21
21
  color: #d9d9d9;
22
- font-family: 'Arial', sans-serif;
22
+ font-family: 'Verdana', Sans-serif;
23
23
  }
24
24
  button {
25
25
  background-color: #e7e7e7; /* Gray */
@@ -186,11 +186,13 @@ class FileHandler:
186
186
  os.remove(path)
187
187
  elif type_ == 'd':
188
188
  shutil.rmtree(path)
189
+ return True
189
190
  except Exception as e:
190
191
  if ignore:
191
192
  debug_print("[DEBUG] Removing " + path + " is forced to ignore failure: " + str(e))
192
193
  else:
193
194
  raise Exception("Cannot remove " + path + ": " + str(e))
195
+ return False
194
196
 
195
197
  @staticmethod
196
198
  def extract_tar(targz, extract_path):
@@ -210,7 +212,10 @@ class FileHandler:
210
212
  def copy(from_path, to_path):
211
213
  debug_print("[DEBUG] Copy " + from_path + " to " + to_path)
212
214
  try:
213
- shutil.copy(from_path, to_path)
215
+ if os.path.isdir(from_path):
216
+ shutil.copytree(from_path, to_path, dirs_exist_ok=True)
217
+ else:
218
+ shutil.copy(from_path, to_path)
214
219
  return True
215
220
  except Exception as e:
216
221
  debug_print("Copy error: {}".format(e))
@@ -0,0 +1,46 @@
1
+ import os
2
+
3
+ try:
4
+ from . import LocalMachine
5
+ except Exception as e:
6
+ print("Import warning __name__:{}: {}".format(__name__, e))
7
+ import LocalMachine
8
+
9
+ PYTHON_EXTENSIONS = ('py', 'mpy')
10
+ WEB_ONLY = ('js', 'html', 'css', 'json', 'ico', 'jpeg', 'png')
11
+ ENABLED_EXTENSIONS = PYTHON_EXTENSIONS + WEB_ONLY
12
+
13
+ def check_all_extensions(path):
14
+ extension = path.split('.')[-1]
15
+ if extension in ENABLED_EXTENSIONS:
16
+ return True
17
+ return False
18
+
19
+ def check_web_extensions(path):
20
+ extension = path.split('.')[-1]
21
+ if extension in WEB_ONLY:
22
+ return True
23
+ return False
24
+
25
+ def check_python_extensions(path):
26
+ extension = path.split('.')[-1]
27
+ if extension in PYTHON_EXTENSIONS:
28
+ return True
29
+ return False
30
+
31
+ def micros_resource_list(root_folder):
32
+ resources_path = []
33
+ subfolders = []
34
+ for source in LocalMachine.FileHandler.list_dir(root_folder):
35
+ source_full_path = os.path.join(root_folder, source)
36
+ # [1] / Root directory source files and folders.
37
+ if check_all_extensions(source):
38
+ resources_path.append(source_full_path)
39
+ # [2] /dir Handle sub dictionary sources
40
+ elif LocalMachine.FileHandler.path_is_exists(source_full_path)[1] == 'd':
41
+ subfolders.append(source)
42
+ for sub_source in LocalMachine.FileHandler.list_dir(source_full_path):
43
+ sub_source_full_path = os.path.join(source_full_path, sub_source)
44
+ if check_all_extensions(sub_source):
45
+ resources_path.append(sub_source_full_path)
46
+ return resources_path, subfolders
@@ -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
@@ -16,6 +16,8 @@ class Colors:
16
16
  OKGREEN = '\033[92m'
17
17
  HEADER = '\033[95m'
18
18
  UNDERLINE = '\033[4m'
19
+ LIGHT_GRAY = '\033[37m'
20
+ GRAY = '\033[90m'
19
21
  else:
20
22
  NC = ''
21
23
  OK = ''
@@ -26,6 +28,8 @@ class Colors:
26
28
  OKGREEN = ''
27
29
  HEADER = ''
28
30
  UNDERLINE = ''
31
+ LIGHT_GRAY = ''
32
+ GRAY = ''
29
33
 
30
34
 
31
35
  if __name__ == "__main__":
@@ -303,6 +303,12 @@ system clock
303
303
  f.write(default_conf)
304
304
 
305
305
  def run_micro_script(self, path):
306
+ try:
307
+ self._run_micro_script(path)
308
+ except KeyboardInterrupt:
309
+ print("Exiting...")
310
+
311
+ def _run_micro_script(self, path):
306
312
  if os.path.isdir(path):
307
313
  path = select_menu(path)
308
314
  if path is None: