IS-Matrix-Forge 1.0.0.dev4__tar.gz → 1.0.0.dev5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/PKG-INFO +48 -52
  2. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/README.md +42 -52
  3. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/__init__.py +1 -1
  4. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/__init__.py +1 -1
  5. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/designer_gui/__init__.py +1 -1
  6. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/designer_gui/main_window/__init__.py +11 -3
  7. is_matrix_forge-1.0.0.dev4/is_matrix_forge/designer_gui/main_window/layout.py → is_matrix_forge-1.0.0.dev5/is_matrix_forge/designer_gui/main_window/layout/__init__.py +2 -6
  8. is_matrix_forge-1.0.0.dev5/is_matrix_forge/designer_gui/main_window/layout/button_grid/column.py +17 -0
  9. is_matrix_forge-1.0.0.dev5/is_matrix_forge/designer_gui/main_window/layout/button_grid/grid.py +15 -0
  10. is_matrix_forge-1.0.0.dev5/is_matrix_forge/designer_gui/main_window/streamlit_app.py +93 -0
  11. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/dev_tools/__init__.py +1 -1
  12. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/inputmodule/ledmatrix.py +0 -16
  13. is_matrix_forge-1.0.0.dev5/is_matrix_forge/led_matrix/Scripts/__init__.py +4 -0
  14. is_matrix_forge-1.0.0.dev5/is_matrix_forge/led_matrix/Scripts/identify_matrices.py +228 -0
  15. is_matrix_forge-1.0.0.dev5/is_matrix_forge/led_matrix/__init__.py +58 -0
  16. {is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/helpers/core → is_matrix_forge-1.0.0.dev5/is_matrix_forge/led_matrix/commands}/__init__.py +3 -1
  17. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/controller/__init__.py +2 -0
  18. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/controller/controller.py +66 -19
  19. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/__init__.py +1 -1
  20. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/animation.py +1 -1
  21. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/effects/__init__.py +1 -1
  22. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/font/__init__.py +1 -1
  23. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/effects/__init__.py +1 -1
  24. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/effects/breather.py +12 -28
  25. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/grid/presets/__init__.py +1 -1
  26. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/helpers/__init__.py +8 -27
  27. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/media.py +1 -2
  28. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/patterns/built_in/commands.py +1 -1
  29. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/patterns/built_in/stencils/res.py +1 -1
  30. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/text/__init__.py +1 -1
  31. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/text/scroller.py +22 -0
  32. is_matrix_forge-1.0.0.dev5/is_matrix_forge/led_matrix/hardware.py +271 -0
  33. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/helpers/__init__.py +3 -0
  34. is_matrix_forge-1.0.0.dev5/is_matrix_forge/led_matrix/helpers/core/__init__.py +17 -0
  35. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/tools/__init__.py +1 -1
  36. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/utils/__init__.py +1 -1
  37. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/layout/__init__.py +1 -1
  38. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/windows/main/__init__.py +1 -1
  39. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/monitor.py +3 -3
  40. is_matrix_forge-1.0.0.dev5/is_matrix_forge/notify/__init__.py +0 -0
  41. is_matrix_forge-1.0.0.dev5/is_matrix_forge/scripts/__init__.py +1 -0
  42. is_matrix_forge-1.0.0.dev5/is_matrix_forge/scripts/preset_installer.py +184 -0
  43. is_matrix_forge-1.0.0.dev5/is_matrix_forge/serial_com/__init__.py +1 -0
  44. is_matrix_forge-1.0.0.dev5/is_matrix_forge/serial_com/base/__init__.py +18 -0
  45. is_matrix_forge-1.0.0.dev5/is_matrix_forge/serial_com/base/answer.py +12 -0
  46. is_matrix_forge-1.0.0.dev5/is_matrix_forge/serial_com/base/message.py +13 -0
  47. is_matrix_forge-1.0.0.dev5/is_matrix_forge/serial_com/base/request.py +8 -0
  48. is_matrix_forge-1.0.0.dev5/is_matrix_forge/serial_com/exchange.py +47 -0
  49. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/pyproject.toml +17 -17
  50. is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/Scripts/__init__.py +0 -4
  51. is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/__init__.py +0 -7
  52. is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/commands/__init__.py +0 -84
  53. is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/display/patterns/utils.py +0 -2
  54. is_matrix_forge-1.0.0.dev4/is_matrix_forge/led_matrix/hardware.py +0 -134
  55. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/LICENSE.md +0 -0
  56. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/audio/__init__.py +0 -0
  57. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/audio/files/__init__.py +0 -0
  58. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/audio/files/plugged.wav +0 -0
  59. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/audio/files/unplugged.wav +0 -0
  60. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/char_map.json +0 -0
  61. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/assets/font_map.py +0 -0
  62. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/common/__init__.py +0 -0
  63. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/common/decorators/__init__.py +0 -0
  64. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/common/dirs.py +0 -0
  65. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/common/helpers/__init__.py +0 -0
  66. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/common/helpers/github_api.py +0 -0
  67. {is_matrix_forge-1.0.0.dev4/is_matrix_forge/monitor/gui → is_matrix_forge-1.0.0.dev5/is_matrix_forge/designer_gui/main_window/layout/button_grid}/__init__.py +0 -0
  68. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/dev_tools/debug.py +0 -0
  69. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/dev_tools/presets.py +0 -0
  70. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/inputmodule/__init__.py +0 -0
  71. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/inputmodule/b1display.py +0 -0
  72. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/inputmodule/c1minimal.py +0 -0
  73. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/inputmodule/font.py +0 -0
  74. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/inputmodule/helpers/__init__.py +0 -0
  75. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/Scripts/battery_monitor.py +0 -0
  76. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/Scripts/install_presets/__init__.py +0 -0
  77. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/Scripts/install_presets/arguments.py +0 -0
  78. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/Scripts/install_presets/main.py +0 -0
  79. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/commands/map.py +0 -0
  80. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/constants.py +0 -0
  81. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/controller/helpers/__init__.py +0 -0
  82. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/controller/helpers/threading.py +0 -0
  83. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/controller/multiton.py +0 -0
  84. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/controller/threaded.py +0 -0
  85. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/__init__.py +0 -0
  86. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/errors.py +0 -0
  87. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/font/font.py +0 -0
  88. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/font/map_builder.py +0 -0
  89. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/frame/__init__.py +0 -0
  90. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/frame/base.py +0 -0
  91. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/frame/helpers.py +0 -0
  92. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/keep_awake.py +0 -0
  93. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/plugged.py +0 -0
  94. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/animations/text_scroller.py +0 -0
  95. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/effects/fade.py +0 -0
  96. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/effects/scroller/__init__.py +0 -0
  97. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/effects/scroller/base.py +0 -0
  98. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/effects/scroller/helpers.py +0 -0
  99. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/grid/__init__.py +0 -0
  100. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/grid/grid.py +0 -0
  101. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/grid/helpers.py +0 -0
  102. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/grid/presets/manifest.py +0 -0
  103. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/helpers/columns.py +0 -0
  104. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/patterns/built_in/__init__.py +0 -0
  105. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/patterns/built_in/constants.py +0 -0
  106. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/display/patterns/built_in/stencils/__init__.py +0 -0
  107. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/errors/__init__.py +0 -0
  108. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/errors/base.py +0 -0
  109. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/errors/grid.py +0 -0
  110. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/errors/matrix.py +0 -0
  111. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/errors/misc.py +0 -0
  112. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/fonts.py +0 -0
  113. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/helpers/core/lazy_mod_load.py +0 -0
  114. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/helpers/device.py +0 -0
  115. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/helpers/status_handler.py +0 -0
  116. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/helpers/stream/__init__.py +0 -0
  117. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/helpers/stream/errors.py +0 -0
  118. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/led_matrix.py +0 -0
  119. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/status.py +0 -0
  120. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/led_matrix/tools/identify.py +0 -0
  121. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/log_engine.py +0 -0
  122. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/__init__.py +0 -0
  123. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/errors.py +0 -0
  124. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/events.py +0 -0
  125. {is_matrix_forge-1.0.0.dev4/is_matrix_forge/monitor/gui/windows → is_matrix_forge-1.0.0.dev5/is_matrix_forge/monitor/gui}/__init__.py +0 -0
  126. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/errors.py +0 -0
  127. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/event/__init__.py +0 -0
  128. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/event/collection.py +0 -0
  129. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/event/errors.py +0 -0
  130. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/event/event.py +0 -0
  131. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/layout/base.py +0 -0
  132. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/metaclasses/__init__.py +0 -0
  133. {is_matrix_forge-1.0.0.dev4/is_matrix_forge/notify → is_matrix_forge-1.0.0.dev5/is_matrix_forge/monitor/gui/windows}/__init__.py +0 -0
  134. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/windows/base.py +0 -0
  135. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/gui/windows/main/layout.py +0 -0
  136. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/monitor/helpers.py +0 -0
  137. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/notify/sounds/__init__.py +0 -0
  138. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/notify/sounds/base.py +0 -0
  139. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/is_matrix_forge/progress.py +0 -0
  140. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/blank.json +0 -0
  141. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/manifest.json +0 -0
  142. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/shock_face.json +0 -0
  143. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test1.json +0 -0
  144. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test2.json +0 -0
  145. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test3.json +0 -0
  146. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test4.json +0 -0
  147. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test5.json +0 -0
  148. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test6.json +0 -0
  149. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/test7.json +0 -0
  150. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/x_animation II.json +0 -0
  151. {is_matrix_forge-1.0.0.dev4 → is_matrix_forge-1.0.0.dev5}/presets/x_animation.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: IS-Matrix-Forge
