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
@@ -0,0 +1,156 @@
1
+ import sys
2
+ import os
3
+ import re
4
+
5
+ try:
6
+ import readline # Linux/macOS
7
+ except ImportError:
8
+ import pyreadline3 as readline # Windows (PowerShell, CMD)
9
+
10
+ try:
11
+ from .TerminalColors import Colors as color
12
+ except:
13
+ from TerminalColors import Colors as color
14
+
15
+
16
+ ANSI_ESCAPE_RE = re.compile(r"\x1B\[[0-?]*[ -/]*[@-~]")
17
+
18
+
19
+ class CommandInterface:
20
+ def __init__(self, prompt):
21
+ self._prompt = ""
22
+ self._prompt_plain = ""
23
+ self._last_rendered_length = 0
24
+ self.prompt = prompt
25
+ self.command_history = ["help"]
26
+ self.history_file = os.path.expanduser("~/.micrOS_cmd_history") # History file (Linux/macOS)
27
+
28
+ # Configure readline
29
+ self.load_history()
30
+ readline.set_completer_delims("") # Ensure entire command is considered
31
+ readline.set_completer(self.autocomplete)
32
+ # Check if we're running on macOS using libedit
33
+ if "libedit" in readline.__doc__:
34
+ readline.parse_and_bind("bind ^I rl_complete") # macOS alternative
35
+ else:
36
+ readline.parse_and_bind("tab: complete") # Linux/GNU readline
37
+ readline.set_pre_input_hook(self.pre_input_hook)
38
+ readline.set_completion_display_matches_hook(self.completion_display)
39
+
40
+ def __auto_clear_history(self):
41
+ cmd_history = []
42
+ # Load file history in order - skip duplicates
43
+ if os.path.exists(self.history_file):
44
+ with open(self.history_file, "r") as f:
45
+ for line in reversed(f.readlines()):
46
+ if line in cmd_history:
47
+ continue
48
+ cmd_history.append(line)
49
+ # Save cleaned history to file
50
+ with open(self.history_file, "w") as f:
51
+ f.writelines(f"{item}\n" for item in reversed(cmd_history))
52
+
53
+ def load_history(self):
54
+ """Loads command history from a file if available."""
55
+ print(f"Command history: {self.history_file}")
56
+ try:
57
+ self.__auto_clear_history()
58
+ except Exception as e:
59
+ print(f"Auto clean history error: {e}")
60
+ if os.path.exists(self.history_file):
61
+ with open(self.history_file, "r") as f:
62
+ for line in f:
63
+ clean_line = line.strip()
64
+ if clean_line: # Avoid empty lines
65
+ self.command_history.append(clean_line)
66
+ readline.add_history(clean_line)
67
+
68
+ def save_history(self):
69
+ """Saves command history to a file."""
70
+ with open(self.history_file, "w") as f:
71
+ for cmd in self.command_history:
72
+ f.write(cmd + "\n")
73
+
74
+ def add_history(self, cmd):
75
+ """Updates readline history and command_history."""
76
+ cmd = cmd.strip()
77
+ if cmd and cmd != self.command_history[-1]: # Avoid duplicate last command
78
+ self.command_history.append(cmd)
79
+ readline.add_history(cmd)
80
+
81
+ def autocomplete(self, text, state):
82
+ """Autocomplete function: suggests previous commands."""
83
+ matches = list(dict.fromkeys(cmd for cmd in self.command_history if cmd.startswith(text)))
84
+ return matches[state] if state < len(matches) else None
85
+
86
+ @staticmethod
87
+ def _strip_ansi(value):
88
+ if not value:
89
+ return ""
90
+ return ANSI_ESCAPE_RE.sub("", value)
91
+
92
+ @property
93
+ def prompt(self):
94
+ return self._prompt
95
+
96
+ @prompt.setter
97
+ def prompt(self, value):
98
+ self._prompt = value
99
+ self._prompt_plain = self._strip_ansi(value)
100
+
101
+ def pre_input_hook(self):
102
+ """Ensures prompt visibility when scrolling through history."""
103
+ buffer = readline.get_line_buffer()
104
+ sys.stdout.write("\r")
105
+ rendered = f"{self.prompt}{buffer}"
106
+ sys.stdout.write(rendered)
107
+
108
+ visible_length = len(self._prompt_plain) + len(buffer)
109
+ if visible_length < self._last_rendered_length:
110
+ padding = " " * (self._last_rendered_length - visible_length)
111
+ sys.stdout.write(padding)
112
+ sys.stdout.write("\r")
113
+ sys.stdout.write(rendered)
114
+
115
+ sys.stdout.flush()
116
+ self._last_rendered_length = visible_length
117
+ readline.redisplay() # Ensures history navigation does not erase prompt
118
+
119
+ def completion_display(self, substitutions, matches, longest_match_length):
120
+ print("\nSuggestions:", ", ".join(matches))
121
+
122
+ #####################################
123
+ # STANDALONE TEST METHODS #
124
+ #####################################
125
+
126
+ def dummy_send_cmd(self, cmd, stream):
127
+ """TEST FUNCTION - OUTPUT STRUCTURE SIMULATION (Must remain unchanged)."""
128
+ dummy_reply = "Bye!" if cmd.strip() in ["exit", "reboot"] else f"Dummy reply for {cmd}"
129
+ if stream:
130
+ print(dummy_reply) # micrOS protocol: return response data
131
+ print(self.prompt, end="") # micrOS protocol: return prompt -> indicating ready state
132
+ else:
133
+ dummy_reply = f"{dummy_reply}\n{self.prompt}"
134
+ return dummy_reply
135
+
136
+ def dummy_run(self):
137
+ """TEST FUNCTION - Simulated interactive terminal."""
138
+ print(f"{self.prompt}", end="", flush=True)
139
+ while True:
140
+ try:
141
+ cmd = input()
142
+ output = self.dummy_send_cmd(cmd, stream=True)
143
+ self.add_history(cmd)
144
+ if 'Bye!' in str(output):
145
+ break
146
+ except KeyboardInterrupt:
147
+ print("\nExiting...")
148
+ break
149
+
150
+ self.save_history()
151
+ print("Session closed.")
152
+
153
+
154
+ if __name__ == "__main__":
155
+ shell = CommandInterface(prompt="<prompt_placeholder>$ ")
156
+ shell.dummy_run()
@@ -1,10 +1,11 @@
1
1
  import sys
