micrOSDevToolKit 2.9.0__tar.gz → 2.9.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (374) hide show
  1. {microsdevtoolkit-2.9.0/micrOSDevToolKit.egg-info → microsdevtoolkit-2.9.4}/PKG-INFO +19 -6
  2. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/README.md +18 -5
  3. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +4 -4
  4. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Common.py +1 -1
  5. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Logger.py +11 -3
  6. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Server.py +28 -37
  7. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Shell.py +73 -74
  8. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4/micrOSDevToolKit.egg-info}/PKG-INFO +19 -6
  9. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/setup.py +1 -1
  10. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/DevEnvUSB.py +2 -1
  11. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/SystemTest.py +2 -1
  12. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/TerminalColors.py +4 -0
  13. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/micrOSClient.py +16 -16
  14. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/socketClient.py +2 -2
  15. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Common.mpy +0 -0
  16. microsdevtoolkit-2.9.4/toolkit/workspace/precompiled/Logger.mpy +0 -0
  17. microsdevtoolkit-2.9.4/toolkit/workspace/precompiled/Server.mpy +0 -0
  18. microsdevtoolkit-2.9.4/toolkit/workspace/precompiled/Shell.mpy +0 -0
  19. microsdevtoolkit-2.9.0/toolkit/workspace/precompiled/Logger.mpy +0 -0
  20. microsdevtoolkit-2.9.0/toolkit/workspace/precompiled/Server.mpy +0 -0
  21. microsdevtoolkit-2.9.0/toolkit/workspace/precompiled/Shell.mpy +0 -0
  22. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/LICENSE +0 -0
  23. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/MANIFEST.in +0 -0
  24. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/devToolKit.py +0 -0
  25. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/__init__.py +0 -0
  26. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/.DS_Store +0 -0
  27. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x64.exe +0 -0
  28. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x86.exe +0 -0
  29. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210x_Universal_Windows_Driver_ReleaseNotes.txt +0 -0
  30. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/SLAB_License_Agreement_VCP_Windows.txt +0 -0
  31. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm/silabser.sys +0 -0
  32. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm64/silabser.sys +0 -0
  33. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/dpinst.xml +0 -0
  34. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.cat +0 -0
  35. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.inf +0 -0
  36. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x64/silabser.sys +0 -0
  37. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x86/silabser.sys +0 -0
  38. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  39. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +0 -0
  40. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/media/__init__.py +0 -0
  41. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/media/dnd.png +0 -0
  42. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/media/logo.png +0 -0
  43. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/media/logo_mini.png +0 -0
  44. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/media/usb_port_icon.png +0 -0
  45. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/media/wifi_icon.png +0 -0
  46. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/__init__.py +0 -0
  47. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32-20241129-v1.24.1.bin +0 -0
  48. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32c3-20240222-v1.22.2.bin +0 -0
  49. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32cam-v1.21.0_camera.bin +0 -0
  50. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s2-20240602-v1.23.0.bin +0 -0
  51. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
  52. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s2-LOLIN_MINI-20240602-v1.23.0.bin +0 -0
  53. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s3-20240105-v1.22.1.bin +0 -0
  54. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s3-20241129-v1.24.1.bin +0 -0
  55. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
  56. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin +0 -0
  57. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2 +0 -0
  58. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/micropython/tinypico-20241129-v1.24.1.bin +0 -0
  59. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/.DS_Store +0 -0
  60. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Config.py +0 -0
  61. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Debug.py +0 -0
  62. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Espnow.py +0 -0
  63. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Hooks.py +0 -0
  64. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_esp32.py +0 -0
  65. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_esp32c3.py +0 -0
  66. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_esp32s2.py +0 -0
  67. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_esp32s3.py +0 -0
  68. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_m5stamp.py +0 -0
  69. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_qtpy.py +0 -0
  70. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_rp2.py +0 -0
  71. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/IO_tinypico.py +0 -0
  72. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/InterConnect.py +0 -0
  73. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Interrupts.py +0 -0
  74. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_L298N_DCmotor.py +0 -0
  75. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_L9110_DCmotor.py +0 -0
  76. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_OV2640.py +0 -0
  77. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_VL53L0X.py +0 -0
  78. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_aht10.py +0 -0
  79. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_bme280.py +0 -0
  80. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_buzzer.py +0 -0
  81. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_catgame.py +0 -0
  82. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_cct.py +0 -0
  83. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_co2.py +0 -0
  84. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_dashboard_be.py +0 -0
  85. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_demo.py +0 -0
  86. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_dht11.py +0 -0
  87. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_dht22.py +0 -0
  88. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_dimmer.py +0 -0
  89. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_distance.py +0 -0
  90. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_ds18.py +0 -0
  91. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_esp32.py +0 -0
  92. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_espnow.py +0 -0
  93. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_gameOfLife.py +0 -0
  94. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_genIO.py +0 -0
  95. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_haptic.py +0 -0
  96. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_i2c.py +0 -0
  97. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_i2s_mic.py +0 -0
  98. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_intercon.py +0 -0
  99. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_keychain.py +0 -0
  100. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_ld2410.py +0 -0
  101. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_light_sensor.py +0 -0
  102. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_lmpacman.py +0 -0
  103. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_neoeffects.py +0 -0
  104. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_neopixel.py +0 -0
  105. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_oled.py +0 -0
  106. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_oled_sh1106.py +0 -0
  107. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_oled_ui.py +0 -0
  108. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_oledui.py +0 -0
  109. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_pet_feeder.py +0 -0
  110. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_ph_sensor.py +0 -0
  111. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_presence.py +0 -0
  112. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_rencoder.py +0 -0
  113. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_rest.py +0 -0
  114. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_rgb.py +0 -0
  115. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_rgbcct.py +0 -0
  116. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_roboarm.py +0 -0
  117. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_robustness.py +0 -0
  118. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_rp2w.py +0 -0
  119. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_sdcard.py +0 -0
  120. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_servo.py +0 -0
  121. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_sound_event.py +0 -0
  122. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_stepper.py +0 -0
  123. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_switch.py +0 -0
  124. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_system.py +0 -0
  125. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_telegram.py +0 -0
  126. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_tinyrgb.py +0 -0
  127. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_trackball.py +0 -0
  128. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/LM_veml7700.py +0 -0
  129. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Network.py +0 -0
  130. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Notify.py +0 -0
  131. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Scheduler.py +0 -0
  132. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Tasks.py +0 -0
  133. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Time.py +0 -0
  134. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Types.py +0 -0
  135. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/Web.py +0 -0
  136. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/dashboard.html +0 -0
  137. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/index.html +0 -0
  138. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/main.py +0 -0
  139. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/micrOS.py +0 -0
  140. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/micrOSloader.py +0 -0
  141. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/microIO.py +0 -0
  142. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/reset.py +0 -0
  143. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/uapi.js +0 -0
  144. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/udashboard.js +0 -0
  145. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/urequests.py +0 -0
  146. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/ustyle.css +0 -0
  147. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/uwidgets.js +0 -0
  148. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOS/source/uwidgets_pro.js +0 -0
  149. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOSDevToolKit.egg-info/SOURCES.txt +0 -0
  150. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOSDevToolKit.egg-info/dependency_links.txt +0 -0
  151. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOSDevToolKit.egg-info/requires.txt +0 -0
  152. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/micrOSDevToolKit.egg-info/top_level.txt +0 -0
  153. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/setup.cfg +0 -0
  154. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/DevEnvCompile.py +0 -0
  155. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/DevEnvOTA.py +0 -0
  156. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/Gateway.py +0 -0
  157. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/LM_to_compile.dat +0 -0
  158. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/MicrOSDevEnv.py +0 -0
  159. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/__init__.py +0 -0
  160. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/AirQualityBME280.py +0 -0
  161. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -0
  162. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/BackupRestore.py +0 -0
  163. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/CCTDemo.py +0 -0
  164. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/CCTTest.py +0 -0
  165. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/CamStream.py +0 -0
  166. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/CatGame.py +0 -0
  167. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/Dimmer.py +0 -0
  168. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/GetVersion.py +0 -0
  169. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/MicrophoneTest.py +0 -0
  170. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/NeoEffectsDemo.py +0 -0
  171. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/NeopixelTest.py +0 -0
  172. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/PresenceTest.py +0 -0
  173. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/RGBTest.py +0 -0
  174. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/RoboArm.py +0 -0
  175. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/SED_test.py +0 -0
  176. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/Template_app.py +0 -0
  177. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/__init__.py +0 -0
  178. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/_capture.py +0 -0
  179. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/_micPlotting.py +0 -0
  180. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/_presencePlotting.py +0 -0
  181. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/dashboard_apps/uLightDemo.py +0 -0
  182. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/img_stream.html +0 -0
  183. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/index.html +0 -0
  184. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/LocalMachine.py +0 -0
  185. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/SafeInput.py +0 -0
  186. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/SearchDevices.py +0 -0
  187. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/SerialDriverHandler.py +0 -0
  188. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/__init__.py +0 -0
  189. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/file_extensions.py +0 -0
  190. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/macroScript.py +0 -0
  191. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/lib/pip_package_installer.py +0 -0
  192. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/micrOSdashboard.py +0 -0
  193. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/micrOSlint.py +0 -0
  194. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/.DS_Store +0 -0
  195. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/IO_darwin.py +0 -0
  196. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  197. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
  198. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/dht.cpython-312.pyc +0 -0
  199. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/dht.cpython-39.pyc +0 -0
  200. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/dotstar.cpython-312.pyc +0 -0
  201. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/dotstar.cpython-38.pyc +0 -0
  202. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/dotstar.cpython-39.pyc +0 -0
  203. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-312.pyc +0 -0
  204. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-38.pyc +0 -0
  205. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-39.pyc +0 -0
  206. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/esp32.cpython-312.pyc +0 -0
  207. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/esp32.cpython-38.pyc +0 -0
  208. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/esp32.cpython-39.pyc +0 -0
  209. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  210. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/framebuf.cpython-38.pyc +0 -0
  211. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/framebuf.cpython-39.pyc +0 -0
  212. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  213. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/machine.cpython-38.pyc +0 -0
  214. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/machine.cpython-39.pyc +0 -0
  215. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  216. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/micropython.cpython-38.pyc +0 -0
  217. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/micropython.cpython-39.pyc +0 -0
  218. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  219. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/neopixel.cpython-38.pyc +0 -0
  220. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/neopixel.cpython-39.pyc +0 -0
  221. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  222. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/network.cpython-38.pyc +0 -0
  223. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/network.cpython-39.pyc +0 -0
  224. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ntptime.cpython-312.pyc +0 -0
  225. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/onewire.cpython-312.pyc +0 -0
  226. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/onewire.cpython-38.pyc +0 -0
  227. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/onewire.cpython-39.pyc +0 -0
  228. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
  229. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
  230. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
  231. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  232. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/simgc.cpython-38.pyc +0 -0
  233. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/simgc.cpython-39.pyc +0 -0
  234. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  235. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/simulator.cpython-38.pyc +0 -0
  236. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/simulator.cpython-39.pyc +0 -0
  237. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/tinypico.cpython-312.pyc +0 -0
  238. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/tinypico.cpython-38.pyc +0 -0
  239. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/tinypico.cpython-39.pyc +0 -0
  240. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  241. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-38.pyc +0 -0
  242. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-39.pyc +0 -0
  243. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  244. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  245. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ustruct.cpython-312.pyc +0 -0
  246. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/ustruct.cpython-39.pyc +0 -0
  247. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/utime.cpython-312.pyc +0 -0
  248. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/utime.cpython-38.pyc +0 -0
  249. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/utime.cpython-39.pyc +0 -0
  250. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/webrepl.cpython-312.pyc +0 -0
  251. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/webrepl.cpython-38.pyc +0 -0
  252. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/__pycache__/webrepl.cpython-39.pyc +0 -0
  253. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/camera.py +0 -0
  254. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/dht.py +0 -0
  255. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/dotstar.py +0 -0
  256. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/ds18x20.py +0 -0
  257. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/esp32.py +0 -0
  258. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/framebuf.py +0 -0
  259. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/machine.py +0 -0
  260. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/micropython.py +0 -0
  261. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/neopixel.py +0 -0
  262. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/network.py +0 -0
  263. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/node_config.json +0 -0
  264. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/ntptime.py +0 -0
  265. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/onewire.py +0 -0
  266. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/sim_console.py +0 -0
  267. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/simgc.py +0 -0
  268. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/simulator.py +0 -0
  269. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/tinypico.py +0 -0
  270. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/uasyncio.py +0 -0
  271. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/usocket.py +0 -0
  272. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/ussl.py +0 -0
  273. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/ustruct.py +0 -0
  274. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/utime.py +0 -0
  275. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/view01.jpg +0 -0
  276. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/view02.jpg +0 -0
  277. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/simulator_lib/webrepl.py +0 -0
  278. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/user_data/.include +0 -0
  279. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/user_data/webhooks/generic.py +0 -0
  280. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/user_data/webhooks/macro.py +0 -0
  281. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/user_data/webhooks/template.macro +0 -0
  282. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/user_data/webhooks/template.py +0 -0
  283. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/__init__.py +0 -0
  284. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Config.mpy +0 -0
  285. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Debug.mpy +0 -0
  286. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Espnow.mpy +0 -0
  287. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Hooks.mpy +0 -0
  288. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
  289. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
  290. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
  291. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
  292. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_m5stamp.mpy +0 -0
  293. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
  294. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
  295. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
  296. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  297. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  298. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
  299. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_L9110_DCmotor.py +0 -0
  300. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
  301. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_VL53L0X.py +0 -0
  302. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
  303. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
  304. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_buzzer.mpy +0 -0
  305. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_catgame.py +0 -0
  306. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_cct.mpy +0 -0
  307. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_co2.mpy +0 -0
  308. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_dashboard_be.py +0 -0
  309. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_demo.py +0 -0
  310. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
  311. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
  312. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
  313. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_distance.mpy +0 -0
  314. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
  315. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_esp32.py +0 -0
  316. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_espnow.py +0 -0
  317. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_gameOfLife.mpy +0 -0
  318. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
  319. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_haptic.mpy +0 -0
  320. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_i2c.py +0 -0
  321. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
  322. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  323. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
  324. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_ld2410.mpy +0 -0
  325. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  326. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
  327. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
  328. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
  329. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_oled.mpy +0 -0
  330. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
  331. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  332. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
  333. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_pet_feeder.py +0 -0
  334. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_ph_sensor.py +0 -0
  335. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  336. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_rencoder.py +0 -0
  337. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_rest.mpy +0 -0
  338. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
  339. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_rgbcct.mpy +0 -0
  340. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
  341. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_robustness.py +0 -0
  342. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_rp2w.py +0 -0
  343. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_sdcard.py +0 -0
  344. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_servo.mpy +0 -0
  345. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_sound_event.mpy +0 -0
  346. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_stepper.mpy +0 -0
  347. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_switch.mpy +0 -0
  348. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_system.mpy +0 -0
  349. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  350. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_tinyrgb.mpy +0 -0
  351. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_trackball.mpy +0 -0
  352. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/LM_veml7700.mpy +0 -0
  353. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Network.mpy +0 -0
  354. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Notify.mpy +0 -0
  355. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  356. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Tasks.mpy +0 -0
  357. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Time.mpy +0 -0
  358. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Types.mpy +0 -0
  359. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/Web.mpy +0 -0
  360. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/_mpy.version +0 -0
  361. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/dashboard.html +0 -0
  362. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/index.html +0 -0
  363. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/main.py +0 -0
  364. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/micrOS.mpy +0 -0
  365. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  366. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/microIO.mpy +0 -0
  367. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/node_config.json +0 -0
  368. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/reset.mpy +0 -0
  369. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/uapi.js +0 -0
  370. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/udashboard.js +0 -0
  371. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/urequests.mpy +0 -0
  372. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/ustyle.css +0 -0
  373. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/uwidgets.js +0 -0
  374. {microsdevtoolkit-2.9.0 → microsdevtoolkit-2.9.4}/toolkit/workspace/precompiled/uwidgets_pro.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: micrOSDevToolKit