3
- Version: 1.0.0.dev4
3
+ Version: 1.0.0.dev5
4
4
  Summary:
5
5
  License: MIT
6
6
  Keywords: led,matrix,framework,hardware
@@ -15,31 +15,42 @@ Provides-Extra: clipboard-support
15
15
  Requires-Dist: chime (>=0.7.0,<0.8.0)
16
16
  Requires-Dist: clipboard (>=0.0.4,<0.0.5) ; extra == "clipboard-support"
17
17
  Requires-Dist: easy-exit-calls (>=1.0.0.dev1,<2.0.0)
18
+ Requires-Dist: imapclient (==3.0.1)
18
19
  Requires-Dist: inspy-logger (>=3.2.3,<4.0.0)
19
20
  Requires-Dist: inspyre-toolbox (>=1.6.0.dev23)
20
21
  Requires-Dist: opencv-python (>=4.11.0.86,<5.0.0.0)
21
22
  Requires-Dist: pillow (>=11.2.1,<12.0.0)
22
23
  Requires-Dist: pyserial (>=3.5,<4.0)
24
+ Requires-Dist: pysimplegui-4-foss (==4.60.4.1)
25
+ Requires-Dist: pysimpleguiweb (==0.39.0)
26
+ Project-URL: Homepage, https://github.com/Inspyre-Softworks/IS-Matrix-Forge
27
+ Project-URL: Repository, https://github.com/Inspyre-Softworks/IS-Matrix-Forge
23
28
  Description-Content-Type: text/markdown