2
- from sys import executable
3
2
  import os
4
3
  import subprocess
4
+ import getpass
5
+ USER = getpass.getuser()
5
6
  MYPATH = os.path.dirname(__file__)
6
7
  USER_DATA_OPT_INST_DONE = os.path.join(MYPATH, '../user_data/.opt_dep_install')
7
- INTERPRETER = executable
8
+ INTERPRETER = sys.executable
8
9
 
9
10
  sys.path.append(os.path.join(MYPATH, '../'))
10
11
  from DevEnvCompile import Compile
@@ -40,13 +41,39 @@ def list_packages():
40
41
  return AVAILABLE_PACKAGES
41
42
 
42
43
 
43
- def install_package(name):
44
+ def run_subprocess(cmd_list: list):
44
45
  try:
45
- state = subprocess.check_call([INTERPRETER, '-m', 'pip', 'install', name])
46
+ result = subprocess.run(
47
+ cmd_list,
48
+ capture_output=True, # Captures stdout and stderr
49
+ text=True, # Decodes output into strings
50
+ check=True # Raises CalledProcessError for non-zero exit codes
51
+ )
52
+ print(f"Subprocess output: {result.stdout}")
53
+ return True, result.stdout
54
+ except subprocess.CalledProcessError as e:
55
+ print(f"{TerminalColors.Colors.ERR}Subprocess error:{TerminalColors.Colors.NC} {e.stderr}")
56
+ return False, e.stderr
57
+
58
+ def install_package(name, additional_pip_param=None):
59
+ print(f"Install optional dependency (pip): {name}")
60
+ try:
61
+ if additional_pip_param is None:
62
+ state, out = run_subprocess([INTERPRETER, '-m', 'pip', 'install', '--user', USER, name])
63
+ else:
64
+ state, out = run_subprocess([INTERPRETER, '-m', 'pip', 'install', '--user', USER, name, additional_pip_param])
46
65
  if state:
47
66
  print(f"{TerminalColors.Colors.OK}[PIP] install {name} OK{TerminalColors.Colors.NC}")
48
67
  else:
49
68
  print(f"{TerminalColors.Colors.WARN}[PIP] install {name} NOK{TerminalColors.Colors.NC}")
69
+ if "--break-system-packages" in out:
70
+ # (Retry) Support system wide package install
71
+ install_package(name, additional_pip_param="--break-system-packages")
72
+ elif "This environment is externally managed" in out:
73
+ # (Retry-Fallback) Support brew installed python
74
+ if "brew install" in out:
75
+ print(f"Install optional dependency (brew): {name}")
76
+ state, out = run_subprocess(["brew", "install", name])
50
77
  except subprocess.CalledProcessError as e:
51
78
  print(f"{TerminalColors.Colors.ERR}[PIP] error: {e}{TerminalColors.Colors.NC}")
52
79
  state = False
@@ -6,17 +6,12 @@ import os
6
6
  import threading
7
7
  import subprocess
8
8
  import time
9
- from PyQt5.QtWidgets import QPushButton
10
- import PyQt5.QtCore as QtCore
11
- from PyQt5.QtCore import pyqtSlot
12
- from PyQt5.QtWidgets import *
13
- from PyQt5.QtGui import QIcon
14
- from PyQt5.QtGui import QTextCursor
15
- from PyQt5.QtWidgets import QApplication, QPlainTextEdit
16
- from PyQt5.QtCore import QThread, pyqtSignal
17
- from PyQt5.QtGui import QFont
18
- from PyQt5 import QtGui
19
- from PyQt5.QtGui import QPixmap
9
+
10
+ from PyQt5.QtWidgets import (QApplication, QPlainTextEdit, QPushButton, QProgressBar, QComboBox, QLabel, QCheckBox,
11
+ QLineEdit, QMessageBox, QWidget, QToolTip)
12
+ from PyQt5.QtCore import pyqtSlot, QThread, QSize, pyqtSignal
13
+ from PyQt5.QtGui import QIcon, QTextCursor, QFont, QPixmap
14
+
20
15
  import concurrent.futures
21
16
 
22
17
  MYPATH = os.path.dirname(__file__)
@@ -29,14 +24,14 @@ try:
29
24
  from . import socketClient
30
25
  from . import dashboard_apps
31
26
  from .lib import LocalMachine
32
- from .lib.file_extensions import check_all_extensions
27
+ from .lib.MicrosFiles import check_all_extensions
33
28
  except Exception as e:
34
29
  print("Import warning: {}".format(e))
35
30
  import MicrOSDevEnv
36
31
  import socketClient
37
32
  import dashboard_apps
38
33
  from lib import LocalMachine
39
- from lib.file_extensions import check_all_extensions
34
+ from lib.MicrosFiles import check_all_extensions
40
35
 
41
36
  APP_DIR = os.path.join(MYPATH, 'dashboard_apps')
42
37
 
@@ -454,7 +449,7 @@ class HeaderInfo:
454
449
  logo_path = os.path.join(MYPATH, '../media/logo_mini.png')
455
450
  button = QPushButton('', self.parent_obj)
456
451
  button.setIcon(QIcon(logo_path))
457
- button.setIconSize(QtCore.QSize(50, 50))
452
+ button.setIconSize(QSize(50, 50))
458
453
  button.setGeometry(20, 5, 50, 50)
459
454
  button.setToolTip(f"Open micrOS repo documentation\n{self.url}")
460
455
  button.setStyleSheet('border: 0px solid black;')
