ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
longstrip.h
Go to the documentation of this file.
1
62
63#pragma once
64
65#ifdef __cplusplus
66extern "C" {
67#endif
68
69#include <stdint.h>
70
71#include "jof.h"
72#include "ra8_err.h"
73#include "ra8_tile_cache.h"
74
92
114typedef ra8_err_t (*longstrip_blit_fn)(void* ctx,
115 const uint8_t* pixels,
116 uint16_t src_w,
117 uint16_t src_h,
118 uint8_t bpp,
119 int32_t dst_x,
120 int32_t dst_y);
121
144
171
185typedef struct {
187 uint32_t canvas_w;
188 uint32_t canvas_h;
189 uint16_t band_h;
190 uint16_t band_count;
191 uint16_t viewport_w;
192 uint16_t viewport_h;
193 int32_t scroll_y;
194 int32_t max_scroll;
195 int32_t velocity;
197 uint32_t image_id;
199 void* blit_ctx;
201
215typedef struct {
216 uint16_t bands_drawn;
217 uint16_t skipped;
218 uint32_t covered_rows;
220
251[[nodiscard]] ra8_err_t longstrip_tile_decode(void* ctx,
252 const ra8_tile_key_t* key,
253 uint8_t* cell,
254 uint32_t cell_bytes,
255 uint16_t* out_w,
256 uint16_t* out_h);
257
288[[nodiscard]] ra8_err_t longstrip_open(longstrip_t* wt, const longstrip_cfg_t* cfg);
289
335[[nodiscard]] ra8_err_t
336longstrip_set_viewport(longstrip_t* wt, uint16_t viewport_w, uint16_t viewport_h);
337
355[[nodiscard]] int32_t longstrip_clamp_scroll(const longstrip_t* wt, int32_t y);
356
376[[nodiscard]] ra8_err_t longstrip_band_at_y(const longstrip_t* wt, uint32_t y, uint16_t* out_band);
377
402[[nodiscard]] ra8_err_t longstrip_visible_bands(const longstrip_t* wt,
403 int32_t scroll_y,
404 uint16_t* out_first,
405 uint16_t* out_last);
406
428[[nodiscard]] ra8_err_t longstrip_scroll_by(longstrip_t* wt, int32_t delta);
429
448[[nodiscard]] ra8_err_t longstrip_fling(longstrip_t* wt, int32_t v0);
449
474
503[[nodiscard]] ra8_err_t longstrip_prefetch(longstrip_t* wt, uint16_t depth);
504
537
538#ifdef __cplusplus
539}
540#endif
JOF band-tile atlas: the display-native normalized image format (#231, shared with the longstrip scro...
ra8_err_t(* jof_pread_fn)(void *ctx, uint64_t offset, uint8_t *buf, size_t len, size_t *got)
Positioned-read seam over an atlas backing store (DIP).
Definition jof.h:241
ra8_err_t longstrip_prefetch(longstrip_t *wt, uint16_t depth)
Warm the cache with bands just beyond the viewport, in scroll order.
Definition longstrip.c:430
ra8_err_t longstrip_tile_decode(void *ctx, const ra8_tile_key_t *key, uint8_t *cell, uint32_t cell_bytes, uint16_t *out_w, uint16_t *out_h)
JOF-backed ra8_tile_decode_fn: page one band in on a cache miss.
Definition longstrip.c:53
longstrip_limits_t
Fixed engine bounds (NASA P10 Rule 2: every loop provably bounded).
Definition longstrip.h:88
@ k_longstrip_max_visible_bands
Visible + render loop bound.
Definition longstrip.h:89
@ k_longstrip_max_prefetch
Max prefetch depth per call.
Definition longstrip.h:90
ra8_err_t longstrip_scroll_by(longstrip_t *wt, int32_t delta)
Scroll by a signed pixel delta (a finger drag), clamping at the ends.
Definition longstrip.c:273
ra8_err_t longstrip_visible_bands(const longstrip_t *wt, int32_t scroll_y, uint16_t *out_first, uint16_t *out_last)
Compute the inclusive visible band range for a scroll position.
Definition longstrip.c:220
int32_t longstrip_clamp_scroll(const longstrip_t *wt, int32_t y)
Clamp a candidate scroll position to the strip's legal range.
Definition longstrip.c:195
ra8_err_t longstrip_render(longstrip_t *wt, longstrip_render_stats_t *stats)
Composite every visible band at the current scroll position.
Definition longstrip.c:550
ra8_err_t longstrip_set_viewport(longstrip_t *wt, uint16_t viewport_w, uint16_t viewport_h)
Resize the viewport of an open strip and re-derive the scroll clamp.
Definition longstrip.c:180
ra8_err_t longstrip_open(longstrip_t *wt, const longstrip_cfg_t *cfg)
Open a longstrip strip over a parsed + validated JOF atlas.
Definition longstrip.c:154
ra8_err_t longstrip_fling(longstrip_t *wt, int32_t v0)
Start a momentum fling with initial velocity v0.
Definition longstrip.c:284
bool longstrip_tick(longstrip_t *wt)
Advance the fling one physics step (integer velocity + friction).
Definition longstrip.c:383
ra8_err_t longstrip_band_at_y(const longstrip_t *wt, uint32_t y, uint16_t *out_band)
Report the band index containing canvas row y.
Definition longstrip.c:209
ra8_err_t(* longstrip_blit_fn)(void *ctx, const uint8_t *pixels, uint16_t src_w, uint16_t src_h, uint8_t bpp, int32_t dst_x, int32_t dst_y)
Composite one decoded band sub-window onto the display (DIP seam).
Definition longstrip.h:114
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Fixed-RAM-budget image-tile cache with LRU eviction (Layer 3b, #147).
Parsed + validated geometry of one JOF atlas.
Definition jof.h:208
One-shot configuration handed to longstrip_open.
Definition longstrip.h:160
void * pread_ctx
Context for pread.
Definition longstrip.h:162
ra8_tile_cache_t * cache
Band cache (decode-on-miss = JOF).
Definition longstrip.h:164
uint16_t viewport_h
On-screen viewport height, pixels.
Definition longstrip.h:167
uint32_t image_id
Tile-cache key namespace for strip.
Definition longstrip.h:165
uint16_t viewport_w
On-screen viewport width, pixels.
Definition longstrip.h:166
jof_pread_fn pread
Atlas backing read seam.
Definition longstrip.h:161
uint64_t atlas_size
Atlas byte length (for parse).
Definition longstrip.h:163
longstrip_blit_fn blit
Band composite sink.
Definition longstrip.h:168
void * blit_ctx
Context for blit.
Definition longstrip.h:169
Context binding a JOF atlas to a ra8_tile_cache decode-on-miss.
Definition longstrip.h:137
uint8_t * scratch
Deflate staging (codec 1 only).
Definition longstrip.h:141
void * pread_ctx
Context for pread.
Definition longstrip.h:139
jof_pread_fn pread
Atlas backing read seam.
Definition longstrip.h:138
jof_info_t info
Parsed atlas geometry.
Definition longstrip.h:140
uint32_t scratch_cap
Capacity of scratch.
Definition longstrip.h:142
Per-frame render accounting returned by longstrip_render.
Definition longstrip.h:215
uint16_t skipped
Visible bands that failed to composite.
Definition longstrip.h:217
uint32_t covered_rows
Viewport rows covered by the drawn bands.
Definition longstrip.h:218
uint16_t bands_drawn
Visible bands composited this frame.
Definition longstrip.h:216
Opened longstrip-strip scroll state (caller-owned; treat as private).
Definition longstrip.h:185
int32_t max_scroll
Clamp ceiling (>= 0).
Definition longstrip.h:194
ra8_tile_cache_t * cache
Band cache.
Definition longstrip.h:196
uint32_t canvas_w
Strip width, pixels (== info.width).
Definition longstrip.h:187
jof_info_t info
Parsed atlas geometry.
Definition longstrip.h:186
uint32_t canvas_h
Strip height, pixels (== info.height).
Definition longstrip.h:188
uint32_t image_id
Tile-cache key namespace.
Definition longstrip.h:197
uint16_t band_count
Bands (== info.tile_rows).
Definition longstrip.h:190
uint16_t viewport_h
Viewport height, pixels.
Definition longstrip.h:192
uint16_t viewport_w
Viewport width, pixels.
Definition longstrip.h:191
uint16_t band_h
Band height, pixels (== info.tile_h).
Definition longstrip.h:189
int32_t scroll_y
Viewport top on the canvas, clamped.
Definition longstrip.h:193
longstrip_blit_fn blit
Band composite sink.
Definition longstrip.h:198
int32_t velocity
Fling velocity, px/tick (signed).
Definition longstrip.h:195
void * blit_ctx
Context for blit.
Definition longstrip.h:199
Tile-cache state (caller-owned; treat as private).
Identifies one decoded image tile.