24
29
 
25
30
  [![PyPI version](https://img.shields.io/pypi/v/IS-Matrix-Forge)](https://pypi.org/project/IS-Matrix-Forge)
26
31
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/IS-Matrix-Forge)
27
32
 
28
33
 
29
- # LED Matrix Battery Monitor
34
+ # IS Matrix Forge
30
35
 
31
- A Python application that displays your computer's battery status on an LED matrix display. The application monitors battery level and power state, providing visual feedback on an LED matrix and audio notifications when power is plugged or unplugged.
36
+ **IS Matrix Forge** is a Python framework for creating applications that drive
37
+ 9×34 LED matrix displays. It provides high level helpers for talking to the
38
+ hardware, tools for building animations, and utilities such as progress bars and
39
+ a battery monitor.
32
40
 
33
- ## Project Description and Purpose
41
+ ## Project Overview
34
42
 
35
- The LED Matrix Battery Monitor is designed to provide a visual representation of your computer's battery status on an external LED matrix display. It serves as a convenient way to monitor battery levels without having to check your computer's status bar, especially useful for setups where the status bar might not be visible or when you want a more noticeable indicator.
43
+ Matrix Forge grew out of the LED Matrix Battery Monitor project. The goal is to
44
+ make it easy to create rich LED matrix experiences from Python. In addition to
45
+ monitoring the battery, you can design custom frames, display scrolling text,
46
+ run animations, and integrate the LED matrix with your own applications.
36
47
 
37
- Key features:
38
- - Real-time battery level display on an LED matrix
39
- - Visual animations when power is plugged in
40
- - Audio notifications when power state changes (plugged/unplugged)
41
- - Configurable checking intervals
42
- - Support for multiple LED matrices
48
+ Highlighted features include:
49
+ - Device discovery and control via `pyserial`
50
+ - Drawing grids and patterns with the `Grid` class
51
+ - Built-in and custom animations
52
+ - Progress bars that render on the matrix
53
+ - A battery monitor example using these building blocks
43
54
 
44
55
  ## Hardware Requirements
45
56
 
@@ -71,8 +82,8 @@ This project requires Python 3.12 or newer and the following dependencies:
71
82
 
72
83
  1. Clone the repository:
73
84
  ```
74
- git clone https://github.com/Inspyre-Softworks/led-matrix-battery.git
75
- cd led-matrix-battery
85
+ git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
86
+ cd IS-Matrix-Forge
76
87
  ```
77
88
 
78
89
  2. Install dependencies using Poetry:
@@ -89,8 +100,8 @@ This project requires Python 3.12 or newer and the following dependencies:
89
100
 
90
101
  1. Clone the repository:
91
102
  ```
92
- git clone https://github.com/Inspyre-Softworks/led-matrix-battery.git
93
- cd led-matrix-battery
103
+ git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
104
+ cd IS-Matrix-Forge
94
105
  ```
95
106
 
96
107
  2. Install the package:
@@ -100,60 +111,43 @@ This project requires Python 3.12 or newer and the following dependencies:
100
111
 
101
112
  ## Usage Examples
102
113
 
103
- ### Basic Usage
104
-
105
- To start monitoring your battery with default settings:
114
+ ### Identify Connected Devices
106
115
 
107
116
  ```python
108
- from is_matrix_forge.monitor import run_power_monitor
109
117
  from is_matrix_forge.led_matrix.helpers.device import DEVICES
110
118
 
111
- # Get the first available LED matrix device
112
- device = DEVICES[0]
113
-
114
- # Start monitoring with default settings
115
- run_power_monitor(device)
119
+ for dev in DEVICES:
120
+ print(dev)
116
121
  ```
117
122
 
118
- ### Custom Configuration
119
-
120
- To customize the monitoring behavior:
123
+ ### Display Text on the Matrix
121
124
 
122
125
  ```python
123
- from is_matrix_forge.monitor import run_power_monitor
126
+ from is_matrix_forge.led_matrix.controller.controller import LEDMatrixController
124
127
  from is_matrix_forge.led_matrix.helpers.device import DEVICES
125
- from pathlib import Path
126
-
127
- # Get the first available LED matrix device
128
- device = DEVICES[0]
129
128
 
130
- # Custom sound files
131
- plugged_sound = Path("path/to/custom_plugged_sound.wav")
132
- unplugged_sound = Path("path/to/custom_unplugged_sound.wav")
133
-
134
- # Start monitoring with custom settings
135
- run_power_monitor(
136
- device,
137
- battery_check_interval=10, # Check every 10 seconds
138
- plugged_alert=plugged_sound,
139
- unplugged_alert=unplugged_sound
140
- )
129
+ ctrl = LEDMatrixController(DEVICES[0])
130
+ ctrl.scroll_text("Hello World!", loop=False)
141
131
  ```
142
132
 
143
- ### Running in a Thread
133
+ ### Progress Bars
144
134
 
145
- To run the monitor in a background thread:
135
+ ```python
136
+ import time
137
+ from is_matrix_forge.progress import tqdm
138
+
139
+ for _ in tqdm(range(100)):
140
+ time.sleep(0.05)
141
+ ```
142
+
143
+ ### Battery Monitor Example
146
144
 
147
145
  ```python
148
- from is_matrix_forge.monitor import run_power_monitor_threaded
146
+ from is_matrix_forge.monitor import run_power_monitor
149
147
  from is_matrix_forge.led_matrix.helpers.device import DEVICES
150
148
 
151
- # Get the first available LED matrix device
152
149
  device = DEVICES[0]
153
-
154
- # Start monitoring in a background thread
155
- monitor = run_power_monitor_threaded(device)
156
- # ``monitor`` is a :class:`threading.Thread` instance
150
+ run_power_monitor(device)
157
151
  ```
158
152
 
159
153
  ## Troubleshooting
@@ -185,8 +179,10 @@ monitor = run_power_monitor_threaded(device)
185
179
 
186
180
  ## Contributing
187
181
 
188
- Contributions to the LED Matrix Battery Monitor are welcome! Please feel free to submit a Pull Request.
182
+ Contributions are welcome! If you have ideas or improvements for Matrix Forge,
183
+ feel free to open an issue or submit a pull request.
189
184
 
190
185
  ## License
191
186
 
192
187
  This project is licensed under the MIT License - see the LICENSE.md file for details.
188
+
@@ -2,20 +2,26 @@
2
2
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/IS-Matrix-Forge)
3
3
 
