micrOSDevToolKit 2.9.1__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/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-20241129-v1.24.1.bin → 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 +167 -163
- micrOS/source/Auth.py +37 -0
- micrOS/source/Common.py +361 -116
- micrOS/source/Config.py +32 -22
- micrOS/source/Debug.py +50 -94
- micrOS/source/Espnow.py +377 -100
- micrOS/source/Files.py +207 -0
- micrOS/source/Hooks.py +48 -20
- micrOS/source/InterConnect.py +126 -42
- micrOS/source/Interrupts.py +6 -6
- micrOS/source/Logger.py +63 -26
- micrOS/source/Network.py +41 -21
- micrOS/source/Notify.py +48 -22
- micrOS/source/Pacman.py +326 -0
- micrOS/source/Scheduler.py +14 -54
- micrOS/source/Server.py +67 -69
- micrOS/source/Shell.py +99 -91
- micrOS/source/Tasks.py +141 -95
- micrOS/source/Time.py +19 -18
- micrOS/source/Types.py +53 -9
- micrOS/source/Web.py +381 -76
- 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/config/_git.keep +0 -0
- micrOS/source/helpers.py +132 -0
- micrOS/source/micrOS.py +17 -7
- micrOS/source/micrOSloader.py +5 -12
- micrOS/source/microIO.py +44 -20
- micrOS/source/modules/IO_esp32c6.py +38 -0
- micrOS/source/{IO_esp32s3.py → modules/IO_esp32s3.py} +37 -1
- micrOS/source/{IO_m5stamp.py → modules/IO_m5stamp.py} +35 -1
- micrOS/source/{IO_qtpy.py → modules/IO_qtpy.py} +22 -17
- micrOS/source/{IO_tinypico.py → modules/IO_tinypico.py} +38 -0
- micrOS/source/modules/LM_L298N.py +161 -0
- {toolkit/workspace/precompiled → micrOS/source/modules}/LM_L9110_DCmotor.py +3 -3
- micrOS/source/{LM_OV2640.py → modules/LM_OV2640.py} +45 -27
- micrOS/source/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +3 -3
- micrOS/source/{LM_aht10.py → modules/LM_aht10.py} +2 -2
- micrOS/source/{LM_bme280.py → modules/LM_bme280.py} +3 -3
- micrOS/source/{LM_buzzer.py → modules/LM_buzzer.py} +18 -25
- micrOS/source/{LM_cct.py → modules/LM_cct.py} +17 -21
- micrOS/source/modules/LM_cluster.py +255 -0
- micrOS/source/{LM_co2.py → modules/LM_co2.py} +3 -3
- micrOS/source/{LM_dht11.py → modules/LM_dht11.py} +2 -2
- micrOS/source/{LM_dht22.py → modules/LM_dht22.py} +2 -2
- micrOS/source/{LM_dimmer.py → modules/LM_dimmer.py} +9 -9
- micrOS/source/{LM_distance.py → modules/LM_distance.py} +4 -6
- micrOS/source/{LM_ds18.py → modules/LM_ds18.py} +2 -2
- micrOS/source/{LM_esp32.py → modules/LM_esp32.py} +5 -0
- micrOS/source/modules/LM_espnow.py +53 -0
- micrOS/source/modules/LM_fileserver.py +265 -0
- micrOS/source/{LM_genIO.py → modules/LM_genIO.py} +52 -37
- micrOS/source/{LM_haptic.py → modules/LM_haptic.py} +2 -2
- {toolkit/workspace/precompiled → micrOS/source/modules}/LM_i2c.py +5 -4
- micrOS/source/{LM_i2s_mic.py → modules/LM_i2s_mic.py} +6 -7
- micrOS/source/{LM_ld2410.py → modules/LM_ld2410.py} +2 -2
- micrOS/source/{LM_light_sensor.py → modules/LM_light_sensor.py} +10 -21
- 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} +19 -23
- micrOS/source/{LM_oled.py → modules/LM_oled.py} +2 -2
- micrOS/source/{LM_oled_sh1106.py → modules/LM_oled_sh1106.py} +3 -3
- micrOS/source/{LM_oled_ui.py → modules/LM_oled_ui.py} +72 -64
- micrOS/source/modules/LM_pacman.py +320 -0
- micrOS/source/{LM_presence.py → modules/LM_presence.py} +11 -15
- micrOS/source/modules/LM_qmi8658.py +204 -0
- micrOS/source/{LM_rencoder.py → modules/LM_rencoder.py} +2 -2
- micrOS/source/{LM_rest.py → modules/LM_rest.py} +4 -6
- micrOS/source/{LM_rgb.py → modules/LM_rgb.py} +21 -29
- micrOS/source/{LM_roboarm.py → modules/LM_roboarm.py} +8 -8
- micrOS/source/modules/LM_robustness.py +137 -0
- micrOS/source/{LM_servo.py → modules/LM_servo.py} +3 -3
- micrOS/source/{LM_stepper.py → modules/LM_stepper.py} +5 -5
- micrOS/source/{LM_switch.py → modules/LM_switch.py} +11 -9
- micrOS/source/{LM_system.py → modules/LM_system.py} +38 -32
- micrOS/source/modules/LM_tcs3472.py +187 -0
- micrOS/source/{LM_telegram.py → modules/LM_telegram.py} +164 -116
- micrOS/source/{LM_trackball.py → modules/LM_trackball.py} +3 -3
- micrOS/source/{LM_veml7700.py → modules/LM_veml7700.py} +2 -2
- micrOS/source/modules/LM_web.py +38 -0
- micrOS/source/urequests.py +39 -15
- {toolkit/workspace/precompiled → micrOS/source/web}/dashboard.html +4 -0
- micrOS/source/web/editor.js +440 -0
- micrOS/source/web/filesui.html +178 -0
- micrOS/source/web/filesui.js +338 -0
- {toolkit/workspace/precompiled → micrOS/source/web}/index.html +44 -2
- micrOS/source/{uapi.js → web/uapi.js} +48 -7
- micrOS/source/{ustyle.css → web/ustyle.css} +6 -3
- micrOS/utests/__init__.py +0 -0
- micrOS/utests/test_scheduler.py +435 -0
- {micrOSDevToolKit-2.9.1.data → microsdevtoolkit-2.26.1.data}/scripts/devToolKit.py +33 -3
- {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info}/METADATA +327 -268
- microsdevtoolkit-2.26.1.dist-info/RECORD +396 -0
- {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info}/WHEEL +1 -1
- toolkit/DevEnvCompile.py +63 -33
- toolkit/DevEnvOTA.py +58 -22
- toolkit/DevEnvUSB.py +110 -55
- toolkit/Gateway.py +6 -6
- toolkit/LM_to_compile.dat +6 -4
- toolkit/MicrOSDevEnv.py +127 -57
- toolkit/WebRepl.py +73 -0
- toolkit/dashboard_apps/BackupRestore.py +20 -35
- 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 +1 -6
- 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 +202 -105
- toolkit/dashboard_apps/Template_app.py +11 -23
- 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 +4 -4
- 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 +6 -0
- toolkit/lib/micrOSClient.py +123 -50
- toolkit/lib/micrOSClientHistory.py +156 -0
- toolkit/lib/pip_package_installer.py +5 -2
- toolkit/micrOSdashboard.py +12 -17
- toolkit/micrOSlint.py +20 -8
- 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__/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/dht.py +1 -1
- toolkit/simulator_lib/framebuf.py +49 -1
- toolkit/simulator_lib/machine.py +17 -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 +137 -59
- toolkit/simulator_lib/uasyncio.py +33 -2
- toolkit/simulator_lib/uos.py +147 -0
- toolkit/simulator_lib/urandom.py +4 -0
- toolkit/socketClient.py +43 -23
- toolkit/user_data/webhooks/generic.py +1 -1
- toolkit/user_data/webhooks/macro.py +1 -1
- 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/{IO_esp32.mpy → modules/IO_esp32.mpy} +0 -0
- toolkit/workspace/precompiled/{IO_esp32c3.mpy → modules/IO_esp32c3.mpy} +0 -0
- toolkit/workspace/precompiled/modules/IO_esp32c6.mpy +0 -0
- toolkit/workspace/precompiled/{IO_esp32s2.mpy → 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 +3 -3
- toolkit/workspace/precompiled/modules/LM_OV2640.mpy +0 -0
- toolkit/workspace/precompiled/{LM_VL53L0X.py → modules/LM_VL53L0X.py} +3 -3
- toolkit/workspace/precompiled/{LM_aht10.mpy → modules/LM_aht10.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_bme280.mpy → 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/{LM_co2.mpy → modules/LM_co2.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_dht11.mpy → modules/LM_dht11.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_dht22.mpy → 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/{LM_ds18.mpy → modules/LM_ds18.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_esp32.py → modules/LM_esp32.py} +5 -0
- 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/{LM_haptic.mpy → modules/LM_haptic.mpy} +0 -0
- {micrOS/source → toolkit/workspace/precompiled/modules}/LM_i2c.py +5 -4
- 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/{LM_oled.mpy → modules/LM_oled.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_oled_sh1106.mpy → 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} +2 -2
- 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_servo.mpy → modules/LM_servo.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_sound_event.mpy → 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/{LM_trackball.mpy → modules/LM_trackball.mpy} +0 -0
- toolkit/workspace/precompiled/{LM_veml7700.mpy → 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 +4 -0
- toolkit/workspace/precompiled/web/editor.js +440 -0
- toolkit/workspace/precompiled/web/filesui.html +178 -0
- toolkit/workspace/precompiled/web/filesui.js +338 -0
- {micrOS/source → toolkit/workspace/precompiled/web}/index.html +44 -2
- toolkit/workspace/precompiled/{uapi.js → web/uapi.js} +48 -7
- toolkit/workspace/precompiled/{ustyle.css → web/ustyle.css} +6 -3
- micrOS/micropython/esp32-20241129-v1.24.1.bin +0 -0
- micrOS/micropython/esp32c3-20240222-v1.22.2.bin +0 -0
- micrOS/micropython/esp32s2-20240602-v1.23.0.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20220618-v1.19.1.bin +0 -0
- micrOS/micropython/esp32s2-LOLIN_MINI-20240602-v1.23.0.bin +0 -0
- micrOS/micropython/esp32s3-20240105-v1.22.1.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20231005-v1.21.0.bin +0 -0
- micrOS/micropython/esp32s3_spiram_oct-20241129-v1.24.1.bin +0 -0
- micrOS/micropython/rpi-pico-w-20241129-v1.24.1.uf2 +0 -0
- micrOS/micropython/tinypico-20241129-v1.24.1.bin +0 -0
- micrOS/source/LM_L298N_DCmotor.py +0 -86
- micrOS/source/LM_catgame.py +0 -75
- micrOS/source/LM_dashboard_be.py +0 -37
- micrOS/source/LM_demo.py +0 -97
- micrOS/source/LM_espnow.py +0 -23
- micrOS/source/LM_intercon.py +0 -57
- micrOS/source/LM_keychain.py +0 -322
- micrOS/source/LM_lmpacman.py +0 -126
- micrOS/source/LM_neoeffects.py +0 -331
- micrOS/source/LM_oledui.py +0 -972
- micrOS/source/LM_pet_feeder.py +0 -78
- micrOS/source/LM_ph_sensor.py +0 -51
- micrOS/source/LM_robustness.py +0 -74
- micrOS/source/reset.py +0 -11
- micrOSDevToolKit-2.9.1.dist-info/RECORD +0 -365
- 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__/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_esp32s3.mpy +0 -0
- toolkit/workspace/precompiled/IO_m5stamp.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_catgame.py +0 -75
- toolkit/workspace/precompiled/LM_cct.mpy +0 -0
- toolkit/workspace/precompiled/LM_dashboard_be.py +0 -37
- toolkit/workspace/precompiled/LM_demo.py +0 -97
- toolkit/workspace/precompiled/LM_dimmer.mpy +0 -0
- toolkit/workspace/precompiled/LM_distance.mpy +0 -0
- toolkit/workspace/precompiled/LM_espnow.py +0 -23
- toolkit/workspace/precompiled/LM_genIO.mpy +0 -0
- 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_ui.mpy +0 -0
- toolkit/workspace/precompiled/LM_oledui.mpy +0 -0
- toolkit/workspace/precompiled/LM_pet_feeder.py +0 -78
- 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 -74
- 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/node_config.json +0 -1
- toolkit/workspace/precompiled/reset.mpy +0 -0
- /micrOS/source/{IO_esp32.py → modules/IO_esp32.py} +0 -0
- /micrOS/source/{IO_esp32c3.py → modules/IO_esp32c3.py} +0 -0
- /micrOS/source/{IO_esp32s2.py → modules/IO_esp32s2.py} +0 -0
- /micrOS/source/{IO_rp2.py → modules/IO_rp2.py} +0 -0
- /micrOS/source/{LM_gameOfLife.py → modules/LM_gameOfLife.py} +0 -0
- /micrOS/source/{LM_rgbcct.py → modules/LM_rgbcct.py} +0 -0
- /micrOS/source/{LM_rp2w.py → modules/LM_rp2w.py} +0 -0
- /micrOS/source/{LM_sdcard.py → modules/LM_sdcard.py} +0 -0
- /micrOS/source/{LM_sound_event.py → modules/LM_sound_event.py} +0 -0
- /micrOS/source/{LM_tinyrgb.py → modules/LM_tinyrgb.py} +0 -0
- /micrOS/source/{udashboard.js → web/udashboard.js} +0 -0
- /micrOS/source/{uwidgets.js → web/uwidgets.js} +0 -0
- /micrOS/source/{uwidgets_pro.js → web/uwidgets_pro.js} +0 -0
- {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info/licenses}/LICENSE +0 -0
- {micrOSDevToolKit-2.9.1.dist-info → microsdevtoolkit-2.26.1.dist-info}/top_level.txt +0 -0
- /toolkit/workspace/precompiled/{LM_rp2w.py → modules/LM_rp2w.py} +0 -0
- /toolkit/workspace/precompiled/{LM_sdcard.py → modules/LM_sdcard.py} +0 -0
- /toolkit/workspace/precompiled/{udashboard.js → web/udashboard.js} +0 -0
- /toolkit/workspace/precompiled/{uwidgets.js → web/uwidgets.js} +0 -0
- /toolkit/workspace/precompiled/{uwidgets_pro.js → web/uwidgets_pro.js} +0 -0
micrOS/source/LM_lmpacman.py
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
from os import listdir, remove
|
|
2
|
-
from sys import modules
|
|
3
|
-
from Common import socket_stream
|
|
4
|
-
|
|
5
|
-
WEB_EXT = ('html', 'js', 'css')
|
|
6
|
-
|
|
7
|
-
@socket_stream
|
|
8
|
-
def listmods(msgobj=None):
|
|
9
|
-
"""
|
|
10
|
-
Load module package manager
|
|
11
|
-
- list all load modules
|
|
12
|
-
"""
|
|
13
|
-
# Dump available LMs
|
|
14
|
-
msg_buf = []
|
|
15
|
-
for k in (res.replace('LM_', '') for res in listdir()
|
|
16
|
-
if res.startswith('LM_') or res.split('.')[-1] in WEB_EXT):
|
|
17
|
-
if msgobj is None:
|
|
18
|
-
msg_buf.append(f' {k}')
|
|
19
|
-
else:
|
|
20
|
-
msgobj(f' {k}')
|
|
21
|
-
return msg_buf if len(msg_buf) > 0 else ''
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def delmod(mod=None):
|
|
25
|
-
"""
|
|
26
|
-
Module package manager
|
|
27
|
-
:param mod:
|
|
28
|
-
Delete Load Module with full name: module.py or module.mpy
|
|
29
|
-
OR delete any web resource: *.js, *.css, *.html
|
|
30
|
-
"""
|
|
31
|
-
if mod is not None and (mod.endswith('py') or mod.split('.')[-1] in WEB_EXT):
|
|
32
|
-
# LM exception list - system and lmpacman cannot be deleted
|
|
33
|
-
if 'lmpacman.' in mod or 'system.' in mod:
|
|
34
|
-
return f'Load module {mod} is in use, skip delete.'
|
|
35
|
-
try:
|
|
36
|
-
to_remove = mod if mod.split('.')[-1] in WEB_EXT else f'LM_{mod}'
|
|
37
|
-
remove(to_remove)
|
|
38
|
-
return f'Delete module: {mod}'
|
|
39
|
-
except Exception as e:
|
|
40
|
-
return f'Cannot delete: {mod}: {e}'
|
|
41
|
-
return f'Invalid value: {mod}'
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def del_duplicates():
|
|
45
|
-
"""
|
|
46
|
-
Load module package manager (Not just load modules)
|
|
47
|
-
- delete duplicated .mpy and .py resources, keep .mpy resource!
|
|
48
|
-
"""
|
|
49
|
-
msg_buf = []
|
|
50
|
-
py = list((res.split('.')[0] for res in listdir() if res.endswith('.py'))) # Normally smaller list
|
|
51
|
-
mpy = (res.split('.')[0] for res in listdir() if res.endswith('.mpy'))
|
|
52
|
-
for m in mpy:
|
|
53
|
-
# Iterate over mpy resources
|
|
54
|
-
state = True
|
|
55
|
-
if m in py and m != 'main':
|
|
56
|
-
to_delete = f'{m}.py'
|
|
57
|
-
try:
|
|
58
|
-
remove(to_delete)
|
|
59
|
-
except:
|
|
60
|
-
state = False
|
|
61
|
-
msg_buf.append(f' Delete {to_delete} {state}')
|
|
62
|
-
return '\n'.join(msg_buf) if len(msg_buf) > 0 else 'Nothing to delete.'
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def module(unload=None):
|
|
66
|
-
"""
|
|
67
|
-
List / unload loaded upython Load Modules
|
|
68
|
-
:param unload: module name to unload
|
|
69
|
-
:param unload: None - list active modules
|
|
70
|
-
:return str: verdict
|
|
71
|
-
"""
|
|
72
|
-
if unload is None:
|
|
73
|
-
return list(modules.keys())
|
|
74
|
-
if unload in modules.keys():
|
|
75
|
-
del modules[unload]
|
|
76
|
-
return f"Module unload {unload} done."
|
|
77
|
-
return f"Module unload {unload} failed."
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
@socket_stream
|
|
81
|
-
def cachedump(cdel=None, msgobj=None):
|
|
82
|
-
"""
|
|
83
|
-
Cache system persistent data storage files (.pds)
|
|
84
|
-
"""
|
|
85
|
-
if cdel is None:
|
|
86
|
-
# List pds files aka application cache
|
|
87
|
-
msg_buf = []
|
|
88
|
-
for pds in (_pds for _pds in listdir() if _pds.endswith('.pds')):
|
|
89
|
-
with open(pds, 'r') as f:
|
|
90
|
-
if msgobj is None:
|
|
91
|
-
msg_buf.append(f'{pds}: {f.read()}')
|
|
92
|
-
else:
|
|
93
|
-
msgobj(f'{pds}: {f.read()}')
|
|
94
|
-
return msg_buf if len(msg_buf) > 0 else ''
|
|
95
|
-
# Remove given pds file
|
|
96
|
-
try:
|
|
97
|
-
remove(f'{cdel}.pds')
|
|
98
|
-
return f'{cdel}.pds delete done.'
|
|
99
|
-
except:
|
|
100
|
-
return f'{cdel}.pds not exists'
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
@socket_stream
|
|
104
|
-
def micros_checksum(msgobj=None):
|
|
105
|
-
from hashlib import sha1
|
|
106
|
-
from binascii import hexlify
|
|
107
|
-
from Config import cfgget
|
|
108
|
-
|
|
109
|
-
for f_name in (_pds for _pds in listdir() if _pds.endswith('py')):
|
|
110
|
-
with open(f_name, 'rb') as f:
|
|
111
|
-
cs = hexlify(sha1(f.read()).digest()).decode('utf-8')
|
|
112
|
-
msgobj(f"{cs} {f_name}")
|
|
113
|
-
# GC collect?
|
|
114
|
-
return f"micrOS version: {cfgget('version')}"
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
def help(widgets=False):
|
|
118
|
-
"""
|
|
119
|
-
[i] micrOS LM naming convention - built-in help message
|
|
120
|
-
:return tuple:
|
|
121
|
-
(widgets=False) list of functions implemented by this application
|
|
122
|
-
(widgets=True) list of widget json for UI generation
|
|
123
|
-
"""
|
|
124
|
-
return 'listmods', 'delmod mod=<module>.py/.mpy or .js/.html/.css', 'del_duplicates',\
|
|
125
|
-
'module unload="LM_rgb/None"',\
|
|
126
|
-
'cachedump cdel="rgb.pds/None"', 'micros_checksum'
|
micrOS/source/LM_neoeffects.py
DELETED
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
from LM_neopixel import load, segment, Data, status, pinmap as pm
|
|
2
|
-
from random import randint
|
|
3
|
-
from Types import resolve
|
|
4
|
-
from Common import manage_task
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
#################################
|
|
8
|
-
# NEOPIXEL EFFECT DRAWER CLASS #
|
|
9
|
-
#################################
|
|
10
|
-
|
|
11
|
-
class DrawEffect:
|
|
12
|
-
__instance = None
|
|
13
|
-
|
|
14
|
-
def __new__(cls, pixcnt=24):
|
|
15
|
-
if DrawEffect.__instance is None:
|
|
16
|
-
DrawEffect.__instance = super().__new__(cls)
|
|
17
|
-
DrawEffect.__instance.pix_cnt = None
|
|
18
|
-
DrawEffect.__instance.index_offset = 0
|
|
19
|
-
DrawEffect.__instance.color_wheel = 0
|
|
20
|
-
DrawEffect.__instance.__init_effect(pixcnt)
|
|
21
|
-
DrawEffect.__instance.offset_gen = None
|
|
22
|
-
DrawEffect.__instance.auto_shift = False
|
|
23
|
-
return DrawEffect.__instance
|
|
24
|
-
|
|
25
|
-
def __init_effect(cls, ledcnt):
|
|
26
|
-
"""
|
|
27
|
-
Set neopixel object & store pixel cnt
|
|
28
|
-
"""
|
|
29
|
-
if Data.NEOPIXEL_OBJ is None:
|
|
30
|
-
load(ledcnt=ledcnt)
|
|
31
|
-
cls.pix_cnt = Data.NEOPIXEL_OBJ.n
|
|
32
|
-
if cls.pix_cnt is None:
|
|
33
|
-
cls.pix_cnt = Data.NEOPIXEL_OBJ.n
|
|
34
|
-
return cls.pix_cnt
|
|
35
|
-
|
|
36
|
-
def __offset(cls, shift):
|
|
37
|
-
def _gen():
|
|
38
|
-
while True:
|
|
39
|
-
if cls.auto_shift:
|
|
40
|
-
# Step rotation cycle - shift True
|
|
41
|
-
cls.index_offset += 1
|
|
42
|
-
if cls.index_offset > cls.pix_cnt - 1:
|
|
43
|
-
cls.index_offset = 0
|
|
44
|
-
for k in range(cls.index_offset, cls.pix_cnt):
|
|
45
|
-
yield k
|
|
46
|
-
for k in range(0, cls.index_offset):
|
|
47
|
-
yield k
|
|
48
|
-
cls.auto_shift = shift
|
|
49
|
-
if cls.offset_gen is None:
|
|
50
|
-
cls.offset_gen = _gen()
|
|
51
|
-
return cls.offset_gen
|
|
52
|
-
|
|
53
|
-
def draw(cls, iterable, shift=False):
|
|
54
|
-
"""
|
|
55
|
-
DRAW GENERATED COLORS (RGB)
|
|
56
|
-
HELPER FUNCTION with auto shift (offset) sub function
|
|
57
|
-
:param iterable: Colors generator object / iterable
|
|
58
|
-
:param shift: automatic color map rotation
|
|
59
|
-
:return: None
|
|
60
|
-
"""
|
|
61
|
-
offset_gen = cls.__offset(shift=shift)
|
|
62
|
-
r, g, b, i = 0, 0, 0, 0
|
|
63
|
-
for r, g, b in iterable:
|
|
64
|
-
# Handle index offset - rotate effect
|
|
65
|
-
i = next(offset_gen)
|
|
66
|
-
# Write data to neopixel - write / segment :)
|
|
67
|
-
segment(int(r), int(g), int(b), s=i, cache=False, write=False)
|
|
68
|
-
segment(int(r), int(g), int(b), s=i, cache=False, write=True)
|
|
69
|
-
return True
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def __color_input(r, g, b):
|
|
73
|
-
_r, _g, _b, _ = Data.DCACHE
|
|
74
|
-
r = _r if r is None else r
|
|
75
|
-
g = _g if g is None else g
|
|
76
|
-
b = _b if b is None else b
|
|
77
|
-
return r, g, b
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
#################################
|
|
81
|
-
# DEFINE EFFECTS #
|
|
82
|
-
#################################
|
|
83
|
-
|
|
84
|
-
def meteor(r=None, g=None, b=None, shift=True, ledcnt=24):
|
|
85
|
-
"""
|
|
86
|
-
Meteor effect
|
|
87
|
-
:param r int: red value 0-1000
|
|
88
|
-
:param g int: green value 0-1000
|
|
89
|
-
:param b int: blue value 0-1000
|
|
90
|
-
:param shift bool: automatic effect shifting
|
|
91
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
92
|
-
:return str: verdict
|
|
93
|
-
"""
|
|
94
|
-
def __effect(r, g, b, pixel):
|
|
95
|
-
"""
|
|
96
|
-
Describe one full length color map
|
|
97
|
-
:param r: red target color
|
|
98
|
-
:param g: green target color
|
|
99
|
-
:param b: blue target color
|
|
100
|
-
:param pixel: number of led segments
|
|
101
|
-
:return: yield tuple with r,g,b
|
|
102
|
-
"""
|
|
103
|
-
step = float(0.9 / pixel)
|
|
104
|
-
for k in range(0, pixel):
|
|
105
|
-
fade = (k+1) * step
|
|
106
|
-
data = round(r * fade), round(g * fade), round(b * fade)
|
|
107
|
-
yield data
|
|
108
|
-
|
|
109
|
-
# Conditional value load - with neopixel cache
|
|
110
|
-
r, g, b = __color_input(r, g, b)
|
|
111
|
-
|
|
112
|
-
# Init custom params
|
|
113
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
114
|
-
# Create effect data
|
|
115
|
-
cgen = __effect(r, g, b, effect.pix_cnt)
|
|
116
|
-
# Draw effect data
|
|
117
|
-
effect.draw(cgen, shift=shift)
|
|
118
|
-
return 'Meteor R{}:G{}:B{} N:{}'.format(r, g, b, effect.pix_cnt)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def cycle(r=None, g=None, b=None, shift=True, ledcnt=24):
|
|
122
|
-
"""
|
|
123
|
-
Cycle effect
|
|
124
|
-
:param r int: red value 0-1000
|
|
125
|
-
:param g int: green value 0-1000
|
|
126
|
-
:param b int: blue value 0-1000
|
|
127
|
-
:param shift bool: automatic effect shifting
|
|
128
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
129
|
-
:return str: verdict
|
|
130
|
-
"""
|
|
131
|
-
def __effect(r, g, b, pixel):
|
|
132
|
-
"""
|
|
133
|
-
Describe one full length color map
|
|
134
|
-
:param r: red target color
|
|
135
|
-
:param g: green target color
|
|
136
|
-
:param b: blue target color
|
|
137
|
-
:param pixel: number of led segments
|
|
138
|
-
:return: yield tuple with r,g,b
|
|
139
|
-
"""
|
|
140
|
-
lightrgb = round(r*0.1), round(g*0.1), round(b*0.1)
|
|
141
|
-
yield lightrgb
|
|
142
|
-
yield r, g, b
|
|
143
|
-
yield lightrgb
|
|
144
|
-
for i in range(3, pixel):
|
|
145
|
-
yield 0, 0, 0
|
|
146
|
-
|
|
147
|
-
# Conditional value load - with neopixel cache
|
|
148
|
-
r, g, b = __color_input(r, g, b)
|
|
149
|
-
|
|
150
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
151
|
-
cgen = __effect(r, g, b, effect.pix_cnt)
|
|
152
|
-
effect.draw(cgen, shift=shift)
|
|
153
|
-
return 'Cycle R{}:G{}:B{} N:{}'.format(r, g, b, effect.pix_cnt)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
def rainbow(step=1, br=50, ledcnt=24):
|
|
157
|
-
"""
|
|
158
|
-
Rainbow effect
|
|
159
|
-
:param step int: color weel resolution in step (default: 1)
|
|
160
|
-
:param br int: brightness in percentage
|
|
161
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
162
|
-
:return str: verdict
|
|
163
|
-
"""
|
|
164
|
-
def __wheel(pos):
|
|
165
|
-
# Input a value 0 to 255 to get a color value.
|
|
166
|
-
# The colours are a transition r - g - b - back to r.
|
|
167
|
-
if pos < 0 or pos > 255:
|
|
168
|
-
return 0, 0, 0
|
|
169
|
-
if pos < 85:
|
|
170
|
-
return 255 - pos * 3, pos * 3, 0
|
|
171
|
-
if pos < 170:
|
|
172
|
-
pos -= 85
|
|
173
|
-
return 0, 255 - pos * 3, pos * 3
|
|
174
|
-
pos -= 170
|
|
175
|
-
return pos * 3, 0, 255 - pos * 3
|
|
176
|
-
|
|
177
|
-
def __effect(cnt, step, br):
|
|
178
|
-
"""
|
|
179
|
-
:param cnt: led segment count
|
|
180
|
-
:param br: max brightness 0-100%
|
|
181
|
-
:param step: step size
|
|
182
|
-
"""
|
|
183
|
-
cw = DrawEffect().color_wheel
|
|
184
|
-
DrawEffect().color_wheel = 0 if cw >= 255 else cw+step
|
|
185
|
-
for i in range(0, cnt):
|
|
186
|
-
rc_index = (i * 256 // cnt) + DrawEffect().color_wheel
|
|
187
|
-
r, g, b = __wheel(rc_index & 255)
|
|
188
|
-
yield round(r*br*0.01), round(g*br*0.01), round(b*br*0.01)
|
|
189
|
-
|
|
190
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
191
|
-
cgen = __effect(effect.pix_cnt, step=step, br=br)
|
|
192
|
-
effect.draw(cgen, shift=True)
|
|
193
|
-
return 'Rainbow'
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
def shader(size=6, offset=0, shift=False, ledcnt=24):
|
|
197
|
-
"""
|
|
198
|
-
Shader for ring lamp
|
|
199
|
-
:param size int: shader size (disabled LEDs)
|
|
200
|
-
:param offset int: rotate shader 0-(ledcnt-1)
|
|
201
|
-
:param shift bool: auto shift shader effect (False)
|
|
202
|
-
:param ledcnt int: number of neopixel elements in chain (default: 24)
|
|
203
|
-
:return str: verdict
|
|
204
|
-
"""
|
|
205
|
-
def __effect(size, offset, pixcnt):
|
|
206
|
-
# Conditional value load - with neopixel cache
|
|
207
|
-
r, g, b, _ = Data.DCACHE
|
|
208
|
-
# calculate 0->24 range
|
|
209
|
-
_slice1 = pixcnt if size + offset > pixcnt else size + offset
|
|
210
|
-
# calculate 24->0-> range (overflow)
|
|
211
|
-
_slice2 = size + offset - pixcnt if size + offset > pixcnt else 0
|
|
212
|
-
for i in range(0, pixcnt):
|
|
213
|
-
if offset < i < _slice1:
|
|
214
|
-
yield 0, 0, 0
|
|
215
|
-
elif 0 <= i < _slice2:
|
|
216
|
-
yield 0, 0, 0
|
|
217
|
-
else:
|
|
218
|
-
yield r, g, b
|
|
219
|
-
|
|
220
|
-
# Init custom params
|
|
221
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
222
|
-
# Create effect data
|
|
223
|
-
if size < effect.pix_cnt:
|
|
224
|
-
cgen = __effect(size, offset, effect.pix_cnt)
|
|
225
|
-
# Draw effect data
|
|
226
|
-
effect.index_offset = 0 # reset auto shift offset
|
|
227
|
-
effect.draw(cgen, shift=shift)
|
|
228
|
-
return 'Shader size: {} ->{} ({})'.format(size, offset, effect.pix_cnt)
|
|
229
|
-
return 'Shader invalid size: {} ({})'.format(size, effect.pix_cnt)
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
def random(max_val=255):
|
|
233
|
-
"""
|
|
234
|
-
Demo function: implements random color change
|
|
235
|
-
:param max_val: set channel maximum generated value: 0-255
|
|
236
|
-
:return str: rgb status - states: R, G, B
|
|
237
|
-
"""
|
|
238
|
-
r = randint(0, max_val)
|
|
239
|
-
g = randint(0, max_val)
|
|
240
|
-
b = randint(0, max_val)
|
|
241
|
-
Data.DCACHE[0] = r
|
|
242
|
-
Data.DCACHE[1] = g
|
|
243
|
-
Data.DCACHE[2] = b
|
|
244
|
-
return "Set random: R:{} G: B:{}".format(r, g, b)
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
def color(r=None, g=None, b=None):
|
|
248
|
-
"""
|
|
249
|
-
Set color buffer - for runtime effect color change
|
|
250
|
-
:param r int: red channel 0-255 (default: None - cached value)
|
|
251
|
-
:param g int: green channel 0-255 (default: None - cached value)
|
|
252
|
-
:param b int: blue channel 0-255 (default: None - cached value)
|
|
253
|
-
:return dict: rgb status - states: R, G, B, S
|
|
254
|
-
"""
|
|
255
|
-
# Conditional value load - with neopixel cache
|
|
256
|
-
r, g, b = __color_input(r, g, b)
|
|
257
|
-
Data.DCACHE[0] = r
|
|
258
|
-
Data.DCACHE[1] = g
|
|
259
|
-
Data.DCACHE[2] = b
|
|
260
|
-
return status()
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
def fire(r=None, g=None, b=None, ledcnt=24):
|
|
264
|
-
|
|
265
|
-
def __effect(r, g, b, pixcnt):
|
|
266
|
-
for _ in range(pixcnt):
|
|
267
|
-
rand_percent = round(randint(1, 200)/100, 2)
|
|
268
|
-
|
|
269
|
-
rgb = [
|
|
270
|
-
r * rand_percent,
|
|
271
|
-
g * rand_percent,
|
|
272
|
-
b * rand_percent
|
|
273
|
-
]
|
|
274
|
-
|
|
275
|
-
for i, color in enumerate(rgb):
|
|
276
|
-
if color > 255:
|
|
277
|
-
rgb[i] = 255
|
|
278
|
-
if color < 0:
|
|
279
|
-
rgb[i] = 0
|
|
280
|
-
yield rgb
|
|
281
|
-
|
|
282
|
-
# Conditional value load - with neopixel cache
|
|
283
|
-
r, g, b = __color_input(r, g, b)
|
|
284
|
-
|
|
285
|
-
effect = DrawEffect(pixcnt=ledcnt)
|
|
286
|
-
cgen = __effect(r, g, b, effect.pix_cnt)
|
|
287
|
-
effect.draw(cgen, shift=False)
|
|
288
|
-
return 'fire R{}:G{}:B{} N:{}'.format(r, g, b, effect.pix_cnt)
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
def stop_effects():
|
|
292
|
-
"""
|
|
293
|
-
Stop all running (neo)effects tasks
|
|
294
|
-
"""
|
|
295
|
-
return manage_task("neoeffects.*", "kill")
|
|
296
|
-
|
|
297
|
-
#######################
|
|
298
|
-
# LM helper functions #
|
|
299
|
-
#######################
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
def pinmap():
|
|
303
|
-
"""
|
|
304
|
-
[i] micrOS LM naming convention
|
|
305
|
-
Shows logical pins - pin number(s) used by this Load module
|
|
306
|
-
- info which pins to use for this application
|
|
307
|
-
:return dict: pin name (str) - pin value (int) pairs
|
|
308
|
-
"""
|
|
309
|
-
return pm()
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
def help(widgets=False):
|
|
313
|
-
"""
|
|
314
|
-
[i] micrOS LM naming convention - built-in help message
|
|
315
|
-
:return tuple:
|
|
316
|
-
(widgets=False) list of functions implemented by this application
|
|
317
|
-
(widgets=True) list of widget json for UI generation
|
|
318
|
-
"""
|
|
319
|
-
return resolve(('meteor r=<0-255> g=<0-255> b=<0-255> shift=True ledcnt=24',
|
|
320
|
-
'BUTTON meteor &&',
|
|
321
|
-
'cycle r g b shift=True ledcnt=24',
|
|
322
|
-
'BUTTON cycle &&50',
|
|
323
|
-
'rainbow step=1 br=<5-100> ledcnt=24 &&',
|
|
324
|
-
'BUTTON rainbow br=50 &&',
|
|
325
|
-
'fire r=None g=None b=None ledcnt=24',
|
|
326
|
-
'BUTTON fire &&200',
|
|
327
|
-
'BUTTON stop_effects',
|
|
328
|
-
'shader size=4 offset=0 shift=True ledcnt=24',
|
|
329
|
-
'random max_val=255',
|
|
330
|
-
'pinmap',
|
|
331
|
-
'COLOR color r=<0-255-10> g b'), widgets=widgets)
|