micrOSDevToolKit 3.7.1__tar.gz → 3.7.2__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 (451) hide show
  1. {microsdevtoolkit-3.7.1/micrOSDevToolKit.egg-info → microsdevtoolkit-3.7.2}/PKG-INFO +6 -1
  2. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/README.md +5 -0
  3. microsdevtoolkit-3.7.1/micrOS/micropython/micrOS-esp32-1.28.0-3.7.0-0.bin → microsdevtoolkit-3.7.2/micrOS/micropython/micrOS-esp32-1.28.0-3.7.2.bin +0 -0
  4. microsdevtoolkit-3.7.1/micrOS/micropython/micrOS-esp32c3-1.28.0-3.7.0-0.bin → microsdevtoolkit-3.7.2/micrOS/micropython/micrOS-esp32c3-1.28.0-3.7.2.bin +0 -0
  5. microsdevtoolkit-3.7.1/micrOS/micropython/micrOS-esp32c6-1.28.0-3.7.0-0.bin → microsdevtoolkit-3.7.2/micrOS/micropython/micrOS-esp32c6-1.28.0-3.7.2.bin +0 -0
  6. microsdevtoolkit-3.7.1/micrOS/micropython/micrOS-esp32s3-1.28.0-3.7.0-0.bin → microsdevtoolkit-3.7.2/micrOS/micropython/micrOS-esp32s3-1.28.0-3.7.2.bin +0 -0
  7. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +2 -2
  8. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Shell.py +1 -1
  9. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_web.py +1 -1
  10. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/config.css +10 -1
  11. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/config.js +20 -3
  12. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/config_packages.js +1 -0
  13. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/config_webapps.js +27 -12
  14. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/filesui.js +12 -1
  15. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/uapi_widgets.js +4 -1
  16. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2/micrOSDevToolKit.egg-info}/PKG-INFO +6 -1
  17. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOSDevToolKit.egg-info/SOURCES.txt +4 -4
  18. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/setup.py +1 -1
  19. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/DevEnvCompile.py +2 -2
  20. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/DevEnvOTA.py +2 -1
  21. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/Gateway.py +96 -21
  22. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/SystemTest.py +3 -2
  23. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/micrOSdashboard.py +1 -1
  24. microsdevtoolkit-3.7.2/toolkit/simulator_lib/node_config.json +7 -0
  25. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/socketClient.py +13 -3
  26. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Shell.mpy +0 -0
  27. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
  28. microsdevtoolkit-3.7.2/toolkit/workspace/precompiled/web/config.css +1 -0
  29. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/config.js +6 -5
  30. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/config_packages.js +1 -1
  31. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/config_webapps.js +6 -3
  32. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/filesui.js +2 -1
  33. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/uapi_widgets.js +1 -1
  34. microsdevtoolkit-3.7.1/toolkit/simulator_lib/node_config.json +0 -7
  35. microsdevtoolkit-3.7.1/toolkit/workspace/precompiled/web/config.css +0 -1
  36. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/LICENSE +0 -0
  37. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/MANIFEST.in +0 -0
  38. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/devToolKit.py +0 -0
  39. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/__init__.py +0 -0
  40. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/.DS_Store +0 -0
  41. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x64.exe +0 -0
  42. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x86.exe +0 -0
  43. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210x_Universal_Windows_Driver_ReleaseNotes.txt +0 -0
  44. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/SLAB_License_Agreement_VCP_Windows.txt +0 -0
  45. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm/silabser.sys +0 -0
  46. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm64/silabser.sys +0 -0
  47. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/dpinst.xml +0 -0
  48. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.cat +0 -0
  49. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.inf +0 -0
  50. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x64/silabser.sys +0 -0
  51. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x86/silabser.sys +0 -0
  52. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  53. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +0 -0
  54. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/media/__init__.py +0 -0
  55. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/media/dnd.png +0 -0
  56. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/media/logo.png +0 -0
  57. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/media/logo_mini.png +0 -0
  58. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/media/usb_port_icon.png +0 -0
  59. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/media/wifi_icon.png +0 -0
  60. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/__init__.py +0 -0
  61. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/board_commands.json +0 -0
  62. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
  63. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
  64. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32c5-20251209-v1.27.0.bin +0 -0
  65. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
  66. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32cam-v1.21.0_camera.bin +0 -0
  67. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
  68. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
  69. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
  70. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
  71. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
  72. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
  73. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
  74. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/.DS_Store +0 -0
  75. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Auth.py +0 -0
  76. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Buffer.py +0 -0
  77. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Common.py +0 -0
  78. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Config.py +0 -0
  79. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Debug.py +0 -0
  80. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Files.py +0 -0
  81. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Hooks.py +0 -0
  82. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/InterConnect.py +0 -0
  83. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Interrupts.py +0 -0
  84. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Logger.py +0 -0
  85. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Network.py +0 -0
  86. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Notify.py +0 -0
  87. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Pacman.py +0 -0
  88. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Scheduler.py +0 -0
  89. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Server.py +0 -0
  90. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Tasks.py +0 -0
  91. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Time.py +0 -0
  92. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Types.py +0 -0
  93. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/Web.py +0 -0
  94. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Auth.cpython-312.pyc +0 -0
  95. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Buffer.cpython-312.pyc +0 -0
  96. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  97. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Config.cpython-312.pyc +0 -0
  98. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
  99. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
  100. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Hooks.cpython-312.pyc +0 -0
  101. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/InterConnect.cpython-312.pyc +0 -0
  102. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Interrupts.cpython-312.pyc +0 -0
  103. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  104. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Network.cpython-312.pyc +0 -0
  105. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Notify.cpython-312.pyc +0 -0
  106. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Pacman.cpython-312.pyc +0 -0
  107. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Power.cpython-312.pyc +0 -0
  108. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
  109. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  110. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
  111. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Tasks.cpython-312.pyc +0 -0
  112. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Time.cpython-312.pyc +0 -0
  113. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Types.cpython-312.pyc +0 -0
  114. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/Web.cpython-312.pyc +0 -0
  115. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/micrOS.cpython-312.pyc +0 -0
  116. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/microIO.cpython-312.pyc +0 -0
  117. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
  118. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/__pycache__/urequests.cpython-312.pyc +0 -0
  119. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/config/_git.keep +0 -0
  120. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/helpers.py +0 -0
  121. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/main.py +0 -0
  122. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/mespnow.py +0 -0
  123. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/micrOS.py +0 -0
  124. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/micrOSloader.py +0 -0
  125. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/microIO.py +0 -0
  126. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_esp32.py +0 -0
  127. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_esp32c3.py +0 -0
  128. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_esp32c5.py +0 -0
  129. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_esp32c6.py +0 -0
  130. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_esp32s2.py +0 -0
  131. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_esp32s3.py +0 -0
  132. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_m5stamp.py +0 -0
  133. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_qtpy.py +0 -0
  134. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_rp2.py +0 -0
  135. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/IO_tinypico.py +0 -0
  136. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_aht10.py +0 -0
  137. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_bme280.py +0 -0
  138. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_buzzer.py +0 -0
  139. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_cct.py +0 -0
  140. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_cluster.py +0 -0
  141. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_dht11.py +0 -0
  142. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_dht22.py +0 -0
  143. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_dimmer.py +0 -0
  144. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_ds18.py +0 -0
  145. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_esp32.py +0 -0
  146. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_espnow.py +0 -0
  147. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_fileserver.py +0 -0
  148. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_gameOfLife.py +0 -0
  149. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_genIO.py +0 -0
  150. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_i2c.py +0 -0
  151. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_i2s_mic.py +0 -0
  152. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_neoeffects.py +0 -0
  153. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_neopixel.py +0 -0
  154. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_oled.py +0 -0
  155. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_oled_sh1106.py +0 -0
  156. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_oled_ui.py +0 -0
  157. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_pacman.py +0 -0
  158. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_presence.py +0 -0
  159. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_rencoder.py +0 -0
  160. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_rest.py +0 -0
  161. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_rgb.py +0 -0
  162. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_rgbcct.py +0 -0
  163. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_robustness.py +0 -0
  164. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_rp2w.py +0 -0
  165. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_sdcard.py +0 -0
  166. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_servo.py +0 -0
  167. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_stepper.py +0 -0
  168. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_switch.py +0 -0
  169. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_system.py +0 -0
  170. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_telegram.py +0 -0
  171. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/LM_tinyrgb.py +0 -0
  172. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_cct.cpython-312.pyc +0 -0
  173. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_dht11.cpython-312.pyc +0 -0
  174. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_dht22.cpython-312.pyc +0 -0
  175. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_dimmer.cpython-312.pyc +0 -0
  176. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_fileserver.cpython-312.pyc +0 -0
  177. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_neopixel.cpython-312.pyc +0 -0
  178. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_pacman.cpython-312.pyc +0 -0
  179. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_rencoder.cpython-312.pyc +0 -0
  180. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_rgb.cpython-312.pyc +0 -0
  181. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_rgbcct.cpython-312.pyc +0 -0
  182. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_roboarm.cpython-312.pyc +0 -0
  183. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_robustness.cpython-312.pyc +0 -0
  184. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_system.cpython-312.pyc +0 -0
  185. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/modules/__pycache__/LM_web.cpython-312.pyc +0 -0
  186. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/urequests.py +0 -0
  187. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/auth.js +0 -0
  188. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/config.html +0 -0
  189. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/config_schedler.js +0 -0
  190. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/dashboard.html +0 -0
  191. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/editor.js +0 -0
  192. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/editor_plugins.js +0 -0
  193. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/favicon.ico +0 -0
  194. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/filesui.html +0 -0
  195. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/index.html +0 -0
  196. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/uapi.js +0 -0
  197. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/ubashboard.css +0 -0
  198. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/udashboard.js +0 -0
  199. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/ustyle.css +0 -0
  200. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/uwidgets.js +0 -0
  201. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/source/web/uwidgets_pro.js +0 -0
  202. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/__init__.py +0 -0
  203. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_buffer.py +0 -0
  204. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_config.py +0 -0
  205. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_memory_policy.py +0 -0
  206. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_pacman.py +0 -0
  207. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_scheduler.py +0 -0
  208. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_time.py +0 -0
  209. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_urequests.py +0 -0
  210. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_urequests_real_api.py +0 -0
  211. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOS/utests/test_web_engine.py +0 -0
  212. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOSDevToolKit.egg-info/dependency_links.txt +0 -0
  213. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOSDevToolKit.egg-info/requires.txt +0 -0
  214. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/micrOSDevToolKit.egg-info/top_level.txt +0 -0
  215. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/setup.cfg +0 -0
  216. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/DevEnvUSB.py +0 -0
  217. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/LM_to_compile.dat +0 -0
  218. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/MicrOSDevEnv.py +0 -0
  219. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/WebRepl.py +0 -0
  220. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/__init__.py +0 -0
  221. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/BackupRestore.py +0 -0
  222. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/CCTDemo.py +0 -0
  223. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/CCTTest.py +0 -0
  224. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/CamStream.py +0 -0
  225. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/CatGame.py +0 -0
  226. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/Dimmer.py +0 -0
  227. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/GetVersion.py +0 -0
  228. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/MicrophoneTest.py +0 -0
  229. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/NeoEffectsDemo.py +0 -0
  230. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/NeopixelTest.py +0 -0
  231. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/PresenceTest.py +0 -0
  232. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/QMI8685_GYRO.py +0 -0
  233. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/RGBTest.py +0 -0
  234. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/RoboArm.py +0 -0
  235. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/SED_test.py +0 -0
  236. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/SensorsTest.py +0 -0
  237. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/Template_app.py +0 -0
  238. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/__init__.py +0 -0
  239. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/_app_base.py +0 -0
  240. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/_capture.py +0 -0
  241. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/_gyro_visualizer.py +0 -0
  242. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/_micPlotting.py +0 -0
  243. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/_presencePlotting.py +0 -0
  244. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/dashboard_apps/uLightDemo.py +0 -0
  245. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/gateway/gateway.css +0 -0
  246. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/gateway/img_stream.html +0 -0
  247. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/gateway/index.html +0 -0
  248. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/LocalMachine.py +0 -0
  249. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/MicrosFiles.py +0 -0
  250. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/Repository.py +0 -0
  251. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/SafeInput.py +0 -0
  252. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/SearchDevices.py +0 -0
  253. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/SerialDriverHandler.py +0 -0
  254. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/TerminalColors.py +0 -0
  255. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/__init__.py +0 -0
  256. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/macroScript.py +0 -0
  257. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/micrOSClient.py +0 -0
  258. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/micrOSClientHistory.py +0 -0
  259. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/lib/pip_package_installer.py +0 -0
  260. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/micrOSDocGen.py +0 -0
  261. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/micrOSImageBuilder.py +0 -0
  262. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/micrOSImageConfig.json +0 -0
  263. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/micrOSlint.py +0 -0
  264. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/.DS_Store +0 -0
  265. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/IO_darwin.py +0 -0
  266. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  267. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/Metrics.cpython-312.pyc +0 -0
  268. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  269. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
  270. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/dht.cpython-312.pyc +0 -0
  271. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/dht.cpython-39.pyc +0 -0
  272. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/dotstar.cpython-312.pyc +0 -0
  273. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/dotstar.cpython-38.pyc +0 -0
  274. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/dotstar.cpython-39.pyc +0 -0
  275. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-312.pyc +0 -0
  276. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-38.pyc +0 -0
  277. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-39.pyc +0 -0
  278. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/esp32.cpython-312.pyc +0 -0
  279. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/esp32.cpython-38.pyc +0 -0
  280. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/esp32.cpython-39.pyc +0 -0
  281. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  282. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/framebuf.cpython-38.pyc +0 -0
  283. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/framebuf.cpython-39.pyc +0 -0
  284. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  285. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/machine.cpython-38.pyc +0 -0
  286. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/machine.cpython-39.pyc +0 -0
  287. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  288. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/micropython.cpython-38.pyc +0 -0
  289. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/micropython.cpython-39.pyc +0 -0
  290. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
  291. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  292. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/neopixel.cpython-38.pyc +0 -0
  293. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/neopixel.cpython-39.pyc +0 -0
  294. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  295. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/network.cpython-38.pyc +0 -0
  296. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/network.cpython-39.pyc +0 -0
  297. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ntptime.cpython-312.pyc +0 -0
  298. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/onewire.cpython-312.pyc +0 -0
  299. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/onewire.cpython-38.pyc +0 -0
  300. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/onewire.cpython-39.pyc +0 -0
  301. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
  302. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  303. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/simgc.cpython-38.pyc +0 -0
  304. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/simgc.cpython-39.pyc +0 -0
  305. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  306. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/simulator.cpython-38.pyc +0 -0
  307. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/simulator.cpython-39.pyc +0 -0
  308. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/tinypico.cpython-312.pyc +0 -0
  309. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/tinypico.cpython-38.pyc +0 -0
  310. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/tinypico.cpython-39.pyc +0 -0
  311. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  312. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-38.pyc +0 -0
  313. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-39.pyc +0 -0
  314. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  315. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
  316. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  317. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  318. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ustruct.cpython-312.pyc +0 -0
  319. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/ustruct.cpython-39.pyc +0 -0
  320. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/utime.cpython-312.pyc +0 -0
  321. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/utime.cpython-38.pyc +0 -0
  322. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/utime.cpython-39.pyc +0 -0
  323. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/webrepl.cpython-312.pyc +0 -0
  324. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/webrepl.cpython-38.pyc +0 -0
  325. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/__pycache__/webrepl.cpython-39.pyc +0 -0
  326. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/aioespnow.py +0 -0
  327. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/camera.py +0 -0
  328. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/dht.py +0 -0
  329. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/dotstar.py +0 -0
  330. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/ds18x20.py +0 -0
  331. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/esp32.py +0 -0
  332. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/framebuf.py +0 -0
  333. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/machine.py +0 -0
  334. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/micropython.py +0 -0
  335. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/mip.py +0 -0
  336. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/neopixel.py +0 -0
  337. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/network.py +0 -0
  338. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/ntptime.py +0 -0
  339. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/onewire.py +0 -0
  340. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/sim_common.py +0 -0
  341. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/simgc.py +0 -0
  342. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/simulator.py +0 -0
  343. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/tinypico.py +0 -0
  344. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/uasyncio.py +0 -0
  345. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/uos.py +0 -0
  346. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/urandom.py +0 -0
  347. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/usocket.py +0 -0
  348. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/ussl.py +0 -0
  349. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/ustruct.py +0 -0
  350. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/utime.py +0 -0
  351. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/view01.jpg +0 -0
  352. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/view02.jpg +0 -0
  353. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/simulator_lib/webrepl.py +0 -0
  354. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/.include +0 -0
  355. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/__pycache__/generic.cpython-312.pyc +0 -0
  356. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/__pycache__/macro.cpython-312.pyc +0 -0
  357. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/__pycache__/template.cpython-312.pyc +0 -0
  358. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/generic.py +0 -0
  359. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/macro.py +0 -0
  360. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/template.macro +0 -0
  361. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/user_data/webhooks/template.py +0 -0
  362. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/__init__.py +0 -0
  363. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Auth.mpy +0 -0
  364. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Buffer.mpy +0 -0
  365. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Common.mpy +0 -0
  366. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Config.mpy +0 -0
  367. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Debug.mpy +0 -0
  368. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Files.mpy +0 -0
  369. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Hooks.mpy +0 -0
  370. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  371. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  372. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Logger.mpy +0 -0
  373. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Network.mpy +0 -0
  374. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Notify.mpy +0 -0
  375. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Pacman.mpy +0 -0
  376. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  377. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Server.mpy +0 -0
  378. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Tasks.mpy +0 -0
  379. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Time.mpy +0 -0
  380. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Types.mpy +0 -0
  381. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/Web.mpy +0 -0
  382. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/_mpy.version +0 -0
  383. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/config/_git.keep +0 -0
  384. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/helpers.mpy +0 -0
  385. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/main.py +0 -0
  386. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/mespnow.mpy +0 -0
  387. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/micrOS.mpy +0 -0
  388. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  389. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/microIO.mpy +0 -0
  390. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
  391. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
  392. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_esp32c5.mpy +0 -0
  393. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
  394. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
  395. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
  396. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
  397. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
  398. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
  399. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
  400. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
  401. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
  402. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_buzzer.mpy +0 -0
  403. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
  404. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
  405. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
  406. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
  407. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
  408. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
  409. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_esp32.py +0 -0
  410. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_espnow.py +0 -0
  411. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
  412. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_gameOfLife.mpy +0 -0
  413. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
  414. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_i2c.py +0 -0
  415. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
  416. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
  417. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
  418. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
  419. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
  420. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
  421. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
  422. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
  423. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_rencoder.py +0 -0
  424. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
  425. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
  426. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_rgbcct.mpy +0 -0
  427. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_robustness.py +0 -0
  428. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_rp2w.py +0 -0
  429. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_sdcard.py +0 -0
  430. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_servo.mpy +0 -0
  431. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_stepper.mpy +0 -0
  432. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
  433. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
  434. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
  435. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/modules/LM_tinyrgb.mpy +0 -0
  436. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/urequests.mpy +0 -0
  437. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/auth.js +0 -0
  438. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/config.html +0 -0
  439. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/config_schedler.js +0 -0
  440. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/dashboard.html +0 -0
  441. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/editor.js +0 -0
  442. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/editor_plugins.js +0 -0
  443. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/favicon.ico +0 -0
  444. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/filesui.html +0 -0
  445. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/index.html +0 -0
  446. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/uapi.js +0 -0
  447. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/ubashboard.css +0 -0
  448. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/udashboard.js +0 -0
  449. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/ustyle.css +0 -0
  450. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/uwidgets.js +0 -0
  451. {microsdevtoolkit-3.7.1 → microsdevtoolkit-3.7.2}/toolkit/workspace/precompiled/web/uwidgets_pro.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 3.7.1