4
4
 
5
- # LED Matrix Battery Monitor
5
+ # IS Matrix Forge
6
6
 
7
- A Python application that displays your computer's battery status on an LED matrix display. The application monitors battery level and power state, providing visual feedback on an LED matrix and audio notifications when power is plugged or unplugged.
7
+ **IS Matrix Forge** is a Python framework for creating applications that drive
8
+ 9×34 LED matrix displays. It provides high level helpers for talking to the
9
+ hardware, tools for building animations, and utilities such as progress bars and
10
+ a battery monitor.
8
11
 
9
- ## Project Description and Purpose
12
+ ## Project Overview
10
13
 
11
- The LED Matrix Battery Monitor is designed to provide a visual representation of your computer's battery status on an external LED matrix display. It serves as a convenient way to monitor battery levels without having to check your computer's status bar, especially useful for setups where the status bar might not be visible or when you want a more noticeable indicator.
14
+ Matrix Forge grew out of the LED Matrix Battery Monitor project. The goal is to
15
+ make it easy to create rich LED matrix experiences from Python. In addition to
16
+ monitoring the battery, you can design custom frames, display scrolling text,
17
+ run animations, and integrate the LED matrix with your own applications.
12
18
 
13
- Key features:
14
- - Real-time battery level display on an LED matrix
15
- - Visual animations when power is plugged in
16
- - Audio notifications when power state changes (plugged/unplugged)
17
- - Configurable checking intervals
18
- - Support for multiple LED matrices
19
+ Highlighted features include:
20
+ - Device discovery and control via `pyserial`
21
+ - Drawing grids and patterns with the `Grid` class
22
+ - Built-in and custom animations
23
+ - Progress bars that render on the matrix
24
+ - A battery monitor example using these building blocks
19
25
 
