micrOSDevToolKit 2.10.2__tar.gz → 2.10.5__tar.gz

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

Potentially problematic release.


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

Files changed (392) hide show
  1. {microsdevtoolkit-2.10.2/micrOSDevToolKit.egg-info → microsdevtoolkit-2.10.5}/PKG-INFO +3 -2
  2. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +26 -18
  3. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Common.py +2 -2
  4. microsdevtoolkit-2.10.5/micrOS/source/Espnow.py +282 -0
  5. microsdevtoolkit-2.10.5/micrOS/source/Files.py +101 -0
  6. {microsdevtoolkit-2.10.2/toolkit/workspace/precompiled → microsdevtoolkit-2.10.5/micrOS/source}/LM_espnow.py +10 -7
  7. microsdevtoolkit-2.10.5/micrOS/source/LM_mqtt_pro.py +211 -0
  8. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_pacman.py +37 -57
  9. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_system.py +1 -1
  10. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Logger.py +5 -11
  11. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Shell.py +23 -19
  12. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Tasks.py +2 -2
  13. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
  14. microsdevtoolkit-2.10.5/micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  15. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/microIO.py +3 -2
  16. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/urequests.py +10 -1
  17. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5/micrOSDevToolKit.egg-info}/PKG-INFO +3 -2
  18. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOSDevToolKit.egg-info/SOURCES.txt +4 -0
  19. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/setup.py +1 -1
  20. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
  21. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/uos.py +5 -5
  22. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/Espnow.mpy +0 -0
  23. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/Files.mpy +0 -0
  24. {microsdevtoolkit-2.10.2/micrOS/source → microsdevtoolkit-2.10.5/toolkit/workspace/precompiled}/LM_espnow.py +10 -7
  25. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/LM_mqtt_pro.py +211 -0
  26. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/LM_pacman.mpy +0 -0
  27. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/LM_system.mpy +0 -0
  28. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/Logger.mpy +0 -0
  29. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/Shell.mpy +0 -0
  30. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Tasks.mpy +0 -0
  31. microsdevtoolkit-2.10.5/toolkit/workspace/precompiled/microIO.mpy +0 -0
  32. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/urequests.mpy +0 -0
  33. microsdevtoolkit-2.10.2/micrOS/source/Espnow.py +0 -160
  34. microsdevtoolkit-2.10.2/micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
  35. microsdevtoolkit-2.10.2/toolkit/workspace/precompiled/Espnow.mpy +0 -0
  36. microsdevtoolkit-2.10.2/toolkit/workspace/precompiled/LM_pacman.mpy +0 -0
  37. microsdevtoolkit-2.10.2/toolkit/workspace/precompiled/LM_system.mpy +0 -0
  38. microsdevtoolkit-2.10.2/toolkit/workspace/precompiled/Logger.mpy +0 -0
  39. microsdevtoolkit-2.10.2/toolkit/workspace/precompiled/Shell.mpy +0 -0
  40. microsdevtoolkit-2.10.2/toolkit/workspace/precompiled/microIO.mpy +0 -0
  41. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/LICENSE +0 -0
  42. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/MANIFEST.in +0 -0
  43. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/README.md +0 -0
  44. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/devToolKit.py +0 -0
  45. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/__init__.py +0 -0
  46. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/.DS_Store +0 -0
  47. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x64.exe +0 -0
  48. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210xVCPInstaller_x86.exe +0 -0
  49. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/CP210x_Universal_Windows_Driver_ReleaseNotes.txt +0 -0
  50. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/SLAB_License_Agreement_VCP_Windows.txt +0 -0
  51. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm/silabser.sys +0 -0
  52. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/arm64/silabser.sys +0 -0
  53. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/dpinst.xml +0 -0
  54. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.cat +0 -0
  55. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/silabser.inf +0 -0
  56. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x64/silabser.sys +0 -0
  57. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/CP210x_Universal_Windows_Driver/x86/silabser.sys +0 -0
  58. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
  59. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +0 -0
  60. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/media/__init__.py +0 -0
  61. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/media/dnd.png +0 -0
  62. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/media/logo.png +0 -0
  63. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/media/logo_mini.png +0 -0
  64. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/media/usb_port_icon.png +0 -0
  65. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/media/wifi_icon.png +0 -0
  66. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/__init__.py +0 -0
  67. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32-20241129-v1.24.1.bin +0 -0
  68. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32c3-20240222-v1.22.2.bin +0 -0
  69. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32cam-v1.21.0_camera.bin +0 -0
  70. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s2-20240602-v1.23.0.bin +0 -0
  71. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
  72. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s2-LOLIN_MINI-20240602-v1.23.0.bin +0 -0
  73. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s3-20240105-v1.22.1.bin +0 -0
  74. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s3-20241129-v1.24.1.bin +0 -0
  75. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
  76. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin +0 -0
  77. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2 +0 -0
  78. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/micropython/tinypico-20241129-v1.24.1.bin +0 -0
  79. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/.DS_Store +0 -0
  80. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Config.py +0 -0
  81. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Debug.py +0 -0
  82. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Hooks.py +0 -0
  83. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_esp32.py +0 -0
  84. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_esp32c3.py +0 -0
  85. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_esp32s2.py +0 -0
  86. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_esp32s3.py +0 -0
  87. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_m5stamp.py +0 -0
  88. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_qtpy.py +0 -0
  89. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_rp2.py +0 -0
  90. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/IO_tinypico.py +0 -0
  91. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/InterConnect.py +0 -0
  92. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Interrupts.py +0 -0
  93. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_L298N_DCmotor.py +0 -0
  94. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_L9110_DCmotor.py +0 -0
  95. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_OV2640.py +0 -0
  96. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_VL53L0X.py +0 -0
  97. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_aht10.py +0 -0
  98. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_bme280.py +0 -0
  99. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_buzzer.py +0 -0
  100. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_catgame.py +0 -0
  101. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_cct.py +0 -0
  102. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_co2.py +0 -0
  103. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_dashboard_be.py +0 -0
  104. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_demo.py +0 -0
  105. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_dht11.py +0 -0
  106. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_dht22.py +0 -0
  107. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_dimmer.py +0 -0
  108. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_distance.py +0 -0
  109. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_ds18.py +0 -0
  110. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_esp32.py +0 -0
  111. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_gameOfLife.py +0 -0
  112. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_genIO.py +0 -0
  113. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_haptic.py +0 -0
  114. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_i2c.py +0 -0
  115. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_i2s_mic.py +0 -0
  116. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_intercon.py +0 -0
  117. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_keychain.py +0 -0
  118. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_ld2410.py +0 -0
  119. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_light_sensor.py +0 -0
  120. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_neoeffects.py +0 -0
  121. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_neopixel.py +0 -0
  122. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_oled.py +0 -0
  123. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_oled_sh1106.py +0 -0
  124. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_oled_ui.py +0 -0
  125. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_oledui.py +0 -0
  126. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_pet_feeder.py +0 -0
  127. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_ph_sensor.py +0 -0
  128. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_presence.py +0 -0
  129. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_rencoder.py +0 -0
  130. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_rest.py +0 -0
  131. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_rgb.py +0 -0
  132. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_rgbcct.py +0 -0
  133. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_roboarm.py +0 -0
  134. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_robustness.py +0 -0
  135. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_rp2w.py +0 -0
  136. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_sdcard.py +0 -0
  137. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_servo.py +0 -0
  138. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_sound_event.py +0 -0
  139. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_stepper.py +0 -0
  140. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_switch.py +0 -0
  141. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_telegram.py +0 -0
  142. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_tinyrgb.py +0 -0
  143. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_trackball.py +0 -0
  144. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/LM_veml7700.py +0 -0
  145. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Network.py +0 -0
  146. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Notify.py +0 -0
  147. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Scheduler.py +0 -0
  148. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Server.py +0 -0
  149. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Time.py +0 -0
  150. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Types.py +0 -0
  151. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/Web.py +0 -0
  152. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
  153. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/dashboard.html +0 -0
  154. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/index.html +0 -0
  155. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/main.py +0 -0
  156. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/micrOS.py +0 -0
  157. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/micrOSloader.py +0 -0
  158. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/reset.py +0 -0
  159. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/uapi.js +0 -0
  160. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/udashboard.js +0 -0
  161. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/ustyle.css +0 -0
  162. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/uwidgets.js +0 -0
  163. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOS/source/uwidgets_pro.js +0 -0
  164. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOSDevToolKit.egg-info/dependency_links.txt +0 -0
  165. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOSDevToolKit.egg-info/requires.txt +0 -0
  166. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/micrOSDevToolKit.egg-info/top_level.txt +0 -0
  167. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/setup.cfg +0 -0
  168. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/DevEnvCompile.py +0 -0
  169. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/DevEnvOTA.py +0 -0
  170. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/DevEnvUSB.py +0 -0
  171. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/Gateway.py +0 -0
  172. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/LM_to_compile.dat +0 -0
  173. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/MicrOSDevEnv.py +0 -0
  174. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/WebRepl.py +0 -0
  175. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/__init__.py +0 -0
  176. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/BackupRestore.py +0 -0
  177. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/CCTDemo.py +0 -0
  178. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/CCTTest.py +0 -0
  179. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/CamStream.py +0 -0
  180. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/CatGame.py +0 -0
  181. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/Dimmer.py +0 -0
  182. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/GetVersion.py +0 -0
  183. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/MicrophoneTest.py +0 -0
  184. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/NeoEffectsDemo.py +0 -0
  185. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/NeopixelTest.py +0 -0
  186. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/PresenceTest.py +0 -0
  187. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/RGBTest.py +0 -0
  188. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/RoboArm.py +0 -0
  189. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/SED_test.py +0 -0
  190. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/SensorsTest.py +0 -0
  191. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/SystemTest.py +0 -0
  192. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/Template_app.py +0 -0
  193. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/__init__.py +0 -0
  194. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/_app_base.py +0 -0
  195. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/_capture.py +0 -0
  196. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/_micPlotting.py +0 -0
  197. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/_presencePlotting.py +0 -0
  198. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/dashboard_apps/uLightDemo.py +0 -0
  199. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/img_stream.html +0 -0
  200. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/index.html +0 -0
  201. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/LocalMachine.py +0 -0
  202. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/Repository.py +0 -0
  203. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/SafeInput.py +0 -0
  204. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/SearchDevices.py +0 -0
  205. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/SerialDriverHandler.py +0 -0
  206. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/TerminalColors.py +0 -0
  207. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/__init__.py +0 -0
  208. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/file_extensions.py +0 -0
  209. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/macroScript.py +0 -0
  210. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/micrOSClient.py +0 -0
  211. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/micrOSClientHistory.py +0 -0
  212. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/lib/pip_package_installer.py +0 -0
  213. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/micrOSdashboard.py +0 -0
  214. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/micrOSlint.py +0 -0
  215. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/.DS_Store +0 -0
  216. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/IO_darwin.py +0 -0
  217. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
  218. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
  219. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
  220. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/dht.cpython-312.pyc +0 -0
  221. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/dht.cpython-39.pyc +0 -0
  222. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/dotstar.cpython-312.pyc +0 -0
  223. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/dotstar.cpython-38.pyc +0 -0
  224. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/dotstar.cpython-39.pyc +0 -0
  225. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-312.pyc +0 -0
  226. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-38.pyc +0 -0
  227. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ds18x20.cpython-39.pyc +0 -0
  228. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/esp32.cpython-312.pyc +0 -0
  229. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/esp32.cpython-38.pyc +0 -0
  230. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/esp32.cpython-39.pyc +0 -0
  231. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
  232. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/framebuf.cpython-38.pyc +0 -0
  233. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/framebuf.cpython-39.pyc +0 -0
  234. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
  235. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/machine.cpython-38.pyc +0 -0
  236. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/machine.cpython-39.pyc +0 -0
  237. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
  238. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/micropython.cpython-38.pyc +0 -0
  239. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/micropython.cpython-39.pyc +0 -0
  240. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
  241. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/neopixel.cpython-38.pyc +0 -0
  242. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/neopixel.cpython-39.pyc +0 -0
  243. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
  244. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/network.cpython-38.pyc +0 -0
  245. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/network.cpython-39.pyc +0 -0
  246. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ntptime.cpython-312.pyc +0 -0
  247. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/onewire.cpython-312.pyc +0 -0
  248. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/onewire.cpython-38.pyc +0 -0
  249. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/onewire.cpython-39.pyc +0 -0
  250. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
  251. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
  252. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
  253. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
  254. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/simgc.cpython-38.pyc +0 -0
  255. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/simgc.cpython-39.pyc +0 -0
  256. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
  257. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/simulator.cpython-38.pyc +0 -0
  258. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/simulator.cpython-39.pyc +0 -0
  259. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/tinypico.cpython-312.pyc +0 -0
  260. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/tinypico.cpython-38.pyc +0 -0
  261. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/tinypico.cpython-39.pyc +0 -0
  262. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
  263. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-38.pyc +0 -0
  264. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/uasyncio.cpython-39.pyc +0 -0
  265. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
  266. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
  267. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ustruct.cpython-312.pyc +0 -0
  268. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/ustruct.cpython-39.pyc +0 -0
  269. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/utime.cpython-312.pyc +0 -0
  270. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/utime.cpython-38.pyc +0 -0
  271. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/utime.cpython-39.pyc +0 -0
  272. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/webrepl.cpython-312.pyc +0 -0
  273. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/webrepl.cpython-38.pyc +0 -0
  274. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/__pycache__/webrepl.cpython-39.pyc +0 -0
  275. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/aioespnow.py +0 -0
  276. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/camera.py +0 -0
  277. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/dht.py +0 -0
  278. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/dotstar.py +0 -0
  279. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/ds18x20.py +0 -0
  280. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/esp32.py +0 -0
  281. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/framebuf.py +0 -0
  282. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/machine.py +0 -0
  283. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/micropython.py +0 -0
  284. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/neopixel.py +0 -0
  285. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/network.py +0 -0
  286. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/node_config.json +0 -0
  287. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/ntptime.py +0 -0
  288. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/onewire.py +0 -0
  289. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/sim_console.py +0 -0
  290. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/simgc.py +0 -0
  291. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/simulator.py +0 -0
  292. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/tinypico.py +0 -0
  293. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/uasyncio.py +0 -0
  294. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/usocket.py +0 -0
  295. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/ussl.py +0 -0
  296. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/ustruct.py +0 -0
  297. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/utime.py +0 -0
  298. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/view01.jpg +0 -0
  299. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/view02.jpg +0 -0
  300. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/simulator_lib/webrepl.py +0 -0
  301. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/socketClient.py +0 -0
  302. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/user_data/.include +0 -0
  303. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/user_data/webhooks/generic.py +0 -0
  304. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/user_data/webhooks/macro.py +0 -0
  305. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/user_data/webhooks/template.macro +0 -0
  306. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/user_data/webhooks/template.py +0 -0
  307. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/__init__.py +0 -0
  308. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Common.mpy +0 -0
  309. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Config.mpy +0 -0
  310. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Debug.mpy +0 -0
  311. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Hooks.mpy +0 -0
  312. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
  313. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
  314. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
  315. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
  316. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_m5stamp.mpy +0 -0
  317. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
  318. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
  319. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
  320. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/InterConnect.mpy +0 -0
  321. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Interrupts.mpy +0 -0
  322. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
  323. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_L9110_DCmotor.py +0 -0
  324. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
  325. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_VL53L0X.py +0 -0
  326. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
  327. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
  328. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_buzzer.mpy +0 -0
  329. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_catgame.py +0 -0
  330. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_cct.mpy +0 -0
  331. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_co2.mpy +0 -0
  332. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_dashboard_be.py +0 -0
  333. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_demo.py +0 -0
  334. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
  335. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
  336. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
  337. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_distance.mpy +0 -0
  338. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
  339. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_esp32.py +0 -0
  340. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_gameOfLife.mpy +0 -0
  341. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
  342. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_haptic.mpy +0 -0
  343. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_i2c.py +0 -0
  344. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
  345. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
  346. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
  347. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_ld2410.mpy +0 -0
  348. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
  349. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
  350. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
  351. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_oled.mpy +0 -0
  352. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
  353. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
  354. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
  355. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_pet_feeder.py +0 -0
  356. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_ph_sensor.py +0 -0
  357. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_presence.mpy +0 -0
  358. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_rencoder.py +0 -0
  359. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_rest.mpy +0 -0
  360. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
  361. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_rgbcct.mpy +0 -0
  362. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
  363. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_robustness.py +0 -0
  364. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_rp2w.py +0 -0
  365. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_sdcard.py +0 -0
  366. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_servo.mpy +0 -0
  367. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_sound_event.mpy +0 -0
  368. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_stepper.mpy +0 -0
  369. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_switch.mpy +0 -0
  370. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
  371. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_tinyrgb.mpy +0 -0
  372. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_trackball.mpy +0 -0
  373. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/LM_veml7700.mpy +0 -0
  374. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Network.mpy +0 -0
  375. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Notify.mpy +0 -0
  376. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Scheduler.mpy +0 -0
  377. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Server.mpy +0 -0
  378. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Time.mpy +0 -0
  379. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Types.mpy +0 -0
  380. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/Web.mpy +0 -0
  381. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/_mpy.version +0 -0
  382. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/dashboard.html +0 -0
  383. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/index.html +0 -0
  384. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/main.py +0 -0
  385. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/micrOS.mpy +0 -0
  386. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
  387. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/reset.mpy +0 -0
  388. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/uapi.js +0 -0
  389. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/udashboard.js +0 -0
  390. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/ustyle.css +0 -0
  391. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/uwidgets.js +0 -0
  392. {microsdevtoolkit-2.10.2 → microsdevtoolkit-2.10.5}/toolkit/workspace/precompiled/uwidgets_pro.js +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: micrOSDevToolKit