3
- Version: 2.9.0
3
+ Version: 2.9.4
4
4
  Summary: Development and deployment environment for micrOS, the diy micropython automation OS (IoT)
5
5
  Home-page: https://github.com/BxNxM/micrOS
6
6
  Author: Marcell Ban
@@ -107,13 +107,23 @@ I would suggest to use micrOS GUI as a primary interface for micrOS development
107
107
 
108
108
  <br/>
109
109
 
110
- ### 1. Install python3.9+
110
+ ## 1. Prerequisites
111
+
112
+ ### 1.1 Install python3.9+
111
113
 
112
114
  Link for python 3.9+ [download](https://www.python.org/downloads/release/python-390/)
113
115
 
114
116
  > Note: **Allow extend system path** with that python version (installation parameter) </br>
115
117
  > On **Windows**: RUN AS ADMINISTARTOR
116
118
 
119
+ ### 1.2 Install git
120
+
121
+ Link for git [download](https://git-scm.com/downloads)
122
+
123
+ > Git is a distributed version control system that helps developers track changes, collaborate on code, and manage project history efficiently.
124
+
125
+ It is needed to be able to download webrepl client (automatic), that is used for OverTheAir file transfers and other features.
126
+
117
127
  ----------------------------------------
118
128
 
119
129
  ### 2. Install micrOS devToolKit GUI
@@ -481,17 +491,20 @@ Version **3.0.0-0**
481
491
  Core:
482
492
  - Async SSL/TLS integration (micropython 1.22+ required)
483
493
  - urequest module async redesign for rest clients
484
- - Notify (telegram) + server (listener - chatbot)
494
+ - LM_telegram (Notify) + server (listener - chatbot)
485
495
  - Time (ntp location + sunset/sunrise api)
496
+ - ESP-NOW (peer-to-peer communication) integration into InterCon
497
+ - ??? New intercon syntax ???:
498
+ - rgb toggle >>RingLight.local
499
+ - similar as: intercon sendcmd host="RingLight.local" cmd="rgb toggle"
486
500
  ```
487
501
 
488
502
  Version **3.1.0-0**
489
503
 
490
504
  ```
491
505
  Core:
492
- - Async socket SSL/TLS integration (with auth.)
493
- - WebCli (http), ShellCli (terminal) and InterCon
494
- - Study of ESP-NOW (peer-to-peer communication) integration into InterCon (micropython requirements?)
506
+ - Async socket servers with SSL/TLS integration (with auth.)
507
+ - WebCli (https?), ShellCli (ssocket/sterminal) and InterCon
495
508
  ```
496
509
 
497
510
  Version **4.0.0-0**
@@ -79,13 +79,23 @@ I would suggest to use micrOS GUI as a primary interface for micrOS development
79
79
 
80
80
  <br/>
81
81
 
82
- ### 1. Install python3.9+
82
+ ## 1. Prerequisites
83
+
84
+ ### 1.1 Install python3.9+
83
85
 
84
86
  Link for python 3.9+ [download](https://www.python.org/downloads/release/python-390/)
85
87
 
86
88
  > Note: **Allow extend system path** with that python version (installation parameter) </br>
87
89
  > On **Windows**: RUN AS ADMINISTARTOR
88
90
 
91
+ ### 1.2 Install git
92
+
93
+ Link for git [download](https://git-scm.com/downloads)
94
+
95
+ > Git is a distributed version control system that helps developers track changes, collaborate on code, and manage project history efficiently.
96
+
97
+ It is needed to be able to download webrepl client (automatic), that is used for OverTheAir file transfers and other features.
98
+
89
99
  ----------------------------------------
90
100
 
91
101
  ### 2. Install micrOS devToolKit GUI
@@ -453,17 +463,20 @@ Version **3.0.0-0**
453
463
  Core:
454
464
  - Async SSL/TLS integration (micropython 1.22+ required)
455
465
  - urequest module async redesign for rest clients
456
- - Notify (telegram) + server (listener - chatbot)
466
+ - LM_telegram (Notify) + server (listener - chatbot)
457
467
  - Time (ntp location + sunset/sunrise api)
468
+ - ESP-NOW (peer-to-peer communication) integration into InterCon
469
+ - ??? New intercon syntax ???:
470
+ - rgb toggle >>RingLight.local
471
+ - similar as: intercon sendcmd host="RingLight.local" cmd="rgb toggle"
458
472
  ```
459
473
 
460
474
  Version **3.1.0-0**
461
475
 
462
476
  ```
463
477
  Core:
464
- - Async socket SSL/TLS integration (with auth.)
465
- - WebCli (http), ShellCli (terminal) and InterCon
466
- - Study of ESP-NOW (peer-to-peer communication) integration into InterCon (micropython requirements?)
478
+ - Async socket servers with SSL/TLS integration (with auth.)
479
+ - WebCli (https?), ShellCli (ssocket/sterminal) and InterCon
467
480
  ```
468
481
 
469
482
  Version **4.0.0-0**
@@ -13,7 +13,7 @@
13
13
  1
14
14
  ],
15
15
  "Server.py": [
16
- 9.52,
16
+ 9.5,
17
17
  3
18
18
  ],
19
19
  "Web.py": [
@@ -45,7 +45,7 @@
45
45
  29
46
46
  ],
47
47
  "Logger.py": [
48
- 8.78,
48
+ 8.75,
49
49
  4
50
50
  ],
51
51
  "Common.py": [
@@ -315,7 +315,7 @@
315
315
  },
316
316
  "summary": {
317
317
  "core": [
318
- 3275,
318
+ 3274,
319
319
  23
320
320
  ],
321
321
  "load": [
@@ -332,6 +332,6 @@
332
332
  ],
333
333
  "core_score": 9.06,
334
334
  "load_score": 8.22,
335
- "version": "2.9.0-0"
335
+ "version": "2.9.4-0"
336
336
  }
337
337
  }