20
26
  ## Hardware Requirements
21
27
 
@@ -47,8 +53,8 @@ This project requires Python 3.12 or newer and the following dependencies:
47
53
 
48
54
  1. Clone the repository:
49
55
  ```
50
- git clone https://github.com/Inspyre-Softworks/led-matrix-battery.git
51
- cd led-matrix-battery
56
+ git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
57
+ cd IS-Matrix-Forge
52
58
  ```
53
59
 
54
60
  2. Install dependencies using Poetry:
@@ -65,8 +71,8 @@ This project requires Python 3.12 or newer and the following dependencies:
65
71
 
66
72
  1. Clone the repository:
67
73
  ```
68
- git clone https://github.com/Inspyre-Softworks/led-matrix-battery.git
69
- cd led-matrix-battery
74
+ git clone https://github.com/Inspyre-Softworks/IS-Matrix-Forge.git
75
+ cd IS-Matrix-Forge
70
76
  ```
71
77
 
72
78
  2. Install the package:
@@ -76,60 +82,43 @@ This project requires Python 3.12 or newer and the following dependencies:
76
82
 
77
83
  ## Usage Examples
78
84
 
79
- ### Basic Usage
80
-
81
- To start monitoring your battery with default settings:
85
+ ### Identify Connected Devices
82
86
 
83
87
  ```python
84
- from is_matrix_forge.monitor import run_power_monitor
85
88
  from is_matrix_forge.led_matrix.helpers.device import DEVICES
86
89
 
87
- # Get the first available LED matrix device
88
- device = DEVICES[0]
89
-
90
- # Start monitoring with default settings
91
- run_power_monitor(device)
90
+ for dev in DEVICES:
91
+ print(dev)
92
92
  ```
93
93
 
94
- ### Custom Configuration
95
-
96
- To customize the monitoring behavior:
94
+ ### Display Text on the Matrix
97
95
 
