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