micrOSDevToolKit 2.1.5__py3-none-any.whl → 2.26.1__py3-none-any.whl
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.
- env/driver_cp210x/.DS_Store +0 -0
- env/driver_cp210x/macOS_VCP_Driver/SiLabsUSBDriverDisk.dmg +0 -0
- env/driver_cp210x/macOS_VCP_Driver/macOS_VCP_Driver_Release_Notes.txt +17 -1
- micrOS/micropython/esp32-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32c3-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32c6-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s2-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s3-4MBflash-20241129-v1.24.1.bin +0 -0
- micrOS/micropython/esp32s3-8MBflash-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20251209-v1.27.0.bin +0 -0
- micrOS/micropython/rpi-pico-w-20251209-v1.27.0.uf2 +0 -0
- micrOS/micropython/tinypico-20251209-v1.27.0.bin +0 -0
- micrOS/release_info/micrOS_ReleaseInfo/system_analysis_sum.json +191 -151
- micrOS/source/Auth.py +37 -0
- micrOS/source/Common.py +376 -102
- micrOS/source/Config.py +55 -25
- micrOS/source/Debug.py +54 -193
- micrOS/source/Espnow.py +404 -0
- micrOS/source/Files.py +207 -0
- micrOS/source/Hooks.py +88 -16
- micrOS/source/InterConnect.py +130 -46
- micrOS/source/Interrupts.py +8 -8
- micrOS/source/Logger.py +131 -0
- micrOS/source/Network.py +41 -21
- micrOS/source/Notify.py +74 -198
- micrOS/source/Pacman.py +326 -0
- micrOS/source/Scheduler.py +18 -55
- micrOS/source/Server.py +84 -217
- micrOS/source/Shell.py +103 -93
- micrOS/source/Tasks.py +239 -173
- micrOS/source/Time.py +21 -22
- micrOS/source/Types.py +89 -54
- micrOS/source/Web.py +485 -0
- micrOS/source/__pycache__/Common.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Debug.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Files.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Logger.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Scheduler.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Server.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/Shell.cpython-312.pyc +0 -0
- micrOS/source/__pycache__/replhelper.cpython-312.pyc +0 -0
- micrOS/source/helpers.py +132 -0
- micrOS/source/micrOS.py +25 -21
- micrOS/source/micrOSloader.py +14 -23
- micrOS/source/microIO.py +94 -57
- toolkit/simulator_lib/LP_darwin.py → micrOS/source/modules/IO_esp32.py +22 -11
- micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +6 -1
- micrOS/source/modules/IO_esp32c6.py +38 -0
- micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +6 -1
- micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +43 -2
- micrOS/source/modules/IO_m5stamp.py +86 -0
- micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +28 -18
- micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +48 -3
- micrOS/source/modules/LM_L298N.py +161 -0
- {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +4 -4
- micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +53 -42
- micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
- micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +12 -4
- micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +13 -25
- micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +42 -40
- micrOS/source/{LM_cct.py → modules/LM_cct.py} +22 -27
- micrOS/source/modules/LM_cluster.py +255 -0
- micrOS/source/{LM_co2.py → modules/LM_co2.py} +13 -6
- micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +13 -29
- micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +13 -28
- micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +19 -16
- micrOS/source/modules/LM_distance.py +135 -0
- micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +12 -4
- micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +16 -4
- micrOS/source/modules/LM_espnow.py +53 -0
- micrOS/source/modules/LM_fileserver.py +265 -0
- micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +5 -5
- micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +49 -35
- micrOS/source/modules/LM_haptic.py +111 -0
- micrOS/source/modules/LM_i2c.py +61 -0
- micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +20 -23
- micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +3 -3
- micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +22 -26
- micrOS/source/modules/LM_mh_z19c.py +198 -0
- micrOS/source/modules/LM_neoeffects.py +284 -0
- micrOS/source/{LM_neopixel.py → modules/LM_neopixel.py} +26 -31
- micrOS/source/{LM_oled.py → modules/LM_oled.py} +28 -20
- micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +28 -24
- micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +132 -174
- micrOS/source/modules/LM_pacman.py +320 -0
- micrOS/source/{LM_presence.py → modules/LM_presence.py} +24 -36
- micrOS/source/modules/LM_qmi8658.py +204 -0
- micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
- micrOS/source/modules/LM_rest.py +81 -0
- micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +25 -34
- micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +5 -5
- micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +37 -45
- micrOS/source/modules/LM_robustness.py +137 -0
- micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
- micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
- micrOS/source/{LM_servo.py → modules/LM_servo.py} +4 -4
- micrOS/source/modules/LM_sound_event.py +751 -0
- micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +8 -8
- micrOS/source/{LM_switch.py → modules/LM_switch.py} +21 -18
- micrOS/source/{LM_system.py → modules/LM_system.py} +96 -59
- micrOS/source/modules/LM_tcs3472.py +187 -0
- micrOS/source/modules/LM_telegram.py +388 -0
- micrOS/source/modules/LM_trackball.py +287 -0
- micrOS/source/modules/LM_veml7700.py +159 -0
- micrOS/source/modules/LM_web.py +38 -0
- micrOS/source/urequests.py +204 -91
- {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +9 -4
- micrOS/source/web/editor.js +440 -0
- micrOS/source/web/filesui.html +178 -0
- micrOS/source/web/filesui.js +338 -0
- micrOS/source/{index.html → web/index.html} +44 -2
- micrOS/source/web/uapi.js +103 -0
- micrOS/source/web/udashboard.js +129 -0
- micrOS/source/web/ustyle.css +55 -0
- micrOS/source/web/uwidgets.js +172 -0
- micrOS/source/web/uwidgets_pro.js +99 -0
- micrOS/utests/__init__.py +0 -0
- micrOS/utests/test_scheduler.py +435 -0
- {micrOSDevToolKit-2.1.5.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +47 -4
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +392 -279
- microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
- toolkit/DevEnvCompile.py +63 -33
- toolkit/DevEnvOTA.py +72 -22
- toolkit/DevEnvUSB.py +147 -77
- toolkit/Gateway.py +9 -9
- toolkit/LM_to_compile.dat +12 -4
- toolkit/MicrOSDevEnv.py +129 -51
- toolkit/WebRepl.py +73 -0
- toolkit/dashboard_apps/BackupRestore.py +171 -0
- toolkit/dashboard_apps/CCTDemo.py +12 -17
- toolkit/dashboard_apps/CCTTest.py +20 -24
- toolkit/dashboard_apps/CamStream.py +2 -6
- toolkit/dashboard_apps/CatGame.py +14 -16
- toolkit/dashboard_apps/Dimmer.py +11 -21
- toolkit/dashboard_apps/GetVersion.py +11 -19
- toolkit/dashboard_apps/MicrophoneTest.py +2 -7
- toolkit/dashboard_apps/NeoEffectsDemo.py +22 -35
- toolkit/dashboard_apps/NeopixelTest.py +20 -25
- toolkit/dashboard_apps/PresenceTest.py +2 -8
- toolkit/dashboard_apps/QMI8685_GYRO.py +68 -0
- toolkit/dashboard_apps/RGBTest.py +20 -24
- toolkit/dashboard_apps/RoboArm.py +24 -32
- toolkit/dashboard_apps/SED_test.py +10 -14
- toolkit/dashboard_apps/SensorsTest.py +61 -0
- toolkit/dashboard_apps/SystemTest.py +219 -117
- toolkit/dashboard_apps/Template_app.py +12 -19
- toolkit/dashboard_apps/_app_base.py +34 -0
- toolkit/dashboard_apps/_gyro_visualizer.py +78 -0
- toolkit/dashboard_apps/uLightDemo.py +15 -24
- toolkit/index.html +6 -5
- toolkit/lib/LocalMachine.py +6 -1
- toolkit/lib/MicrosFiles.py +46 -0
- toolkit/lib/Repository.py +64 -0
- toolkit/lib/TerminalColors.py +4 -0
- toolkit/lib/macroScript.py +371 -0
- toolkit/lib/micrOSClient.py +124 -51
- toolkit/lib/micrOSClientHistory.py +156 -0
- toolkit/lib/pip_package_installer.py +31 -4
- toolkit/micrOSdashboard.py +16 -21
- toolkit/micrOSlint.py +28 -10
- toolkit/simulator_lib/.DS_Store +0 -0
- micrOS/source/IO_esp32.py → toolkit/simulator_lib/IO_darwin.py +3 -0
- toolkit/simulator_lib/__pycache__/IO_darwin.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/aioespnow.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/camera.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/framebuf.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/machine.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/micropython.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/mip.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/neopixel.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/network.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_common.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/simgc.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/simulator.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/uasyncio.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/uos.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/urandom.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/usocket.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/ussl.cpython-312.pyc +0 -0
- toolkit/simulator_lib/aioespnow.py +28 -0
- toolkit/simulator_lib/camera.py +84 -0
- toolkit/simulator_lib/dht.py +1 -1
- toolkit/simulator_lib/framebuf.py +49 -1
- toolkit/simulator_lib/machine.py +32 -2
- toolkit/simulator_lib/micropython.py +3 -3
- toolkit/simulator_lib/mip.py +165 -0
- toolkit/simulator_lib/neopixel.py +3 -2
- toolkit/simulator_lib/network.py +2 -1
- toolkit/simulator_lib/node_config.json +2 -3
- toolkit/simulator_lib/ntptime.py +1 -1
- toolkit/simulator_lib/{sim_console.py → sim_common.py} +2 -3
- toolkit/simulator_lib/simgc.py +6 -2
- toolkit/simulator_lib/simulator.py +138 -46
- toolkit/simulator_lib/uasyncio.py +34 -3
- toolkit/simulator_lib/uos.py +147 -0
- toolkit/simulator_lib/urandom.py +4 -0
- toolkit/simulator_lib/usocket.py +5 -1
- toolkit/simulator_lib/view01.jpg +0 -0
- toolkit/simulator_lib/view02.jpg +0 -0
- toolkit/socketClient.py +43 -23
- toolkit/user_data/webhooks/generic.py +1 -1
- toolkit/user_data/webhooks/macro.py +44 -0
- toolkit/user_data/webhooks/template.macro +20 -0
- toolkit/user_data/webhooks/template.py +1 -1
- toolkit/workspace/precompiled/Auth.mpy +0 -0
- toolkit/workspace/precompiled/Common.mpy +0 -0
- toolkit/workspace/precompiled/Config.mpy +0 -0
- toolkit/workspace/precompiled/Debug.mpy +0 -0
- toolkit/workspace/precompiled/Espnow.mpy +0 -0
- toolkit/workspace/precompiled/Files.mpy +0 -0
- toolkit/workspace/precompiled/Hooks.mpy +0 -0
- toolkit/workspace/precompiled/InterConnect.mpy +0 -0
- toolkit/workspace/precompiled/Interrupts.mpy +0 -0
- toolkit/workspace/precompiled/Logger.mpy +0 -0
- toolkit/workspace/precompiled/Network.mpy +0 -0
- toolkit/workspace/precompiled/Notify.mpy +0 -0
- toolkit/workspace/precompiled/Pacman.mpy +0 -0
- toolkit/workspace/precompiled/Scheduler.mpy +0 -0
- toolkit/workspace/precompiled/Server.mpy +0 -0
- toolkit/workspace/precompiled/Shell.mpy +0 -0
- toolkit/workspace/precompiled/Tasks.mpy +0 -0
- toolkit/workspace/precompiled/Time.mpy +0 -0
- toolkit/workspace/precompiled/Types.mpy +0 -0
- toolkit/workspace/precompiled/Web.mpy +0 -0
- toolkit/workspace/precompiled/_mpy.version +1 -1
- toolkit/workspace/precompiled/config/_git.keep +0 -0
- toolkit/workspace/precompiled/helpers.mpy +0 -0
- toolkit/workspace/precompiled/micrOS.mpy +0 -0
- toolkit/workspace/precompiled/micrOSloader.mpy +0 -0
- toolkit/workspace/precompiled/microIO.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c3.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32s2.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_m5stamp.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_qtpy.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_rp2.mpy +0 -0
- toolkit/workspace/precompiled/modules/IO_tinypico.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_L298N.mpy +0 -0
- {micrOS/source → toolkit/workspace/precompiled/modules}/LM_L9110_DCmotor.py +4 -4
- toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +5 -5
- toolkit/workspace/precompiled/modules/LM_aht10.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_bme280.mpy +0 -0
- toolkit/workspace/precompiled/{LM_buzzer.mpy → modules/LM_buzzer.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_cluster.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_co2.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dht11.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dht22.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_distance.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_ds18.mpy +0 -0
- toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +16 -4
- toolkit/workspace/precompiled/modules/LM_espnow.py +53 -0
- toolkit/workspace/precompiled/modules/LM_fileserver.mpy +0 -0
- toolkit/workspace/precompiled/{LM_gameOfLife.mpy → modules/LM_gameOfLife.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_genIO.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_haptic.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_i2c.py +61 -0
- toolkit/workspace/precompiled/modules/LM_i2s_mic.mpy +0 -0
- toolkit/workspace/precompiled/{LM_ld2410.mpy → modules/LM_ld2410.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_light_sensor.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_mh_z19c.py +198 -0
- toolkit/workspace/precompiled/modules/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_neopixel.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_sh1106.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_pacman.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_presence.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_qmi8658.py +204 -0
- toolkit/workspace/precompiled/{LM_rencoder.py → modules/LM_rencoder.py} +40 -11
- toolkit/workspace/precompiled/modules/LM_rest.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_rgb.mpy +0 -0
- toolkit/workspace/precompiled/{LM_rgbcct.mpy → modules/LM_rgbcct.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_roboarm.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_robustness.py +137 -0
- toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +3 -0
- toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +3 -0
- toolkit/workspace/precompiled/{LM_servo.mpy → modules/LM_servo.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_sound_event.mpy +0 -0
- toolkit/workspace/precompiled/{LM_stepper.mpy → modules/LM_stepper.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_switch.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_tcs3472.py +187 -0
- toolkit/workspace/precompiled/modules/LM_telegram.mpy +0 -0
- toolkit/workspace/precompiled/{LM_tinyrgb.mpy → modules/LM_tinyrgb.mpy} +0 -0
- toolkit/workspace/precompiled/modules/LM_trackball.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_veml7700.mpy +0 -0
- toolkit/workspace/precompiled/modules/LM_web.mpy +0 -0
- toolkit/workspace/precompiled/urequests.mpy +0 -0
- {micrOS/source → toolkit/workspace/precompiled/web}/dashboard.html +9 -4
- toolkit/workspace/precompiled/web/editor.js +440 -0
- toolkit/workspace/precompiled/web/filesui.html +178 -0
- toolkit/workspace/precompiled/web/filesui.js +338 -0
- toolkit/workspace/precompiled/{index.html → web/index.html} +44 -2
- toolkit/workspace/precompiled/web/uapi.js +103 -0
- toolkit/workspace/precompiled/web/udashboard.js +129 -0
- toolkit/workspace/precompiled/web/ustyle.css +55 -0
- toolkit/workspace/precompiled/web/uwidgets.js +172 -0
- toolkit/workspace/precompiled/web/uwidgets_pro.js +99 -0
- env/driver_cp210x/CH34XSER_MAC/CH34X_DRV_INSTALL_INSTRUCTIONS.pdf +0 -0
- env/driver_cp210x/CH34XSER_MAC/CH34xVCPDriver.pkg +0 -0
- micrOS/micropython/esp32-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/esp32c3-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32c3-GENERIC-20240222-v1.22.2.bin +0 -0
- micrOS/micropython/esp32s2-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
- micrOS/micropython/esp32s3-GENERIC-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/rpi-pico-w-20231005-v1.21.0.uf2 +0 -0
- micrOS/micropython/tinypico-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/tinypico-usbc-UM-20240105-v1.22.1.bin +0 -0
- micrOS/source/LM_L298N_DCmotor.py +0 -86
- micrOS/source/LM_catgame.py +0 -74
- micrOS/source/LM_dashboard_be.py +0 -37
- micrOS/source/LM_demo.py +0 -85
- micrOS/source/LM_distance.py +0 -88
- micrOS/source/LM_i2c.py +0 -44
- micrOS/source/LM_intercon.py +0 -57
- micrOS/source/LM_keychain.py +0 -318
- micrOS/source/LM_lmpacman.py +0 -126
- micrOS/source/LM_neoeffects.py +0 -327
- micrOS/source/LM_pet_feeder.py +0 -76
- micrOS/source/LM_ph_sensor.py +0 -51
- micrOS/source/LM_rest.py +0 -40
- micrOS/source/LM_robustness.py +0 -73
- micrOS/source/LM_telegram.py +0 -96
- micrOS/source/reset.py +0 -11
- micrOS/source/uapi.js +0 -76
- micrOS/source/udashboard.js +0 -137
- micrOS/source/ustyle.css +0 -28
- micrOS/source/uwidgets.js +0 -179
- micrOSDevToolKit-2.1.5.dist-info/RECORD +0 -337
- toolkit/dashboard_apps/AirQualityBME280.py +0 -36
- toolkit/dashboard_apps/AirQualityDHT22_CO2.py +0 -36
- toolkit/lib/file_extensions.py +0 -16
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-38.pyc +0 -0
- toolkit/simulator_lib/__pycache__/LP_darwin.cpython-39.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-312.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-38.pyc +0 -0
- toolkit/simulator_lib/__pycache__/sim_console.cpython-39.pyc +0 -0
- toolkit/workspace/precompiled/IO_esp32.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32c3.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32s2.mpy +0 -0
- toolkit/workspace/precompiled/IO_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/IO_qtpy.mpy +0 -0
- toolkit/workspace/precompiled/IO_rp2.mpy +0 -0
- toolkit/workspace/precompiled/IO_tinypico.mpy +0 -0
- toolkit/workspace/precompiled/LM_L298N_DCmotor.mpy +0 -0
- toolkit/workspace/precompiled/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/LM_aht10.mpy +0 -0
- toolkit/workspace/precompiled/LM_bme280.mpy +0 -0
- toolkit/workspace/precompiled/LM_catgame.py +0 -74
- toolkit/workspace/precompiled/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/LM_co2.mpy +0 -0
- toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
- toolkit/workspace/precompiled/LM_demo.py +0 -85
- toolkit/workspace/precompiled/LM_dht11.mpy +0 -0
- toolkit/workspace/precompiled/LM_dht22.mpy +0 -0
- toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/LM_distance.py +0 -88
- toolkit/workspace/precompiled/LM_ds18.mpy +0 -0
- toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
- toolkit/workspace/precompiled/LM_i2c.py +0 -44
- toolkit/workspace/precompiled/LM_i2s_mic.mpy +0 -0
- toolkit/workspace/precompiled/LM_intercon.mpy +0 -0
- toolkit/workspace/precompiled/LM_keychain.mpy +0 -0
- toolkit/workspace/precompiled/LM_light_sensor.mpy +0 -0
- toolkit/workspace/precompiled/LM_lmpacman.mpy +0 -0
- toolkit/workspace/precompiled/LM_neoeffects.mpy +0 -0
- toolkit/workspace/precompiled/LM_neopixel.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled_sh1106.mpy +0 -0
- toolkit/workspace/precompiled/LM_oled_ui.mpy +0 -0
- toolkit/workspace/precompiled/LM_pet_feeder.py +0 -76
- toolkit/workspace/precompiled/LM_ph_sensor.py +0 -51
- toolkit/workspace/precompiled/LM_presence.mpy +0 -0
- toolkit/workspace/precompiled/LM_rest.mpy +0 -0
- toolkit/workspace/precompiled/LM_rgb.mpy +0 -0
- toolkit/workspace/precompiled/LM_roboarm.mpy +0 -0
- toolkit/workspace/precompiled/LM_robustness.py +0 -73
- toolkit/workspace/precompiled/LM_switch.mpy +0 -0
- toolkit/workspace/precompiled/LM_system.mpy +0 -0
- toolkit/workspace/precompiled/LM_telegram.mpy +0 -0
- toolkit/workspace/precompiled/reset.mpy +0 -0
- toolkit/workspace/precompiled/uapi.js +0 -76
- toolkit/workspace/precompiled/udashboard.js +0 -137
- toolkit/workspace/precompiled/ustyle.css +0 -28
- toolkit/workspace/precompiled/uwidgets.js +0 -179
- /toolkit/user_data/node_config_archive/.include → /micrOS/source/config/_git.keep +0 -0
- /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
- /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
- {micrOSDevToolKit-2.1.5.dist-info → microsdevtoolkit-2.26.1.dist-info}/top_level.txt +0 -0
micrOS/source/uapi.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
// Get the current hostname and create the REST API URL
|
|
2
|
-
const currentHostname = window.location.hostname;
|
|
3
|
-
const port = window.location.port ? `:${window.location.port}` : "";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function restAPICore(cmd) {
|
|
7
|
-
// Core micrOS rest API handler
|
|
8
|
-
cmd = cmd.trim().replace(/\s+/g, '/');
|
|
9
|
-
let query = `http://${currentHostname}${port}/rest/${cmd}`;
|
|
10
|
-
const startTime = performance.now();
|
|
11
|
-
let endTime;
|
|
12
|
-
// Call rest api with command parameter and return the promise
|
|
13
|
-
return fetch(query).then(response => {
|
|
14
|
-
if (!response.ok) {
|
|
15
|
-
throw new Error('restAPICore code NOK: ' + response.status);
|
|
16
|
-
}
|
|
17
|
-
endTime = performance.now();
|
|
18
|
-
return response.json();
|
|
19
|
-
}).then(response => {
|
|
20
|
-
// return cmd result
|
|
21
|
-
const delta = (endTime - startTime).toFixed(0);
|
|
22
|
-
return { response, delta, query }; // RETURN DATA
|
|
23
|
-
}).catch(error => {
|
|
24
|
-
console.error('Error in restAPICore:', error);
|
|
25
|
-
throw error;
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function restAPI(cmd='', console=true) {
|
|
30
|
-
// micrOS rest API handler with built-in restCmdInput
|
|
31
|
-
// UPDATES: restConsole(...)
|
|
32
|
-
if (cmd == '') {
|
|
33
|
-
cmd = document.getElementById('restCmdInput').value;
|
|
34
|
-
}
|
|
35
|
-
return restAPICore(cmd)
|
|
36
|
-
.then(({ response, delta, query }) => {
|
|
37
|
-
if (console) {
|
|
38
|
-
restConsole(query, response, delta);
|
|
39
|
-
}
|
|
40
|
-
return response
|
|
41
|
-
}).catch(error => {
|
|
42
|
-
console.error('Error in restAPI:', error);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function restConsole(apiUrl, data, delta) {
|
|
47
|
-
// UPDATES: restConsoleUrl, restConsoleResponse, restConsoleTime
|
|
48
|
-
document.getElementById('restConsoleUrl').innerHTML = `<strong>Generated URL:</strong><br> <a href="${apiUrl}" target="_blank" style="color: white;">${apiUrl}</a>`;
|
|
49
|
-
document.getElementById('restConsoleResponse').innerHTML = JSON.stringify(data, null, 4).replace(/\\n/g, "<br/>" + " ".repeat(15));
|
|
50
|
-
document.getElementById('restConsoleTime').innerHTML = `⏱ Response time: ${delta} ms`;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function restInfo() {
|
|
54
|
-
// UPDATES: 'restInfo' and restConsole(...)
|
|
55
|
-
restAPICore(cmd='').then(({ response, delta, query }) => {
|
|
56
|
-
// Update API Console
|
|
57
|
-
restConsole(query, response, delta)
|
|
58
|
-
// Update 'SysApiInfo' tag
|
|
59
|
-
let infoHeader = Object.entries(response['result'])
|
|
60
|
-
.filter(([key]) => key !== 'usr_endpoints') // Exclude usr_endpoints
|
|
61
|
-
.map(([key, value]) => `${key}: ${JSON.stringify(value)}`);
|
|
62
|
-
if (infoHeader[2].endsWith("true")) { // check auth: true
|
|
63
|
-
infoHeader[2] = "🔑";
|
|
64
|
-
} else {infoHeader.splice(2, 1);}
|
|
65
|
-
infoHeader = infoHeader.join(' ❖ ').replace(/"/g, '');
|
|
66
|
-
let infoSubpages = (response['result']['usr_endpoints'] ? "<br><br>📎 " + Object.entries(response['result']['usr_endpoints'])
|
|
67
|
-
.map(([key, value]) => `<a href="${value}" target="_blank" style="color: white;">${value} </a>`)
|
|
68
|
-
.join(' | ') : '');
|
|
69
|
-
document.getElementById('restInfo').innerHTML = infoHeader + infoSubpages;
|
|
70
|
-
}).catch(error => {
|
|
71
|
-
console.error('Error in restAPI:', error);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Init basic info from board
|
|
76
|
-
// restInfo();
|
micrOS/source/udashboard.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
// API HELPER FUNCTION - get module exposed widgets
|
|
2
|
-
|
|
3
|
-
function moduleHelp(module) {
|
|
4
|
-
// Get and Parse module widget help message
|
|
5
|
-
let endpoint = `${module}/help/True`;
|
|
6
|
-
console.log(`[API] Endpoint: ${endpoint}`)
|
|
7
|
-
return restAPI(endpoint).then(commands => {
|
|
8
|
-
//console.log(`Raw ${module} help: ${commands.result}`)
|
|
9
|
-
// Replace all occurrences of \" with " in each string and parse each string into a JSON object
|
|
10
|
-
const parsedWidgets = commands.result.map(item => {
|
|
11
|
-
const cleanedItem = item.replace(/\\"/g, '"'); // Workaround...
|
|
12
|
-
return JSON.parse(cleanedItem);
|
|
13
|
-
});
|
|
14
|
-
console.log(`Parsed ${module} help:`);
|
|
15
|
-
console.log(parsedWidgets)
|
|
16
|
-
return parsedWidgets
|
|
17
|
-
}).catch(error => {
|
|
18
|
-
console.error(error)
|
|
19
|
-
return [];
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// PAGE GENERATION
|
|
24
|
-
|
|
25
|
-
function containerAppendChild(elements, container) {
|
|
26
|
-
// Append list of elements into the container aka draw elements :D
|
|
27
|
-
if (!elements || !container) {
|
|
28
|
-
console.error("Inputs array or container element is missing.");
|
|
29
|
-
return;}
|
|
30
|
-
elements.forEach(function(element) {
|
|
31
|
-
container.appendChild(element);});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function generateElement(type, data, options={}) {
|
|
35
|
-
// type: slider, button, box, h1, h2, p, li, etc.
|
|
36
|
-
// data: rest command
|
|
37
|
-
const container = document.getElementById('dynamicContent');
|
|
38
|
-
if (type.toLowerCase() === 'slider') {
|
|
39
|
-
// Create slider widget
|
|
40
|
-
sliderWidget(container, data, options)
|
|
41
|
-
} else if (type.toLowerCase() === 'button') {
|
|
42
|
-
// Create button widget
|
|
43
|
-
buttonWidget(container, data, options)
|
|
44
|
-
} else if (type.toLowerCase() === 'textbox') {
|
|
45
|
-
// Create textbox widget
|
|
46
|
-
textBoxWidget(container, data, options)
|
|
47
|
-
} else if (type.toLowerCase() === 'color') {
|
|
48
|
-
// Create color palette widget
|
|
49
|
-
colorPaletteWidget(container, data, options)
|
|
50
|
-
} else {
|
|
51
|
-
// Create other elements
|
|
52
|
-
const paragraph = document.createElement('p');
|
|
53
|
-
const element = document.createElement(type);
|
|
54
|
-
element.textContent = data;
|
|
55
|
-
containerAppendChild([paragraph, element], container);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function autoTitleLen(widgets, func) {
|
|
60
|
-
try {
|
|
61
|
-
// Create function list for comparation
|
|
62
|
-
const funcNames = widgets.map(command => command.lm_call.split(' ')[0]);
|
|
63
|
-
// Count the occurrences of the func name
|
|
64
|
-
const count = funcNames.filter(word => word === func).length;
|
|
65
|
-
// Return 2 if count is greater than 1, otherwise return 1
|
|
66
|
-
return count > 1 ? 2 : 1;
|
|
67
|
-
} catch (error) {
|
|
68
|
-
console.error(error);
|
|
69
|
-
return 1;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function craftModuleWidgets(module, widgets) {
|
|
74
|
-
// Create ALL exposed module function widgets
|
|
75
|
-
if (widgets.length === 0) {
|
|
76
|
-
console.log(`${module} no exposed widgets`);
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
console.log(`Craft widgets bind to ${module}`);
|
|
80
|
-
generateElement(type='h2', data=`🧬 ${module}`);
|
|
81
|
-
// Check widget data struct for the given module
|
|
82
|
-
widgets.forEach(item => {
|
|
83
|
-
let type = item.type;
|
|
84
|
-
let type_options = {};
|
|
85
|
-
let lm_call = item.lm_call.replace(/\s/g, '/');
|
|
86
|
-
|
|
87
|
-
if (type === 'slider') {
|
|
88
|
-
type_options['title_len'] = autoTitleLen(widgets, lm_call.split('/')[0]);
|
|
89
|
-
type_options['range'] = item.range;
|
|
90
|
-
|
|
91
|
-
} else if (type === 'button' || type === 'toggle') {
|
|
92
|
-
type = 'button';
|
|
93
|
-
type_options['title_len'] = autoTitleLen(widgets, lm_call.split('/')[0]);
|
|
94
|
-
type_options['range'] = item.range;
|
|
95
|
-
|
|
96
|
-
} else if (type === 'textbox') {
|
|
97
|
-
type_options['title_len'] = autoTitleLen(widgets, lm_call.split('/')[0]);
|
|
98
|
-
type_options['refresh'] = item.refresh;
|
|
99
|
-
|
|
100
|
-
} else if (type === 'color') {
|
|
101
|
-
type_options['title_len'] = autoTitleLen(widgets, lm_call.split('/')[0]);
|
|
102
|
-
type_options['range'] = item.range;
|
|
103
|
-
|
|
104
|
-
} else {
|
|
105
|
-
console.log(`Unsupported micrOS widget html_type: ${type}`)
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
generateElement(type=type, data=`${module}/${lm_call}`, options=type_options);
|
|
110
|
-
} catch (error) {
|
|
111
|
-
console.error(error);
|
|
112
|
-
}
|
|
113
|
-
})
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
function DynamicWidgetLoad() {
|
|
118
|
-
// INIT DASHBOARD (load active modules -> build page)
|
|
119
|
-
restAPI('modules').then(data => {
|
|
120
|
-
//console.log(data);
|
|
121
|
-
const app_list = data['result'];
|
|
122
|
-
// Handle the app_list data here
|
|
123
|
-
for (const module of app_list) {
|
|
124
|
-
// NEW module widget query
|
|
125
|
-
moduleHelp(module).then(widgets => {
|
|
126
|
-
craftModuleWidgets(module, widgets)
|
|
127
|
-
}).catch(error => {
|
|
128
|
-
// You can work with parsedWidgets here
|
|
129
|
-
console.error(error);
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
}).catch(error => {
|
|
133
|
-
console.error(error);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// craftModuleWidgets
|
micrOS/source/ustyle.css
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
@keyframes backgroundAnimation {
|
|
2
|
-
0% {background-position: 0% 50%;}
|
|
3
|
-
50% {background-position: 100% 50%;}
|
|
4
|
-
100% {background-position: 0% 50%;}
|
|
5
|
-
}
|
|
6
|
-
body {
|
|
7
|
-
height: 100vh; /* Set the height to 100% of the viewport height */
|
|
8
|
-
width: 100vh; /* Set the width to 200% of the viewport height */
|
|
9
|
-
padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
|
|
10
|
-
margin: 40px;
|
|
11
|
-
background: linear-gradient(110deg, #4b3c66, #21184f, #712336);
|
|
12
|
-
background-size: 200% 200%;
|
|
13
|
-
animation: backgroundAnimation 15s infinite;
|
|
14
|
-
color: #d9d9d9;
|
|
15
|
-
font-family: 'Verdana', Sans-serif;
|
|
16
|
-
}
|
|
17
|
-
button {
|
|
18
|
-
background-color: #e7e7e7; /* Gray */
|
|
19
|
-
border: none;
|
|
20
|
-
color: black;
|
|
21
|
-
font-size: 14px;
|
|
22
|
-
border-radius: 4px;
|
|
23
|
-
transition-duration: 0.4s;
|
|
24
|
-
}
|
|
25
|
-
button:hover {
|
|
26
|
-
background-color: #555555; /* Black */
|
|
27
|
-
color: white;
|
|
28
|
-
}
|
micrOS/source/uwidgets.js
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
// WIDGETS ELEMENTS
|
|
2
|
-
|
|
3
|
-
const widget_indent = '40px';
|
|
4
|
-
const windowWidth = window.innerWidth;
|
|
5
|
-
|
|
6
|
-
function sliderWidget(container, command, options={}) {
|
|
7
|
-
const title_len = options.title_len || 1;
|
|
8
|
-
const paragraph = document.createElement('p');
|
|
9
|
-
|
|
10
|
-
paragraph.style.textIndent = widget_indent;
|
|
11
|
-
paragraph.textContent = command.split('/').slice(1, title_len+1).join('-').replace(/=/g, '').replace(':range:', '');
|
|
12
|
-
// Create a slider
|
|
13
|
-
const element = document.createElement('input');
|
|
14
|
-
element.style.marginLeft = widget_indent;
|
|
15
|
-
element.type = 'range';
|
|
16
|
-
element.min = options.range[0] || 0;
|
|
17
|
-
element.max = options.range[1] || 100;
|
|
18
|
-
element.step = options.range[2] || 5;
|
|
19
|
-
element.value = Math.round((element.max-element.min)/2);
|
|
20
|
-
element.style.width = Math.min(windowWidth * 0.6, 300) + 'px';
|
|
21
|
-
|
|
22
|
-
// Create a span to display the slider value
|
|
23
|
-
var valueDisplay = document.createElement('span');
|
|
24
|
-
valueDisplay.textContent = element.value;
|
|
25
|
-
element.addEventListener('input', function () {
|
|
26
|
-
valueDisplay.textContent = this.value;
|
|
27
|
-
});
|
|
28
|
-
// Add an event listener for API CALL
|
|
29
|
-
element.addEventListener('change', function () {
|
|
30
|
-
var call_cmd;
|
|
31
|
-
if (options.hasOwnProperty('range')) {
|
|
32
|
-
// NEW
|
|
33
|
-
call_cmd = command.replace(':range:', this.value);
|
|
34
|
-
} else {
|
|
35
|
-
// LEGACY
|
|
36
|
-
if (command.endsWith("=")) {
|
|
37
|
-
call_cmd = `${command}${this.value}`
|
|
38
|
-
} else {
|
|
39
|
-
call_cmd = `${command}/${this.value}`;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
console.log(`[API] Slider exec: ${call_cmd}`);
|
|
43
|
-
restAPI(call_cmd);
|
|
44
|
-
});
|
|
45
|
-
containerAppendChild([paragraph, element, valueDisplay], container);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function buttonWidget(container, command, options={}) {
|
|
49
|
-
const title_len = options.title_len || 1;
|
|
50
|
-
const paragraph = document.createElement('p');
|
|
51
|
-
paragraph.style.textIndent = widget_indent;
|
|
52
|
-
// Create a button
|
|
53
|
-
const element = document.createElement('button');
|
|
54
|
-
element.style.marginLeft = widget_indent;
|
|
55
|
-
element.textContent = command.split('/').slice(1, title_len+1).join('-');
|
|
56
|
-
element.style.height = '30px';
|
|
57
|
-
// Add an event listener for API CALL
|
|
58
|
-
element.addEventListener('click', function () {
|
|
59
|
-
var call_cmd;
|
|
60
|
-
if (options.hasOwnProperty('range')) {
|
|
61
|
-
// NEW
|
|
62
|
-
call_cmd = command.replace(':range:', 'None');
|
|
63
|
-
} else {
|
|
64
|
-
// LEGACY
|
|
65
|
-
call_cmd = command;
|
|
66
|
-
}
|
|
67
|
-
console.log(`[API] Button clicked: ${call_cmd}`);
|
|
68
|
-
restAPI(call_cmd);
|
|
69
|
-
});
|
|
70
|
-
containerAppendChild([paragraph, element], container);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function textBoxWidget(container, command, options={}) {
|
|
74
|
-
const title_len = options.title_len || 1;
|
|
75
|
-
const refresh = options.refresh || 5000;
|
|
76
|
-
const paragraph = document.createElement('p');
|
|
77
|
-
|
|
78
|
-
paragraph.style.textIndent = widget_indent;
|
|
79
|
-
paragraph.textContent = command.split('/').slice(1, title_len+1).join('-');
|
|
80
|
-
// Create a small box (div)
|
|
81
|
-
const uniqueId = `textbox-${command}`;
|
|
82
|
-
const element = document.createElement('div');
|
|
83
|
-
element.id = uniqueId;
|
|
84
|
-
element.style.marginLeft = widget_indent;
|
|
85
|
-
element.style.width = '30%';
|
|
86
|
-
element.style.height = '60px';
|
|
87
|
-
element.style.paddingTop = '10px';
|
|
88
|
-
element.style.paddingLeft = '10px';
|
|
89
|
-
element.style.border = '2px solid #e7e7e7';
|
|
90
|
-
element.style.borderRadius = '4px';
|
|
91
|
-
|
|
92
|
-
const updateTextbox = () => {
|
|
93
|
-
const call_cmd = command.replace(':range:', 'None');
|
|
94
|
-
restAPI(call_cmd).then(resp => {
|
|
95
|
-
console.log(`[API] textBox[${uniqueId}] call: ${call_cmd}`);
|
|
96
|
-
document.getElementById(uniqueId).textContent = JSON.stringify(resp.result, null, 4);
|
|
97
|
-
}).catch(error => {
|
|
98
|
-
console.error('[API] Textbox error:', error);
|
|
99
|
-
document.getElementById(uniqueId).textContent = 'Error loading data';
|
|
100
|
-
});
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
// Call updateTextbox initially
|
|
104
|
-
updateTextbox();
|
|
105
|
-
if (refresh > 0) {
|
|
106
|
-
// Call updateTextbox every 5 seconds (default: 5000)
|
|
107
|
-
const intervalId = setInterval(updateTextbox, refresh);
|
|
108
|
-
// Clear the interval when the container is removed from the DOM
|
|
109
|
-
container.addEventListener('DOMNodeRemovedFromDocument', () => {
|
|
110
|
-
clearInterval(intervalId);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
containerAppendChild([paragraph, element], container);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function colorPaletteWidget(container, command, options) {
|
|
117
|
-
function hexToRgb(hex, max=255) {
|
|
118
|
-
// Remove the hash at the start if it's there
|
|
119
|
-
hex = hex.replace(/^#/, '');
|
|
120
|
-
// Parse the r, g, b values
|
|
121
|
-
let bigint = parseInt(hex, 16);
|
|
122
|
-
let r = (bigint >> 16) & 255;
|
|
123
|
-
let g = (bigint >> 8) & 255;
|
|
124
|
-
let b = bigint & 255;
|
|
125
|
-
if (max > 255) {
|
|
126
|
-
// upscale 0-255 range
|
|
127
|
-
const ratio = max / 255;
|
|
128
|
-
r = Math.round(r * ratio);
|
|
129
|
-
g = Math.round(g * ratio);
|
|
130
|
-
b = Math.round(b * ratio);
|
|
131
|
-
}
|
|
132
|
-
return { r, g, b };
|
|
133
|
-
}
|
|
134
|
-
function getRandomColorFromList() {
|
|
135
|
-
const colors = ['#542040', '#2b2155', '#4c1e44', '#56213f', '#853366', '#493984', '#6f3487'];
|
|
136
|
-
// Generate a random index within the range of the colors array
|
|
137
|
-
const randomIndex = Math.floor(Math.random() * colors.length);
|
|
138
|
-
// Return the color at the random index
|
|
139
|
-
return colors[randomIndex];
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const title_len = options.title_len || 1;
|
|
143
|
-
const max_val = options.range[1] || 255
|
|
144
|
-
// Create elements
|
|
145
|
-
const paragraph = document.createElement('p');
|
|
146
|
-
const colorPicker = document.createElement('input');
|
|
147
|
-
const selectedColor = document.createElement('span');
|
|
148
|
-
|
|
149
|
-
// Set up the color picker
|
|
150
|
-
paragraph.style.textIndent = widget_indent;
|
|
151
|
-
paragraph.textContent = command.split('/').slice(1, title_len+1).join('-');
|
|
152
|
-
colorPicker.type = 'color';
|
|
153
|
-
colorPicker.value = getRandomColorFromList(); // initial color
|
|
154
|
-
colorPicker.classList.add('custom-color-picker');
|
|
155
|
-
colorPicker.style.width = '60px';
|
|
156
|
-
colorPicker.style.height = '40px';
|
|
157
|
-
colorPicker.style.marginLeft = '40px';
|
|
158
|
-
|
|
159
|
-
// Add an event listener to update the displayed color value
|
|
160
|
-
colorPicker.addEventListener('change', function () {
|
|
161
|
-
//selectedColor.textContent = colorPicker.value; //TODO: debug
|
|
162
|
-
const rgbColor = hexToRgb(colorPicker.value, max_val);
|
|
163
|
-
var call_cmd;
|
|
164
|
-
if (options.hasOwnProperty('range')) {
|
|
165
|
-
call_cmd = command.replace('r=:range:', `r=${rgbColor.r}`);
|
|
166
|
-
call_cmd = call_cmd.replace('g=:range:', `g=${rgbColor.g}`);
|
|
167
|
-
call_cmd = call_cmd.replace('b=:range:', `b=${rgbColor.b}`);
|
|
168
|
-
} else {
|
|
169
|
-
console.error("colorPaletteWidget missing input range")
|
|
170
|
-
return
|
|
171
|
-
}
|
|
172
|
-
console.log(`[API] colorPalette exec: ${call_cmd}`);
|
|
173
|
-
restAPI(call_cmd);
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
containerAppendChild([paragraph, colorPicker, selectedColor], container);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// sliderWidget
|