98
96
  ```python
99
- from is_matrix_forge.monitor import run_power_monitor
97
+ from is_matrix_forge.led_matrix.controller.controller import LEDMatrixController
100
98
  from is_matrix_forge.led_matrix.helpers.device import DEVICES
101
- from pathlib import Path
102
-
103
- # Get the first available LED matrix device
104
- device = DEVICES[0]
105
99
 
106
- # Custom sound files
107
- plugged_sound = Path("path/to/custom_plugged_sound.wav")
108
- unplugged_sound = Path("path/to/custom_unplugged_sound.wav")
109
-
110
- # Start monitoring with custom settings
111
- run_power_monitor(
112
- device,
113
- battery_check_interval=10, # Check every 10 seconds
114
- plugged_alert=plugged_sound,
115
- unplugged_alert=unplugged_sound
116
- )
100
+ ctrl = LEDMatrixController(DEVICES[0])
101
+ ctrl.scroll_text("Hello World!", loop=False)
117
102
  ```
118
103
 
119
- ### Running in a Thread
104
+ ### Progress Bars
105
+
106
+ ```python
107
+ import time
108
+ from is_matrix_forge.progress import tqdm
109
+
110
+ for _ in tqdm(range(100)):
111
+ time.sleep(0.05)
112
+ ```
120
113
 
121
- To run the monitor in a background thread:
114
+ ### Battery Monitor Example
122
115
 
123
116
  ```python
124
- from is_matrix_forge.monitor import run_power_monitor_threaded
117
+ from is_matrix_forge.monitor import run_power_monitor
125
118
  from is_matrix_forge.led_matrix.helpers.device import DEVICES
126
119
 
127
- # Get the first available LED matrix device
128
120
  device = DEVICES[0]
129
-
130
- # Start monitoring in a background thread
131
- monitor = run_power_monitor_threaded(device)
132
- # ``monitor`` is a :class:`threading.Thread` instance
121
+ run_power_monitor(device)
133
122
  ```
134
123
 
135
124
  ## Troubleshooting
@@ -161,8 +150,9 @@ monitor = run_power_monitor_threaded(device)
161
150
 
162
151
  ## Contributing
163
152
 
164
- Contributions to the LED Matrix Battery Monitor are welcome! Please feel free to submit a Pull Request.
153
+ Contributions are welcome! If you have ideas or improvements for Matrix Forge,
154
+ feel free to open an issue or submit a pull request.
165
155
 
166
156
  ## License
167
157
 
168
- This project is licensed under the MIT License - see the LICENSE.md file for details.
158
+ This project is licensed under the MIT License - see the LICENSE.md file for details.
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
3
3
  Date: 2025-04-15 09:15:25
4
4
  LastEditors: Taylor B. tayjaybabee@gmail.com
5
5
  LastEditTime: 2025-04-15 09:24:40
6
- FilePath: is_matrix_forge/__init__.py
6
+ FilePath: is_matrix_forge/grid.py
7
7
  Description: 这是默认设置,可以在设置》工具》File Description中进行配置
8
8
  """
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
3
3
  Date: 2025-04-15 09:15:37
4
4
  LastEditors: Taylor B. tayjaybabee@gmail.com
5
5
  LastEditTime: 2025-04-15 09:24:40
6
- FilePath: is_matrix_forge/assets/__init__.py
6
+ FilePath: is_matrix_forge/assets/grid.py
7
7
  Description: 这是默认设置,可以在设置》工具》File Description中进行配置
8
8
  """
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
3
3
  Date: 2025-04-30 16:01:10
4
4
  LastEditors: Taylor B. tayjaybabee@gmail.com
5
5
  LastEditTime: 2025-04-30 16:01:49
6
- FilePath: is_matrix_forge/designer_gui/__init__.py
6
+ FilePath: is_matrix_forge/designer_gui/grid.py
7
7
  Description: 这是默认设置,可以在设置》工具》File Description中进行配置