3
- Version: 2.10.2
3
+ Version: 2.10.5
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
@@ -31,6 +31,7 @@ Dynamic: description
31
31
  Dynamic: description-content-type
32
32
  Dynamic: home-page
33
33
  Dynamic: license
34
+ Dynamic: license-file
34
35
  Dynamic: project-url
35
36
  Dynamic: requires-dist
36
37
  Dynamic: summary
@@ -4,6 +4,10 @@
4
4
  9.16,
5
5
  7
6
6
  ],
7
+ "Files.py": [
8
+ 9.6,
9
+ 4
10
+ ],
7
11
  "micrOSloader.py": [
8
12
  7.33,
9
13
  1
@@ -26,14 +30,14 @@
26
30
  ],
27
31
  "Config.py": [
28
32
  9.48,
29
- 17
33
+ 18
30
34
  ],
31
35
  "reset.py": [
32
36
  10.0,
33
37
  0
34
38
  ],
35
39
  "Shell.py": [
36
- 9.34,
40
+ 9.36,
37
41
  1
38
42
  ],
39
43
  "Notify.py": [
@@ -45,12 +49,12 @@
45
49
  29
46
50
  ],
47
51
  "Logger.py": [
48
- 8.85,
52
+ 8.9,
49
53
  4
50
54
  ],