@@ -210,7 +210,7 @@ def data_logger(f_name, data=None, limit=12, msgobj=None):
210
210
 
211
211
  def syslog(msg):
212
212
  """ Wrapper of errlog_add """
213
- return errlog_add(f"[U] {msg}")
213
+ return errlog_add(f"{msg}")
214
214
 
215
215
 
216
216
  def console(msg):
@@ -6,6 +6,7 @@ Designed by Marcell Ban aka BxNxM
6
6
  """
7
7
  from time import localtime
8
8
  from os import listdir, remove
9
+ from re import match
9
10
 
10
11
  #############################################
11
12
  # LOGGING WITH DATA ROTATION #
@@ -66,6 +67,8 @@ def log_get(f_name, msgobj=None):
66
67
  """
67
68
  err_cnt = 0
68
69
  try:
70
+ if msgobj is not None:
71
+ msgobj(f_name)
69
72
  with open(f_name, 'r') as f:
70
73
  eline = f.readline().strip()
71
74
  while eline:
@@ -73,7 +76,7 @@ def log_get(f_name, msgobj=None):
73
76
  err_cnt += 1 if "[ERR]" in eline else 0
74
77
  # GIVE BACK .log file contents
75
78
  if msgobj is not None:
76
- msgobj(eline)
79
+ msgobj(f"\t{eline}")
77
80
  eline = f.readline().strip()
