micrOSDevToolKit 3.0.2__tar.gz → 3.0.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.
Files changed (429) hide show
  1. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/MANIFEST.in +1 -3
  2. {microsdevtoolkit-3.0.2/micrOSDevToolKit.egg-info → microsdevtoolkit-3.0.4}/PKG-INFO +1 -1
  3. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +3 -3
  4. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Config.py +27 -33
  5. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Scheduler.py +1 -1
  6. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Shell.py +1 -1
  7. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Buffer.cpython-312.pyc +0 -0
  8. microsdevtoolkit-3.0.4/micrOS/source/__pycache__/Config.cpython-312.pyc +0 -0
  9. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
  10. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Time.cpython-312.pyc +0 -0
  11. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Web.cpython-312.pyc +0 -0
  12. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/urequests.cpython-312.pyc +0 -0
  13. microsdevtoolkit-3.0.4/micrOS/utests/test_config.py +152 -0
  14. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/test_scheduler.py +1 -1
  15. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4/micrOSDevToolKit.egg-info}/PKG-INFO +1 -1
  16. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOSDevToolKit.egg-info/SOURCES.txt +4 -2
  17. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/setup.py +1 -1
  18. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/Gateway.py +30 -11
  19. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/MicrOSDevEnv.py +327 -61
  20. microsdevtoolkit-3.0.4/toolkit/gateway/gateway.css +422 -0
  21. microsdevtoolkit-3.0.4/toolkit/gateway/img_stream.html +128 -0
  22. microsdevtoolkit-3.0.4/toolkit/gateway/index.html +252 -0
  23. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/micrOSdashboard.py +2 -1
  24. microsdevtoolkit-3.0.4/toolkit/workspace/precompiled/Config.mpy +0 -0
  25. microsdevtoolkit-3.0.4/toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  26. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Shell.mpy +0 -0
  27. microsdevtoolkit-3.0.2/micrOS/source/__pycache__/Config.cpython-312.pyc +0 -0
  28. microsdevtoolkit-3.0.2/toolkit/img_stream.html +0 -126
  29. microsdevtoolkit-3.0.2/toolkit/index.html +0 -209
  30. microsdevtoolkit-3.0.2/toolkit/workspace/precompiled/Config.mpy +0 -0
  31. microsdevtoolkit-3.0.2/toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  32. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/LICENSE +0 -0
  33. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/README.md +0 -0
  34. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/devToolKit.py +0 -0
  35. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/__init__.py +0 -0
  36. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/.DS_Store +0 -0
  37. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x64.exe +0 -0
  38. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x86.exe +0 -0
  39. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210x_Universal_Windows_Driver_ReleaseNotes.txt +0 -0
  40. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/SLAB_License_Agreement_VCP_Windows.txt +0 -0
  41. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm/silabser.sys +0 -0
  42. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm64/silabser.sys +0 -0
  43. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/dpinst.xml +0 -0
  44. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.cat +0 -0
  45. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.inf +0 -0
  46. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x64/silabser.sys +0 -0
  47. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x86/silabser.sys +0 -0
  48. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  49. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +0 -0
  50. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/media/__init__.py +0 -0
  51. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/media/dnd.png +0 -0
  52. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/media/logo.png +0 -0
  53. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/media/logo_mini.png +0 -0
  54. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/media/usb_port_icon.png +0 -0
  55. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/media/wifi_icon.png +0 -0
  56. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/__init__.py +0 -0
  57. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/board_commands.json +0 -0
  58. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
  59. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
  60. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32c5-20251209-v1.27.0.bin +0 -0
  61. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
  62. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32cam-v1.21.0_camera.bin +0 -0
  63. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
  64. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
  65. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
  66. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
  67. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
  68. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
  69. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
  70. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/.DS_Store +0 -0
  71. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Auth.py +0 -0
  72. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Buffer.py +0 -0
  73. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Common.py +0 -0
  74. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Debug.py +0 -0
  75. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Espnow.py +0 -0
  76. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Files.py +0 -0
  77. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Hooks.py +0 -0
  78. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/InterConnect.py +0 -0
  79. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Interrupts.py +0 -0
  80. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Logger.py +0 -0
  81. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Network.py +0 -0
  82. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Notify.py +0 -0
  83. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Pacman.py +0 -0
  84. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Server.py +0 -0
  85. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Tasks.py +0 -0
  86. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Time.py +0 -0
  87. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Types.py +0 -0
  88. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/Web.py +0 -0
  89. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  90. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
  91. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
  92. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Hooks.cpython-312.pyc +0 -0
  93. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/InterConnect.cpython-312.pyc +0 -0
  94. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Interrupts.cpython-312.pyc +0 -0
  95. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  96. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  97. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
  98. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/Tasks.cpython-312.pyc +0 -0
  99. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
  100. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/config/_git.keep +0 -0
  101. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/helpers.py +0 -0
  102. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/main.py +0 -0
  103. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/micrOS.py +0 -0
  104. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/micrOSloader.py +0 -0
  105. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/microIO.py +0 -0
  106. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_esp32.py +0 -0
  107. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_esp32c3.py +0 -0
  108. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_esp32c5.py +0 -0
  109. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_esp32c6.py +0 -0
  110. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_esp32s2.py +0 -0
  111. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_esp32s3.py +0 -0
  112. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_m5stamp.py +0 -0
  113. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_qtpy.py +0 -0
  114. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_rp2.py +0 -0
  115. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/IO_tinypico.py +0 -0
  116. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_L298N.py +0 -0
  117. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_L9110_DCmotor.py +0 -0
  118. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_OV2640.py +0 -0
  119. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_VL53L0X.py +0 -0
  120. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_aht10.py +0 -0
  121. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_bme280.py +0 -0
  122. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_buzzer.py +0 -0
  123. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_cct.py +0 -0
  124. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_cluster.py +0 -0
  125. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_co2.py +0 -0
  126. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_dht11.py +0 -0
  127. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_dht22.py +0 -0
  128. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_dimmer.py +0 -0
  129. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_distance.py +0 -0
  130. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_ds18.py +0 -0
  131. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_esp32.py +0 -0
  132. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_espnow.py +0 -0
  133. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_fileserver.py +0 -0
  134. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_gameOfLife.py +0 -0
  135. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_genIO.py +0 -0
  136. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_haptic.py +0 -0
  137. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_i2c.py +0 -0
  138. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_i2s_mic.py +0 -0
  139. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_ld2410.py +0 -0
  140. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_light_sensor.py +0 -0
  141. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_mh_z19c.py +0 -0
  142. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_neoeffects.py +0 -0
  143. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_neopixel.py +0 -0
  144. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_oled.py +0 -0
  145. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_oled_sh1106.py +0 -0
  146. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_oled_ui.py +0 -0
  147. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_pacman.py +0 -0
  148. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_presence.py +0 -0
  149. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_qmi8658.py +0 -0
  150. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_rencoder.py +0 -0
  151. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_rest.py +0 -0
  152. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_rgb.py +0 -0
  153. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_rgbcct.py +0 -0
  154. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_roboarm.py +0 -0
  155. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_robustness.py +0 -0
  156. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_rp2w.py +0 -0
  157. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_sdcard.py +0 -0
  158. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_servo.py +0 -0
  159. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_sound_event.py +0 -0
  160. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_stepper.py +0 -0
  161. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_switch.py +0 -0
  162. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_system.py +0 -0
  163. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_tcs3472.py +0 -0
  164. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_telegram.py +0 -0
  165. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_tinyrgb.py +0 -0
  166. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_trackball.py +0 -0
  167. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_veml7700.py +0 -0
  168. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/modules/LM_web.py +0 -0
  169. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/urequests.py +0 -0
  170. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/dashboard.html +0 -0
  171. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/editor.js +0 -0
  172. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/filesui.html +0 -0
  173. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/filesui.js +0 -0
  174. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/index.html +0 -0
  175. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/uapi.js +0 -0
  176. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/udashboard.js +0 -0
  177. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/ustyle.css +0 -0
  178. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/uwidgets.js +0 -0
  179. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/source/web/uwidgets_pro.js +0 -0
  180. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/__init__.py +0 -0
  181. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/test_buffer.py +0 -0
  182. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/test_time.py +0 -0
  183. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/test_urequests.py +0 -0
  184. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/test_urequests_real_api.py +0 -0
  185. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOS/utests/test_web_engine.py +0 -0
  186. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOSDevToolKit.egg-info/dependency_links.txt +0 -0
  187. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOSDevToolKit.egg-info/requires.txt +0 -0
  188. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/micrOSDevToolKit.egg-info/top_level.txt +0 -0
  189. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/setup.cfg +0 -0
  190. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/DevEnvCompile.py +0 -0
  191. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/DevEnvOTA.py +0 -0
  192. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/DevEnvUSB.py +0 -0
  193. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/LM_to_compile.dat +0 -0
  194. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/WebRepl.py +0 -0
  195. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/__init__.py +0 -0
  196. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/BackupRestore.py +0 -0
  197. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/CCTDemo.py +0 -0
  198. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/CCTTest.py +0 -0
  199. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/CamStream.py +0 -0
  200. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/CatGame.py +0 -0
  201. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/Dimmer.py +0 -0
  202. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/GetVersion.py +0 -0
  203. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/MicrophoneTest.py +0 -0
  204. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/NeoEffectsDemo.py +0 -0
  205. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/NeopixelTest.py +0 -0
  206. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/PresenceTest.py +0 -0
  207. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/QMI8685_GYRO.py +0 -0
  208. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/RGBTest.py +0 -0
  209. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/RoboArm.py +0 -0
  210. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/SED_test.py +0 -0
  211. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/SensorsTest.py +0 -0
  212. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/SystemTest.py +0 -0
  213. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/Template_app.py +0 -0
  214. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/__init__.py +0 -0
  215. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/_app_base.py +0 -0
  216. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/_capture.py +0 -0
  217. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/_gyro_visualizer.py +0 -0
  218. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/_micPlotting.py +0 -0
  219. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/_presencePlotting.py +0 -0
  220. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/dashboard_apps/uLightDemo.py +0 -0
  221. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/LocalMachine.py +0 -0
  222. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/MicrosFiles.py +0 -0
  223. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/Repository.py +0 -0
  224. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/SafeInput.py +0 -0
  225. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/SearchDevices.py +0 -0
  226. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/SerialDriverHandler.py +0 -0
  227. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/TerminalColors.py +0 -0
  228. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/__init__.py +0 -0
  229. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/macroScript.py +0 -0
  230. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/micrOSClient.py +0 -0
  231. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/micrOSClientHistory.py +0 -0
  232. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/lib/pip_package_installer.py +0 -0
  233. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/micrOSlint.py +0 -0
  234. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/.DS_Store +0 -0
  235. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/IO_darwin.py +0 -0
  236. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  237. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  238. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
  239. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/dht.cpython-312.pyc +0 -0
  240. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/dht.cpython-39.pyc +0 -0
  241. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/dotstar.cpython-312.pyc +0 -0
  242. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/dotstar.cpython-38.pyc +0 -0
  243. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/dotstar.cpython-39.pyc +0 -0
  244. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-312.pyc +0 -0
  245. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-38.pyc +0 -0
  246. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-39.pyc +0 -0
  247. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/esp32.cpython-312.pyc +0 -0
  248. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/esp32.cpython-38.pyc +0 -0
  249. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/esp32.cpython-39.pyc +0 -0
  250. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  251. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/framebuf.cpython-38.pyc +0 -0
  252. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/framebuf.cpython-39.pyc +0 -0
  253. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  254. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/machine.cpython-38.pyc +0 -0
  255. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/machine.cpython-39.pyc +0 -0
  256. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  257. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/micropython.cpython-38.pyc +0 -0
  258. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/micropython.cpython-39.pyc +0 -0
  259. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
  260. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  261. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/neopixel.cpython-38.pyc +0 -0
  262. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/neopixel.cpython-39.pyc +0 -0
  263. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  264. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/network.cpython-38.pyc +0 -0
  265. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/network.cpython-39.pyc +0 -0
  266. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ntptime.cpython-312.pyc +0 -0
  267. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/onewire.cpython-312.pyc +0 -0
  268. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/onewire.cpython-38.pyc +0 -0
  269. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/onewire.cpython-39.pyc +0 -0
  270. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
  271. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  272. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/simgc.cpython-38.pyc +0 -0
  273. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/simgc.cpython-39.pyc +0 -0
  274. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  275. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/simulator.cpython-38.pyc +0 -0
  276. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/simulator.cpython-39.pyc +0 -0
  277. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/tinypico.cpython-312.pyc +0 -0
  278. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/tinypico.cpython-38.pyc +0 -0
  279. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/tinypico.cpython-39.pyc +0 -0
  280. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  281. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-38.pyc +0 -0
  282. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-39.pyc +0 -0
  283. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  284. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
  285. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  286. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  287. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ustruct.cpython-312.pyc +0 -0
  288. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/ustruct.cpython-39.pyc +0 -0
  289. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/utime.cpython-312.pyc +0 -0
  290. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/utime.cpython-38.pyc +0 -0
  291. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/utime.cpython-39.pyc +0 -0
  292. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/webrepl.cpython-312.pyc +0 -0
  293. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/webrepl.cpython-38.pyc +0 -0
  294. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/__pycache__/webrepl.cpython-39.pyc +0 -0
  295. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/aioespnow.py +0 -0
  296. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/camera.py +0 -0
  297. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/dht.py +0 -0
  298. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/dotstar.py +0 -0
  299. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/ds18x20.py +0 -0
  300. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/esp32.py +0 -0
  301. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/framebuf.py +0 -0
  302. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/machine.py +0 -0
  303. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/micropython.py +0 -0
  304. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/mip.py +0 -0
  305. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/neopixel.py +0 -0
  306. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/network.py +0 -0
  307. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/node_config.json +0 -0
  308. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/ntptime.py +0 -0
  309. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/onewire.py +0 -0
  310. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/sim_common.py +0 -0
  311. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/simgc.py +0 -0
  312. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/simulator.py +0 -0
  313. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/tinypico.py +0 -0
  314. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/uasyncio.py +0 -0
  315. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/uos.py +0 -0
  316. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/urandom.py +0 -0
  317. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/usocket.py +0 -0
  318. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/ussl.py +0 -0
  319. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/ustruct.py +0 -0
  320. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/utime.py +0 -0
  321. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/view01.jpg +0 -0
  322. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/view02.jpg +0 -0
  323. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/simulator_lib/webrepl.py +0 -0
  324. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/socketClient.py +0 -0
  325. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/user_data/.include +0 -0
  326. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/user_data/webhooks/generic.py +0 -0
  327. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/user_data/webhooks/macro.py +0 -0
  328. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/user_data/webhooks/template.macro +0 -0
  329. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/user_data/webhooks/template.py +0 -0
  330. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/__init__.py +0 -0
  331. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Auth.mpy +0 -0
  332. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Buffer.mpy +0 -0
  333. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Common.mpy +0 -0
  334. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Debug.mpy +0 -0
  335. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Espnow.mpy +0 -0
  336. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Files.mpy +0 -0
  337. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Hooks.mpy +0 -0
  338. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  339. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  340. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Logger.mpy +0 -0
  341. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Network.mpy +0 -0
  342. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Notify.mpy +0 -0
  343. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Pacman.mpy +0 -0
  344. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Server.mpy +0 -0
  345. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Tasks.mpy +0 -0
  346. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Time.mpy +0 -0
  347. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Types.mpy +0 -0
  348. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/Web.mpy +0 -0
  349. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/_mpy.version +0 -0
  350. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/config/_git.keep +0 -0
  351. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/helpers.mpy +0 -0
  352. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/main.py +0 -0
  353. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/micrOS.mpy +0 -0
  354. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  355. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/microIO.mpy +0 -0
  356. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
  357. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
  358. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_esp32c5.mpy +0 -0
  359. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
  360. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
  361. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
  362. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
  363. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
  364. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
  365. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
  366. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
  367. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_L9110_DCmotor.py +0 -0
  368. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
  369. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_VL53L0X.py +0 -0
  370. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
  371. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
  372. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_buzzer.mpy +0 -0
  373. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
  374. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
  375. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_co2.mpy +0 -0
  376. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
  377. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
  378. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
  379. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
  380. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
  381. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_esp32.py +0 -0
  382. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_espnow.py +0 -0
  383. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
  384. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_gameOfLife.mpy +0 -0
  385. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
  386. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_haptic.mpy +0 -0
  387. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_i2c.py +0 -0
  388. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
  389. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_ld2410.mpy +0 -0
  390. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
  391. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_mh_z19c.py +0 -0
  392. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
  393. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
  394. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
  395. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
  396. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  397. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  398. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
  399. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_qmi8658.py +0 -0
  400. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_rencoder.py +0 -0
  401. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
  402. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
  403. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_rgbcct.mpy +0 -0
  404. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
  405. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_robustness.py +0 -0
  406. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_rp2w.py +0 -0
  407. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_sdcard.py +0 -0
  408. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_servo.mpy +0 -0
  409. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_sound_event.mpy +0 -0
  410. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_stepper.mpy +0 -0
  411. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
  412. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
  413. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_tcs3472.py +0 -0
  414. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
  415. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_tinyrgb.mpy +0 -0
  416. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_trackball.mpy +0 -0
  417. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_veml7700.mpy +0 -0
  418. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
  419. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/urequests.mpy +0 -0
  420. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/dashboard.html +0 -0
  421. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/editor.js +0 -0
  422. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/filesui.html +0 -0
  423. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/filesui.js +0 -0
  424. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/index.html +0 -0
  425. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/uapi.js +0 -0
  426. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/udashboard.js +0 -0
  427. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/ustyle.css +0 -0
  428. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/uwidgets.js +0 -0
  429. {microsdevtoolkit-3.0.2 → microsdevtoolkit-3.0.4}/toolkit/workspace/precompiled/web/uwidgets_pro.js +0 -0