3
+ Version: 3.7.2
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
@@ -176,6 +176,11 @@ devToolKit.py
176
176
  3. Select **Deploy (USB)** and confirm the operation.
177
177
  4. Wait for deployment to complete and the board to restart.
178
178
 
179
+ Current micrOS versions use `major.minor.patch` (for example, `3.7.2`).
180
+ DevToolKit also accepts the optional numeric `-revision` suffix used by legacy
181
+ boards and records (for example, `3.7.2-0`). Update checks compare the complete
182
+ version strings, so these two identifiers are treated as different versions.
183
+
179
184
  On first deployment, DevToolKit may offer to install the Serial USB driver
180
185
  required by your platform. The first toolkit launch installs optional GUI,
181
186
  compiler, and media dependencies; keep internet access available until it
@@ -138,6 +138,11 @@ devToolKit.py
138
138
  3. Select **Deploy (USB)** and confirm the operation.
139
139
  4. Wait for deployment to complete and the board to restart.
140
140
 
141
+ Current micrOS versions use `major.minor.patch` (for example, `3.7.2`).
142
+ DevToolKit also accepts the optional numeric `-revision` suffix used by legacy
143
+ boards and records (for example, `3.7.2-0`). Update checks compare the complete
144
+ version strings, so these two identifiers are treated as different versions.
145
+
141
146
  On first deployment, DevToolKit may offer to install the Serial USB driver
