Skip to content

Commit fc7fbb6

Browse files
committed
Sync hero apps/chrome from dotgithub; rebuild WASM interpreter
Deployed copy of the 16 hero canvas apps and hero-runtime.js, now using board_config/appdev (or display_driver/lvgl) like every other PyDevices example instead of manually wiring WasmDisplay + appdev.App. Removed the generator's "Browser architecture" section; the hand-authored "Architecture & Layers" Mermaid diagram on this page moves outside the PYDEVICES-ARCHITECTURE marker pair so future regenerations can't clobber it. vendor/micropython/{mjs,wasm}: rebuilt via cmods/build_interpreters.sh -- the deployed .wasm was frozen with a stale WasmDisplay.__init__ that only accepted self, so every hero app and gallery demo would have hit a TypeError constructing its display in production. Generated by dotgithub/scripts/generate_sites.py from the fixed source; see PyDevices/.github@8d8463c for the underlying app/generator changes.
1 parent 8b96b11 commit fc7fbb6

20 files changed

Lines changed: 141 additions & 418 deletions

assets/apps/ast_parser.py

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
"""
99

1010
import math
11-
import sys
12-
import time
1311
from random import random, choice
1412

13+
from board_config import display_drv
1514
import board_config
1615
import appdev
17-
import board_config
1816
import events
1917
import pygraphics
2018

19+
app = appdev.App(board_config)
20+
2121

2222
def _color(value):
2323
value = value.lstrip("#")
@@ -51,17 +51,11 @@ def _text(display, value, x, y, color, align="left"):
5151

5252

5353
class AstParserHero:
54-
def __init__(self, canvas_id="hero_canvas", size=240):
55-
self.canvas_id = canvas_id
54+
def __init__(self, size=240):
5655
self.size = size
5756
self.w = size
5857
self.h = size
59-
60-
import os
61-
os.environ.setdefault('PYDEVICES_WIDTH', str(size))
62-
os.environ.setdefault('PYDEVICES_HEIGHT', str(size))
63-
self.drv = board_config.display_drv
64-
self.app = appdev.App(board_config)
58+
self.drv = display_drv
6559

6660
self.tokens_parsed = 4820
6761
self.schemas_gen = 142
@@ -76,7 +70,7 @@ def __init__(self, canvas_id="hero_canvas", size=240):
7670
self.draw()
7771
self._bind_events()
7872

79-
self._tick_subscription = self.app.every(33, self._timer_tick)
73+
self._tick_subscription = app.every(33, self._timer_tick)
8074

8175
def _timer_tick(self, _timer):
8276
self.tick()
@@ -90,7 +84,7 @@ def on_pointer_down(_event):
9084
self.log_lines.append((f"EMIT {tok}", col))
9185
self.draw()
9286

93-
self.app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
87+
app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
9488

9589
def tick(self):
9690
self.scan_line_y += 1.8
@@ -157,16 +151,4 @@ def draw(self):
157151
self.drv.show()
158152

159153

160-
_ast_app = None
161-
162-
163-
def main(canvas_id="hero_canvas"):
164-
global _ast_app
165-
print(f"Initializing PyDevices AST Parser on canvas '{canvas_id}'...")
166-
_ast_app = AstParserHero(canvas_id, size=240)
167-
print("PyDevices AST Parser running successfully!")
168-
169-
170-
if __name__ == "__main__":
171-
cid = sys.argv[1] if len(sys.argv) > 1 else "hero_canvas"
172-
main(cid)
154+
_ast_app = AstParserHero(size=min(display_drv.width, display_drv.height))

assets/apps/benchmark_deck.py

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,17 @@
88
"""
99

1010
import math
11-
import sys
1211
import time
1312
from random import random
1413

14+
from board_config import display_drv
1515
import board_config
1616
import appdev
17-
import board_config
1817
import events
1918
import pygraphics
2019

20+
app = appdev.App(board_config)
21+
2122

2223
def _color(value):
2324
value = value.lstrip("#")
@@ -44,17 +45,12 @@ def _text(display, value, x, y, color, align="left"):
4445

4546

4647
class BenchmarkDeckHero:
47-
def __init__(self, canvas_id="hero_canvas", size=240):
48-
self.canvas_id = canvas_id
48+
def __init__(self, size=240):
4949
self.size = size
5050
self.w = size
5151
self.h = size
5252

53-
import os
54-
os.environ.setdefault('PYDEVICES_WIDTH', str(size))
55-
os.environ.setdefault('PYDEVICES_HEIGHT', str(size))
56-
self.drv = board_config.display_drv
57-
self.app = appdev.App(board_config)
53+
self.drv = display_drv
5854