@@ -8,10 +8,9 @@ graft env/driver_cp210x/
8
8
 
9
9
  graft toolkit/simulator_lib
10
10
  graft toolkit/workspace/precompiled
11
+ graft toolkit/gateway
11
12
  recursive-include toolkit/user_data .include
12
13
  recursive-include toolkit/user_data/node_config_archive/.include
13
- include toolkit/index.html
14
- include toolkit/img_stream.html
15
14
  include toolkit/LM_to_compile.dat
16
15
  graft toolkit/user_data/webhooks/
17
16
 
@@ -20,4 +19,3 @@ include media/logo_mini.png
20
19
  include media/logo.png
21
20
  include media/wifi_icon.png
22
21
  include media/usb_port_icon.png
23
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 3.0.2
3
+ Version: 3.0.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
@@ -37,7 +37,7 @@
37
37
  13
38
38
  ],
39
39
  "Config.py": [
40
- 9.63,
40
+ 9.62,
41
41
  17
42
42
  ],
43
43
  "Shell.py": [
@@ -323,7 +323,7 @@
323
323
  },
324
324
  "summary": {
325
325
  "core": [
326
- 5306,
326
+ 5303,
327
327
  27
328
328
  ],
329
329
  "load": [
@@ -340,6 +340,6 @@
340
340
  ],
341
341
  "core_score": 9.26,
342
342
  "load_score": 8.44,
343
- "version": "3.0.0-0"
343
+ "version": "3.0.4-0"
344
344
  }
