From c6467bf0877476a6025d2519009d95143b0b0c27 Mon Sep 17 00:00:00 2001 From: iggy <iggy@muc.ccc.de> Date: Thu, 8 Jun 2023 12:30:43 +0200 Subject: [PATCH] py: major code restructre, now we have 'st3m/' (think lib) and 'apps/' (also some mock imports for the sim) --- python_payload/apps/__init__.py | 0 python_payload/{ => apps}/cap_touch_demo.py | 7 +++-- python_payload/apps/demo_mandelbrot.py | 31 +++++++++++++++++++ python_payload/{ => apps}/demo_sparabo.py | 8 ++--- python_payload/{ => apps}/demo_worms.py | 5 +-- python_payload/apps/flow3r/__init__.py | 0 .../{ => apps/flow3r}/menu_settings.py | 8 ++--- .../{ => apps/flow3r}/menu_tinysynth.py | 8 ++--- python_payload/apps/flow3roids.py | 22 +++++++++++++ python_payload/{ => apps}/harmonic_demo.py | 2 +- python_payload/{ => apps}/melodic_demo.py | 2 +- python_payload/demo_menu.py | 15 +++------ python_payload/main.py | 5 +++ python_payload/st3m/__init__.py | 0 python_payload/{ => st3m}/application.py | 4 +-- python_payload/{ => st3m}/control.py | 10 ++++-- python_payload/{ => st3m}/event.py | 0 python_payload/{ => st3m}/menu.py | 7 +++-- python_payload/st3m/system/__init__.py | 30 ++++++++++++++++++ python_payload/{ => st3m}/ui.py | 0 python_payload/{ => st3m}/utils.py | 2 +- 21 files changed, 119 insertions(+), 47 deletions(-) create mode 100644 python_payload/apps/__init__.py rename python_payload/{ => apps}/cap_touch_demo.py (92%) create mode 100644 python_payload/apps/demo_mandelbrot.py rename python_payload/{ => apps}/demo_sparabo.py (94%) rename python_payload/{ => apps}/demo_worms.py (98%) create mode 100644 python_payload/apps/flow3r/__init__.py rename python_payload/{ => apps/flow3r}/menu_settings.py (97%) rename python_payload/{ => apps/flow3r}/menu_tinysynth.py (94%) create mode 100644 python_payload/apps/flow3roids.py rename python_payload/{ => apps}/harmonic_demo.py (97%) rename python_payload/{ => apps}/melodic_demo.py (97%) create mode 100644 python_payload/st3m/__init__.py rename python_payload/{ => st3m}/application.py (99%) rename python_payload/{ => st3m}/control.py (96%) rename python_payload/{ => st3m}/event.py (100%) rename python_payload/{ => st3m}/menu.py (99%) create mode 100644 python_payload/st3m/system/__init__.py rename python_payload/{ => st3m}/ui.py (100%) rename python_payload/{ => st3m}/utils.py (96%) diff --git a/python_payload/apps/__init__.py b/python_payload/apps/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python_payload/cap_touch_demo.py b/python_payload/apps/cap_touch_demo.py similarity index 92% rename from python_payload/cap_touch_demo.py rename to python_payload/apps/cap_touch_demo.py index 3bbac30b5e..85fb4bfd2c 100644 --- a/python_payload/cap_touch_demo.py +++ b/python_payload/apps/cap_touch_demo.py @@ -1,9 +1,10 @@ -import hardware -import utils import cmath import math import time +import hardware +from st3m import utils + ctx = hardware.get_ctx() def init(): @@ -29,7 +30,7 @@ def foreground(): pass -from application import Application +from st3m.application import Application app = Application("cap touch") app.main_foreground = run diff --git a/python_payload/apps/demo_mandelbrot.py b/python_payload/apps/demo_mandelbrot.py new file mode 100644 index 0000000000..1528d7aab3 --- /dev/null +++ b/python_payload/apps/demo_mandelbrot.py @@ -0,0 +1,31 @@ +from application import Application +import ui + +class MandelbrotApp(Application): + def on_init(self): + pass + + def on_foreground(self): + print("on foreground") + ctx = self.ui.ctx + + #center the text horizontally and vertically + ctx.text_align = ctx.CENTER + ctx.text_baseline = ctx.MIDDLE + + #ctx.rgb() expects individual values for the channels, so unpack a list/tuple with * + #operations on ctx can be chained + #create a blue background + ctx.rgb(*ui.RED).rectangle(-ui.WIDTH/2,-ui.HEIGHT/2,ui.WIDTH,ui.HEIGHT).fill() + + #Write some text + ctx.move_to(0,0).rgb(*ui.WHITE).text("Mandelbrot") + + def main_forground(): + + for x in range(-240,240): + for y in range(-240,240): + + +app=MandelbrotApp("Mandelbrot") +app.run() \ No newline at end of file diff --git a/python_payload/demo_sparabo.py b/python_payload/apps/demo_sparabo.py similarity index 94% rename from python_payload/demo_sparabo.py rename to python_payload/apps/demo_sparabo.py index f22a12a6aa..e4cf06b0a9 100644 --- a/python_payload/demo_sparabo.py +++ b/python_payload/apps/demo_sparabo.py @@ -2,13 +2,9 @@ import math #badge23 -import event -import hardware +from st3m import event,application,ui +from st3m.system import hardware,audio from synth import tinysynth -import application -import ui - -import audio popcorn = [9,7,9,5,0,5,-3,999] diff --git a/python_payload/demo_worms.py b/python_payload/apps/demo_worms.py similarity index 98% rename from python_payload/demo_worms.py rename to python_payload/apps/demo_worms.py index b1a2c4cf25..d45ed1d552 100644 --- a/python_payload/demo_worms.py +++ b/python_payload/apps/demo_worms.py @@ -4,10 +4,7 @@ import time import math #flow3r imports -import event -import application -import ui - +from st3m import event,application,ui # Subclass Application class AppWorms(application.Application): diff --git a/python_payload/apps/flow3r/__init__.py b/python_payload/apps/flow3r/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python_payload/menu_settings.py b/python_payload/apps/flow3r/menu_settings.py similarity index 97% rename from python_payload/menu_settings.py rename to python_payload/apps/flow3r/menu_settings.py index aa74f8ddac..5436d933d5 100644 --- a/python_payload/menu_settings.py +++ b/python_payload/apps/flow3r/menu_settings.py @@ -1,9 +1,5 @@ -import menu -import event -import audio -import control -import ui -import hardware +from st3m import menu,event,control,ui +from st3m.system import audio,hardware ui_input = ui.Icon("") diff --git a/python_payload/menu_tinysynth.py b/python_payload/apps/flow3r/menu_tinysynth.py similarity index 94% rename from python_payload/menu_tinysynth.py rename to python_payload/apps/flow3r/menu_tinysynth.py index de60b01357..70c67a3a82 100644 --- a/python_payload/menu_tinysynth.py +++ b/python_payload/apps/flow3r/menu_tinysynth.py @@ -1,11 +1,7 @@ from synth import tinysynth -import menu -import event -import control -import ui -import hardware -import audio +from st3m import menu,event,control,ui +from st3m.system import hardware,audio synth = tinysynth(440,0) diff --git a/python_payload/apps/flow3roids.py b/python_payload/apps/flow3roids.py new file mode 100644 index 0000000000..2cd1398735 --- /dev/null +++ b/python_payload/apps/flow3roids.py @@ -0,0 +1,22 @@ +from application import SimpleApplication + +app = SimpleApplication("flow3rdroids") + +def on_init(): + ship_position = complex(0,0) + ship_direction = complex(0,0) + +def on_tick(): + if abs(ship_position.real)>240: ship_position.real*=-1 + if abs(ship_position.imag)>240: ship_position.imag*=-1 + + ship_position += ship_direction + +def on_draw(): + ui.Pointer(x=ship_position.imag,y=ship_position.real) + +def on_scroll_step(direction): + #TODO: ship_direction += direction * angle + +def def on_enter(): + #TODO:ship_direction += speed diff --git a/python_payload/harmonic_demo.py b/python_payload/apps/harmonic_demo.py similarity index 97% rename from python_payload/harmonic_demo.py rename to python_payload/apps/harmonic_demo.py index 372c6e5016..e211bd9265 100644 --- a/python_payload/harmonic_demo.py +++ b/python_payload/apps/harmonic_demo.py @@ -59,7 +59,7 @@ def foreground(): chord_index = -1 set_chord(tmp) -from application import Application +from st3m.application import Application class HarmonicApp(Application): def on_init(self): init() diff --git a/python_payload/melodic_demo.py b/python_payload/apps/melodic_demo.py similarity index 97% rename from python_payload/melodic_demo.py rename to python_payload/apps/melodic_demo.py index 06878ead5d..6460bb623f 100644 --- a/python_payload/melodic_demo.py +++ b/python_payload/apps/melodic_demo.py @@ -66,7 +66,7 @@ def init(): def foreground(): adjust_playing_field_to_octave() -from application import Application +from st3m.application import Application class MelodicApp(Application): def on_init(self): diff --git a/python_payload/demo_menu.py b/python_payload/demo_menu.py index d247069e40..6e92a9f126 100644 --- a/python_payload/demo_menu.py +++ b/python_payload/demo_menu.py @@ -1,19 +1,12 @@ -import menu -import event -import hardware -import control -import audio -import application +from st3m import menu,event,control,application -import demo_worms, cap_touch_demo -import demo_sparabo, melodic_demo, harmonic_demo -import menu_settings,menu_tinysynth +from apps import demo_worms, cap_touch_demo +from apps import demo_sparabo, melodic_demo, harmonic_demo +from apps.flow3r import menu_settings,menu_tinysynth import time -hardware.captouch_autocalib() -audio.set_volume_dB(0) menu_main = menu.Menu("flow3r",has_back=False) menu_badge = menu.Menu("badge") diff --git a/python_payload/main.py b/python_payload/main.py index 4371fafc77..a89d95269a 100644 --- a/python_payload/main.py +++ b/python_payload/main.py @@ -1 +1,6 @@ +from st3m.system import hardware,audio + import demo_menu + +hardware.captouch_autocalib() +audio.set_volume_dB(0) \ No newline at end of file diff --git a/python_payload/st3m/__init__.py b/python_payload/st3m/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/python_payload/application.py b/python_payload/st3m/application.py similarity index 99% rename from python_payload/application.py rename to python_payload/st3m/application.py index 9751a9a7f3..23fe9f9a41 100644 --- a/python_payload/application.py +++ b/python_payload/st3m/application.py @@ -1,6 +1,4 @@ -import ui -import event -import menu +from . import ui,event,menu STATE_OFF = 0 STATE_INIT = 10 diff --git a/python_payload/control.py b/python_payload/st3m/control.py similarity index 96% rename from python_payload/control.py rename to python_payload/st3m/control.py index c1fabf6be6..fe3febc9a6 100644 --- a/python_payload/control.py +++ b/python_payload/st3m/control.py @@ -1,4 +1,4 @@ -import ui +from . import ui class Control(): def __init__(self,name, default=0, on_set=None, on_get=None, on_mod=None): @@ -119,4 +119,10 @@ class ControlSlide(ControlFloat): if z<0: #Release if self.do_reset: self.set_value(self._saved_value) - self.draw() \ No newline at end of file + self.draw() + +class ControlString(Control): + pass + +class ControlTextField(): + pass \ No newline at end of file diff --git a/python_payload/event.py b/python_payload/st3m/event.py similarity index 100% rename from python_payload/event.py rename to python_payload/st3m/event.py diff --git a/python_payload/menu.py b/python_payload/st3m/menu.py similarity index 99% rename from python_payload/menu.py rename to python_payload/st3m/menu.py index 27319bea5e..31d7f762ae 100644 --- a/python_payload/menu.py +++ b/python_payload/st3m/menu.py @@ -1,8 +1,9 @@ -import ui -import time +from . import ui,event import hardware + + +import time import math -import event menu_stack = [] active_menu = None diff --git a/python_payload/st3m/system/__init__.py b/python_payload/st3m/system/__init__.py new file mode 100644 index 0000000000..93c01cec08 --- /dev/null +++ b/python_payload/st3m/system/__init__.py @@ -0,0 +1,30 @@ +import hardware as _hardware + +class NamedObject(): + def __init__(self,name="foo"): + self.__name = name + + def __repr__(self): + return self.__name + +class MockObject(NamedObject): + + def __getattr__(self,attr): + attr_name = "{}.{}".format(str(self),attr) + print ("mock attr", attr_name) + return MockObject(attr_name) + + def __call__(self,*args,**kwargs): + call_name = "{}({}{})".format(str(self),args,kwargs) + print ("mock call",call_name) + return MockObject(call_name) + + +try: + import audio as _audio +except ModuleNotFoundError: + print("no real audio, using mock module") + _audio = MockObject("audio") + +hardware = _hardware +audio = _audio \ No newline at end of file diff --git a/python_payload/ui.py b/python_payload/st3m/ui.py similarity index 100% rename from python_payload/ui.py rename to python_payload/st3m/ui.py diff --git a/python_payload/utils.py b/python_payload/st3m/utils.py similarity index 96% rename from python_payload/utils.py rename to python_payload/st3m/utils.py index 060d754b65..0be418b9e6 100644 --- a/python_payload/utils.py +++ b/python_payload/st3m/utils.py @@ -1,6 +1,6 @@ import time from hardware import * -import audio +from st3m.system import audio RED = 0b1111100000000000 GREEN = 0b0000011111100000 -- GitLab