51
55
  "Common.py": [
52
56
  9.78,
53
- 34
57
+ 35
54
58
  ],
55
59
  "InterConnect.py": [
56
60
  9.41,
@@ -65,7 +69,7 @@
65
69
  8
66
70
  ],
67
71
  "Espnow.py": [
68
- 9.43,
72
+ 9.49,
69
73
  1
70
74
  ],
71
75
  "Scheduler.py": [
@@ -73,7 +77,7 @@
73
77
  1
74
78
  ],
75
79
  "microIO.py": [
76
- 9.42,
80
+ 9.43,
77
81
  42
78
82
  ],
79
83
  "micrOS.py": [
@@ -89,7 +93,7 @@
89
93
  0
90
94
  ],
91
95
  "urequests.py": [
92
- 8.99,
96
+ 8.96,
93
97
  5
94
98
  ],
95
99
  "LM_roboarm.py": [
@@ -101,7 +105,7 @@
101
105
  1
102
106
  ],
103
107
  "LM_pacman.py": [
104
- 8.94,
108
+ 8.92,
105
109
  0
106
110
  ],
107
111
  "LM_genIO.py": [
@@ -113,7 +117,7 @@
113
117
  0
114
118
  ],
115
119
  "LM_system.py": [
116
- 8.19,
120
+ 8.28,
117
121
  5
118
122
  ],