78
81
  except:
79
82
  pass
@@ -82,8 +85,13 @@ def log_get(f_name, msgobj=None):
82
85
 
83
86
  def syslog(data=None, msgobj=None):
84
87
  if data is None:
85
- return log_get('err.log', msgobj)
86
- return logger(data, 'err.log', limit=6)
88
+ err_cnt = sum([log_get(f, msgobj) for f in listdir() if f.endswith(".sys.log")])
89
+ return err_cnt
90
+
91
+ _match = match(r"^\[([^\[\]]+)\]", data)
92
+ log_lvl = _match.group(1).lower() if _match else 'user'
93
+ f_name = f"{log_lvl}.sys.log" if log_lvl in ("err", "warn", "boot") else 'user.sys.log'
94
+ return logger(data, f_name, limit=4)
87
95
 
88
96
 
89
97
  def log_clean(msgobj=None):
@@ -114,7 +114,7 @@ class Client:
114
114
  console_write("[Client] NoCon: response>dev/nul")
115
115
 
116
116
  def send(self, response):
117
- # Implement in child class - synchronous send method
117
+ # Implement in child class - synchronous send (all) method
118
118
  pass
119
119
 
120
120
  async def close(self):
@@ -196,7 +196,9 @@ class ShellCli(Client, Shell):
196
196
 
