|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
On-screen keyboard widget – iOS-style layers, shift, hit-test. More...
Go to the source code of this file.
Data Structures | |
| struct | ra8_kbd_key_t |
One key: a hit rectangle, its unshifted + shifted chars, a kind, and (for layer keys) the target layer in aux. More... | |
| struct | ra8_kbd_layout_t |
| The key grid for the active layer, plus SHIFT / layer / frame state. More... | |
| struct | ra8_kbd_text_t |
| The typed query buffer + commit state. More... | |
Enumerations | |
| enum | ra8_kbd_limits_t : uint8_t { k_ra8_kbd_rows = 4U , k_ra8_kbd_max_keys = 40U , k_ra8_kbd_text_max = 64U , k_ra8_kbd_no_hit = 255U } |
| Static capacities for the keyboard widget. More... | |
| enum | ra8_kbd_layer_t : uint8_t { k_ra8_kbd_layer_letters = 0U , k_ra8_kbd_layer_numbers = 1U , k_ra8_kbd_layer_symbols = 2U } |
| Which key set is shown. More... | |
| enum | ra8_kbd_key_kind_t : uint8_t { k_ra8_kbd_key_char = 0U , k_ra8_kbd_key_space = 1U , k_ra8_kbd_key_backspace = 2U , k_ra8_kbd_key_enter = 3U , k_ra8_kbd_key_shift = 4U , k_ra8_kbd_key_layer = 5U } |
| What a key does when tapped. More... | |
Functions | |
| ra8_err_t | ra8_kbd_layout_init (ra8_kbd_layout_t *kb, const ra8_ui_rect_t *frame) |
Lay the letters layer into frame; clear SHIFT. | |
| uint8_t | ra8_kbd_hit (const ra8_kbd_layout_t *kb, int32_t px, int32_t py) |
| Map a tap to a key index. | |
| char | ra8_kbd_key_glyph (const ra8_kbd_layout_t *kb, uint8_t key_idx) |
| Effective character a char key emits given the live SHIFT state. | |
| ra8_err_t | ra8_kbd_text_init (ra8_kbd_text_t *t) |
| Reset a text buffer to empty / uncommitted. | |
| ra8_err_t | ra8_kbd_apply (ra8_kbd_text_t *t, ra8_kbd_layout_t *kb, uint8_t key_idx) |
Apply key key_idx to the text buffer, SHIFT, and active layer. | |
On-screen keyboard widget – iOS-style layers, shift, hit-test.
An immediate-mode on-screen keyboard for text entry (e-reader search / filter, #105), modelled on the iOS keyboard. Pure, rendering-free logic:
The caller owns rendering (draw each key + its glyph) and tap routing; this is the deterministic model underneath, unit-testable and HIL-gateable with synthetic taps.
Definition in file ra8_keyboard.h.
| enum ra8_kbd_key_kind_t : uint8_t |
What a key does when tapped.
Definition at line 70 of file ra8_keyboard.h.
| enum ra8_kbd_layer_t : uint8_t |
Which key set is shown.
| Enumerator | |
|---|---|
| k_ra8_kbd_layer_letters | QWERTY letters (with one-shot SHIFT). |
| k_ra8_kbd_layer_numbers | Digits + common symbols (123). |
| k_ra8_kbd_layer_symbols | Brackets / math symbols (#+=). |
Definition at line 60 of file ra8_keyboard.h.
| enum ra8_kbd_limits_t : uint8_t |
Static capacities for the keyboard widget.
| Enumerator | |
|---|---|
| k_ra8_kbd_rows | Key rows per layer. |
| k_ra8_kbd_max_keys | Key-rect slots (<= 31 used per layer). |
| k_ra8_kbd_text_max | Text buffer capacity incl. NUL. |
| k_ra8_kbd_no_hit | ra8_kbd_hit "no key" sentinel. |
Definition at line 49 of file ra8_keyboard.h.
|
nodiscard |
Apply key key_idx to the text buffer, SHIFT, and active layer.
A char/space appends (shift-correct) and clears one-shot SHIFT; SHIFT toggles kb->shift; a layer key swaps the layer (re-laying the grid in place); backspace deletes; RETURN sets committed. Out-of-range / capacity edges are no-ops (still k_ra8_ok).
| [in,out] | t | Text buffer. |
| [in,out] | kb | Laid-out grid (SHIFT / layer / keys may change). |
| [in] | key_idx | Key index from ra8_kbd_hit. |
| k_ra8_ok | Applied (possibly a no-op at a capacity edge). |
| k_ra8_err_null_ptr | t or kb is NULL. |
t, kb non-NULL. key_idx is a hit index or k_ra8_kbd_no_hit (no-op). t / kb. Definition at line 641 of file ra8_keyboard.c.
References ra8_kbd_key_t::aux, ra8_kbd_text_t::buf, ra8_kbd_key_t::ch_lower, ra8_kbd_key_t::ch_upper, ra8_kbd_text_t::committed, ra8_kbd_layout_t::count, internal_append(), internal_build_layer(), k_ra8_kbd_key_backspace, k_ra8_kbd_key_char, k_ra8_kbd_key_enter, k_ra8_kbd_key_layer, k_ra8_kbd_key_shift, k_ra8_kbd_key_space, k_ra8_ok, ra8_kbd_layout_t::keys, ra8_kbd_key_t::kind, ra8_kbd_layout_t::layer, ra8_kbd_text_t::len, RA8_CHECK_NULL_PTR, s_tag, and ra8_kbd_layout_t::shift.
Referenced by er_handle_keyboard_tap(), and kb_tap().
|
nodiscard |
Map a tap to a key index.
| [in] | kb | Laid-out grid. |
| [in] | px | Tap X (pixels). |
| [in] | py | Tap Y (pixels). |
kb is NULL).kb is laid out (or NULL, handled). Definition at line 571 of file ra8_keyboard.c.
References ra8_kbd_layout_t::count, k_ra8_kbd_no_hit, ra8_kbd_layout_t::keys, ra8_ui_rect_contains(), and ra8_kbd_key_t::rect.
Referenced by kb_tap().
|
nodiscard |
Effective character a char key emits given the live SHIFT state.
| [in] | kb | Laid-out grid (for SHIFT). |
| [in] | key_idx | Key index. |
kb).kb is laid out (or NULL, handled). Definition at line 584 of file ra8_keyboard.c.
References ra8_kbd_key_t::ch_lower, ra8_kbd_key_t::ch_upper, ra8_kbd_layout_t::count, k_ra8_kbd_key_char, ra8_kbd_layout_t::keys, ra8_kbd_key_t::kind, and ra8_kbd_layout_t::shift.
Referenced by er_kbd_label().
|
nodiscard |
Lay the letters layer into frame; clear SHIFT.
| [out] | kb | Receives the laid-out grid (letters layer, SHIFT cleared). |
| [in] | frame | Pixel rectangle to fill (w,h > 0); saved for layer swaps. |
| k_ra8_ok | Grid laid out. |
| k_ra8_err_null_ptr | kb or frame is NULL. |
| k_ra8_err_invalid_arg | frame has non-positive w or h. |
kb, frame non-NULL. frame.kb. Definition at line 556 of file ra8_keyboard.c.
References ra8_kbd_layout_t::frame, ra8_ui_rect_t::h, internal_build_layer(), k_ra8_err_invalid_arg, k_ra8_kbd_layer_letters, k_ra8_ok, ra8_kbd_layout_t::layer, RA8_CHECK_NULL_PTR, s_tag, ra8_kbd_layout_t::shift, and ra8_ui_rect_t::w.
Referenced by er_kbd_keys_render(), and main().
|
nodiscard |
Reset a text buffer to empty / uncommitted.
| [out] | t | Buffer to clear. |
| k_ra8_ok | Cleared. |
| k_ra8_err_null_ptr | t is NULL. |
t non-NULL. t. Definition at line 596 of file ra8_keyboard.c.
References ra8_kbd_text_t::buf, ra8_kbd_text_t::committed, k_ra8_ok, ra8_kbd_text_t::len, RA8_CHECK_NULL_PTR, and s_tag.
Referenced by er_handle_tap(), and main().