119
123
  "LM_robustness.py": [
@@ -237,7 +241,7 @@
237
241
  0
238
242
  ],
239
243
  "LM_espnow.py": [
240
- 7.5,
244
+ 7.89,
241
245
  0
242
246
  ],
243
247
  "LM_telegram.py": [
@@ -272,6 +276,10 @@
272
276
  8.9,
273
277
  4
274
278
  ],
279
+ "LM_mqtt_pro.py": [
280
+ 9.35,
281
+ 0
282
+ ],
275
283
  "LM_trackball.py": [
276
284
  8.31,
277
285
  1
@@ -315,12 +323,12 @@
315
323
  },
316
324
  "summary": {
317
325
  "core": [
318
- 3380,
319
- 23
326
+ 3550,
327
+ 24
320
328
  ],
321
329
  "load": [
322
- 9077,
323
- 55
330
+ 9217,
331
+ 56
324
332
  ],
325
333
  "core_dep": [
326
334
  true,
@@ -328,10 +336,10 @@
328
336
  ],
329
337
  "load_dep": [
330
338
  true,
331
- 5
339
+ 6
332
340
  ],
333
- "core_score": 9.22,
334
- "load_score": 8.2,
335
- "version": "2.10.2-0"
341
+ "core_score": 9.24,
342
+ "load_score": 8.23,
343
+ "version": "2.10.5-0"
336
344
  }