345
345
  }
@@ -14,7 +14,6 @@ Designed by Marcell Ban aka BxNxM
14
14
  #################################################################
15
15
  from re import search
16
16
  from json import load, dump
17
- from utime import sleep
18
17
  from Debug import DebugCfg, console_write, syslog
19
18
  from Files import OSPath, path_join, is_file
20
19
  from uos import remove, rename
@@ -142,7 +141,7 @@ class Config:
142
141
  @classmethod
143
142
  def _inject_default_conf(cls):
144
143
  # Load config and template
145
- liveconf = cls.read_cfg_file(nosafe=True)
144
+ liveconf = cls.read_cfg_file()
146
145
  _persist = False
147
146
  # Remove obsolete keys from conf
148
147
  try:
@@ -166,43 +165,38 @@ class Config:
166
165
  break
167
166
  if _persist:
168
167
  # Only persist when migration cleanup removed keys or defaults are missing from the file.
169
- cls.write_cfg_file()
170
- console_write("[CONF] Save conf successful")
168
+ state = "successful" if cls.write_cfg_file() else "failed"
169
+ console_write(f"[CONF] Save conf {state}")
171
170
  except Exception as e:
172
171
  syslog(f"[ERR] Save (__inject) conf failed: {e}")
173
172
  finally:
174
173
  del liveconf
175
174
 
176
175
  @staticmethod
177
- def read_cfg_file(nosafe=False):
178
- conf = {}
179
- while True:
176
+ def read_cfg_file():
177
+ if not is_file(Config.CONFIG_PATH):
178
+ return {}
179
+ try:
180
+ with open(Config.CONFIG_PATH, 'r') as f:
181
+ return load(f)
182
+ except Exception as e:
183
+ syslog(f'[ERR] read_cfg_file error: {e}')
180
184
  try:
181
- with open(Config.CONFIG_PATH, 'r') as f:
182
- conf = load(f)
183
- break
184
- except Exception as e:
185
- console_write(f"[CONF] read_cfg_file error {conf} (json): {e}")
186
- # Write out initial config, if no config exists.
187
- if nosafe:
188
- break
189
- sleep(0.2)
190
- syslog(f'[ERR] read_cfg_file error: {e}')
191
- # Return config cache
192
- return conf
185
+ rename(Config.CONFIG_PATH, f"{Config.CONFIG_PATH}.bad")
186
+ console_write(f"[CONF] Corrupted config moved: {Config.CONFIG_PATH}.bad")
187
+ except Exception as e2:
188
+ syslog(f'[ERR] read_cfg_file quarantine failed: {e2}')
189
+ return {}
193
190
 