142
147
  required by your platform. The first toolkit launch installs optional GUI,
143
148
  compiler, and media dependencies; keep internet access available until it
@@ -272,7 +272,7 @@
272
272
  25
273
273
  ],
274
274
  "web": [
275
- 223188,
275
+ 225389,
276
276
  21
277
277
  ],
278
278
  "core_dep": [
@@ -285,6 +285,6 @@
285
285
  ],
286
286
  "core_score": 9.26,
287
287
  "load_score": 8.37,
288
- "version": "3.7.1-0"
288
+ "version": "3.7.2"
289
289
  }
290
290
  }
@@ -28,7 +28,7 @@ IMAGE_MODE = 'rel' if 'micrOS' in uname()[-1] else 'dev'
28
28
 
29
29
  class Shell:
30
30
  __slots__ = ['__devfid', '__auth_mode', '__hwuid', '__auth_ok', '__conf_mode']
31
- MICROS_VERSION = '3.7.1-0'
31
+ MICROS_VERSION = '3.7.2'
32
32
 
33
33
  def __init__(self):
34
34
  """
@@ -103,7 +103,7 @@ def mounts_w_access(*args, **kwargs) -> dict:
103
103
  return {}
104
104
 
105
105
  ######################## System Config ######################
106
- _CFG_HIDE = ("hwuid", "guimeta", "socport", "version", "auth", "soctout")
106
+ _CFG_HIDE = ("hwuid", "guimeta", "socport", "version", "soctout")
107
107
 
108
108
  def enable_config():
109
109
  """