@@ -581,7 +576,7 @@ class ClusterStatus:
581
576
  except:
582
577
  hwuid = hello
583
578
  status = '🟢' if status else '🔴'
584
- msg = f"{status}{hwuid}|{devip}🏷{fuid} v:️{version}"
579
+ msg = f"{status}{hwuid} | {devip}🏷{fuid} v:{version}"
585
580
  return msg
586
581
 
587
582
  with concurrent.futures.ThreadPoolExecutor() as executor:
@@ -609,7 +604,7 @@ class QuickOTAUpload(QLabel):
609
604
  width = 200
610
605
  height = 15
611
606
  label = QLabel(self.parent_obj)
612
- label.setText("Quick LM OTA Upload")
607
+ label.setText("Drag-n-Drop OTA file upload")
613
608
  label.setGeometry(start_x, start_y, width, height)
614
609
  label.setStyleSheet("background-color: white")
615
610
 
@@ -638,14 +633,14 @@ class QuickOTAUpload(QLabel):
638
633
  pixmap = QPixmap(logo_path)
639
634
  pixmap = pixmap.scaled(100, 100)
640
635
  self.setPixmap(pixmap)
641
- self.setToolTip(f"Direct LM module upload to micrOS board via webrepl\nSimulator path: {os.path.join(MYPATH, 'workspace/simulator')}")
636
+ self.setToolTip(f"OTA File (py,mpy,js,html,css) upload to micrOS board via webrepl\nSimulator path: {os.path.join(MYPATH, 'workspace/simulator')}")
642
637
  self.setAcceptDrops(True)
643
638
 
644
639
  def get_upload_callback(self):
645
640
  if len(self.contents_path) == 0:
646
641
  self.parent_obj.console.append_output(f"Empty upload list.")
647
642
  else:
648
- if not self.parent_obj.start_bg_application_popup(text="QUICK LM OTA UPLOAD?",
643
+ if not self.parent_obj.start_bg_application_popup(text="OTA UPLOAD?",
649
644
  verify_data_dict={i+1: path for i, path in enumerate(self.contents_path)}):
650
645
  return
651
646
  self.parent_obj.on_click_lm_quick_update(upload_path_list=self.contents_path)
@@ -954,7 +949,7 @@ class micrOSGUI(QWidget):
954
949
  self.devenv_usb_deployment_is_active = True
955
950
  # Create a Thread with a function without any arguments
956
951
  self.console.append_output('[usb_deploy] |- start usb_deploy job')
957
- th = threading.Thread(target=self.devtool_obj.deploy_micros, kwargs={'restore': False, 'purge_conf': True},
952
+ th = threading.Thread(target=self.devtool_obj.deploy_micros, kwargs={'restore_config': False, "cleanup_workdir": True},
958
953
  daemon=DAEMON)
959
954
  th.start()
960
955
  self.bgjob_thread_obj_dict['usb_deploy'] = th
@@ -1064,7 +1059,7 @@ class micrOSGUI(QWidget):
1064
1059
  'forced LM_ prefix': not self.modifiers_obj.unsafe_ota_enabled}):
1065
1060
  return
1066
1061
 
1067
- self.console.append_output('[quick_ota] Update Load Modules over wifi')
1062
+ self.console.append_output('[quick_ota] Module upload over wifi')
1068
1063
  # Start init_progressbar
1069
1064
  pth = ProgressbarUpdateThread()
1070
1065
  pth.eta_sec = ProgressbarTimers.quick_ota
@@ -1219,7 +1214,7 @@ class micrOSGUI(QWidget):
1219
1214
 
1220
1215
  def main():
1221
1216
  app = QApplication(sys.argv)
1222
- app.setWindowIcon(QtGui.QIcon(os.path.join(MYPATH, '../media/logo.png')))
1217
+ app.setWindowIcon(QIcon(os.path.join(MYPATH, '../media/logo.png')))
1223
1218
  ex = micrOSGUI()
1224
1219
  ex.draw()
1225
1220
  sys.exit(app.exec_())
