summaryrefslogtreecommitdiff
path: root/src/esp32p4.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/esp32p4.zig')
-rw-r--r--src/esp32p4.zig15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/esp32p4.zig b/src/esp32p4.zig
index 0d532e1e..c583de54 100644
--- a/src/esp32p4.zig
+++ b/src/esp32p4.zig
@@ -572,10 +572,9 @@ export fn pardes_esp32p4_tick(now_ms: u64) callconv(.c) void {
dirty = true;
}
}
- if (c.animationActive()) {
- c.update(.tick);
- dirty = true;
- }
+ // The core steps its own animations by this clock (`Host.now`).
+ c.advance(now_ms * std.time.ns_per_ms);
+ if (c.needs_frame) dirty = true;
}
/// How long a lone ESC waits for a second byte before it counts as the Escape key.
@@ -590,7 +589,7 @@ var esc_held_at: ?u64 = null;
export fn pardes_esp32p4_wants_frame() callconv(.c) bool {
const c = core orelse return false;
- return dirty or c.animationActive();
+ return dirty or c.needs_frame;
}
export fn pardes_esp32p4_render() callconv(.c) u32 {
@@ -607,7 +606,11 @@ export fn pardes_esp32p4_quit() callconv(.c) bool {
// ------------------------------------------------------------------------------------ the host
-const pardes_host: pardes.Host.VTable = .{ .present = present, .gpio_toggle = gpioToggle };
+const pardes_host: pardes.Host.VTable = .{ .now = boardNow, .present = present, .gpio_toggle = gpioToggle };
+
+fn boardNow(_: ?*anyopaque) u64 {
+ return last_now_ms * std.time.ns_per_ms;
+}
/// The `Gpio` word's one seam to the board. Nothing here knows what a pad is; it forwards, and
/// answers false when the firmware brought none, which is what puts "gpio: NoPads" on the message