micrOSDevToolKit 2.1.5__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 (400) hide show
  1. env/driver_cp210x/.DS_Store +0 -0
  2. env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  3. env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +17 -1
  4. micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
  5. micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
  6. micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
  7. micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
  8. micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
  9. micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
  10. micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
  11. micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
  12. micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
  13. micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
  14. micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +191 -151
  15. micrOS/source/Auth.py +37 -0
  16. micrOS/source/Common.py +376 -102
  17. micrOS/source/Config.py +55 -25
  18. micrOS/source/Debug.py +54 -193
  19. micrOS/source/Espnow.py +404 -0
  20. micrOS/source/Files.py +207 -0
  21. micrOS/source/Hooks.py +88 -16
  22. micrOS/source/InterConnect.py +130 -46
  23. micrOS/source/Interrupts.py +8 -8
  24. micrOS/source/Logger.py +131 -0
  25. micrOS/source/Network.py +41 -21
  26. micrOS/source/Notify.py +74 -198
  27. micrOS/source/Pacman.py +326 -0
  28. micrOS/source/Scheduler.py +18 -55
  29. micrOS/source/Server.py +84 -217
  30. micrOS/source/Shell.py +103 -93
  31. micrOS/source/Tasks.py +239 -173
  32. micrOS/source/Time.py +21 -22
  33. micrOS/source/Types.py +89 -54
  34. micrOS/source/Web.py +485 -0
  35. micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  36. micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
  37. micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
  38. micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  39. micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
  40. micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  41. micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
  42. micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
  43. micrOS/source/helpers.py +132 -0
  44. micrOS/source/micrOS.py +25 -21
  45. micrOS/source/micrOSloader.py +14 -23
  46. micrOS/source/microIO.py +94 -57
  47. toolkit/simulator_lib/LP_darwin.py → micrOS/source/modules/IO_esp32.py +22 -11
  48. micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +6 -1
  49. micrOS/source/modules/IO_esp32c6.py +38 -0
  50. micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +6 -1
  51. micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +43 -2
  52. micrOS/source/modules/IO_m5stamp.py +86 -0
  53. micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +28 -18
  54. micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +48 -3
  55. micrOS/source/modules/LM_L298N.py +161 -0
  56. {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +4 -4
  57. micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +53 -42
  58. micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
  59. micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +12 -4
  60. micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +13 -25
  61. micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +42 -40
  62. micrOS/source/{LM_cct.py → modules/LM_cct.py} +22 -27
  63. micrOS/source/modules/LM_cluster.py +255 -0
  64. micrOS/source/{LM_co2.py → modules/LM_co2.py} +13 -6
  65. micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +13 -29
  66. micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +13 -28
  67. micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +19 -16
  68. micrOS/source/modules/LM_distance.py +135 -0
  69. micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +12 -4
  70. micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +16 -4
  71. micrOS/source/modules/LM_espnow.py +53 -0
  72. micrOS/source/modules/LM_fileserver.py +265 -0
  73. micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +5 -5
  74. micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +49 -35
  75. micrOS/source/modules/LM_haptic.py +111 -0
  76. micrOS/source/modules/LM_i2c.py +61 -0
  77. micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +20 -23
  78. micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +3 -3
  79. micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +22 -26
  80. micrOS/source/modules/LM_mh_z19c.py +198 -0
  81. micrOS/source/modules/LM_neoeffects.py +284 -0
  82. micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +26 -31
  83. micrOS/source/{LM_oled.py → modules/LM_oled.py} +28 -20
  84. micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +28 -24
  85. micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +132 -174
  86. micrOS/source/modules/LM_pacman.py +320 -0
  87. micrOS/source/{LM_presence.py → modules/LM_presence.py} +24 -36
  88. micrOS/source/modules/LM_qmi8658.py +204 -0
  89. micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
  90. micrOS/source/modules/LM_rest.py +81 -0
  91. micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +25 -34
  92. micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +5 -5
  93. micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +37 -45
  94. micrOS/source/modules/LM_robustness.py +137 -0
  95. micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
  96. micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
  97. micrOS/source/{LM_servo.py → modules/LM_servo.py} +4 -4
  98. micrOS/source/modules/LM_sound_event.py +751 -0
  99. micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +8 -8
  100. micrOS/source/{LM_switch.py → modules/LM_switch.py} +21 -18
  101. micrOS/source/{LM_system.py → modules/LM_system.py} +96 -59
  102. micrOS/source/modules/LM_tcs3472.py +187 -0
  103. micrOS/source/modules/LM_telegram.py +388 -0
  104. micrOS/source/modules/LM_trackball.py +287 -0
  105. micrOS/source/modules/LM_veml7700.py +159 -0
  106. micrOS/source/modules/LM_web.py +38 -0
  107. micrOS/source/urequests.py +204 -91
  108. {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +9 -4
  109. micrOS/source/web/editor.js +440 -0
  110. micrOS/source/web/filesui.html +178 -0
  111. micrOS/source/web/filesui.js +338 -0
  112. micrOS/source/{index.html → web/index.html} +44 -2
  113. micrOS/source/web/uapi.js +103 -0
  114. micrOS/source/web/udashboard.js +129 -0
  115. micrOS/source/web/ustyle.css +55 -0
  116. micrOS/source/web/uwidgets.js +172 -0
  117. micrOS/source/web/uwidgets_pro.js +99 -0
  118. micrOS/utests/__init__.py +0 -0
  119. micrOS/utests/test_scheduler.py +435 -0
  120. {micrOSDevToolKit-2.1.5.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +47 -4
  121. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +392 -279
  122. microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
  123. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
  124. toolkit/DevEnvCompile.py +63 -33
  125. toolkit/DevEnvOTA.py +72 -22
  126. toolkit/DevEnvUSB.py +147 -77
  127. toolkit/Gateway.py +9 -9
  128. toolkit/LM_to_compile.dat +12 -4
  129. toolkit/MicrOSDevEnv.py +129 -51
  130. toolkit/WebRepl.py +73 -0
  131. toolkit/dashboard_apps/BackupRestore.py +171 -0
  132. toolkit/dashboard_apps/CCTDemo.py +12 -17
  133. toolkit/dashboard_apps/CCTTest.py +20 -24
  134. toolkit/dashboard_apps/CamStream.py +2 -6
  135. toolkit/dashboard_apps/CatGame.py +14 -16
  136. toolkit/dashboard_apps/Dimmer.py +11 -21
  137. toolkit/dashboard_apps/GetVersion.py +11 -19
  138. toolkit/dashboard_apps/MicrophoneTest.py +2 -7
  139. toolkit/dashboard_apps/NeoEffectsDemo.py +22 -35
  140. toolkit/dashboard_apps/NeopixelTest.py +20 -25
  141. toolkit/dashboard_apps/PresenceTest.py +2 -8
  142. toolkit/dashboard_apps/QMI8685_GYRO.py +68 -0
  143. toolkit/dashboard_apps/RGBTest.py +20 -24
  144. toolkit/dashboard_apps/RoboArm.py +24 -32
  145. toolkit/dashboard_apps/SED_test.py +10 -14
  146. toolkit/dashboard_apps/SensorsTest.py +61 -0
  147. toolkit/dashboard_apps/SystemTest.py +219 -117
  148. toolkit/dashboard_apps/Template_app.py +12 -19
  149. toolkit/dashboard_apps/_app_base.py +34 -0
  150. toolkit/dashboard_apps/_gyro_visualizer.py +78 -0
  151. toolkit/dashboard_apps/uLightDemo.py +15 -24
  152. toolkit/index.html +6 -5
  153. toolkit/lib/LocalMachine.py +6 -1
  154. toolkit/lib/MicrosFiles.py +46 -0
  155. toolkit/lib/Repository.py +64 -0
  156. toolkit/lib/TerminalColors.py +4 -0
  157. toolkit/lib/macroScript.py +371 -0
  158. toolkit/lib/micrOSClient.py +124 -51
  159. toolkit/lib/micrOSClientHistory.py +156 -0
  160. toolkit/lib/pip_package_installer.py +31 -4
  161. toolkit/micrOSdashboard.py +16 -21
  162. toolkit/micrOSlint.py +28 -10
  163. toolkit/simulator_lib/.DS_Store +0 -0
  164. micrOS/source/IO_esp32.py → toolkit/simulator_lib/IO_darwin.py +3 -0
  165. toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  166. toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  167. toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
  168. toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  169. toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  170. toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  171. toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
  172. toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  173. toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  174. toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
  175. toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  176. toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  177. toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  178. toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  179. toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
  180. toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  181. toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  182. toolkit/simulator_lib/aioespnow.py +28 -0
  183. toolkit/simulator_lib/camera.py +84 -0
  184. toolkit/simulator_lib/dht.py +1 -1
  185. toolkit/simulator_lib/framebuf.py +49 -1
  186. toolkit/simulator_lib/machine.py +32 -2
  187. toolkit/simulator_lib/micropython.py +3 -3
  188. toolkit/simulator_lib/mip.py +165 -0
  189. toolkit/simulator_lib/neopixel.py +3 -2
  190. toolkit/simulator_lib/network.py +2 -1
  191. toolkit/simulator_lib/node_config.json +2 -3
  192. toolkit/simulator_lib/ntptime.py +1 -1
  193. toolkit/simulator_lib/{sim_console.py → sim_common.py} +2 -3
  194. toolkit/simulator_lib/simgc.py +6 -2
  195. toolkit/simulator_lib/simulator.py +138 -46
  196. toolkit/simulator_lib/uasyncio.py +34 -3
  197. toolkit/simulator_lib/uos.py +147 -0
  198. toolkit/simulator_lib/urandom.py +4 -0
  199. toolkit/simulator_lib/usocket.py +5 -1
  200. toolkit/simulator_lib/view01.jpg +0 -0
  201. toolkit/simulator_lib/view02.jpg +0 -0
  202. toolkit/socketClient.py +43 -23
  203. toolkit/user_data/webhooks/generic.py +1 -1
  204. toolkit/user_data/webhooks/macro.py +44 -0
  205. toolkit/user_data/webhooks/template.macro +20 -0
  206. toolkit/user_data/webhooks/template.py +1 -1
  207. toolkit/workspace/precompiled/Auth.mpy +0 -0
  208. toolkit/workspace/precompiled/Common.mpy +0 -0
  209. toolkit/workspace/precompiled/Config.mpy +0 -0
  210. toolkit/workspace/precompiled/Debug.mpy +0 -0
  211. toolkit/workspace/precompiled/Espnow.mpy +0 -0
  212. toolkit/workspace/precompiled/Files.mpy +0 -0
  213. toolkit/workspace/precompiled/Hooks.mpy +0 -0
  214. toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  215. toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  216. toolkit/workspace/precompiled/Logger.mpy +0 -0
  217. toolkit/workspace/precompiled/Network.mpy +0 -0
  218. toolkit/workspace/precompiled/Notify.mpy +0 -0
  219. toolkit/workspace/precompiled/Pacman.mpy +0 -0
  220. toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  221. toolkit/workspace/precompiled/Server.mpy +0 -0
  222. toolkit/workspace/precompiled/Shell.mpy +0 -0
  223. toolkit/workspace/precompiled/Tasks.mpy +0 -0
  224. toolkit/workspace/precompiled/Time.mpy +0 -0
  225. toolkit/workspace/precompiled/Types.mpy +0 -0
  226. toolkit/workspace/precompiled/Web.mpy +0 -0
  227. toolkit/workspace/precompiled/_mpy.version +1 -1
  228. toolkit/workspace/precompiled/config/_git.keep +0 -0
  229. toolkit/workspace/precompiled/helpers.mpy +0 -0
  230. toolkit/workspace/precompiled/micrOS.mpy +0 -0
  231. toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  232. toolkit/workspace/precompiled/microIO.mpy +0 -0
  233. toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
  234. toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
  235. toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
  236. toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
  237. toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
  238. toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
  239. toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
  240. toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
  241. toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
  242. toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
  243. {micrOS/source → toolkit/workspace/precompiled/modules}/LM_L9110_DCmotor.py +4 -4
  244. toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
  245. toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
  246. toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
  247. toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
  248. toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
  249. toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
  250. toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
  251. toolkit/workspace/precompiled/modules/LM_co2.mpy +0 -0
  252. toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
  253. toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
  254. toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
  255. toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
  256. toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
  257. toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +16 -4
  258. toolkit/workspace/precompiled/modules/LM_espnow.py +53 -0
  259. toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
  260. toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
  261. toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
  262. toolkit/workspace/precompiled/modules/LM_haptic.mpy +0 -0
  263. toolkit/workspace/precompiled/modules/LM_i2c.py +61 -0
  264. toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
  265. toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
  266. toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
  267. toolkit/workspace/precompiled/modules/LM_mh_z19c.py +198 -0
  268. toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
  269. toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
  270. toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
  271. toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
  272. toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  273. toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  274. toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
  275. toolkit/workspace/precompiled/modules/LM_qmi8658.py +204 -0
  276. toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
  277. toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
  278. toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
  279. toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
  280. toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
  281. toolkit/workspace/precompiled/modules/LM_robustness.py +137 -0
  282. toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
  283. toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
  284. toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
  285. toolkit/workspace/precompiled/modules/LM_sound_event.mpy +0 -0
  286. toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
  287. toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
  288. toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
  289. toolkit/workspace/precompiled/modules/LM_tcs3472.py +187 -0
  290. toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
  291. toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
  292. toolkit/workspace/precompiled/modules/LM_trackball.mpy +0 -0
  293. toolkit/workspace/precompiled/modules/LM_veml7700.mpy +0 -0
  294. toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
  295. toolkit/workspace/precompiled/urequests.mpy +0 -0
  296. {micrOS/source → toolkit/workspace/precompiled/web}/dashboard.html +9 -4
  297. toolkit/workspace/precompiled/web/editor.js +440 -0
  298. toolkit/workspace/precompiled/web/filesui.html +178 -0
  299. toolkit/workspace/precompiled/web/filesui.js +338 -0
  300. toolkit/workspace/precompiled/{index.html → web/index.html} +44 -2
  301. toolkit/workspace/precompiled/web/uapi.js +103 -0
  302. toolkit/workspace/precompiled/web/udashboard.js +129 -0
  303. toolkit/workspace/precompiled/web/ustyle.css +55 -0
  304. toolkit/workspace/precompiled/web/uwidgets.js +172 -0
  305. toolkit/workspace/precompiled/web/uwidgets_pro.js +99 -0
  306. env/driver_cp210x/CH34XSER_MAC/CH34X_DRV_INSTALL_INSTRUCTIONS.pdf +0 -0
  307. env/driver_cp210x/CH34XSER_MAC/CH34xVCPDriver.pkg +0 -0
  308. micrOS/micropython/esp32-20231005-v1.21.0.bin +0 -0
  309. micrOS/micropython/esp32c3-GENERIC-20240105-v1.22.1.bin +0 -0
  310. micrOS/micropython/esp32c3-GENERIC-20240222-v1.22.2.bin +0 -0
  311. micrOS/micropython/esp32s2-GENERIC-20240105-v1.22.1.bin +0 -0
  312. micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
  313. micrOS/micropython/esp32s3-GENERIC-20240105-v1.22.1.bin +0 -0
  314. micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
  315. micrOS/micropython/rpi-pico-w-20231005-v1.21.0.uf2 +0 -0
  316. micrOS/micropython/tinypico-20231005-v1.21.0.bin +0 -0
  317. micrOS/micropython/tinypico-usbc-UM-20240105-v1.22.1.bin +0 -0
  318. micrOS/source/LM_L298N_DCmotor.py +0 -86
  319. micrOS/source/LM_catgame.py +0 -74
  320. micrOS/source/LM_dashboard_be.py +0 -37
  321. micrOS/source/LM_demo.py +0 -85
  322. micrOS/source/LM_distance.py +0 -88
  323. micrOS/source/LM_i2c.py +0 -44
  324. micrOS/source/LM_intercon.py +0 -57
  325. micrOS/source/LM_keychain.py +0 -318
  326. micrOS/source/LM_lmpacman.py +0 -126
  327. micrOS/source/LM_neoeffects.py +0 -327
  328. micrOS/source/LM_pet_feeder.py +0 -76
  329. micrOS/source/LM_ph_sensor.py +0 -51
  330. micrOS/source/LM_rest.py +0 -40
  331. micrOS/source/LM_robustness.py +0 -73
  332. micrOS/source/LM_telegram.py +0 -96
  333. micrOS/source/reset.py +0 -11
  334. micrOS/source/uapi.js +0 -76
  335. micrOS/source/udashboard.js +0 -137
  336. micrOS/source/ustyle.css +0 -28
  337. micrOS/source/uwidgets.js +0 -179
  338. micrOSDevToolKit-2.1.5.dist-info/RECORD +0 -337
  339. toolkit/dashboard_apps/AirQualityBME280.py +0 -36
  340. toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
  341. toolkit/lib/file_extensions.py +0 -16
  342. toolkit/simulator_lib/__pycache__/LP_darwin.cpython-312.pyc +0 -0
  343. toolkit/simulator_lib/__pycache__/LP_darwin.cpython-38.pyc +0 -0
  344. toolkit/simulator_lib/__pycache__/LP_darwin.cpython-39.pyc +0 -0
  345. toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
  346. toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
  347. toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
  348. toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
  349. toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
  350. toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
  351. toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
  352. toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
  353. toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
  354. toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
  355. toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
  356. toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
  357. toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
  358. toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
  359. toolkit/workspace/precompiled/LM_catgame.py +0 -74
  360. toolkit/workspace/precompiled/LM_cct.mpy +0 -0
  361. toolkit/workspace/precompiled/LM_co2.mpy +0 -0
  362. toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
  363. toolkit/workspace/precompiled/LM_demo.py +0 -85
  364. toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
  365. toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
  366. toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
  367. toolkit/workspace/precompiled/LM_distance.py +0 -88
  368. toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
  369. toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
  370. toolkit/workspace/precompiled/LM_i2c.py +0 -44
  371. toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
  372. toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  373. toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
  374. toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  375. toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
  376. toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
  377. toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
  378. toolkit/workspace/precompiled/LM_oled.mpy +0 -0
  379. toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
  380. toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  381. toolkit/workspace/precompiled/LM_pet_feeder.py +0 -76
  382. toolkit/workspace/precompiled/LM_ph_sensor.py +0 -51
  383. toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  384. toolkit/workspace/precompiled/LM_rest.mpy +0 -0
  385. toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
  386. toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
  387. toolkit/workspace/precompiled/LM_robustness.py +0 -73
  388. toolkit/workspace/precompiled/LM_switch.mpy +0 -0
  389. toolkit/workspace/precompiled/LM_system.mpy +0 -0
  390. toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  391. toolkit/workspace/precompiled/reset.mpy +0 -0
  392. toolkit/workspace/precompiled/uapi.js +0 -76
  393. toolkit/workspace/precompiled/udashboard.js +0 -137
  394. toolkit/workspace/precompiled/ustyle.css +0 -28
  395. toolkit/workspace/precompiled/uwidgets.js +0 -179
  396. /toolkit/user_data/node_config_archive/.include → /micrOS/source/config/_git.keep +0 -0
  397. /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
  398. /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
  399. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
  400. {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/top_level.txt +0 -0
micrOS/source/LM_i2c.py DELETED
@@ -1,44 +0,0 @@
1
- from microIO import physical_pin, pinmap_dump
2
-
3
- __I2C = None
4
-
5
-
6
- def __init():
7
- global __I2C
8
- if __I2C is None:
9
- from machine import Pin, I2C
10
- __I2C = I2C(-1, Pin(physical_pin('i2c_scl')), Pin(physical_pin('i2c_sda')))
11
- return __I2C
12
-
13
-
14
- def scan():
15
- """
16
- I2C scan function - experimental
17
- :return list: list of devices
18
- """
19
- # https://docs.micropython.org/en/latest/library/machine.I2C.html
20
- return __init().scan()
21
-
22
-
23
- #######################
24
- # LM helper functions #
25
- #######################
26
-
27
- def pinmap():
28
- """
29
- [i] micrOS LM naming convention
30
- Shows logical pins - pin number(s) used by this Load module
31
- - info which pins to use for this application
32
- :return dict: pin name (str) - pin value (int) pairs
33
- """
34
- return pinmap_dump(['i2c_scl', 'i2c_sda'])
35
-
36
-
37
- def help(widgets=False):
38
- """
39
- [i] micrOS LM naming convention - built-in help message
40
- :return tuple:
41
- (widgets=False) list of functions implemented by this application
42
- (widgets=True) list of widget json for UI generation
43
- """
44
- return 'scan', 'pinmap'
@@ -1,57 +0,0 @@
1
- from InterConnect import send_cmd, host_cache
2
- from Debug import errlog_add
3
-
4
-
5
- def sendcmd(*args, **kwargs):
6
- """
7
- Implements send command function towards micrOS devices
8
- example: sendcmd "hello" host="IP/hostname.local") OR sendcmd host="IP/hostname.local" cmd="system rssi")
9
- :param host[0]: host IP or Hostname
10
- :param cmd[1]: command - module func arg(s)
11
- :return str: reply
12
- """
13
- def __send(_host, _cmd):
14
- try:
15
- out = send_cmd(_host, _cmd)
16
- except Exception as e:
17
- out = []
18
- errlog_add(f'[intercon] sendcmd: {e}')
19
- return out
20
-
21
- host = kwargs.get('host', None)
22
- cmd = kwargs.get('cmd', None)
23
-
24
- # Host correction (lm_exec) if keyword-arg 'host' was not found
25
- if host is None:
26
- host = args[0]
27
- args = args[1:]
28
-
29
- # Cmd correction (lm_exec) if keyword-arg was not found
30
- if cmd is None:
31
- cmd = ''.join(args)
32
- return __send(host, cmd)
33
-
34
-
35
- def addr_cache():
36
- """
37
- Dump intercon connection cache
38
- :return dict: device-ip pairs
39
- """
40
- return host_cache()
41
-
42
-
43
- #######################
44
- # LM helper functions #
45
- #######################
46
-
47
- def help(widgets=False):
48
- """
49
- [i] micrOS LM naming convention - built-in help message
50
- :return tuple:
51
- (widgets=False) list of functions implemented by this application
52
- (widgets=True) list of widget json for UI generation
53
- """
54
- return 'sendcmd "hello" host="IP/hostname.local")',\
55
- 'sendcmd host="IP/hostname.local" cmd="system rssi")',\
56
- 'example: intercon sendcmd "10.0.1.84" "system rssi" OR intercon sendcmd "system rssi" host="node01.local"', \
57
- 'addr_cache'
@@ -1,318 +0,0 @@
1
- import uasyncio as asyncio
2
- from Common import micro_task
3
- from utime import localtime
4
- from Network import ifconfig
5
- from LM_oled import text, show, rect, pixel, clean, line, load_n_init as oled_lni
6
- from LM_ds18 import measure
7
- from LM_system import top
8
- from microIO import physical_pin, pinmap_dump
9
- from neopixel import NeoPixel
10
- from machine import Pin
11
- try:
12
- from LM_gameOfLife import next_gen as gol_nextgen, reset as gol_reset
13
- except:
14
- gol_nextgen = None # Optional function handling
15
-
16
- class KC:
17
- INITED = False # Auto init module feature
18
- DP_main_page = True # store display logical state: ON (main page) / OFF (screen saver)
19
- DP_cnt = 0 # display "count back", when 0 go to sleep -> OFF
20
- DP_cnt_default = None # store calculated sequence to sleep 30sec/period_ms
21
- NEOPIXEL_OBJ = None # Neopixel LED handler object
22
- COLOR_WHEEL = None # LED color wheel generator object for animation
23
- NEOPIXEL_BR = 30 # default neopixel brightness
24
-
25
- #############################
26
- # INTERNAL FUNCTIONS #
27
- #############################
28
-
29
-
30
- async def _screen_saver(scale=2):
31
- """
32
- Conway's game of life screen saver simulation
33
- :param scale: default (2) game of life matrix (16x32) upscale to real display size 32x64
34
- """
35
- # Default mode
36
- if gol_nextgen is None:
37
- return # screen off - no screen saver...
38
- # Screen saver mode
39
- matrix = gol_nextgen(raw=True)
40
- if matrix is None:
41
- # Reset Game of life
42
- gol_reset()
43
- # quick view - show (enable) main page
44
- KC.DP_main_page = True
45
- else:
46
- # Update display with Conway's Game of Life
47
- clean()
48
- for line_idx, _line in enumerate(matrix):
49
- for x_idx, v in enumerate(_line):
50
- if scale == 1:
51
- pixel(x_idx, line_idx, color=v)
52
- else:
53
- rect(x_idx*scale, line_idx*scale, w=scale, h=scale, state=v, fill=True)
54
- show()
55
-
56
-
57
- def _color_wheel():
58
- """
59
- RGB LED color wheel generator - rainbow
60
- """
61
- max_val = 10 # normally up to 255, but must be limited due to heat problems (4%)
62
- half_val = max_val // 2
63
- colors = ((0, 0, half_val), (0, 0, max_val), (0, half_val, max_val), (0, max_val, half_val), (0, max_val, 0),
64
- (half_val, max_val, 0), (max_val, half_val, 0), (max_val, 0, 0), (half_val, 0, 0), (max_val, 0, half_val),
65
- (half_val, 0, max_val), (0, 0, half_val))
66
- while True:
67
- # Loop through the colors to generate smooth transitions
68
- for i in range(len(colors) - 1):
69
- start_color = colors[i]
70
- end_color = colors[i + 1]
71
- # Generate a smooth transition from start_color to end_color
72
- for j in range(5): # Adjust this value for smoother or faster transition
73
- # Linear interpolation for each color component
74
- yield tuple(int(start + (end - start) * j / 10) for start, end in zip(start_color, end_color))
75
-
76
-
77
- async def _main_page():
78
- """
79
- Run display content refresh
80
- # H:M
81
- S/A: 1.92
82
- 40.0 C
83
- """
84
- def _timer():
85
- # 5x5 px cube (25px overall)
86
- _offset, _l_width = 2, 5 # Initial size + positioning
87
- _view = int(25*(KC.DP_cnt/KC.DP_cnt_default)) # overall pixel to be visualized
88
- _complete_lines = int(_view / _l_width) # complete lines number
89
- _sub_line = _view - (_complete_lines*_l_width) # incomplete line width
90
- for _l in range(0, 5):
91
- if _l < _complete_lines:
92
- line(0+_offset, _l+_offset, _l_width+_offset, _l+_offset)
93
- else:
94
- line(0+_offset, _l+_offset, _sub_line+_offset, _l+_offset)
95
- break
96
-
97
- def _cpu_mem():
98
- sys_usage = top()
99
- cpu = sys_usage.get('CPU load [%]', 100)
100
- cpu = 100 if cpu > 100 else cpu # limit cpu overload in visualization
101
- mem = sys_usage.get('Mem usage [%]', 100)
102
- _cpu_limit, _mem_limit = cpu > 90, mem > 70 # fill indicator (limit)
103
- _offset, _height = 1, 6
104
- _cpu, _mem = int(_height * (cpu/100)), int(_height * (mem/100))
105
- rect(55, _height+_offset-_cpu, w=3, h=_cpu+_offset, fill=_cpu_limit) # cpu usage indicator
106
- rect(60, _height+_offset-_mem, w=3, h=_mem+_offset, fill=_mem_limit) # memory usage indicator
107
-
108
- # Clean display and collect input data: time, network mode, IP address
109
- clean()
110
- ltime = localtime()
111
- h = f"0{ltime[-5]}" if len(str(ltime[-5])) < 2 else ltime[-5]
112
- m = f"0{ltime[-4]}" if len(str(ltime[-4])) < 2 else ltime[-4]
113
- nwmd, nwif = ifconfig()
114
- nwmd, devip = nwmd[0] if len(nwmd) > 0 else "0", ".".join(nwif[0].split(".")[-2:])
115
-
116
- # Draw data to display
117
- _timer() # Draw display timer (until screen saver)
118
- _cpu_mem() # Draw cpu and memory indicator
119
- text(f"{h}:{m}", x=12, y=1) # Header: time
120
- text(f"{nwmd}:{devip}", x=4, y=15) # Network mode and IP
121
- try:
122
- text(f"{round(tuple(measure().values())[0], 1)} C", x=4, y=25) # ds18 sensor value
123
- except Exception:
124
- text("? C", x=4, y=25) # ds18 read issue (default: ?)
125
- show()
126
- return "Display show"
127
-
128
-
129
- async def _task(period_ms):
130
- """
131
- Async display refresh task
132
- - main page (main mode) - auto sleep after 30 sec
133
- - screen saver (sleep mode)
134
- """
135
- # Auto init keychain module (if needed) - failsafe
136
- if not KC.INITED:
137
- _v = load_n_init()
138
- if not KC.INITED:
139
- return _v
140
-
141
- KC.DP_cnt_default = int(30_000 / period_ms) # After 30 sec go to sleep mode
142
- KC.DP_cnt = KC.DP_cnt_default # Set sleep counter
143
- fast_period = int(period_ms/3) # Calculate faster refresh period
144
- fast_period = fast_period if fast_period > 100 else 100
145
-
146
- # Run keychain main async loop, with update ID: kc._display
147
- with micro_task(tag="kc._display") as my_task:
148
- while True:
149
- if KC.DP_main_page:
150
- # [MAIN MODE] Execute main page
151
- await _main_page() #1 Run main page function
152
- my_task.out = f'main page: {KC.DP_cnt}' #2 Update task data for (task show kc._display)
153
- KC.DP_cnt -= 1 #3 Update sleep counter
154
- # Async sleep - feed event loop
155
- await asyncio.sleep_ms(period_ms)
156
- else:
157
- # [SLEEP MODE] Execute screen saver page
158
- await _screen_saver() # Run sleep page function
159
- # Async sleep - feed event loop
160
- await asyncio.sleep_ms(fast_period)
161
-
162
- # Auto sleep event handler - off event - go to (sleep mode)
163
- if KC.DP_cnt <= 0:
164
- KC.DP_main_page = False #1 disable main screen
165
- clean() #2 clean screen
166
- show() #3 show cleaned display
167
- KC.DP_cnt = KC.DP_cnt_default #4 reset sleep counter to default
168
- my_task.out = 'sleep...'
169
- neopixel_color_wheel() # update neopixel color wheel
170
-
171
-
172
- def _boot_page(msg):
173
- clean()
174
- msg_len = len(msg)*8 # message text length in pixels
175
- x_offset = int((64 - msg_len)/2) # x (width) center-ing offset
176
- text(msg, x=x_offset, y=11) # y(height):32 TODO: Auto positioning in y axes (multi line...)
177
- show()
178
-
179
-
180
- #############################
181
- # PUBLIC FUNCTIONS #
182
- #############################
183
-
184
- def load_n_init(width=64, height=32, bootmsg="micrOS"):
185
- """
186
- Init OLED display 64x32 (default)
187
- Init Neopixel LED (1 segment)
188
- :param width: screen width (pixel)
189
- :param height: screen height (pixel)
190
- :param bootmsg: First text on page at bootup, default: "micrOS"
191
- """
192
- KC.COLOR_WHEEL = _color_wheel() #1 Init neopixel color wheel generator
193
- try:
194
- oled_lni(width, height, brightness=20) #2 Init oled display
195
- _boot_page(bootmsg) #3 Show boot page text
196
- KC.INITED = True # Set display was successfully inited (for _task auto init)
197
- return "OLED INIT OK"
198
- except Exception as e:
199
- KC.INITED = False # display init failed (for _task auto init)
200
- return f"OLED INIT NOK: {e}"
201
-
202
-
203
- def display(period=1000):
204
- """
205
- Create kc._display task - refresh loop
206
- :param period: display refresh period in ms (min. 500ms)
207
- """
208
- # [!] ASYNC TASK CREATION [1*] with async task callback + taskID (TAG) handling
209
- period_ms = 500 if period < 500 else period
210
- state = micro_task(tag="kc._display", task=_task(period_ms=period_ms))
211
- return "Starting" if state else "Already running"
212
-
213
-
214
- def temperature():
215
- """
216
- Measure ds18B20 temperature sensor
217
- """
218
- return measure()
219
-
220
-
221
- def neopixel_color_wheel(br=None):
222
- """
223
- Neopixel color wheel
224
- :param br: brightness value 0-100 percent
225
- :param run: run led update / disable
226
- """
227
- def _init():
228
- if KC.NEOPIXEL_OBJ is None:
229
- neopixel_pin = Pin(physical_pin('neop')) # Get Neopixel pin from LED PIN pool
230
- KC.NEOPIXEL_OBJ = NeoPixel(neopixel_pin, n=1) # initialize for max 1 segment
231
- return KC.NEOPIXEL_OBJ
232
- # INIT
233
- neo_led = _init()
234
- if br is None or not isinstance(br, int): # Optional brightness param handling (load from cache)
235
- br = KC.NEOPIXEL_BR
236
- else:
237
- KC.NEOPIXEL_BR = br # update neopixel brightness cache
238
- if KC.COLOR_WHEEL is None:
239
- KC.COLOR_WHEEL = _color_wheel() # init color wheel generator
240
- # UPDATE
241
- r, g, b = next(KC.COLOR_WHEEL) # get next color
242
- br = br if br == 100 else br/100 # calculate brightness multiplier
243
- r, g, b = int(r*br), int(g*br), int(b*br) # apply brightness parameter
244
- neo_led[0] = (r, g, b) # Set LED element color
245
- neo_led.write() # Send data to LED device
246
- return {'R': r, 'G': g, 'B': b, 'S': 1, 'br': br} # Return verdict
247
-
248
-
249
- def display_toggle():
250
- """
251
- Display mode toggle (main/screensaver)
252
- """
253
- KC.DP_main_page = not KC.DP_main_page
254
- if not KC.DP_main_page:
255
- # Reset display counter when goes to sleep
256
- KC.DP_cnt = KC.DP_cnt_default
257
- v = 'main view' if KC.DP_main_page else 'screensaver'
258
- return f"Display mode: {v}"
259
-
260
-
261
- def neopixel_toggle():
262
- """
263
- Disable/Enable neopixel LED (brightness 0/default)
264
- """
265
- KC.NEOPIXEL_BR = 0 if KC.NEOPIXEL_BR > 0 else 30
266
- v = 'disabled' if KC.NEOPIXEL_BR == 0 else 'enabled'
267
- return f"Neopixel: {v} br: {KC.NEOPIXEL_BR}"
268
-
269
- def press_event():
270
- """
271
- IRQ1 keychain module control function
272
- - neopixel ON/OFF
273
- - display wake-up (ON)
274
- """
275
- # If display is ON call neopixel toggle function
276
- if KC.DP_main_page:
277
- # Reset display counter
278
- KC.DP_cnt = KC.DP_cnt_default
279
- # Neopixel color wheel disable/enable
280
- return neopixel_toggle()
281
- # Wake display
282
- KC.DP_main_page = True
283
- return f"Display mode: main view"
284
-
285
-
286
- def lmdep():
287
- """
288
- Load Module dependencies
289
- """
290
- return 'oled', 'ds18', 'gameOfLife'
291
-
292
-
293
- def pinmap():
294
- """
295
- PIN MAP dump
296
- """
297
- from LM_oled import pinmap as o_pmp
298
- from LM_ds18 import pinmap as t_pmp
299
- pmp = o_pmp()
300
- pmp.update(t_pmp())
301
- pmp.update(pinmap_dump(['neop']))
302
- return pmp
303
-
304
-
305
- def help(widgets=False):
306
- """
307
- [i] micrOS LM naming convention - built-in help message
308
- :return tuple:
309
- (widgets=False) list of functions implemented by this application
310
- (widgets=True) list of widget json for UI generation
311
- """
312
- return ('load_n_init width=64 height=32 bootmsg="micrOS"',
313
- 'temperature', 'display period>=1000',
314
- 'press_event',
315
- 'display_toggle',
316
- 'neopixel_toggle',
317
- 'neopixel_color_wheel br=<0-100>',
318
- 'pinmap', 'lmdep')
@@ -1,126 +0,0 @@
1
- from os import listdir, remove
2
- from sys import modules
3
- from Common import socket_stream
4
-
5
- WEB_EXT = ('html', 'js', 'css')
6
-
7
- @socket_stream
8
- def listmods(msgobj=None):
9
- """
10
- Load module package manager
11
- - list all load modules
12
- """
13
- # Dump available LMs
14
- msg_buf = []
15
- for k in (res.replace('LM_', '') for res in listdir()
16
- if res.startswith('LM_') or res.split('.')[-1] in WEB_EXT):
17
- if msgobj is None:
18
- msg_buf.append(f' {k}')
19
- else:
20
- msgobj(f' {k}')
21
- return msg_buf if len(msg_buf) > 0 else ''
22
-
23
-
24
- def delmod(mod=None):
25
- """
26
- Module package manager
27
- :param mod:
28
- Delete Load Module with full name: module.py or module.mpy
29
- OR delete any web resource: *.js, *.css, *.html
30
- """
31
- if mod is not None and (mod.endswith('py') or mod.split('.')[-1] in WEB_EXT):
32
- # LM exception list - system and lmpacman cannot be deleted
33
- if 'lmpacman.' in mod or 'system.' in mod:
34
- return f'Load module {mod} is in use, skip delete.'
35
- try:
36
- to_remove = mod if mod.split('.')[-1] in WEB_EXT else f'LM_{mod}'
37
- remove(to_remove)
38
- return f'Delete module: {mod}'
39
- except Exception as e:
40
- return f'Cannot delete: {mod}: {e}'
41
- return f'Invalid value: {mod}'
42
-
43
-
44
- def del_duplicates():
45
- """
46
- Load module package manager (Not just load modules)
47
- - delete duplicated .mpy and .py resources, keep .mpy resource!
48
- """
49
- msg_buf = []
50
- py = list((res.split('.')[0] for res in listdir() if res.endswith('.py'))) # Normally smaller list
51
- mpy = (res.split('.')[0] for res in listdir() if res.endswith('.mpy'))
52
- for m in mpy:
53
- # Iterate over mpy resources
54
- state = True
55
- if m in py and m != 'main':
56
- to_delete = f'{m}.py'
57
- try:
58
- remove(to_delete)
59
- except:
60
- state = False
61
- msg_buf.append(f' Delete {to_delete} {state}')
62
- return '\n'.join(msg_buf) if len(msg_buf) > 0 else 'Nothing to delete.'
63
-
64
-
65
- def module(unload=None):
66
- """
67
- List / unload loaded upython Load Modules
68
- :param unload: module name to unload
69
- :param unload: None - list active modules
70
- :return str: verdict
71
- """
72
- if unload is None:
73
- return list(modules.keys())
74
- if unload in modules.keys():
75
- del modules[unload]
76
- return f"Module unload {unload} done."
77
- return f"Module unload {unload} failed."
78
-
79
-
80
- @socket_stream
81
- def cachedump(cdel=None, msgobj=None):
82
- """
83
- Cache system persistent data storage files (.pds)
84
- """
85
- if cdel is None:
86
- # List pds files aka application cache
87
- msg_buf = []
88
- for pds in (_pds for _pds in listdir() if _pds.endswith('.pds')):
89
- with open(pds, 'r') as f:
90
- if msgobj is None:
91
- msg_buf.append(f'{pds}: {f.read()}')
92
- else:
93
- msgobj(f'{pds}: {f.read()}')
94
- return msg_buf if len(msg_buf) > 0 else ''
95
- # Remove given pds file
96
- try:
97
- remove(f'{cdel}.pds')
98
- return f'{cdel}.pds delete done.'
99
- except:
100
- return f'{cdel}.pds not exists'
101
-
102
-
103
- @socket_stream
104
- def micros_checksum(msgobj=None):
105
- from hashlib import sha1
106
- from binascii import hexlify
107
- from Config import cfgget
108
-
109
- for f_name in (_pds for _pds in listdir() if _pds.endswith('py')):
110
- with open(f_name, 'rb') as f:
111
- cs = hexlify(sha1(f.read()).digest()).decode('utf-8')
112
- msgobj(f"{cs} {f_name}")
113
- # GC collect?
114
- return f"micrOS version: {cfgget('version')}"
115
-
116
-
117
- def help(widgets=False):
118
- """
119
- [i] micrOS LM naming convention - built-in help message
120
- :return tuple:
121
- (widgets=False) list of functions implemented by this application
122
- (widgets=True) list of widget json for UI generation
123
- """
124
- return 'listmods', 'delmod mod=<module>.py/.mpy or .js/.html/.css', 'del_duplicates',\
125
- 'module unload="LM_rgb/None"',\
126
- 'cachedump cdel="rgb.pds/None"', 'micros_checksum'