194
191
  @staticmethod
195
192
  def write_cfg_file():
196
- while True:
197
- try:
198
- # WRITE JSON CONFIG
199
- with open(Config.CONFIG_PATH, 'w') as f:
200
- dump({key: value for key, value in Config.INSTANCE.items()}, f)
201
- break
202
- except Exception as e:
203
- syslog(f'[ERR] write_cfg_file {Config.CONFIG_PATH} (json): {e}')
204
- sleep(0.2)
205
- return True
193
+ try:
194
+ with open(Config.CONFIG_PATH, 'w') as f:
195
+ dump({key: value for key, value in Config.INSTANCE.items()}, f)
196
+ return True
197
+ except Exception as e:
198
+ syslog(f'[ERR] write_cfg_file {Config.CONFIG_PATH}: {e}')
199
+ return False
206
200
 
207
201
  @staticmethod
208
202
  def type_handler(key, value):
@@ -251,16 +245,16 @@ class Config:
251
245
  def validate_pwd(password):
252
246
  """
253
247
  Validate appwd parameter
254
- - webrepl password
248
+ - webrepl password (max 9 char)
255
249
  - micrOS auth password (Shell/WebCli)
256
- - wifi access point password
250
+ - wifi access point password (WPA2-PSK)
257
251
  """
258
252
  # Check password rules
259
- if 4 <= len(password) <= 9:
253
+ if 8 <= len(password) <= 9:
260
254
  if search(r"[A-Z]", password) and search(r"[a-z]", password):
261
255
  if search(r"\d", password):
262
256
  return True, ''
263
- return False, 'Password must include [0-9] both [a-z][A-Z] and length between 4-9 char.'
257
+ return False, 'Password must include [0-9] both [a-z][A-Z] and length between 8-9 char.'
264
258
 
265
259
 
266
260
  #################################################################
@@ -43,7 +43,7 @@ def __cron_task_cache_manager(now_in_sec, sec_tolerant):
43
43
  tasktime_in_sec = int(str(taskid.split('|')[0]).split(':')[1])
44
44
  sec_diff = tasktime_in_sec - (now_in_sec - sec_tolerant)
45
45
  # Remove outdated cache registration
46
- if sec_diff < 0 or sec_diff > 20:
46
+ if sec_diff < 0 or sec_diff > sec_tolerant * 2:
47
47
  LAST_CRON_TASKS.remove(LAST_CRON_TASKS[index])
48
48
 
49
49
 
@@ -25,7 +25,7 @@ from Debug import syslog
25
25
 
26
26
  class Shell:
27
27
  __slots__ = ['__devfid', '__auth_mode', '__hwuid', '__auth_ok', '__conf_mode']
28
- MICROS_VERSION = '3.0.0-0'
28
+ MICROS_VERSION = '3.0.4-0'
29
29
 
30
30
  def __init__(self):