337
345
  }
@@ -125,10 +125,10 @@ def manage_task(tag, operation):
125
125
  raise Exception(f"Invalid operation: {operation}")
126
126
 
127
127
 
128
- def exec_cmd(cmd, jsonify:bool=None, skip_check=False):
128
+ def exec_cmd(cmd:list, jsonify:bool=None, skip_check=False):
129
129
  """
130
130
  [LM] Single (sync) LM execution
131
- :param cmd: command string list
131
+ :param cmd: command string list, ex.: ['system', 'clock']
132
132
  :param jsonify: request json output
133
133
  :param skip_check: skip cmd type check, micropython bug
134
134
  return state, output
@@ -0,0 +1,282 @@
1
+ from aioespnow import AIOESPNow
2
+ from binascii import hexlify
3
+ from Tasks import NativeTask, TaskBase, lm_exec, lm_is_loaded
4
+ import uasyncio as asyncio
5
+ from Network import get_mac
6
+ from Config import cfgget
7
+ from Debug import errlog_add
8
+
9
+
10
+ # ----------- PARSE AND RENDER MSG PROTOCOL --------------
11
+
12
+ def render_response(tid, oper, data, prompt) -> str:
13
+ """
14
+ Render ESPNow custom message (protocol)
15
+ """
16
+ if oper not in ("REQ", "RSP"):
17
+ errlog_add(f"[ERR] espnow render_response, unknown oper: {oper}")
18
+ tmp = "{tid}|{oper}|{data}|{prompt}$"
19
+ tmp = tmp.replace("{tid}", str(tid))
20
+ tmp = tmp.replace("{oper}", str(oper))
21
+ tmp = tmp.replace("{data}", str(data))
22
+ tmp = tmp.replace("{prompt}", str(prompt))
23
+ return tmp
24
+
25
+ def parse_request(msg:bytes) -> (bool, dict|str):
26
+ """
27
+ Parse ESPNow custom message protocol
28
+ """
29
+ try:
30
+ msg = msg.decode('utf-8').strip()
31
+ except UnicodeError:
32
+ return False, "Invalid encoding"
33
+ # strip the trailing '$' then split on '|'
34
+ parts = msg.rstrip("$").split("|")
35
+ if len(parts) == 4:
36
+ return True, {"tid": parts[0],
37
+ "oper": parts[1],
38
+ "data": parts[2],
39
+ "prompt": parts[3]}
40
+ return False, f"Missing 4 args: {msg}"
41
+
42
+
43
+ # ----------- ESPNOW SESSION SERVER - LISTENER AND SENDER --------------
44
+ class ResponseRouter:
45
+ """
46
+ Response Router (by mac address)
47
+ to connect sender task with receiver loop (aka server)
48
+ """
49
+ _routes: dict[bytes, "ResponseRouter"] = {}
50
+
51
+ def __init__(self, mac: bytes):
52
+ self.mac = mac
53
+ self.response = None
54
+ self._event = asyncio.Event()
55
+ ResponseRouter._routes[mac] = self
56
+
57
+ async def get_response(self, timeout:int=10) -> str|dict:
58
+ """Wait for one response, then clear the event for reuse."""
59
+ try:
60
+ await asyncio.wait_for(self._event.wait(), timeout)
61
+ except asyncio.TimeoutError:
62
+ return "Timeout has beed exceeded"
63
+ self._event.clear()
64
+ return self.response
65
+
66
+ @staticmethod
67
+ def update_response(mac: bytes, response: str) -> None:
68
+ # USE <tid> for proper session response mapping
69
+ router = ResponseRouter._routes.get(mac)
70
+ if router is None:
71
+ errlog_add(f"[WARN][ESPNOW] No response route for {mac}")
72
+ return
73
+ router.response = response
74
+ router._event.set()
75
+
76
+ def close(self) -> None:
77
+ """Remove routing entry when done."""
78
+ ResponseRouter._routes.pop(self.mac, None)
79
+
80
+
81
+ class ESPNowSS:
82
+ """
83
+ ESPNow Session Server
84
+ """
85
+ _instance = None
86
+
87
+ def __new__(cls, *args, **kwargs):
88
+ if cls._instance is None:
89
+ # first time: actually create it
90
+ cls._instance = super().__new__(cls)
91
+ return cls._instance
92
+
93
+ def __init__(self):
94
+ # __init__ still runs each time, so guard if needed
95
+ if not hasattr(self, '_initialized'):
96
+ self.espnow = AIOESPNow() # Instance with async support
97
+ self.espnow.active(True)
98
+ self.devfid = cfgget('devfid')
99
+ self.devices: dict[bytes, str] = {} # mapping for { "mac address": "devfid" } pairs
100
+ self._initialized = True
101
+ self.server_ready = False
102
+
103
+ # ----------- SERVER METHODS --------------
104
+ def _request_handler(self, msg:bytes, my_task:NativeTask, mac:bytes):
105
+ """
106
+ Handle server input message (request), with REQ/RSP types (oper)
107
+ oper==REQ - command execution
108
+ oper==RSP - command response
109
+ :param msg: valid message format> "{tid}|{oper}|{data}|{prompt}$", {data} is the user input
110
+ :param my_task: Server task instance, for my_task.out update
111
+ :param mac: sender binary mac address
112
+ """
113
+
114
+ state, request = parse_request(msg)
115
+ if not state:
116
+ my_task.out = f"[_ESPNOW] {request}"
117
+ return state, request
118
+
119
+ # parsed request: {"tid": "n/a", "oper": "n/a", "data": "n/a", "prompt": "n/a"}
120
+ operation, prompt, tid = request["oper"], request["prompt"], request["tid"]
121
+ my_task.out = f"[{tid}] {operation} from {prompt}"
122
+ # Update known devices
123
+ self.devices[mac] = request["prompt"]
124
+
125
+ # Check if the module/command is allowed., check oper==REQ/RSP
126
+ if operation == "REQ":
127
+ command = request["data"].split()
128
+ module = command[0]
129
+ if lm_is_loaded(module):
130
+ try:
131
+ state, out = lm_exec(command)
132
+ # rendered_output: "{tid}|{oper}|{data}|{prompt}$"
133
+ rendered_out = render_response(tid="?", oper="RSP", data=out, prompt=self.devfid)
134
+ return state, rendered_out
135
+ except Exception as e:
136
+ # Optionally log the exception here.
137
+ state, out = False, f"[ERR][_ESPNOW] {command}: {e}"
138
+ else:
139
+ state, out = False, f"[WARN][_ESPNOW] NotAllowed {module}"
140
+ return state, out
141
+ if operation == "RSP":
142
+ resp_data = request["data"]
143
+ ResponseRouter.update_response(mac, resp_data) # USE <tid> for proper session response mapping
144
+ return False, f"[_ESPNOW] No action, {request}"
145
+
146
+ async def _server(self, tag:str):
147
+ """
148
+ ESPnow async listener task
149
+ :param tag: micro_task tag for task access
150
+ """
151
+ with TaskBase.TASKS.get(tag, None) as my_task:
152
+ self.server_ready = True
153
+ my_task.out = "ESPNow receiver running"
154
+ async for mac, msg in self.espnow:
155
+ try:
156
+ state, response = self._request_handler(msg, my_task, mac)
157
+ if state:
158
+ await self.__asend_raw(mac, response)
159
+ else:
160
+ errlog_add(response)
161
+ except OSError as err:
162
+ # If the peer is not yet added, add it and retry.
163
+ if len(err.args) > 1 and err.args[1] == 'ESP_ERR_ESPNOW_NOT_FOUND':
164
+ self.add_peer(mac)
165
+ state, response = self._request_handler(msg, my_task, mac)
166
+ if state:
167
+ await self.__asend_raw(mac, response)
168
+ else:
169
+ errlog_add(response)
170
+ else:
171
+ # Optionally handle or log other OSErrors here.
172
+ errlog_add(f"[ERR][NOW SERVER] {err}")
173
+
174
+ def start_server(self):
175
+ """
176
+ Start the async ESPNow receiver server.
177
+ """
178
+ # Create an asynchronous task with tag 'espnow.server'
179
+ tag = 'espnow.server'
180
+ state = NativeTask().create(callback=self._server(tag), tag=tag)
181
+ return "Starting" if state else "Already running"
182
+
183
+ #----------- SEND METHODS --------------
184
+ async def __asend_raw(self, mac:bytes, msg:str):
185
+ """
186
+ ESPnow send message to mac address
187
+ """
188
+ return await self.espnow.asend(mac, msg.encode("utf-8"))
189
+
190
+ async def _asend_task(self, peer:bytes, tag:str, msg:str):
191
+ """
192
+ ESPNow client task: send a command to a peer and update task status.
193
+ """
194
+ with TaskBase.TASKS.get(tag, None) as my_task:
195
+ router = ResponseRouter(peer)
196
+ # rendered_output: "{tid}|{oper}|{data}|{prompt}$"
197
+ rendered_out = render_response(tid="?", oper="REQ", data=msg, prompt=self.devfid)
198
+ if await self.__asend_raw(peer, rendered_out):
199
+ my_task.out = f"[ESPNOW SEND] {rendered_out}"
200
+ my_task.out = await router.get_response()
201
+ else:
202
+ my_task.out = "[ESPNOW SEND] Peer not responding"
203
+ router.close()
204
+
205
+ def mac_by_peer_name(self, peer_name:str) -> bytes|None:
206
+ matches = [k for k, v in self.devices.items() if v == peer_name]
207
+ peer = matches[0] if matches else None
208
+ return peer
209
+
210
+ def send(self, peer:bytes|str, msg:str) -> str:
211
+ """
212
+ Send a command over ESPNow.
213
+ :param peer: Binary MAC address of another device.
214
+ :param msg: String command message to send.
215
+ """
216
+ peer_name = None
217
+ if isinstance(peer, str):
218
+ # Peer as device name (prompt)
219
+ _peer = self.mac_by_peer_name(peer)
220
+ if _peer is None:
221
+ return f"Unknown device: {peer}"
222
+ peer_name = peer
223
+ peer = _peer
224
+
225
+ peer_name = hexlify(peer, ':').decode() if peer_name is None else peer_name
226
+ task_id = f"con.espnow.{peer_name}"
227
+ # Create an asynchronous sending task.
228
+ state = NativeTask().create(callback=INSTANCE._asend_task(peer, task_id, msg), tag=task_id)
229
+ return "Starting" if state else "Already running"
230
+
231
+ # ----------- OTHER METHODS --------------
232
+
233
+ def add_peer(self, peer:bytes, devfid:str=None):
234
+ """
235
+ Add a peer given its MAC address.
236
+ :param peer: Binary MAC address of a peer (e.g. b'\xbb\xbb\xbb\xbb\xbb\xbb').
237
+ :param devfid: optional parameter to register dev uid for mac address
238
+ """
239
+ try:
240
+ self.espnow.add_peer(peer)
241
+ if devfid is not None:
242
+ # Update known devices
243
+ self.devices[peer] = devfid
244
+ except Exception as e:
245
+ return f"Peer error: {e}"
246
+ return "Peer register done"
247
+
248
+ def stats(self):
249
+ """
250
+ Return stats for ESPNow peers.
251
+ stats: tx_pkts, tx_responses, tx_failures, rx_packets, rx_dropped_packets.
252
+ peers: peer, rssi, time_ms.
253
+ """
254
+ try:
255
+ _stats = self.espnow.stats()
256
+ except Exception as e:
257
+ _stats = str(e)
258
+ try:
259
+ _peers = self.espnow.peers_table
260
+ except Exception as e:
261
+ _peers = str(e)
262
+ return {"stats": _stats, "peers": _peers, "map": self.devices, "ready": self.server_ready}
263
+
264
+
265
+ ###################################################
266
+ # Control functions #
267
+ ###################################################
268
+ INSTANCE = ESPNowSS()
269
+
270
+ def initialize():
271
+ # TODO: remove, use ESPNowSS() class instead
272
+ global INSTANCE
273
+ if INSTANCE is None:
274
+ INSTANCE = ESPNowSS()
275
+ return INSTANCE
276
+
277
+
278
+ def mac_address():
279
+ """
280
+ Get the binary MAC address.
281
+ """
282
+ return get_mac()
@@ -0,0 +1,101 @@
1
+ from uos import ilistdir, remove, stat
2
+
3
+ ################################ Helper functions #####################################
4
+
5
+ def _is_module(path:str='/', pyprefix:str='*') -> bool:
6
+ """
7
+ Filter application modules, LM_.* (pyprefix) or app data or web resource
8
+ :param path: file to check
9
+ :param pyprefix: python resource filter prefix, default: * (all: LM and IO)
10
+ """
11
+ # micrOS file types
12
+ allowed_exts = ('html', 'js', 'css', 'log', 'pds', 'dat')
13
+ mod_prefixes = ('LM', "IO")
14
+ fname = path.split("/")[-1]
15
+ if fname.split("_")[0] in mod_prefixes or fname.split('.')[-1] in allowed_exts:
16
+ if pyprefix == '*':
17
+ # MODE: ALL app resources
18
+ return True
19
+ if fname.startswith(f"{pyprefix.upper()}_"):
20
+ # MODE: SELECTED app resources
21
+ return True
22
+ return False
23
+
24
+
25
+ def _type_mask_to_str(item_type:int=None) -> str:
26
+ # Map the raw bit-mask to a single character
27
+ if item_type & 0x4000: # Dir bit-mask
28
+ item_type = 'd'
29
+ elif item_type & 0x8000: # File bit-mask
30
+ item_type = 'f'
31
+ else:
32
+ item_type = 'o'
33
+ return item_type
34
+
35
+ ########################### Public functions #############################
36
+
37
+ def ilist_fs(path:str="/", type_filter:str='*', select:str='*', core:bool=False):
38
+ """
39
+ Linux like ls command - list app resources and app folders
40
+ :param path: path to list, default: /
41
+ :param type_filter: content type, default all (*), f-file, d-dir can be selected
42
+ :param select: select specific application resource type by prefix: LM or IO
43
+ :param core: list core files resources as well, default: False
44
+ return iterator:
45
+ when content is all (*) output: [(item_type, item), ...]
46
+ OR
47
+ content type was selected (not *) output: [item, ...]
48
+ """
49
+ path = path if path.endswith('/') else f"{path}/"
50
+ # Info: uos.ilistdir: (name, type, inode[, size])
51
+ for item, item_type, *_ in ilistdir(path):
52
+ item_type = _type_mask_to_str(item_type)
53
+ if type_filter in ("*", item_type):
54
+ # Mods only
55
+ if not core and item_type == 'f' and not _is_module(path+item, pyprefix=select):
56
+ continue
57
+ if select != '*' and item_type == 'd':
58
+ continue
59
+ # Create result
60
+ if type_filter == "*":
61
+ yield item_type, item
62
+ else:
63
+ yield item
64
+
65
+
66
+ def list_fs(path:str="/", type_filter:str='*', select:str='*', core:bool=False) -> list[str,] | list[tuple[str, str],]:
67
+ """
68
+ Wrapper of ilist_fs
69
+ Return list
70
+ """
71
+ return list(ilist_fs(path, type_filter, select, core))
72
+
73
+
74
+ def remove_fs(path, allow_dir=False):
75
+ """
76
+ Linux like rm command - delete app resources and folders
77
+ :param path: app resource path
78
+ :param allow_dir: enable directory deletion, default: False
79
+ """
80
+ # protect some resources
81
+ if 'pacman.mpy' in path or 'system.mpy' in path or "/" == path.strip():
82
+ return f'Load module {path} is protected, skip deletion'
83
+ _is_dir = is_dir(path)
84
+ if _is_module(path) or (_is_dir and allow_dir):
85
+ remove(path)
86
+ return f"Removed: {path} {'dir' if _is_dir else 'file'}"
87
+ return f"Protected path: {path}"
88
+
89
+
90
+ def is_dir(path):
91
+ try:
92
+ return stat(path)[0] & 0x4000
93
+ except OSError:
94
+ return False
95
+
96
+
97
+ def is_file(path):
98
+ try:
99
+ return stat(path)[0] & 0x8000
100
+ except OSError:
101
+ return False
@@ -6,13 +6,14 @@ def load():
6
6
  """