toolkit/micrOSlint.py CHANGED
@@ -18,7 +18,7 @@ MICROS_SOURCE_DIR = os.path.join(MYPATH, '../micrOS/source')
18
18
  RELEASE_INFO_PATH = os.path.join(MYPATH, '../micrOS/release_info/micrOS_ReleaseInfo')
19
19
 
20
20
  # MICROS LINTER CONFIG
21
- ALLOWED_LM_DEP_WARNS = 7 # ALLOWED NUMBER OF LM CORE DEPENDENCY (less is better)
21
+ ALLOWED_LM_DEP_WARNS = 3 # ALLOWED NUMBER OF LM CORE DEPENDENCY (less is better)
22
22
 
23
23
  def parse_micros_file_categories(verbose=True):
24
24
  """
@@ -27,11 +27,17 @@ def parse_micros_file_categories(verbose=True):
27
27
  file_ignore_list = ['.DS_Store']
28
28
  # micrOS file categories
29
29
  categories = {'core': [], 'load_module': [], 'pin_maps': [], 'other': []}
30
- files = [f for f in LocalMachine.FileHandler.list_dir(MICROS_SOURCE_DIR) if f not in file_ignore_list]
30
+ modules_path = os.path.join(MICROS_SOURCE_DIR, "modules")
31
+ web_path = os.path.join(MICROS_SOURCE_DIR, "web")
32
+ check_file = lambda _b, _f: os.path.isfile(os.path.join(_b, _f)) and _f not in file_ignore_list
33
+ root_files = [f for f in LocalMachine.FileHandler.list_dir(MICROS_SOURCE_DIR) if check_file(MICROS_SOURCE_DIR, f)]
34
+ module_files = [f"modules/{f}" for f in LocalMachine.FileHandler.list_dir(modules_path) if check_file(modules_path, f)]
35
+ web_files = [f"web/{f}" for f in LocalMachine.FileHandler.list_dir(web_path) if check_file(web_path, f)]
36
+ files = root_files + module_files + web_files
31
37
  for f in files:
32
- if f.startswith('LM_') and f.endswith('.py'):
38
+ if f.endswith('.py') and "LM_" in f:
33
39
  categories['load_module'].append(f)
34
- elif f.startswith('IO_') and f.endswith('.py'):
40
+ elif f.endswith('.py') and "IO_" in f:
35
41
  categories['pin_maps'].append(f)
36
42
  elif f.endswith('.py'):
37
43
  categories['core'].append(f)
@@ -172,14 +178,15 @@ def core_dep_checker(categories, verbose=True):
172
178
  def load_module_checker(categories, verbose=True):
173
179
 
174
180
  def _is_allowed(_relation):
175
- _allowed_whitelist = ['Common', 'microIO', 'Types']
181
+ _allowed_whitelist = ['Common', 'microIO', 'Types', 'urequests', 'Auth']
176
182
  _allowed = []
177
183
  for _allow in _relation:
178
184
  if _allow in _allowed_whitelist:
179
185
  _allowed.append(_allow)
180
186
  return _relation, _allowed
181
187
 
182
- lm_god_mode = ['LM_system.py', 'LM_lmpacman.py', 'LM_intercon.py']
188
+ lm_god_mode = ['modules/LM_system.py', 'modules/LM_pacman.py',
189
+ 'modules/LM_espnow.py', 'modules/LM_cluster.py']
183
190
  state_lm_dep = True
184
191
  verdict = []
185
192
  lm_resources = categories['load_module']
@@ -222,7 +229,12 @@ def _run_pylint(file_name):
222
229
  '--disable=broad-exception-caught', # Disable BROAD exception
223
230
  '--disable=broad-exception-raised', # Disable BROAD exception
224
231
  '--disable=too-many-return-statements', # :D I don't think so :D
225
- '--disable=too-many-branches' # :D I don't think so :D
232
+ '--disable=too-many-branches', # :D I don't think so :D
233
+ '--disable=too-many-positional-arguments', # :D I don't think so :D
234
+ '--disable=too-many-instance-attributes', # :D I don't think so :D
235
+ '--disable=wrong-import-position', # :D I don't think so :D !!! It is needed due to optimizations
236
+ '--disable=too-many-arguments', # :D I know what I am doing...
237
+ '--disable=multiple-statements', # :D I line oneliners
226
238
  ]
227
239
  if file_name in ['Tasks.py', 'microIO.py', 'Types.py']:
228
240
  pylint_opts.append('--disable=exec-used') # Disable micrOS execution core exec/eval warning
@@ -239,7 +251,7 @@ def _run_pylint(file_name):
239
251
 
240
252
  def run_pylint(categories, verbose=True, dry_run=False):
241
253
  # ERROR CONFIG: drop error if this is in pylint output
242
- error_msg_core = ['syntax-error', 'undefined-variable', 'no-member']
254
+ error_msg_core = ['syntax-error', 'undefined-variable', 'bad-indentation'] # 'no-member' ?
243
255
  # BYPASS 'no-member' due to duty and sleep_ms micropython functions is drops false alarm, etc.
244
256
  error_msg_lm = ['syntax-error', 'undefined-variable']
245
257
 
@@ -346,13 +358,18 @@ def _verdict_gen(master_key, categories, verbose=True):
346
358
  ref = ['?', []]
347
359
  spacer = "\n" + " " * 98
348
360
  ref_verdict = f'{ref[0]}:{spacer.join(ref[1])}' if verbose else ref[0]
361
+ if isinstance(ref_verdict, int):
362
+ ref_cnt = f"{Colors.BOLD}{ref_verdict}{Colors.NC}" if ref_verdict > 0 else ref_verdict
363
+ else:
364
+ ref_cnt = ref_verdict
349
365
 
350
366
  mlint = categories[master_key][master_module]['linter']['mlint'][0]
367
+ mlint = f"{Colors.OK}OK{Colors.NC}" if mlint else f"{Colors.WARN}NOK{Colors.NC}"
351
368
  try:
352
369
  pylint = categories[master_key][master_module]['linter']['pylint'][0]
353
370
  except Exception as e:
354
371
  pylint = f'{e}'
355
- long_verdict.append(f"\t{i+1}\t{lines}\t{master_module}{_spacer(master_module)}(mlint: {mlint})\t(pylint: {pylint})\t(ref.: {ref_verdict})")
372
+ long_verdict.append(f"\t{i+1}\t{lines}\t{master_module}{_spacer(master_module)}(mlint: {mlint})\t(pylint: {pylint})\t(ref.: {ref_cnt})")
356
373
  short_result[master_module] = [pylint, ref_verdict]
357
374
  return short_result, long_verdict
358
375
 
@@ -502,8 +519,9 @@ def diff_short_summary(summary, verbose=True):
502
519
 
503
520
  def save_system_analysis_json(categories):
504
521
  file_path = os.path.join(MYPATH, 'user_data/system_analysis.json')
522
+ sorted_categories = {key: categories[key] for key in sorted(categories)}
505
523
  with open(file_path, 'w') as json_file:
506
- json.dump(categories, json_file, indent=4)
524
+ json.dump(sorted_categories, json_file, indent=4)
507
525
  return f"system_analysis json saved to {file_path}"
508
526
 
509
527
  def save_system_summary_json(summary):
Binary file
@@ -51,6 +51,9 @@ i2s_sck = const(26) # Serial clock
51
51
  i2s_ws = const(25) # Word select
52
52
  i2s_sd = const(33) # Serial data
53
53
 
54
+ tx = const(50)
55
+ rx = const(51)
56
+
54
57
 
55
58
  # EXTERNAL EVENT IRQ
56
59
  irq1 = const(4) # D4 - event irq pin
@@ -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
+
@@ -0,0 +1,84 @@
1
+ import os
2
+ import time
3
+ MYPATH = os.path.dirname(__file__)
4
+
5
+ JPEG = None
6
+ XCLK_20MHz = None
7
+ PSRAM = None
8
+ FRAME_SVGA = None
9
+ FRAME_HD = None
10
+ FRAME_HVGA = None
11
+
12
+ EFFECT_NEG = None
13
+ EFFECT_BW = None
14
+ EFFECT_RED = None
15
+ EFFECT_GREEN = None
16
+ EFFECT_BLUE = None
17
+ EFFECT_RETRO = None
18
+ EFFECT_NONE = None
19
+
20
+ WB_SUNNY = None
21
+ WB_CLOUDY = None
22
+ WB_OFFICE = None
23
+ WB_HOME = None
24
+ WB_NONE = None
25
+
26
+
27
+ def _dummy_images_gen():
28
+ images = [os.path.join(MYPATH, 'view01.jpg'), os.path.join(MYPATH, 'view02.jpg')]
29
+ while True:
30
+ for img in images:
31
+ yield img
32
+
33
+ _DUMMY_IMAGES = _dummy_images_gen()
34
+
35
+ def init(*args, **kwargs):
36
+ print("Init dummy camera module")
37
+ print(args)
38
+ print(kwargs)
39
+ return True
40
+
41
+ def deinit(*args, **kwargs):
42
+ print("DeInit dummy camera module")
43
+ print(args)
44
+ print(kwargs)
45
+ return True
46
+
47
+ def framesize(*args, **kwargs):
48
+ pass
49
+
50
+ def flip(*args, **kwargs):
51
+ pass
52
+
53
+ def mirror(*args, **kwargs):
54
+ pass
55
+
56
+ def speffect(*args, **kwargs):
57
+ pass
58
+
59
+ def whitebalance(*args, **kwargs):
60
+ pass
61
+
62
+ def saturation(*args, **kwargs):
63
+ pass
64
+
65
+ def brightness(*args, **kwargs):
66
+ pass
67
+
68
+ def contrast(*args, **kwargs):
69
+ pass
70
+
71
+ def quality(*args, **kwargs):
72
+ pass
73
+
74
+ def capture():
75
+ print("Load dummy image")
76
+ image = next(_DUMMY_IMAGES)
77
+ try:
78
+ time.sleep(1)
79
+ with open(image, 'rb') as f:
80
+ image_bin = f.read()
81
+ return image_bin
82
+ except Exception as e:
83
+ print(f"Cannot load {image}: {e}")
84
+ return b''
@@ -1,4 +1,4 @@
1
- from sim_console import console
1
+ from sim_common import console
2
2
 
3
3
 
4
4
  class DHT22:
@@ -1,6 +1,54 @@
1
1
 
2
2
  MONO_VLSB = None
3
+ MONO_HMSB = None
3
4
 
4
5
 
5
6
  class FrameBuffer:
6
- pass
7
+
8
+ def __init__(self, *args, **kwargs):
9
+ pass
10
+
11
+ def fill(self, color=0):
12
+ pass
13
+
14
+ def show(self):
15
+ pass
16
+
17
+ def write_cmd(self, cmd):
18
+ pass
19
+
20
+ def reset(self):
21
+ pass
22
+
23
+ def poweron(self):
24
+ pass
25
+
26
+ def poweroff(self):
27
+ pass
28
+
29
+ def flip(self, *args, **kwargs):
30
+ pass
31
+
32
+ def rotate(self, *args, **kwargs):
33
+ pass
34
+
35
+ def text(self, string, x, y, color=0):
36
+ pass
37
+
38
+ def pixel(self, x, y, color=0):
39
+ pass
40
+
41
+ def line(self, x0, y0, x1, y1, color=0):
42
+ pass
43
+
44
+ def rect(self, x0, y0, x1, y1, color=0):
45
+ pass
46
+
47
+ def fill_rect(self, x, y, w, h, color=0):
48
+ pass
49
+
50
+ def blit(self, fbuf, x, y, key, palette):
51
+ pass
52
+
53
+ def scroll(self, dx, dy):
54
+ pass