@@ -7,6 +7,12 @@
7
7
  --config-padding: 12px;
8
8
  }
9
9
 
10
+ .config-auth-hint {
11
+ color: #aaa;
12
+ font-size: 0.85rem;
13
+ margin: 8px 0 0;
14
+ }
15
+
10
16
  #configContainer {
11
17
  display: flex;
12
18
  flex-direction: row;
@@ -16,15 +22,17 @@
16
22
  }
17
23
 
18
24
  #configMenu {
25
+ flex-shrink: 0;
19
26
  max-width: 30vw;
20
27
  min-width: 12vw;
21
28
  border-radius: 8px;
22
29
  box-sizing: border-box;
23
- padding: 8px 0;
30
+ padding: 8px 12px 8px 0;
24
31
  background: transparent;
25
32
  }
26
33
 
27
34
  #configMenu p {
35
+ white-space: nowrap;
28
36
  cursor: pointer;
29
37
  padding: 0.2rem 0rem 0.2rem 1rem;
30
38
  border-radius: 3px;
@@ -164,6 +172,7 @@
164
172
  #configFields .config-package-install input { flex: 1 1 240px; width: auto; }
165
173
  #configFields #packageCatalog { width: 180px; }
166
174
  .config-package-info { width: var(--config-input-width); max-width: 100%; box-sizing: border-box; margin-bottom: 12px; overflow-wrap: anywhere; }
175
+ .config-package-install-output { width: var(--config-input-width); max-width: 100%; box-sizing: border-box; overflow-wrap: anywhere; }
167
176
  .config-package-info p { margin: 0 0 8px; }
168
177
  .config-package-info a { color: var(--config-label); }
169
178
  .config-pin-info { margin-top: 20px; }