197
197
  def send(self, response):
198
198
  """
199
- Send response to client with non-async function
199
+ Synchronous send function (with drain task)
200
+ - not used in Shell or ShellCli
201
+ - Note: it is a support function for synchronous scenarios: Server.reply_all
200
202
  """
201
203
  if self.connected:
202
204
  if self.prompt() != response:
@@ -219,8 +221,7 @@ class ShellCli(Client, Shell):
219
221
 
220
222
  async def __wait_for_drain(self):
221
223
  """
222
- Handle drain serialization
223
- - solve output data duplicate
224
+ Handle drain serialization - for synchronous send function
224
225
  """
225
226
  try:
226
227
  # send write buffer
@@ -233,55 +234,45 @@ class ShellCli(Client, Shell):
233
234
  # set drain free
234
235
  self.drain_event.set() # set drain free (True)
235
236
 
236
- async def close(self):
237
- Client.console(f"[ShellCli] Close connection {self.client_id}")
238
- self.send("Bye!\n")
239
- # Reset shell state machine
240
- self.reset()
241
- await asyncio.sleep_ms(50)
242
- # Used from Client parent class
243
- await super().close()
244
-
245
- async def __shell_cmd(self, request):
237
+ async def a_send(self, response, encode='utf8'):
246
238
  """
247
- Handle micrOS shell commands
239
+ Async send for Shell (new line + prompt$)
248
240
  """
249
- # Run micrOS shell with request string
250
- try:
251
- # Handle micrOS shell
252
- Client.console("[ShellCli] --- #Run shell")
253
- state = self.shell(request)
254
- if state:
255
- return False # exit_loop
256
- return True # exit_loop : Close session when shell returns False (auth Failed, etc.)
257
- except Exception as e:
258
- Client.console(f"[ShellCli] Shell exception: {e}")
259
- if "ECONNRESET" in str(e):
260
- return True # exit_loop
261
- self.send("[HA] Critical error - disconnect & hard reset")
262
- errlog_add("[ERR] Socket critical error - reboot")
263
- self.reboot()
241
+ if self.prompt() != response:
242
+ # [format] Add new line if not prompt
243
+ response = f"{response}\n"
244
+ await super().a_send(response, encode)
264
245
 
265
246
  async def run_shell(self):
266
247
  # Update server task output
267
248
  Manager().server_task_msg(','.join(list(Client.ACTIVE_CLIS)))
268
249
  # Init prompt
269
- self.send(self.prompt())
250
+ await self.a_send(self.prompt())
270
251
  # Run async connection handling
252
+ _exit = False
271
253
  while self.connected:
272
254
  try:
273
255
  # Read request msg from client
274
256
  state, request = await self.read()
275
257
  if state:
276
258
  break
277
- _exit = await self.__shell_cmd(request)
278
- if _exit:
279
- collect()
280
- break
259
+ # Run micrOS shell with request string
260
+ Client.console("[ShellCli] --- #Run shell")
261
+ # Shell -> True (OK) or False (NOK) -> NOK->Close session (auth Failed, etc.)
262
+ _exit = not await self.shell(request)
281
263
  except Exception as e:
282
- errlog_add(f"[ERR] handle_client: {e}")
264
+ errlog_add(f"[ERR] Shell client: {e}")
265
+ if "ECONNRESET" in str(e):
266
+ _exit = True # exit_loop
267
+ else:
268
+ await self.a_send("[HA] Critical error - disconnect & hard reset")
269
+ errlog_add("[ERR] Socket critical error - reboot")
270
+ await self.reboot()
271
+ if _exit:
272
+ collect()
283
273
  break
284
274
  # Close connection
275
+ await self.a_send("Bye!")
285
276
  await self.close()
286
277
 
287
278
 
@@ -418,7 +409,7 @@ class Server:
418
409
  """
419
410
  for _, cli in Client.ACTIVE_CLIS.items():
420
411
  if cli.connected:
421
- cli.send(msg)
412
+ cli.send(f"~~~ {msg}")
422
413
 
423
414
  def __del__(self):
424
415
  Client.console("[ socket server ] <<destructor>>")
@@ -25,7 +25,7 @@ from Debug import errlog_add
25
25
 
26
26
  class Shell:
27
27
  __slots__ = ['__devfid', '__auth_mode', '__hwuid', '__auth_ok', '__conf_mode']
28
- MICROS_VERSION = '2.9.0-0'
28
+ MICROS_VERSION = '2.9.4-0'
29
29
 
30
30
  def __init__(self):
31
31
  """
@@ -45,10 +45,8 @@ class Shell:
45
45
  except Exception as e:
46
46
  errlog_add(f"[ERR] micrOS version export failed (config): {e}")
47
47
 
48
- def send(self, msg):
49
- """
50
- Must be defined by child class...
51
- """
48
+ async def a_send(self, msg):
49
+ """ Must be defined by parent class... """
52
50
  pass
53
51
 
54
52
  def reset(self):
@@ -56,44 +54,43 @@ class Shell:
56
54
  self.__auth_ok = False
57
55
  self.__conf_mode = False
58
56
 
59
- def reboot(self, hard=False):
60
- """Reboot micropython VM"""
61
- self.send(f"{'[HARD] ' if hard else ''}Reboot micrOS system.")
62
- self.send("Bye!")
57
+ async def reboot(self, hard=False):
58
+ """ Reboot micropython VM """
59
+ await self.a_send(f"{'[HARD] ' if hard else ''}Reboot micrOS system.\nBye!")
63
60
  if hard:
64
61
  hard_reset()
65
62
  soft_reset()
66
63
 
67
64
  def prompt(self):
68
- """Generate prompt"""
65
+ """ Generate prompt """
69
66
  auth = "[password] " if self.__auth_mode and not self.__auth_ok else ""
70
67
  mode = "[configure] " if self.__conf_mode else ""
71
68
  return f"{auth}{mode}{self.__devfid} $ "
72
69
 
73
- def __auth(self, msg_list):
74
- """Authorize user"""
70
+ async def __auth(self, msg_list):
71
+ """ Authorize user """
75
72
  # Set user auth state
76
73
  if self.__auth_mode and not self.__auth_ok:
77
74
  # check password
78
75
  usrpwd = cfgget('appwd')
79
76
  if usrpwd == msg_list[0].strip():
80
77
  self.__auth_ok = True
81
- self.send("AuthOk")
78
+ await self.a_send("AuthOk")
82
79
  return True, []
83
- self.send("AuthFailed\nBye!")
80
+ await self.a_send("AuthFailed\nBye!")
84
81
  return False, []
85
82
  return True, msg_list
86
83
 
87
- def shell(self, msg):
84
+ async def shell(self, msg):
88
85
  """
89
86
  micrOS Shell main - input string handling
90
87
  :param msg: incoming shell command (command or load module call)
91
88
  """
92
- state = self.__shell(msg)
93
- self.send(self.prompt())
89
+ state = await self.__shell(msg)
90
+ await self.a_send(self.prompt())
94
91
  return state
95
92
 