5955
self.mode_idx = 0
6056
self.frame_cnt = 0
@@ -63,7 +59,7 @@ def __init__(self, canvas_id="hero_canvas", size=240):
6359
self.draw()
6460
self._bind_events()
6561

66-
self._tick_subscription = self.app.every(33, self._timer_tick)
62+
self._tick_subscription = app.every(33, self._timer_tick)
6763

6864
def _timer_tick(self, _timer):
6965
self.tick()
@@ -74,7 +70,7 @@ def on_pointer_down(_event):
7470
self.burst = 1.0
7571
self.draw()
7672

77-
self.app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
73+
app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
7874

7975
def tick(self):
8076
self.frame_cnt += 1
@@ -136,16 +132,4 @@ def draw(self):
136132
self.drv.show()
137133

138134

139-
_bench_app = None
140-
141-
142-
def main(canvas_id="hero_canvas"):
143-
global _bench_app
144-
print(f"Initializing PyDevices Benchmark Deck on canvas '{canvas_id}'...")
145-
_bench_app = BenchmarkDeckHero(canvas_id, size=240)
146-
print("PyDevices Benchmark Deck running successfully!")
147-
148-
149-
if __name__ == "__main__":
150-
cid = sys.argv[1] if len(sys.argv) > 1 else "hero_canvas"
151-
main(cid)
135+
_bench_app = BenchmarkDeckHero(size=min(display_drv.width, display_drv.height))

assets/apps/bus_scope.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55
hardware bus signals, clock pulses, frame throughput, and TE sync.
66
"""
77

8-
import sys
98
import time
109
import math
1110
from random import random
1211

12+
from board_config import display_drv
1313
import board_config
1414
import appdev
1515
import pygraphics
1616

17+
app = appdev.App(board_config)
18+
1719

1820
def _color(value):
1921
value = value.lstrip("#")
@@ -28,25 +30,20 @@ def _text(display, value, x, y, color, align="left"):
2830

2931

3032
class BusScopeHero:
31-
def __init__(self, canvas_id="hero_canvas", size=240):
32-
self.canvas_id = canvas_id
33+
def __init__(self, size=240):
3334
self.size = size
3435
self.w = size
3536
self.h = size
3637

37-
import os
38-
os.environ.setdefault('PYDEVICES_WIDTH', str(size))
39-
os.environ.setdefault('PYDEVICES_HEIGHT', str(size))
40-
self.drv = board_config.display_drv
41-
self.app = appdev.App(board_config)
38+
self.drv = display_drv
4239

4340
self.offset = 0.0
4441
self.fps = 60.0
4542
self.mbps = 80.0
4643
self.frame_cnt = 0
4744

4845
self.draw()
49-
self._tick_subscription = self.app.every(30, self._timer_tick)
46+
self._tick_subscription = app.every(30, self._timer_tick)
5047

5148
def _timer_tick(self, _timer):
5249
self.tick()
@@ -126,11 +123,4 @@ def draw(self):
126123
self.drv.show()
127124

128125

129-
_bus_scope_app = None
130-
131-
132-
def main(canvas_id="hero_canvas"):
133-
global _bus_scope_app
134-
print(f"Initializing PyDevices Bus Scope on canvas '{canvas_id}'...")
135-
_bus_scope_app = BusScopeHero(canvas_id, size=240)
136-
print("PyDevices Bus Scope running successfully!")
126+
_bus_scope_app = BusScopeHero(size=min(display_drv.width, display_drv.height))

assets/apps/circuit_dial.py

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@
88
"""
99

1010
import math
11-
import sys
1211
import time
1312

13+
from board_config import display_drv
1414
import board_config
1515
import appdev
16-
import board_config
1716
import events
1817
import pygraphics
1918

19+
app = appdev.App(board_config)
20+
2021

2122
def _rgb565(red, green, blue):
2223
return (int(red) & 0xF8) << 8 | (int(green) & 0xFC) << 3 | int(blue) >> 3
@@ -54,19 +55,14 @@ def hsl_to_rgb(h, s, l):
5455

5556

5657
class CircuitDialHero:
57-
def __init__(self, canvas_id="hero_canvas", size=240):
58-
self.canvas_id = canvas_id
58+
def __init__(self, size=240):
5959
self.size = size
6060
self.w = size
6161
self.h = size
6262
self.cx = size // 2
6363
self.cy = size // 2
6464

65-
import os
66-
os.environ.setdefault('PYDEVICES_WIDTH', str(size))
67-
os.environ.setdefault('PYDEVICES_HEIGHT', str(size))
68-
self.drv = board_config.display_drv
69-
self.app = appdev.App(board_config)
65+
self.drv = display_drv
7066

