ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_app.h
Go to the documentation of this file.
1
67
68#pragma once
69
70#ifdef __cplusplus
71extern "C" {
72#endif
73
74#include <stdint.h>
75
76#include "ra8_err.h"
77#include "ra8_widget.h"
78
83typedef enum : int16_t {
86
120
121struct ra8_app; /* fwd */
122
133typedef struct {
134 ra8_err_t (*init)(struct ra8_app* a);
135 void (*on_enter)(struct ra8_app* a);
136 void (*tick)(struct ra8_app* a);
137 void (*render)(const struct ra8_app* a);
138 bool (*on_input)(struct ra8_app* a,
139 const ra8_widget_event_t* ev);
140 void (*on_leave)(struct ra8_app* a);
141 void (*deinit)(struct ra8_app* a);
143
148typedef struct ra8_app {
150 void* ctx;
151 uint16_t id;
152 const char* name;
156
161typedef struct {
163 uint16_t cap;
164 uint16_t count;
165 int16_t active;
167
168/* ===========================================================================
169 * Registry lifecycle
170 * ===========================================================================
171 */
172
191[[nodiscard]] ra8_err_t
192ra8_app_registry_init(ra8_app_registry_t* reg, ra8_app_t** storage, uint16_t cap);
193
220
238[[nodiscard]] ra8_err_t ra8_app_find(const ra8_app_registry_t* reg, uint16_t id, int16_t* out_idx);
239
240/* ===========================================================================
241 * Focus + routing
242 * ===========================================================================
243 */
244
268[[nodiscard]] ra8_err_t ra8_app_launch(ra8_app_registry_t* reg, uint16_t id);
269
286[[nodiscard]] ra8_err_t ra8_app_active(const ra8_app_registry_t* reg, ra8_app_t** out_app);
287
305[[nodiscard]] ra8_err_t
306ra8_app_route_input(ra8_app_registry_t* reg, const ra8_widget_event_t* ev, bool* out_handled);
307
319[[nodiscard]] ra8_err_t ra8_app_tick(ra8_app_registry_t* reg);
320
333
345[[nodiscard]] ra8_err_t ra8_app_count(const ra8_app_registry_t* reg, uint16_t* out_count);
346
362[[nodiscard]] ra8_err_t
363ra8_app_at(const ra8_app_registry_t* reg, uint16_t idx, ra8_app_t** out_app);
364
365/* ===========================================================================
366 * Install / uninstall + lifecycle state
367 * ===========================================================================
368 */
369
400[[nodiscard]] ra8_err_t
401ra8_app_state(const ra8_app_registry_t* reg, uint16_t id, ra8_app_state_t* out_state);
402
446[[nodiscard]] ra8_err_t ra8_app_uninstall(ra8_app_registry_t* reg, uint16_t id);
447
448/* ===========================================================================
449 * Navigation back-stack (history of focused apps)
450 * ===========================================================================
451 */
452
485typedef struct {
487 uint16_t* stack;
488 uint16_t cap;
489 uint16_t depth;
491
513[[nodiscard]] ra8_err_t
514ra8_app_nav_init(ra8_app_nav_t* nav, ra8_app_registry_t* reg, uint16_t* storage, uint16_t cap);
515
544[[nodiscard]] ra8_err_t ra8_app_nav_go(ra8_app_nav_t* nav, uint16_t id);
545
579[[nodiscard]] ra8_err_t ra8_app_nav_go_index(ra8_app_nav_t* nav, uint16_t idx);
580
606[[nodiscard]] ra8_err_t ra8_app_nav_back(ra8_app_nav_t* nav, bool* out_popped);
607
625[[nodiscard]] ra8_err_t ra8_app_nav_depth(const ra8_app_nav_t* nav, uint16_t* out_depth);
626
627#ifdef __cplusplus
628}
629#endif
ra8_err_t ra8_app_nav_init(ra8_app_nav_t *nav, ra8_app_registry_t *reg, uint16_t *storage, uint16_t cap)
Bind a navigation back-stack to a registry + caller-owned storage.
Definition ra8_app.c:186
ra8_err_t ra8_app_launch(ra8_app_registry_t *reg, uint16_t id)
Launch (focus) the app with id, running the focus lifecycle.
Definition ra8_app.c:78
ra8_err_t ra8_app_tick(ra8_app_registry_t *reg)
Run the focused app's per-frame tick (no-op if none / NULL).
Definition ra8_app.c:140
ra8_err_t ra8_app_nav_back(ra8_app_nav_t *nav, bool *out_popped)
Return to the most recently pushed app (pop the back-stack).
Definition ra8_app.c:251
ra8_err_t ra8_app_register(ra8_app_registry_t *reg, ra8_app_t *app)
Register an app (calls its init once) and add it to the registry.
Definition ra8_app.c:48
ra8_err_t ra8_app_nav_go_index(ra8_app_nav_t *nav, uint16_t idx)
Focus the app at registry index idx (launcher select-by-position).
Definition ra8_app.c:238
ra8_err_t ra8_app_nav_go(ra8_app_nav_t *nav, uint16_t id)
Focus app id, pushing the outgoing app onto the back-stack.
Definition ra8_app.c:201
struct ra8_app ra8_app_t
ra8_err_t ra8_app_count(const ra8_app_registry_t *reg, uint16_t *out_count)
Number of registered apps (for the launcher to list).
Definition ra8_app.c:166
ra8_app_const_t
Sentinels for the app registry.
Definition ra8_app.h:83
@ k_ra8_app_none
No active app / not found.
Definition ra8_app.h:84
ra8_err_t ra8_app_state(const ra8_app_registry_t *reg, uint16_t id, ra8_app_state_t *out_state)
Report an app's lifecycle state, derived from the registry.
Definition ra8_app.c:279
ra8_err_t ra8_app_find(const ra8_app_registry_t *reg, uint16_t id, int16_t *out_idx)
Find a registered app's index by id.
Definition ra8_app.c:34
ra8_err_t ra8_app_at(const ra8_app_registry_t *reg, uint16_t idx, ra8_app_t **out_app)
Get the app at registry index idx (launcher enumeration).
Definition ra8_app.c:174
ra8_err_t ra8_app_uninstall(ra8_app_registry_t *reg, uint16_t id)
Uninstall (unmount) a removable, non-focused app from the registry.
Definition ra8_app.c:329
ra8_err_t ra8_app_route_input(ra8_app_registry_t *reg, const ra8_widget_event_t *ev, bool *out_handled)
Route an input event to the focused app.
Definition ra8_app.c:124
ra8_err_t ra8_app_nav_depth(const ra8_app_nav_t *nav, uint16_t *out_depth)
Current back-stack depth (apps the user can still go back through).
Definition ra8_app.c:270
ra8_err_t ra8_app_active(const ra8_app_registry_t *reg, ra8_app_t **out_app)
Get the currently focused app.
Definition ra8_app.c:115
ra8_err_t ra8_app_render(ra8_app_registry_t *reg)
Run the focused app's render (on-target; no-op if none / NULL).
Definition ra8_app.c:153
ra8_app_state_t
Lifecycle state of one app within the framework's state machine.
Definition ra8_app.h:115
@ k_ra8_app_state_background
Mounted (init ran), not focused.
Definition ra8_app.h:117
@ k_ra8_app_state_foreground
Mounted and focused (the active app).
Definition ra8_app.h:118
@ k_ra8_app_state_unmounted
Not registered (initial / after uninstall).
Definition ra8_app.h:116
ra8_err_t ra8_app_registry_init(ra8_app_registry_t *reg, ra8_app_t **storage, uint16_t cap)
Bind a registry to caller-owned pointer storage (empty, no focus).
Definition ra8_app.c:20
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
Zero-heap composable widget layer (dwm-style) over ra8_box + ra8_ui.
A bounded back-stack of app ids layered over a registry (zero-heap).
Definition ra8_app.h:485
uint16_t cap
Capacity of stack.
Definition ra8_app.h:488
ra8_app_registry_t * reg
Registry the navigation drives (non-NULL).
Definition ra8_app.h:486
uint16_t * stack
Caller storage: back-stack of app ids.
Definition ra8_app.h:487
uint16_t depth
Number of ids currently on the back-stack.
Definition ra8_app.h:489
Fixed table of registered apps + the focused index.
Definition ra8_app.h:161
ra8_app_t ** apps
Caller storage (array of app pointers).
Definition ra8_app.h:162
int16_t active
Focused app index, or k_ra8_app_none.
Definition ra8_app.h:165
uint16_t count
Registered app count.
Definition ra8_app.h:164
uint16_t cap
Capacity of apps.
Definition ra8_app.h:163
One app instance + its metadata (caller-owned, static).
App lifecycle callbacks (shared by all instances of one app).
Definition ra8_app.h:133
void(* deinit)(struct ra8_app *a)
Teardown.
Definition ra8_app.h:141
void(* on_enter)(struct ra8_app *a)
Gained focus / foreground.
Definition ra8_app.h:135
void(* render)(const struct ra8_app *a)
Draw (on-target, foreground).
Definition ra8_app.h:137
void(* tick)(struct ra8_app *a)
Per-frame update (foreground).
Definition ra8_app.h:136
void(* on_leave)(struct ra8_app *a)
Lost focus / background.
Definition ra8_app.h:140
ra8_err_t(* init)(struct ra8_app *a)
One-time setup (at register).
Definition ra8_app.h:134
bool(* on_input)(struct ra8_app *a, const ra8_widget_event_t *ev)
Handle.
Definition ra8_app.h:138
void * ctx
App-specific state.
Definition ra8_app.h:150
const char * name
Display name for the launcher.
Definition ra8_app.h:152
uint16_t id
Unique app id (launch key).
Definition ra8_app.h:151
bool removable
Optional/uninstallable core?
Definition ra8_app.h:153
bool initialized
Set true once init succeeded.
Definition ra8_app.h:154
const ra8_app_vtable_t * vt
Lifecycle table (non-NULL).
Definition ra8_app.h:149
One input event delivered to ra8_widget_dispatch.
Definition ra8_widget.h:77