96
- def __shell(self, msg):
93
+ async def __shell(self, msg):
97
94
  """
98
95
  Socket server - interpreter shell
99
96
  :param msg: socket input string
@@ -118,11 +115,11 @@ class Shell:
118
115
  # Hello message
119
116
  if msg_list[0] == 'hello':
120
117
  # For low level device identification - hello msg
121
- self.send(f"hello:{self.__devfid}:{self.__hwuid}")
118
+ await self.a_send(f"hello:{self.__devfid}:{self.__hwuid}")
122
119
  return True
123
120
 
124
121
  # [!] AUTH
125
- state, msg_list = self.__auth(msg_list)
122
+ state, msg_list = await self.__auth(msg_list)
126
123
  if not state:
127
124
  return False
128
125
  if len(msg_list) == 0:
@@ -131,7 +128,7 @@ class Shell:
131
128
  # Version handling
132
129
  if msg_list[0] == 'version':
133
130
  # For micrOS system version info
134
- self.send(str(Shell.MICROS_VERSION))
131
+ await self.a_send(str(Shell.MICROS_VERSION))
135
132
  return True
136
133
 
137
134
  # Reboot micropython VM
@@ -140,12 +137,12 @@ class Shell:
140
137
  if len(msg_list) >= 2 and "-h" in msg_list[1]:
141
138
  # reboot / reboot -h
142
139
  hard = True
143
- self.reboot(hard)
140
+ await self.reboot(hard)
144
141
 
145
142
  if msg_list[0].startswith('webrepl'):
146
143
  if len(msg_list) == 2 and '-u' in msg_list[1]:
147
- Shell.webrepl(msg_obj=self.send, update=True)
148
- Shell.webrepl(msg_obj=self.send)
144
+ await Shell.webrepl(msg_obj=self.a_send, update=True)
145
+ return await Shell.webrepl(msg_obj=self.a_send)
149
146
 
150
147
  # CONFIGURE MODE STATE: ACCESS FOR NODE_CONFIG.JSON
151
148
  if msg_list[0].startswith('conf'):
@@ -157,34 +154,34 @@ class Shell:
157
154
 
158
155
  # HELP MSG
159
156
  if msg_list[0] == "help":
160
- self.send("[MICROS] - built-in shell commands")
161
- self.send(" hello - hello msg - for device identification")
162
- self.send(" modules - show active Load Modules")
163
- self.send(" version - returns micrOS version")
164
- self.send(" exit - exit from shell socket prompt")
165
- self.send(" reboot - system soft reboot (vm), hard reboot (hw): reboot -h")
166
- self.send(" webrepl - start webrepl, for file transfers use with --update")
167
- self.send("[CONF] Configure mode - built-in shell commands")
168
- self.send(" conf - Enter conf mode")
169
- self.send(" dump - Dump all data")
170
- self.send(" key - Get value")
171
- self.send(" key value - Set value")
172
- self.send(" noconf - Exit conf mode")
173
- self.send("[TASK] postfix: &x - one-time, &&x - periodic, x: wait ms [x min: 20ms]")
174
- self.send(" task list - list tasks with <tag>s")
175
- self.send(" task kill <tag> - stop task")
176
- self.send(" task show <tag> - show task output")
177
- self.send("[EXEC] Command mode (LMs):")
178
- self.send(" help lm - list ALL LoadModules")
157
+ await self.a_send("[MICROS] - built-in shell commands")
158
+ await self.a_send(" hello - hello msg - for device identification")
159
+ await self.a_send(" modules - show active Load Modules")
160
+ await self.a_send(" version - returns micrOS version")
161
+ await self.a_send(" exit - exit from shell socket prompt")
162
+ await self.a_send(" reboot - system soft reboot (vm), hard reboot (hw): reboot -h")
163
+ await self.a_send(" webrepl - start webrepl, for file transfers use with --update")
164
+ await self.a_send("[CONF] Configure mode - built-in shell commands")
165
+ await self.a_send(" conf - Enter conf mode")
166
+ await self.a_send(" dump - Dump all data")
167
+ await self.a_send(" key - Get value")
168
+ await self.a_send(" key value - Set value")
169
+ await self.a_send(" noconf - Exit conf mode")
170
+ await self.a_send("[TASK] postfix: &x - one-time, &&x - periodic, x: wait ms [x min: 20ms]")
171
+ await self.a_send(" task list - list tasks with <tag>s")
172
+ await self.a_send(" task kill <tag> - stop task")
173
+ await self.a_send(" task show <tag> - show task output")
174
+ await self.a_send("[EXEC] Command mode (LMs):")
175
+ await self.a_send(" help lm - list ALL LoadModules")
179
176
  if "lm" in str(msg_list):
180
- return Shell._show_lm_funcs(msg_obj=self.send)
181
- return Shell._show_lm_funcs(msg_obj=self.send, active_only=True)
177
+ return await Shell._show_lm_funcs(msg_obj=self.a_send)
178
+ return await Shell._show_lm_funcs(msg_obj=self.a_send, active_only=True)
182
179
 
183
180
  # [2] EXECUTE:
184
181
  # @1 Configure mode
185
182
  if self.__conf_mode and len(msg_list) > 0:
186
183
  # Lock thread under config handling is threads available
187
- return Shell._configure(self.send, msg_list)
184
+ return await Shell._configure(self.a_send, msg_list)
188
185
  # @2 Command mode
189
186
  """
190
187
  INPUT MSG STRUCTURE
@@ -193,43 +190,43 @@ class Shell:
193
190
  """
194
191
  try:
195
192
  # Execute command via InterpreterCore
196
- self.send(lm_exec(arg_list=msg_list)[1])
193
+ await self.a_send(lm_exec(arg_list=msg_list)[1])
197
194
  return True
198
195
  except Exception as e:
199
- self.send(f"[ERROR] shell.lm_exec internal error: {e}")
196
+ await self.a_send(f"[ERROR] shell.lm_exec internal error: {e}")
200
197
  return False
201
198
 
202
199
  #################################################################
203
200
  # CONFIGURE MODE HANDLER #
204
201
  #################################################################
205
202
  @staticmethod
206
- def _configure(msg_obj, msg_list):
203
+ async def _configure(msg_obj, msg_list):
207
204
  """
208
205
  :param msg_obj: shell output stream function reference (write object)
209
206
  :param msg_list: socket input param list
210
207
  :return: execution status