@@ -1,7 +1,7 @@
1
1
  const configCategories = {
2
2
  'Device': {
3
3
  icon: '📟',
4
- keys: ['devfid', 'boothook', 'appwd', 'dbg', 'aioqueue', 'utc', 'boostmd']
4
+ keys: ['devfid', 'boothook', 'auth', 'appwd', 'dbg', 'aioqueue', 'utc', 'boostmd']
5
5
  },
6
6
  'Network': {
7
7
  icon: '📡',
@@ -44,6 +44,7 @@ const configCategories = {
44
44
  const configLabelMap = {
45
45
  'devfid': 'Device name',
46
46
  'boothook': 'Startup Actions',
47
+ 'auth': 'Authentication',
47
48
  'appwd': 'Admin Password',
48
49
  'dbg': 'Debug Mode',
49
50
  'aioqueue': 'Allowed Number of Tasks',
@@ -930,7 +931,10 @@ function loadConfigSection(category) {
930
931
  const {script: src, render: renderer} = configCategories[category];
931
932
  const container = document.getElementById('configFields');
932
933
  // Base settings stay usable even when optional enhancements are unavailable.
933
- renderConfigFields(filterConfig(category), category);
934
+ const baseConfig = filterConfig(category);
935
+ // The raw task input is a fallback, not a placeholder for the scheduler UI.
936
+ if (category === 'Scheduler') delete baseConfig.crontasks;
937
+ renderConfigFields(baseConfig, category);
934
938
  if (!isEditableConfigSection(category)) {
935
939
  container.appendChild(textElement('h2', categoryTitle(category), 'config-heading-top'));
936
940
  }
@@ -960,6 +964,10 @@ function loadConfigSection(category) {
960
964
  })
961
965
  .catch(err => {
962
966
  if (!loading.isConnected) return;
967
+ if (category === 'Scheduler') {
968
+ renderConfigFields(filterConfig(category), category);
969
+ container.appendChild(loading);
970
+ }
963
971
  loading.textContent = err.message;
964
972
  container.appendChild(makeButton('Retry', () => loadConfigSection(category)));
965
973
  });
@@ -1308,9 +1316,17 @@ function renderField(container, key, value) {
1308
1316
 
1309
1317
  const label = textElement('label', configLabel(key) + ': ', 'config-label');
1310
1318
 
1319
+ const authHint = key === 'auth' && typeof value === 'boolean'
1320
+ ? textElement('p', 'On-demand module loading is disabled for the REST API.', 'config-auth-hint')
1321
+ : null;
1322
+ if (authHint) authHint.hidden = !value;
1323
+
1311
1324
  let input;
1312
1325
  if (typeof value === 'boolean') {
1313
- input = createBooleanToggle(key, value, nextValue => trackChange(key, nextValue));
1326
+ input = createBooleanToggle(key, value, nextValue => {
1327
+ trackChange(key, nextValue);
1328
+ if (authHint) authHint.hidden = !nextValue;
1329
+ });
1314
1330
  } else if (typeof value === 'number') {
1315
1331
  input = document.createElement('input');
1316
1332
  input.type = 'number';
@@ -1331,6 +1347,7 @@ function renderField(container, key, value) {
1331
1347
  input.dataset.configKey = key;
1332
1348
  wrapper.appendChild(label);
1333
1349
  appendInputWithPasswordToggle(wrapper, input, key);
1350
+ if (authHint) wrapper.appendChild(authHint);
1334
1351
  container.appendChild(wrapper);
1335
1352
  }
1336
1353
 
@@ -122,6 +122,7 @@ function renderPackagesSection() {
122
122
  installRow.appendChild(input);
123
123
 
124
124
  const installResult = createInlineOutput();
125
+ installResult.classList.add('config-package-install-output');
125
126
 
126
127
  const installBtn = makeButton('Install', () => {
127
128
  const url = input.value.trim();
@@ -44,12 +44,16 @@ function renderWebAppsSection() {
44
44
  }
45
45
 
46
46
  function storeWebAppsStatus(status) {
47
- Object.keys(configData).filter(key => key.startsWith('web.fs_write_access.'))
48
- .forEach(key => { delete configData[key]; });
49
47
  Object.entries(status).forEach(([key, value]) => {
50
48
  if (typeof value === 'boolean') configData['web.' + key] = value;
51
49
  });
52
- Object.entries(status.fs_write_access || {}).forEach(([mount, value]) => {
50
+ storeMountWriteAccess(status.fs_write_access || {});
51
+ }
52
+
53
+ function storeMountWriteAccess(status) {
54
+ Object.keys(configData).filter(key => key.startsWith('web.fs_write_access.'))
55
+ .forEach(key => { delete configData[key]; });
56
+ Object.entries(status).forEach(([mount, value]) => {
53
57
  const name = mount.replace(/^\$/, '');
54
58
  if (['modules', 'data', 'logs'].includes(name) && typeof value === 'boolean') {
55
59
  configData['web.fs_write_access.' + name] = value;
@@ -81,21 +85,32 @@ async function updateWebApp(key, value) {
81
85
  };
82
86
  if (originalGroup) originalGroup.setWebAppsPending();
83
87
  let errorMessage = '';
88
+ const mountPrefix = 'web.fs_write_access.';
89
+ const isMount = key.startsWith(mountPrefix);
84
90
  try {
85
- const mountPrefix = 'web.fs_write_access.';
86
- const isMount = key.startsWith(mountPrefix);
87
91
  const argument = key.slice(isMount ? mountPrefix.length : 4);
88
92
  const route = isMount ? 'web/mounts_w_access/' : 'web/load/';
89
93
  const auth = isMount ? '/pwd=' + restQuote(configData.appwd || '') : '';
90
94
  const response = await restAPI(route + argument + '=' + (value ? 'True' : 'False') + auth, false);
91
95
  if (!response || response.state !== true) throw new Error('Unable to update web app settings.');
92
- const status = await getWebAppsStatus();
93
- storeWebAppsStatus(status);
96
+ if (isMount) {
97
+ if (!response.result || typeof response.result !== 'object' || Array.isArray(response.result)) {
98
+ throw new Error('Unable to confirm mount write access.');
99
+ }
100
+ storeMountWriteAccess(response.result);
101
+ } else {
102
+ configData[key] = value;
103
+ if (value && ['web.fileserver', 'web.fs_explore'].includes(key) &&
104
+ configData['web.fileserver'] && configData['web.fs_explore'] &&
105
+ !['modules', 'data', 'logs'].every(mount =>
106
+ typeof configData['web.fs_write_access.' + mount] === 'boolean')) {
107
+ const status = await getWebAppsStatus();
108
+ storeMountWriteAccess(status.fs_write_access || {});
109
+ }
110
+ }
94
111
  if (configData[key] !== value) throw new Error('Unable to confirm web app settings.');
95
112
  } catch (error) {
96
113
  errorMessage = error.message;
97
- // Reconcile with the device if the write succeeded but confirmation failed.
98
- try { storeWebAppsStatus(await getWebAppsStatus()); } catch (_) {}
99
114
  } finally {
100
115
  webAppUpdating = false;
101
116
  const group = document.getElementById('configWebApps');
@@ -177,14 +192,14 @@ function renderWebApps(container) {
177
192
  if (Object.keys(current).some(key => key.startsWith('web.fs_write_access.'))) {
178
193
  options.appendChild(textElement('h4', 'Write access', 'config-table-title config-heading-top'));
179
194
  options.appendChild(accessRow);
180
- options.appendChild(textElement('small', 'Hint: Mount write access resets to read-only after reboot.', 'config-hint'));
195
+ options.appendChild(textElement('small', 'Hint: Mount write access resets after reboot. Use command below to persist current settings.', 'config-hint'));
181
196
  const command = textElement('code', '', 'config-hint');
182
197
  const updateCommand = () => {
183
198
  const values = configData;
184
199
  const args = ['modules', 'data', 'logs']
185
200
  .filter(mount => typeof values['web.fs_write_access.' + mount] === 'boolean')
186
201
  .map(mount => `${mount}=${values['web.fs_write_access.' + mount] ? 'True' : 'False'}`);
187
- command.textContent = 'web mounts_w_access ' + args.join(' ') + ' pwd="<password>"';
202
+ command.textContent = 'web mounts_w_access ' + args.join(' ') + ' pwd=$pwd';
188
203
  };
189
204
  updateCommand();
190
205
  options.appendChild(command);
@@ -205,7 +220,7 @@ function renderWebApps(container) {
205
220
  group.setAttribute('aria-busy', 'true');
206
221
  };
207
222
 
208
- // An in-flight update will confirm status and render the current group.
223
+ // An in-flight update will apply its result and render the current group.
209
224
  if (webAppUpdating) {
210
225
  group.setWebAppsPending();
211
226
  return;
@@ -82,11 +82,12 @@ function itemRow(cls, name, meta) {
82
82
  return d;
83
83
  }
84
84
 
85
- const fileActions = {open: openFile, edit: editor, delete: deleteFile};
85
+ const fileActions = {open: openFile, edit: editor, download: downloadFile, delete: deleteFile};
86
86
  const fileActionBar = document.createElement('span');
87
87
  fileActionBar.className = 'file-actions';
88
88
  fileActionBar.innerHTML = '<button type="button" data-action="open">📖 Open</button>' +
89
89
  '<button type="button" data-action="edit">📄 Edit</button>' +
90
+ '<button type="button" data-action="download" title="Download" aria-label="Download">⬇</button>' +
90
91
  '<button type="button" class="danger" data-action="delete" title="Delete" aria-label="Delete">♻</button>';
91
92
  fileActionBar.onclick = e => {
92
93
  e.stopPropagation();
@@ -289,6 +290,16 @@ function openFile() {
289
290
  window.open(resource);
290
291
  }
291
292
 
293
+ function downloadFile() {
294
+ if (!selected) return;
295
+ const link = document.createElement('a');
296
+ link.href = `/${selectedDir}/${selected}`.split('/').map(encodeURIComponent).join('/');
297
+ link.download = selected;
298
+ document.body.appendChild(link);
299
+ link.click();
300
+ link.remove();
301
+ }
302
+
292
303
  function deleteFile() {
293
304
  if (!selected) return;
294
305
  if (!window.confirm(`Delete ${selected}?`)) return;
@@ -89,7 +89,10 @@ function restWidget(container='restWidget', opts={}) {
89
89
  root.append(makeEl('h3', {}, [label]), form, url, responseBox, time);
90
90
  if (REST_CONSOLE_CACHE) {restConsole(...REST_CONSOLE_CACHE, {url, response: responseBox, time});}
91
91
  updateHint();
92
- restAPICore('modules all', opts.modulesTimeout || 3000).then(({response}) => {
92
+ restAPICore('', opts.modulesTimeout || 3000).then(({response}) => {
93
+ const authDisabled = response && response.result && response.result.auth === false;
94
+ return restAPICore(authDisabled ? 'modules all' : 'modules', opts.modulesTimeout || 3000);
95
+ }).then(({response}) => {
93
96
  const commands = moduleCommandSuggestions(response);
94
97
  if (!commands.length) {throw new Error('No module suggestions');}
95
98
  return commands;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 3.7.1
3
+ Version: 3.7.2
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
@@ -176,6 +176,11 @@ devToolKit.py
176
176
  3. Select **Deploy (USB)** and confirm the operation.
177
177
  4. Wait for deployment to complete and the board to restart.
178
178
 
179
+ Current micrOS versions use `major.minor.patch` (for example, `3.7.2`).
180
+ DevToolKit also accepts the optional numeric `-revision` suffix used by legacy
181
+ boards and records (for example, `3.7.2-0`). Update checks compare the complete
182
+ version strings, so these two identifiers are treated as different versions.
183
+
179
184
  On first deployment, DevToolKit may offer to install the Serial USB driver
180
185
  required by your platform. The first toolkit launch installs optional GUI,
181
186
  compiler, and media dependencies; keep internet access available until it
@@ -36,10 +36,10 @@ micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin
36
36
  micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin
37
37
  micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin
38
38
  micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin
39
- micrOS/micropython/micrOS-esp32-1.28.0-3.7.0-0.bin
40
- micrOS/micropython/micrOS-esp32c3-1.28.0-3.7.0-0.bin
41
- micrOS/micropython/micrOS-esp32c6-1.28.0-3.7.0-0.bin
42
- micrOS/micropython/micrOS-esp32s3-1.28.0-3.7.0-0.bin
39
+ micrOS/micropython/micrOS-esp32-1.28.0-3.7.2.bin
40
+ micrOS/micropython/micrOS-esp32c3-1.28.0-3.7.2.bin
41
+ micrOS/micropython/micrOS-esp32c6-1.28.0-3.7.2.bin
42
+ micrOS/micropython/micrOS-esp32s3-1.28.0-3.7.2.bin
43
43
  micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2
44
44
  micrOS/micropython/tinypico-20251209-v1.27.0.bin
45
45
  micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json
@@ -17,7 +17,7 @@ dependencies = ['adafruit-ampy', 'mpremote', 'esptool', 'ipaddress', 'netaddr',
17
17
 
18
18
  setuptools.setup(
19
19
  name='micrOSDevToolKit',
20
- version='3.7.1',
20
+ version='3.7.2',
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)',
@@ -160,7 +160,7 @@ class Compile:
160
160
  # Get repo version
161
161
  with open(os.path.join(self.micrOS_dir_path, 'Shell.py'), 'r') as f:
162
162
  code_lines_string = f.read()
163
- regex = r"\d+.\d+.\d+-\d+"
163
+ regex = r"^\s*MICROS_VERSION\s*=\s*['\"](\d+\.\d+\.\d+(?:-\d+)?)['\"]"
164
164
  repo_version = re.findall(regex, code_lines_string, re.MULTILINE)[0]
165
165
  return repo_version
166
166
 
@@ -343,7 +343,7 @@ class Compile:
343
343
  # Get node version
344
344
  if not self.dry_run and config_string is not None:
345
345
  try:
346
- regex = r"\d+.\d+.\d+-\d+"
346
+ regex = r"['\"]version['\"]\s*:\s*['\"](\d+\.\d+\.\d+(?:-\d+)?)['\"]"
347
347
  version_on_node = re.findall(regex, config_string, re.MULTILINE)[0]
348
348
  except Exception as e:
349
349
  self.console("Obsolete node version - node version was not defined: {}".format(e), state='warn')
@@ -149,7 +149,8 @@ class OTA(Compile):
149
149
 
150
150
  def _version_compare(self, repo_version, fuid):
151
151
  """
152
- version SemVer: 1.2.3-4 - major[1.2]minor[.3]patch[-4]
152
+ Version format: major.minor.patch, with optional legacy -revision suffix.
153
+ Compatibility grouping uses the first two components (major.minor).
153
154
  In case of [major] change force full update (micrOS safe core: micrOSloadoer, etc.)
154
155
  In case of [minor + patch] change install main micrOS resources + LMs
155
156
  :param fuid: friendly unique id / unique id
@@ -265,21 +265,18 @@ class DeviceDashboardGroup(Resource):
265
265
  css_classes = ['device-tab']
266
266
  if fuid == selected_device:
267
267
  css_classes.append('active')
268
+ current = ' aria-current="true"' if fuid == selected_device else ''
268
269
  title = escape(f"{fuid} ({uid})")
269
270
  links.append(
270
271
  f'<a class="{" ".join(css_classes)}" href="{href}" target="deviceFrame" '
271
- f'data-device="{escape(fuid)}" title="{title}">{escape(fuid)}</a>'
272
+ f'data-device="{escape(fuid)}" title="{title}"{current}>{escape(fuid)}</a>'
272
273
  )
273
274
  return f'<nav class="device-tabs" aria-label="{label}">' + ''.join(links) + '</nav>'
274
275
 
275
276
  def get(self):
276
277
  groups = self._device_groups()
277
- requested_device = request.args.get('device', '').strip()
278
- known_devices = {
279
- str(data[2]) for data in groups['online'].values()
280
- }
281
- first_online = next(iter(groups['online'].values()), None)
282
- first_device = requested_device if requested_device in known_devices else str(first_online[2]) if first_online else ''
278
+ first_online = next(iter(sorted(groups['online'].values(), key=lambda data: str(data[2]).lower())), None)
279
+ first_device = str(first_online[2]) if first_online else ''
283
280
  initial_src = f"/dashboard/{quote(first_device, safe='')}" if first_device else ''
284
281
  online_tabs = self._device_tabs('online devices', groups['online'], first_device)
285
282
  iframe = (
@@ -297,16 +294,21 @@ class DeviceDashboardGroup(Resource):
297
294
  <title>micrOS Gateway Dashboards</title>
298
295
  <link rel="stylesheet" href="/gateway.css">
299
296
  <style>
300
- .dashboard-shell {{ min-height: 100vh; display: grid; grid-template-rows: auto 1fr; gap: 8px; padding: 10px; }}
297
+ body.page-gateway {{ padding-left: env(safe-area-inset-left, 0px); padding-right: env(safe-area-inset-right, 0px); }}
298
+ .dashboard-shell {{ width: 100%; min-height: 100vh; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr; gap: 8px; padding: 10px 0; }}
301
299
  .dashboard-top {{ overflow: hidden; }}
302
- .device-tabs {{ display: flex; gap: 6px; overflow-x: auto; padding: 4px; }}
303
- .device-tab {{ display: inline-flex; align-items: center; justify-content: center; min-height: 30px; padding: 5px 10px; border-radius: 8px; background: var(--surface-strong); color: var(--text); text-decoration: none; font-weight: 700; font-size: 12px; white-space: nowrap; box-shadow: inset 0 0 0 1px var(--line); }}
300
+ .device-tabs {{ display: flex; flex-wrap: nowrap; gap: 8px; overflow-x: auto; padding: 4px 4px 16px; }}
301
+ .device-tab {{ display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center; min-height: 44px; min-width: 44px; padding: 10px 16px; border-radius: 8px; background: var(--surface-strong); color: var(--text); text-decoration: none; font-weight: 700; font-size: 14px; line-height: 1.3; text-align: center; white-space: nowrap; touch-action: manipulation; box-shadow: inset 0 0 0 1px var(--line); }}
302
+ .device-tab:focus-visible {{ outline: 2px solid var(--accent); outline-offset: 2px; }}
303
+ @media (hover: hover) {{
304
+ .device-tab:hover {{ box-shadow: inset 0 0 0 2px var(--accent); }}
305
+ }}
304
306
  .device-tab.active {{ background: var(--accent); color: #101418; box-shadow: none; }}
305
307
  .dashboard-frame {{ min-height: calc(100vh - 56px); }}
306
- #deviceFrame {{ width: 100%; min-height: calc(100vh - 56px); border: 1px solid var(--line); border-radius: 8px; background: #000; }}
308
+ #deviceFrame {{ display: block; width: 100%; min-height: calc(100vh - 56px); border: 1px solid var(--line); border-radius: 8px; background: #000; }}
307
309
  .empty-row, .empty-panel {{ color: var(--muted); padding: 12px; border: 1px solid var(--line); border-radius: 8px; }}
308
310
  @media (max-width: 820px) {{
309
- .dashboard-shell {{ padding: 6px; }}
311
+ .dashboard-shell {{ padding: 6px 0; }}
310
312
  #deviceFrame {{ min-height: calc(100vh - 48px); }}
311
313
  }}
312
314
  </style>
@@ -321,12 +323,90 @@ class DeviceDashboardGroup(Resource):
321
323
  </section>
322
324
  </main>
323
325
  <script>
324
- document.querySelectorAll('.device-tab').forEach(link => {{
325
- link.addEventListener('click', () => {{
326
- document.querySelectorAll('.device-tab').forEach(item => item.classList.remove('active'));
327
- link.classList.add('active');
326
+ const frame = document.getElementById('deviceFrame');
327
+ let frameObserver;
328
+ let resizeRequest;
329
+ function fitDashboard() {{
330
+ cancelAnimationFrame(resizeRequest);
331
+ resizeRequest = requestAnimationFrame(() => {{
332
+ const doc = frame.contentDocument;
333
+ if (!doc || !doc.body) return;
334
+ const style = frame.contentWindow.getComputedStyle(doc.body);
335
+ const height = Math.ceil(doc.body.getBoundingClientRect().height
336
+ + (parseFloat(style.marginTop) || 0)
337
+ + (parseFloat(style.marginBottom) || 0));
338
+ // Include the frame border when sizing its border box.
339
+ frame.style.height = `${{height + 2}}px`;
340
+ }});
341
+ }}
342
+ if (frame) {{
343
+ frame.addEventListener('load', () => {{
344
+ if (frameObserver) frameObserver.disconnect();
345
+ const doc = frame.contentDocument;
346
+ if (!doc || !doc.body) return;
347
+ // Remove viewport height floors only inside the embedded page.
348
+ const style = doc.createElement('style');
349
+ style.textContent = 'html, body {{ min-height: 0; }} html {{ overflow-y: hidden; }}';
350
+ doc.head.appendChild(style);
351
+ frameObserver = new ResizeObserver(fitDashboard);
352
+ frameObserver.observe(doc.body);
353
+ fitDashboard();
354
+ }});
355
+ window.addEventListener('resize', fitDashboard);
356
+ }}
357
+ const deviceTabs = Array.from(document.querySelectorAll('.device-tab'));
358
+ const selectionKey = 'micros.gateway.dashboard.device';
359
+ function centerDevice(link) {{
360
+ const toolbar = link.parentElement;
361
+ toolbar.scrollLeft = link.offsetLeft - toolbar.offsetLeft
362
+ - (toolbar.clientWidth - link.offsetWidth) / 2;
363
+ }}
364
+ function selectDevice(link, save = true) {{
365
+ deviceTabs.forEach(item => {{
366
+ item.classList.remove('active');
367
+ item.removeAttribute('aria-current');
368
+ }});
369
+ link.classList.add('active');
370
+ link.setAttribute('aria-current', 'true');
371
+ if (save) {{
372
+ try {{ localStorage.setItem(selectionKey, link.dataset.device); }} catch (error) {{}}
373
+ }}
374
+ requestAnimationFrame(() => centerDevice(link));
375
+ }}
376
+ deviceTabs.forEach(link => {{
377
+ link.addEventListener('click', event => {{
378
+ if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return;
379
+ selectDevice(link);
328
380
  }});
329
381
  }});
382
+ let savedDevice;
383
+ try {{ savedDevice = localStorage.getItem(selectionKey); }} catch (error) {{}}
384
+ const dashboardUrl = new URL(window.location.href);
385
+ const requestedDevice = dashboardUrl.searchParams.get('device');
386
+ const requestedTab = deviceTabs.find(link => link.dataset.device === requestedDevice);
387
+ const initialTab = requestedTab
388
+ || deviceTabs.find(link => link.dataset.device === savedDevice)
389
+ || deviceTabs[0];
390
+ if (initialTab && frame) {{
391
+ if (frame.getAttribute('src') !== initialTab.getAttribute('href')) {{
392
+ frame.src = initialTab.getAttribute('href');
393
+ }}
394
+ selectDevice(initialTab, Boolean(requestedTab));
395
+ if (dashboardUrl.searchParams.has('device')) {{
396
+ dashboardUrl.searchParams.delete('device');
397
+ window.history.replaceState(window.history.state, '', dashboardUrl.href);
398
+ }}
399
+ if (document.fonts) {{
400
+ document.fonts.ready.then(() => {{
401
+ const active = deviceTabs.find(link => link.classList.contains('active'));
402
+ if (active) centerDevice(active);
403
+ }});
404
+ }}
405
+ window.addEventListener('resize', () => {{
406
+ const active = deviceTabs.find(link => link.classList.contains('active'));
407
+ if (active) centerDevice(active);
408
+ }});
409
+ }}
330
410
  </script>
331
411
  </body>
332
412
  </html>"""
@@ -367,11 +447,6 @@ class DeviceDashboard(Resource):
367
447
  f' <script>BASE_URL = {json.dumps(rest_base)};</script>',
368
448
  1
369
449
  )
370
- html = html.replace(
371
- '<h1> micrOS dashboard </h1>',
372
- f'<h1> micrOS dashboard - {safe_device}</h1>',
373
- 1
374
- )
375
450
  return make_response(html)
376
451
 
377
452
 
@@ -5,6 +5,7 @@ import sys
5
5
  import time
6
6
  import socket
7
7
  import ast
8
+ import re
8
9
  from pprint import pprint
9
10
  try:
10
11
  from ._app_base import AppBase
@@ -96,7 +97,7 @@ def shell_cmds_check():
96
97
  cmd_list = ['version']
97
98
  output = CLIENT.execute(cmd_list)
98
99
  if output[0]:
99
- if not ('.' in output[1] and '-' in output[1]):
100
+ if not re.fullmatch(r'\d+\.\d+\.\d+(?:-\d+)?', output[1].strip()):
100
101
  return False, f"{info}version: {output[1]}"
101
102
  cmd_list = ['help']
102
103
  output = CLIENT.execute(cmd_list)
@@ -273,7 +274,7 @@ def micrOS_get_version():
273
274
  cmd_list = ['version']
274
275
  output = CLIENT.execute(cmd_list)
275
276
  if output[0]:
276
- if '.' in output[1].strip() and '-' in output[1].strip():
277
+ if re.fullmatch(r'\d+\.\d+\.\d+(?:-\d+)?', output[1].strip()):
277
278
  return True, f"{info} v:{output[1].strip()}"
278
279
  _add_metrics('version', output[1])
279
280
  return False, f"{info} out: {output[1]}"
@@ -568,7 +568,7 @@ class HeaderInfo:
568
568
  def version_label(self):
569
569
  width = 115
570
570
  repo_version, _ = self.devtool_obj.get_micrOS_version()
571
- label = QLabel("Version: {}".format(repo_version), self.parent_obj)
571
+ label = QLabel(" Version: {}".format(repo_version), self.parent_obj)
572
572
  label.setGeometry(self.parent_obj.width - width - 20, 10, width, 40)
573
573
  label.setStyleSheet("background-color : gray; color: {}; border: 1px solid black;".format(micrOSGUI.TEXTCOLOR))
574
574
 
@@ -0,0 +1,7 @@
1
+ {"auth": false,
2
+ "devfid": "simulator",
3
+ "appwd": "ADmin123",
4
+ "webui": true,
5
+ "boothook": "web load dashboard=True fileserver=True fs_explore=True; fileserver mounts_write_access modules=True logs=True pwd=$pwd; neopixel load; #telegram load '6185435843:AAH71wEyoOil8bRKecQHp4zazTQ_MmE7bvE' &; #telegram receiver_loop &2000",
6
+ "aioqueue": 4,
7
+ "webui_max_con": 10}