8
8
  """
@@ -4,12 +4,15 @@ import PySimpleGUI as sg
4
4
  import copy
5
5
  import os
6
6
 
7
- from ...led_matrix.helpers.device import DEVICES
7
+ from is_matrix_forge.led_matrix.helpers.device import DEVICES
8
8
  from is_matrix_forge.led_matrix.display.animations.frame.base import Frame
9
9
  from is_matrix_forge.led_matrix.display.grid.helpers import is_valid_grid
10
10
  from is_matrix_forge.led_matrix.display.animations.frame.helpers import is_valid_frames
11
- from .layout import PixelGridLayout
12
- from is_matrix_forge.led_matrix import render_matrix
11
+ from is_matrix_forge.designer_gui.main_window.layout import PixelGridLayout
12
+ from is_matrix_forge.led_matrix.display.helpers import render_matrix
13
+
14
+
15
+ sg.theme('DarkTeal2')
13
16
 
14
17
 
15
18
  def _normalize(key: Any) -> str:
@@ -139,6 +142,7 @@ class PixelGrid:
139
142
  def _toggle_pixel(self, key: Tuple[int, int]) -> None:
140
143
  col, row = key
141
144
  new = 1 - self.grid[col][row]
145
+ print(f'Pixel {col},{row} toggled from {self.grid[col][row]} to {new}')
142
146
  self.grid = [[new if (c==col and r==row) else self.grid[c][r]
143
147
  for r in range(self.height)]
144
148
  for c in range(self.width)]
@@ -250,3 +254,7 @@ class PixelGrid:
250
254
 
251
255
  def _validate(self, grid: Any) -> bool:
252
256
  return is_valid_grid(grid, self.width, self.height)
257
+
258
+
259
+ if __name__ == '__main__':
260
+ PixelGrid().run()
@@ -1,5 +1,6 @@
1
1
  import PySimpleGUI as sg
2
2
  from typing import List, Tuple, Any
3
+ from is_matrix_forge.designer_gui.main_window.layout.button_grid.column import build_grid_frame
3
4
 
4
5
 
5
6
  class PixelGridLayout:
@@ -93,12 +94,7 @@ class PixelGridLayout:
93
94
  self.__button_list = value
94
95
 
95
96
  def build(self) -> List[List[Any]]:
96
- grid = [
97
- [sg.Button(' ', size=self.button_size, key=(col, row), pad=self.pad)
98
- for col in range(self.width)]
99
- for row in range(self.height)
100
- ]
101
- grid_column = sg.Column(grid)
97
+ grid_column = build_grid_frame(self.width, self.height, button_size=self.button_size, pad=self.pad)
102
98
 
103
99
  controls = [[sg.Button(btn)] for btn in self.button_list]
104
100
  control_column = sg.Column(controls, vertical_alignment='top')
@@ -0,0 +1,17 @@
1
+ import PySimpleGUI as sg
2
+
3
+
4
+ def build_grid_frame(num_cols=9, num_rows=34, button_size=(2,1), pad=(1,1)):
5
+ """Return a layout of 9 vertical columns (of 34 buttons each), side by side."""
6
+ return [
7
+ [
8
+ sg.Column(
9
+ [
10
+ [sg.Button(' ', key=(col, row), size=button_size, pad=pad)]
11
+ for row in range(num_rows)
12
+ ],
13
+ pad=(0,0)
14
+ )
15
+ for col in range(num_cols)
16
+ ]
17
+ ]
@@ -0,0 +1,15 @@
1
+ import PySimpleGUI as sg
2
+
3
+
4
+ def build_button_grid(num_cols, num_rows, button_size=(1, 1), pad=(1, 1)):
5
+ """
6
+ Returns a list of `num_cols` lists, each containing `num_rows` buttons.
7
+ So: 9 columns of 34 rows each.
8
+ """
9
+ return [
10
+ [sg.Button(' ', key=(col, row), size=button_size, pad=pad)]
11
+ for row in range(num_rows)
12
+ ],
13
+ for col in range(num_cols)
14
+ ]
15
+
@@ -0,0 +1,93 @@
1
+ import streamlit as st
2
+ import json
3
+ import copy
4
+
5
+ class Frame:
6
+ def __init__(self, grid, duration=1.0):
7
+ self.grid = grid
8
+ self.duration = duration
9
+
10
+ class PixelGridWeb:
11
+ def __init__(self, width=9, height=34):
12
+ self.width = width
13
+ self.height = height
14
+ if "frames" not in st.session_state:
15
+ st.session_state.frames = [Frame(self._new_grid())]
16
+ if "current_frame" not in st.session_state:
17
+ st.session_state.current_frame = 0
18
+
19
+ def _new_grid(self):
20
+ return [[0 for _ in range(self.height)] for _ in range(self.width)]
21
+
22
+ @property
23
+ def frames(self):
24
+ return st.session_state.frames
25
+
26
+ @frames.setter
27
+ def frames(self, value):
28
+ st.session_state.frames = value
29
+
30
+ @property
31
+ def current_frame(self):
32
+ return st.session_state.current_frame
33
+
34
+ @current_frame.setter
35
+ def current_frame(self, value):
36
+ st.session_state.current_frame = value
37
+
38
+ @property
39
+ def grid(self):
40
+ return self.frames[self.current_frame].grid
41
+
42
+ def draw(self):
43
+ st.title("PixelGrid Animator")
44
+ st.write(f"Frame {self.current_frame+1}/{len(self.frames)}")
45
+ # Render grid
46
+ grid = self.grid
47
+ for row in range(self.height):
48
+ cols = st.columns(self.width)
49
+ for col in range(self.width):
50
+ key = f"pix_{col}_{row}_{self.current_frame}"
51
+ is_on = grid[col][row]
52
+ label = "🟩" if is_on else "⬛"
53
+ if cols[col].button(label, key=key, use_container_width=True):
54
+ grid[col][row] ^= 1 # Toggle
55
+
56
+ # Frame controls
57
+ c1, c2, c3, c4 = st.columns(4)
58
+ if c1.button("Prev", disabled=self.current_frame == 0):
59
+ self.current_frame -= 1
60
+ if c2.button("Next", disabled=self.current_frame == len(self.frames)-1):
61
+ self.current_frame += 1
62
+ if c3.button("Add Frame"):
63
+ self.frames.append(Frame(copy.deepcopy(self.grid)))
64
+ self.current_frame = len(self.frames) - 1
65
+ if c4.button("Delete Frame", disabled=len(self.frames) == 1):
66
+ self.frames.pop(self.current_frame)
67
+ self.current_frame = max(0, self.current_frame-1)
68
+ # Export/import
69
+ st.markdown("---")
70
+ exp1, exp2, exp3 = st.columns(3)
71
+ if exp1.button("Export JSON"):
72
+ st.download_button(
73
+ "Download JSON",
74
+ data=json.dumps([f.grid for f in self.frames]),
75
+ file_name="frames.json",
76
+ mime="application/json"
77
+ )
78
+ uploaded = exp2.file_uploader("Load JSON", type="json")
79
+ if uploaded:
80
+ data = json.load(uploaded)
81
+ if isinstance(data, list) and all(isinstance(frame, list) for frame in data):
82
+ self.frames = [Frame(copy.deepcopy(g)) for g in data]
83
+ self.current_frame = 0
84
+ # Placeholder for "Send to Matrix"
85
+ if exp3.button("Send to Matrix"):
86
+ st.info("This would send to your matrix (not implemented here)!")
87
+
88
+ def main():
89
+ pg = PixelGridWeb()
90
+ pg.draw()
91
+
92
+ if __name__ == "__main__":
93
+ main()
@@ -3,6 +3,6 @@ Author: Taylor B. tayjaybabee@gmail.com
3
3
  Date: 2025-05-05 15:02:58
4
4
  LastEditors: Taylor B. tayjaybabee@gmail.com
5
5
  LastEditTime: 2025-05-05 15:24:08
6
- FilePath: is_matrix_forge/dev_tools/__init__.py
6
+ FilePath: is_matrix_forge/dev_tools/grid.py
7
7
  Description: 这是默认设置,可以在设置》工具》File Description中进行配置
8
8
  """
@@ -40,22 +40,6 @@ PWM_FREQUENCIES = [
40
40
  ]
41
41
 
42
42
 
43
- def get_pwm_freq(dev):
44
- """Adjust the brightness scaling of the entire screen."""
45
- res = send_command(dev, CommandVals.PwmFreq, with_response=True)
46
- freq = int(res[0])
47
- if freq == 0:
48
- return 29000
49
- elif freq == 1:
50
- return 3600
51
- elif freq == 2:
52
- return 1800
53
- elif freq == 3:
54
- return 900
55
- else:
56
- return None
57
-
58
-
59
43
  def percentage(dev, p):
60
44
  """Fill a percentage of the screen. Bottom to top"""
61
45
  send_command(dev, CommandVals.Pattern, [PatternVals.Percentage, p])
@@ -0,0 +1,4 @@
1
+ """
2
+ Fake `grid.py` to make the Scripts directory a sub-package.
3
+ """
4
+