211
208
  """
212
- def dump():
209
+ async def dump():
213
210
  nonlocal msg_obj, msg_list
214
211
  if msg_list[0] == 'dump':
215
212
  search = msg_list[1] if len(msg_list) == 2 else None
216
213
  # DUMP DATA
217
214
  for _key, value in cfgget().items():
218
215
  if search is None or search in _key:
219
- msg_obj(f" {_key}{' ' * (10 - len(_key))}:{' ' * 7} {value}")
216
+ await msg_obj(f" {_key}{' ' * (10 - len(_key))}:{' ' * 7} {value}")
220
217
  return True
221
218
  return False
222
219
 
223
220
  # [CONFIG] Get value
224
221
  if len(msg_list) == 1:
225
- if dump(): # Simple dump without param filter
222
+ if await dump(): # Simple dump without param filter
226
223
  return True
227
224
  # GET SINGLE PARAMETER VALUE
228
- msg_obj(cfgget(msg_list[0]))
225
+ await msg_obj(cfgget(msg_list[0]))
229
226
  return True
230
227
  # [CONFIG] Set value
231
228
  if len(msg_list) >= 2:
232
- if dump(): # Dump with search option
229
+ if await dump(): # Dump with search option
233
230
  return True
234
231
  # Deserialize params
235
232
  key = msg_list[0]
@@ -237,37 +234,38 @@ class Shell:
237
234
  try:
238
235
  output = cfgput(key, " ".join(msg_list[1:]), type_check=True)
239
236
  except Exception as e:
240
- msg_obj(f"node_config write error: {e}")
237
+ await msg_obj(f"node_config write error: {e}")
241
238
  output = False
242
239
  # Evaluation and reply
243
- msg_obj('Saved' if output else 'Invalid key' if cfgget(key) is None else 'Failed to save')
240
+ await msg_obj('Saved' if output else 'Invalid key' if cfgget(key) is None else 'Failed to save')
244
241
  return True
245
242
 
246
243
  #################################################################
247
244
  # COMMAND MODE & LMS HANDLER #
248
245
  #################################################################
249
246
  @staticmethod
250
- def _show_lm_funcs(msg_obj, active_only=False):
247
+ async def _show_lm_funcs(msg_obj, active_only=False):
251
248
  """
252
249
  Dump LM modules with functions - in case of [py] files
253
250
  Dump LM module with help function call - in case of [mpy] files
254
251
  """
255
- def _help(mod):
252
+ async def _help(mod):
256
253
  for lm_path in (i for i in mod if i.startswith('LM_') and (i.endswith('py'))):
257
254
  lm_name = lm_path.replace('LM_', '').split('.')[0]
258
255
  try:
259
- msg_obj(f" {lm_name}")
256
+ await msg_obj(f" {lm_name}")
260
257
  if lm_path.endswith('.mpy'):
261
- msg_obj(f" {' ' * len(lm_path.replace('LM_', '').split('.')[0])}help")
258
+ await msg_obj(f" {' ' * len(lm_path.replace('LM_', '').split('.')[0])}help")
262
259
  continue
263
260
  with open(lm_path, 'r') as f:
264
261
  line = "micrOSisTheBest"
265
262
  while line:
266
263
  line = f.readline()
267
- if line.strip().startswith('def') and '_' not in line and 'self' not in line:
268
- msg_obj(f" {' ' * len(lm_name)}{line.replace('def ', '').split('(')[0]}")
264
+ ldata = line.strip()
265
+ if ldata.startswith('def ') and not ldata.split()[1].startswith("_") and 'self' not in ldata:
266
+ await msg_obj(f" {' ' * len(lm_name)}{ldata.replace('def ', '').split('(')[0]}")
269
267
  except Exception as e:
270
- msg_obj(f"[{lm_path}] SHOW LM PARSER WARNING: {e}")
268
+ await msg_obj(f"[{lm_path}] SHOW LM PARSER WARNING: {e}")
271
269
  return False
272
270
  return True
273
271
 
@@ -275,29 +273,30 @@ class Shell:
275
273
  if active_only:
276
274
  mod_keys = modules.keys()
277
275
  active_modules = (dir_mod for dir_mod in listdir() if dir_mod.split('.')[0] in mod_keys)
278
- return _help(active_modules)
276
+ return await _help(active_modules)
279
277
  # [2] list all LMs on file system (ALL - help lm) - manual
280
- return _help(listdir())
278
+ return await _help(listdir())
281
279
 
282
280
  @staticmethod
283
- def webrepl(msg_obj, update=False):
281
+ async def webrepl(msg_obj, update=False):
284
282
  from Network import ifconfig
285
283
 
286
- msg_obj(" Start micropython WEBREPL - file transfer and debugging")
287
- msg_obj(" [i] restart machine shortcut: import reset")
288
- msg_obj(f" Connect over http://micropython.org/webrepl/#{ifconfig()[1][0]}:8266/")
289
- msg_obj(f" \t[!] webrepl password: {cfgget('appwd')}")
284
+ await msg_obj(" Start micropython WEBREPL - file transfer and debugging")
285
+ await msg_obj(" [i] restart machine shortcut: import reset")
286
+ await msg_obj(f" Connect over http://micropython.org/webrepl/#{ifconfig()[1][0]}:8266/")
287
+ await msg_obj(f" \t[!] webrepl password: {cfgget('appwd')}")
290
288
  if update:
291
- msg_obj(" Restart node then start webrepl...")
292
- msg_obj(" Bye!")
289
+ await msg_obj(" Restart node then start webrepl...")
290
+ await msg_obj(" Bye!")
293
291
  # Set .if_mode->webrepl (start webrepl after reboot and poll update status...)
294
292
  with open('.if_mode', 'w') as f:
295
293
  f.write('webrepl')
296
294
  hard_reset()
297
295
  try:
298
296
  import webrepl
299
- msg_obj(webrepl.start(password=cfgget('appwd')))
297
+ await msg_obj(webrepl.start(password=cfgget('appwd')))
300
298
  except Exception as e:
301
299
  _err_msg = f"[ERR] while starting webrepl: {e}"
302
- msg_obj(_err_msg)
300
+ await msg_obj(_err_msg)
303
301
  errlog_add(_err_msg)
302
+ return True