31
31
  """
@@ -0,0 +1,152 @@
1
+ import importlib.util
2
+ import json
3
+ import sys
4
+ import tempfile
5
+ import types
6
+ import unittest
7
+ from itertools import count
8
+ from pathlib import Path
9
+ from unittest import mock
10
+
11
+
12
+ def setUpModule():
13
+ print(f"== RUN {Path(__file__).name} ==")
14
+
15
+
16
+ _LOAD_ID = count()
17
+
18
+
19
+ class _ConfigStubEnv:
20
+ def __init__(self, root: Path):
21
+ self.root = root
22
+ self.config_dir = root / "config"
23
+ self.logs = []
24
+ self.console = []
25
+ self._saved = {}
26
+
27
+ def _resolve(self, path):
28
+ path = Path(path)
29
+ return path if path.is_absolute() else self.root / path
30
+
31
+ def install(self):
32
+ for name in ("Debug", "Files", "uos", "microIO"):
33
+ self._saved[name] = sys.modules.get(name)
34
+
35
+ env = self
36
+
37
+ debug_mod = types.ModuleType("Debug")
38
+
39
+ class DebugCfg:
40
+ DEBUG = True
41
+ init_calls = 0
42
+
43
+ @staticmethod
44
+ def init_pled():
45
+ DebugCfg.init_calls += 1
46
+
47
+ debug_mod.DebugCfg = DebugCfg
48
+ debug_mod.console_write = lambda msg, *_a, **_k: env.console.append(str(msg))
49
+ debug_mod.syslog = lambda msg, *_a, **_k: env.logs.append(str(msg))
50
+ sys.modules["Debug"] = debug_mod
51
+
52
+ files_mod = types.ModuleType("Files")
53
+
54
+ class OSPath:
55
+ CONFIG = str(env.config_dir)
56
+
57
+ def path_join(*parts):
58
+ path = "/".join(str(part).strip("/") for part in parts if part)
59
+ if parts and str(parts[0]).startswith("/"):
60
+ path = path if path.startswith("/") else "/" + path
61
+ return path
62
+
63
+ files_mod.OSPath = OSPath
64
+ files_mod.path_join = path_join
65
+ files_mod.is_file = lambda path: env._resolve(path).is_file()
66
+ sys.modules["Files"] = files_mod
67
+
68
+ uos_mod = types.ModuleType("uos")
69
+ uos_mod.remove = lambda path: env._resolve(path).unlink()
70
+ uos_mod.rename = lambda src, dst: env._resolve(src).rename(env._resolve(dst))
71
+ sys.modules["uos"] = uos_mod
72
+
73
+ microio_mod = types.ModuleType("microIO")
74
+ microio_mod.set_pinmap = None
75
+ sys.modules["microIO"] = microio_mod
76
+
77
+ def restore(self):
78
+ for name, module in self._saved.items():
79
+ if module is None:
80
+ sys.modules.pop(name, None)
81
+ else:
82
+ sys.modules[name] = module
83
+
84
+
85
+ def _load_config_module(raw_config=None):
86
+ tempdir = tempfile.TemporaryDirectory()
87
+ root = Path(tempdir.name)
88
+ config_dir = root / "config"
89
+ config_dir.mkdir(parents=True, exist_ok=True)
90
+
91
+ config_path = config_dir / "node_config.json"
92
+ if raw_config is not None:
93
+ config_path.write_text(raw_config, encoding="utf-8")
94
+
95
+ env = _ConfigStubEnv(root)
96
+ env.install()
97
+ try:
98
+ here = Path(__file__).resolve()
99
+ config_py = (here.parent.parent / "source" / "Config.py").resolve()
100
+ module_name = f"micros_config_under_test_{next(_LOAD_ID)}"
101
+ spec = importlib.util.spec_from_file_location(module_name, str(config_py))
102
+ mod = importlib.util.module_from_spec(spec)
103
+ sys.modules[module_name] = mod
104
+ spec.loader.exec_module(mod)
105
+ return mod, env, tempdir, config_path
106
+ finally:
107
+ env.restore()
108
+
109
+
110
+ class TestConfig(unittest.TestCase):
111
+ def test_init_bootstraps_missing_config(self):
112
+ mod, env, tempdir, config_path = _load_config_module()
113
+ self.addCleanup(tempdir.cleanup)
114
+
115
+ self.assertTrue(config_path.is_file())
116
+ self.assertEqual(mod.cfgget("devfid"), "node01")
117
+ self.assertFalse(any("read_cfg_file error" in msg for msg in env.logs))
118
+
119
+ persisted = json.loads(config_path.read_text(encoding="utf-8"))
120
+ self.assertEqual(persisted["devfid"], "node01")
121
+ self.assertEqual(persisted["appwd"], "ADmin123")
122
+
123
+ def test_init_quarantines_corrupted_config_and_regenerates_defaults(self):
124
+ raw_corrupt = '{"devfid": "broken"'
125
+ mod, env, tempdir, config_path = _load_config_module(raw_config=raw_corrupt)
126
+ self.addCleanup(tempdir.cleanup)
127
+
128
+ bad_path = config_path.with_name("node_config.json.bad")
129
+ self.assertTrue(bad_path.is_file())
130
+ self.assertEqual(bad_path.read_text(encoding="utf-8"), raw_corrupt)
131
+ self.assertEqual(mod.cfgget("devfid"), "node01")
132
+ self.assertTrue(any("read_cfg_file error" in msg for msg in env.logs))
133
+
134
+ persisted = json.loads(config_path.read_text(encoding="utf-8"))
135
+ self.assertEqual(persisted["devfid"], "node01")
136
+
137
+ def test_cfgput_keeps_runtime_value_and_logs_when_write_fails(self):
138
+ mod, env, tempdir, config_path = _load_config_module(raw_config='{"devfid": "orig"}')
139
+ self.addCleanup(tempdir.cleanup)
140
+
141
+ self.assertEqual(mod.cfgget("devfid"), "orig")
142
+ with mock.patch("builtins.open", side_effect=OSError("disk full")):
143
+ self.assertTrue(mod.cfgput("devfid", "updated"))
144
+ self.assertEqual(mod.cfgget("devfid"), "updated")
145
+ self.assertTrue(any("write_cfg_file" in msg for msg in env.logs))
146
+
147
+ persisted = json.loads(config_path.read_text(encoding="utf-8"))
148
+ self.assertEqual(persisted["devfid"], "orig")
149
+
150
+
151
+ if __name__ == "__main__":
152
+ unittest.main(verbosity=2)
@@ -62,7 +62,7 @@ RUN_DAYS = 365
62
62
  # - scheduler sampling/tolerance window (deltasec)
63
63
  # - execution period (how frequently scheduler() is called)
64
64
  # - virtual time tick step
65
- EXEC_PERIOD_SEC = 5 # default 5 seconds
65
+ EXEC_PERIOD_SEC = 30 # default 30 seconds
66
66
 
67
67
  # Provide sunrise/sunset times for tag resolution (Sun.TIME)
68
68
  SUN_TIME = {"sunrise": (6, 0, 0), "sunset": (18, 0, 0)}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 3.0.2
3
+ Version: 3.0.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
@@ -160,6 +160,7 @@ micrOS/source/web/uwidgets.js
160
160
  micrOS/source/web/uwidgets_pro.js
161
161
  micrOS/utests/__init__.py
162
162
  micrOS/utests/test_buffer.py
163
+ micrOS/utests/test_config.py
163
164
  micrOS/utests/test_scheduler.py
164
165
  micrOS/utests/test_time.py
165
166
  micrOS/utests/test_urequests.py
@@ -178,8 +179,6 @@ toolkit/LM_to_compile.dat
178
179
  toolkit/MicrOSDevEnv.py
179
180
  toolkit/WebRepl.py
180
181
  toolkit/__init__.py
181
- toolkit/img_stream.html
182
- toolkit/index.html
183
182
  toolkit/micrOSdashboard.py
184
183
  toolkit/micrOSlint.py
185
184
  toolkit/socketClient.py
@@ -208,6 +207,9 @@ toolkit/dashboard_apps/_gyro_visualizer.py
208
207
  toolkit/dashboard_apps/_micPlotting.py
209
208
  toolkit/dashboard_apps/_presencePlotting.py
210
209
  toolkit/dashboard_apps/uLightDemo.py
210
+ toolkit/gateway/gateway.css
211
+ toolkit/gateway/img_stream.html
212
+ toolkit/gateway/index.html
211
213
  toolkit/lib/LocalMachine.py
212
214
  toolkit/lib/MicrosFiles.py
213
215
  toolkit/lib/Repository.py
@@ -17,7 +17,7 @@ dependencies = ['adafruit-ampy', 'mpremote', 'esptool', 'ipaddress', 'netaddr',
17
17
 
18
18
  setuptools.setup(
19
19
  name='micrOSDevToolKit',
20
- version='3.0.2',
20
+ version='3.0.4',
21
21
  author='Marcell Ban',
22
22
  author_email='miros.framework@gmail.com',
23
23
  description='Development and deployment environment for micrOS, the diy micropython automation OS (IoT)',
@@ -3,12 +3,14 @@
3
3
  # using flask_restful
4
4
  import json
5
5
  import os
6
+ import ipaddress
6
7
  from flask import Flask, jsonify, Response, make_response, request, send_file, abort
7
8
  from flask_restful import Resource, Api
8
9
  import threading
9
10
  import time
10
11
  import concurrent.futures
11
12
  MYPATH = os.path.dirname(__file__)
13
+ WEBUI_PATH = os.path.join(MYPATH, 'gateway')
12
14
  import requests
13
15
  from io import BytesIO
14
16
  from socket import gethostbyname
@@ -35,6 +37,11 @@ API_URL_CACHE = ""
35
37
  # creating the flask app
36
38
  app = Flask(__name__)
37
39
 
40
+
41
+ @app.route('/gateway.css')
42
+ def gateway_css():
43
+ return send_file(os.path.join(WEBUI_PATH, 'gateway.css'), mimetype='text/css')
44
+
38
45
  # --------------------- AUTH BEGIN ------------------------- #
39
46
  ADDRESS_CACHE = {}
40
47
  try:
@@ -52,6 +59,8 @@ except Exception as e:
52
59
  print("[GW-AUTH][DISABLED] API_AUTH ENV VAR NOT FOUND.")
53
60
  __rest_usr_name, __rest_usr_pwd, ALLOWED_COUNTRY = None, None, []
54
61
 
62
+ if (__rest_usr_name and __rest_usr_pwd) and BasicAuth is None:
63
+ raise RuntimeError("API_AUTH is configured, but flask_basicauth is not available")
55
64
 
56
65
  if BasicAuth is not None and (__rest_usr_name and __rest_usr_pwd):
57
66
  basic_auth = BasicAuth(app)
@@ -62,15 +71,16 @@ if BasicAuth is not None and (__rest_usr_name and __rest_usr_pwd):
62
71
  #app.config['BASIC_AUTH_PASSWORD'] = f'{__rest_usr_pwd}{datetime.now().day}' # month-day (21)
63
72
 
64
73
  def _is_local_network():
65
- # Define local network IP prefixes (adjust as needed)
66
- local_network_prefixes = ['192.168.', '10.0.', '172.']
67
74
  #local_network_prefixes = []
68
75
  remote_ip = request.remote_addr
69
76
  print(f"\t[GW-AUTH] Check incoming IP address: {remote_ip}")
70
- for prefix in local_network_prefixes:
71
- if remote_ip.startswith(prefix):
72
- print(f"\t\t[GW-AUTH] SKIP AUTH - LOCAL NETWORK: {prefix} match with {remote_ip}")
77
+ try:
78
+ remote_addr = ipaddress.ip_address(remote_ip)
79
+ if remote_addr.is_private or remote_addr.is_loopback:
80
+ print(f"\t\t[GW-AUTH] SKIP AUTH - LOCAL NETWORK: {remote_ip}")
73
81
  return True, remote_ip
82
+ except ValueError:
83
+ print(f"\t\t[GW-AUTH] INVALID REMOTE IP: {remote_ip}")
74
84
  return False, remote_ip
75
85
 
76
86
 
@@ -142,7 +152,7 @@ class Hello(Resource):
142
152
  # is a GET request for this resource
143
153
 
144
154
  def get(self):
145
- index_html = os.path.join(MYPATH, 'index.html')
155
+ index_html = os.path.join(WEBUI_PATH, 'index.html')
146
156
  try:
147
157
  with open(index_html, 'r') as file:
148
158
  html = file.read()
@@ -185,6 +195,8 @@ class SendCmd(Resource):
185
195
  cmd_str = ' '.join(cmd_list)
186
196
 
187
197
  ip, port, fid, uid = socketClient.ConnectionData.select_device(device_tag=device)
198
+ if uid is None:
199
+ abort(404, description=f"Unknown device: {device}")
188
200
  device_detailed = (uid, ip, port, fid)
189
201
 
190
202
  print("[Gateway] Raw command params: --dev {} {}".format(uid, cmd_str))
@@ -322,7 +334,7 @@ class DeviceStatus(Resource):
322
334
 
323
335
  # Clean Alarms
324
336
  clean_alarms = DeviceStatus.CLEAN_MICROS_ALARMS
325
- log_data = alarms.get('log', None)
337
+ log_data = alarms.get('log', None) if isinstance(alarms, dict) else None
326
338
  if clean_alarms and log_data and len(log_data) > 0:
327
339
  _, _ = socketClient.run(['--dev', fuid.strip(), 'system alarms True'])
328
340
 
@@ -341,7 +353,7 @@ class DeviceStatus(Resource):
341
353
 
342
354
  # Get cpu temp
343
355
  _status4, cpu_temp = socketClient.run(['--dev', fuid.strip(), 'esp32 temp'])
344
- if 'temp' in cpu_temp:
356
+ if isinstance(cpu_temp, str) and 'temp' in cpu_temp:
345
357
  try:
346
358
  cpu_temp = cpu_temp.split(":")[1].strip()
347
359
  except:
@@ -352,6 +364,7 @@ class DeviceStatus(Resource):
352
364
  output_dev_struct = {}
353
365
  online_dev_cnt = 0
354
366
  device_struct = socketClient.ConnectionData.list_devices()
367
+ real_device_count = max(1, len(device_struct) - 2)
355
368
  dev_query_list = []
356
369
 
357
370
  # Start parallel status queries
@@ -362,7 +375,11 @@ class DeviceStatus(Resource):
362
375
 
363
376
  # Collect results from queries
364
377
  for query in dev_query_list:
365
- node_info = query.result()
378
+ try:
379
+ node_info = query.result()
380
+ except Exception as e:
381
+ print(f"Node status worker error: {e}")
382
+ continue
366
383
 
367
384
  if node_info is None:
368
385
  continue
@@ -372,7 +389,7 @@ class DeviceStatus(Resource):
372
389
  # Status calculation
373
390
  if status:
374
391
  online_dev_cnt += 1
375
- DeviceStatus.DEVS_AVAIL = round((online_dev_cnt / (len(device_struct)-2)) *100, 1)
392
+ DeviceStatus.DEVS_AVAIL = round((online_dev_cnt / real_device_count) * 100, 1)
376
393
  status = 'HEALTHY'
377
394
  else:
378
395
  status = 'UNHEALTHY'
@@ -574,7 +591,7 @@ class ImgStream(Resource):
574
591
  # is a GET request for this resource
575
592
 
576
593
  def get(self):
577
- index_html = os.path.join(MYPATH, 'img_stream.html')
594
+ index_html = os.path.join(WEBUI_PATH, 'img_stream.html')
578
595
  try:
579
596
  with open(index_html, 'r') as file:
580
597
  html = file.read()
@@ -620,6 +637,8 @@ api.add_resource(WebHook, '/webhooks', '/webhooks/<string:payload>', '/webhooks/
620
637
 
621
638
 
622
639
  def gateway(debug=True):
640
+ if (__rest_usr_name and __rest_usr_pwd) and BasicAuth is None:
641
+ raise RuntimeError("API_AUTH is set but flask_basicauth is unavailable. Refusing to start unsecured gateway.")
623
642
  global API_URL_CACHE
624
643
  API_URL_CACHE = f"http://{my_local_ip()}:5005"
625
644
  print("\n############### START MICROS GATEWAY ###############")