7167
self.num_leds = 16
7268
self.base_hue = 0.0
@@ -78,7 +74,7 @@ def __init__(self, canvas_id="hero_canvas", size=240):
7874
self.draw()
7975
self._bind_events()
8076

81-
self._tick_subscription = self.app.every(33, self._timer_tick)
77+
self._tick_subscription = app.every(33, self._timer_tick)
8278

8379
def _timer_tick(self, _timer):
8480
self.tick()
@@ -107,9 +103,9 @@ def on_pointer_move(event):
107103
def on_pointer_up(event):
108104
self.is_dragging = False
109105

110-
self.app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
111-
self.app.on(events.MOUSEMOTION, on_pointer_move)
112-
self.app.on(events.MOUSEBUTTONUP, on_pointer_up)
106+
app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
107+
app.on(events.MOUSEMOTION, on_pointer_move)
108+
app.on(events.MOUSEBUTTONUP, on_pointer_up)
113109

114110
def tick(self):
115111
now = time.time()
@@ -170,16 +166,4 @@ def draw(self):
170166
self.drv.show()
171167

172168

173-
_circuit_app = None
174-
175-
176-
def main(canvas_id="hero_canvas"):
177-
global _circuit_app
178-
print(f"Initializing PyDevices CircuitPython Dial on canvas '{canvas_id}'...")
179-
_circuit_app = CircuitDialHero(canvas_id, size=240)
180-
print("PyDevices CircuitPython Dial running successfully!")
181-
182-
183-
if __name__ == "__main__":
184-
cid = sys.argv[1] if len(sys.argv) > 1 else "hero_canvas"
185-
main(cid)
169+
_circuit_app = CircuitDialHero(size=min(display_drv.width, display_drv.height))

assets/apps/encoder.py

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@
55
rotational drag physics, tactile momentary push-button switch, and live telemetry.
66
"""
77

8-
import sys
98
import time
109
import math
1110

11+
from board_config import display_drv
1212
import board_config
1313
import appdev
14-
import board_config
1514
import events
1615
import pygraphics
1716

17+
app = appdev.App(board_config)
18+
1819

1920
def _color(value):
2021
value = value.lstrip("#")
@@ -28,20 +29,15 @@ def _text(display, value, x, y, color):
2829

2930

3031
class EncoderHero:
31-
def __init__(self, canvas_id="hero_canvas", size=240):
32-
self.canvas_id = canvas_id
32+
def __init__(self, size=240):
3333
self.size = size
3434
self.w = size
3535
self.h = size
3636
self.cx = size // 2
3737
self.cy = size // 2
3838

3939
# Initialize PSDisplay
40-
import os
41-
os.environ.setdefault('PYDEVICES_WIDTH', str(size))
42-
os.environ.setdefault('PYDEVICES_HEIGHT', str(size))
43-
self.drv = board_config.display_drv
44-
self.app = appdev.App(board_config)
40+
self.drv = display_drv
4541

4642
# Encoder state
4743
self.angle_deg = 45.0
@@ -61,7 +57,7 @@ def __init__(self, canvas_id="hero_canvas", size=240):
6157
self._bind_events()
6258
self.draw()
6359

64-
self._tick_subscription = self.app.every(25, self._timer_tick)
60+
self._tick_subscription = app.every(25, self._timer_tick)
6561

6662
def _timer_tick(self, _timer):
6763
self.tick()
@@ -110,9 +106,9 @@ def on_pointer_up(event):
110106
self.step_idx = int(nearest_detent) % self.detents
111107
self.draw()
112108

113-
self.app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
114-
self.app.on(events.MOUSEMOTION, on_pointer_move)
115-
self.app.on(events.MOUSEBUTTONUP, on_pointer_up)
109+
app.on(events.MOUSEBUTTONDOWN, on_pointer_down)
110+
app.on(events.MOUSEMOTION, on_pointer_move)
111+
app.on(events.MOUSEBUTTONUP, on_pointer_up)
116112

117113
def tick(self):
118114
now = time.time()
@@ -214,11 +210,4 @@ def draw(self):
214210
self.drv.show()
215211

216212

217-
_encoder_app = None
218-
219-
220-
def main(canvas_id="hero_canvas"):
221-
global _encoder_app
222-
print(f"Initializing PyDevices 3D Rotary Encoder on canvas '{canvas_id}'...")
223-
_encoder_app = EncoderHero(canvas_id, size=240)
224-
print("PyDevices 3D Rotary Encoder running successfully!")
213+
_encoder_app = EncoderHero(size=min(display_drv.width, display_drv.height))

0 commit comments

Comments
 (0)