7
7
  return Espnow.initialize()
8
8
 
9
- def send(peer, msg='modules'):
9
+ def send(peer:bytes|str, msg:str='modules'):
10
10
  """
11
11
  Send message to peer (by mac address)
12
12
  :param peer: mac address of espnow device
13
13
  :param msg: message string/load module call
14
14
  """
15
- return Espnow.espnow_send(peer, msg)
15
+ now = Espnow.initialize()
16
+ return now.send(peer, msg)
16
17
 
17
18
  def start_server():
18
19
  """
@@ -20,21 +21,23 @@ def start_server():
20
21
  - this can receive espnow messages
21
22
  - it includes Load Module execution logic (beta)
22
23
  """
23
- return Espnow.espnow_server()
24
+ now = Espnow.initialize()
25
+ return now.start_server()
24
26
 
25
27
  def stats():
26
28
  """
27
29
  Get ESPNOW stats
28
30
  """
29
- return Espnow.stats()
31
+ now = Espnow.initialize()
32
+ return now.stats()
30
33
 
31
- def add_peer(peer):
34
+ def add_peer(peer:bytes, dev_name:str=None):
32
35
  """
33
36
  Add ESPNOW peer to known hosts
34
37
  - It is needed before first send(...)
35
38
  """
36
39
  now = Espnow.initialize()
37
- return Espnow.add_peer(now, peer)
40
+ return now.add_peer(peer, dev_name)
38
41
 
39
42
  def mac_address():
40
43
  """
@@ -46,4 +49,4 @@ def help():
46
49
  """
47
50
  [beta] ESPNOW sender/receiver with LM execution
48
51
  """
49
- return 'load', 'send <peer> "ping"', 'start_server', 'add_peer <peer>', 'stats', 'mac_address'
52
+ return 'load', 'send <peer> "ping"', 'start_server', 'add_peer <peer> dev_name=None', 'stats', 'mac_address'