|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
Flat key=value site-descriptor parser over injected portable storage. More...
Go to the source code of this file.
Data Structures | |
| struct | internal_config_reader_t |
| Buffered reader borrowing one initialized storage binding. More... | |
Enumerations | |
| enum | mdl_parse_limits_t : uint16_t { k_line_max = 512 } |
| Local parser limits. More... | |
| enum | mdl_config_io_limit_t : uint32_t { k_config_file_max = 64U * 1024U , k_config_read_calls = k_config_file_max + 1U , k_config_dec_base = 10U } |
| Complete descriptor and backend-progress ceilings. More... | |
| enum | mdl_kv_result_t : uint8_t { k_kv_unknown = 0 , k_kv_applied = 1 , k_kv_invalid = 2 } |
| Result of applying one descriptor key. More... | |
| enum | mdl_config_defaults_t : uint16_t { k_def_img_delay_min = 500 , k_def_img_delay_max = 1200 , k_def_chapter_delay_min = 1500 , k_def_chapter_delay_max = 3000 } |
| Default politeness bounds (ms) applied before the file is read. More... | |
| enum | mdl_config_polite_floor_t : uint16_t { k_polite_img_min_ms = 2000 , k_polite_img_max_ms = 4000 , k_polite_chap_min_ms = 5000 , k_polite_chap_max_ms = 10000 } |
| --polite per-request delay floors (milliseconds). More... | |
Functions | |
| static char * | internal_config_trim (char *s) |
| Trim leading/trailing ASCII whitespace in place; return start. | |
| static bool | internal_config_set_str (char *dst, size_t cap, const char *val) |
| Copy one descriptor value without truncation. | |
| static mdl_kv_result_t | internal_config_apply_string (mdl_site_t *s, const char *key, const char *val) |
| Apply a string-valued key and distinguish unknown from invalid. | |
| static bool | internal_config_parse_u32 (const char *val, uint32_t *out) |
| Parse one complete unsigned 32-bit decimal field. | |
| static mdl_kv_result_t | internal_config_apply_u32 (mdl_site_t *s, const char *key, const char *val) |
| Apply an unsigned-integer key (jitter delay or governor bound). | |
| static bool | internal_config_parse_order (const char *val, mdl_chapter_order_t *out) |
| Parse the configured chapter-order spelling. | |
| static bool | internal_config_apply_pair (mdl_site_t *s, const char *key, const char *val) |
| Apply one descriptor key/value pair. | |
| static void | internal_config_set_defaults (mdl_site_t *out) |
| Apply the polite default descriptor before the file overrides it. | |
| static ra8_err_t | internal_config_next (internal_config_reader_t *reader, uint8_t *out_byte, bool *out_eof) |
| Read one byte through a bounded buffered portable stream. | |
| static ra8_err_t | internal_config_read_line (internal_config_reader_t *reader, char *line, uint32_t capacity, bool *out_present) |
| Read one complete bounded descriptor line. | |
| static ra8_err_t | internal_config_apply_line (mdl_site_t *site, char *line) |
| Apply one already bounded descriptor record. | |
| static ra8_err_t | internal_config_parse (internal_config_reader_t *reader, mdl_site_t *out) |
| Parse every descriptor record from an open portable stream. | |
| static bool | internal_config_valid (const mdl_site_t *site) |
| Validate descriptor cross-field and selector invariants. | |
| ra8_err_t | mdl_config_load (mdl_storage_t *storage, const char *path, mdl_site_t *out) |
| Load a site descriptor from a flat key=value file. | |
| mdl_gov_cfg_t | mdl_config_gov_cfg (const mdl_site_t *site) |
| Build the politeness-governor tunables for a loaded site descriptor. | |
| static uint32_t | internal_config_max_u32 (uint32_t a, uint32_t b) |
| Return the larger of two unsigned values. | |
| void | mdl_config_apply_polite (mdl_site_t *site) |
| Raise a descriptor's per-request delay floors for --polite. | |
Flat key=value site-descriptor parser over injected portable storage.
Validates bounded descriptor fields and converts policy values from storage-backed text without retaining external buffers.
Definition in file mdl_config.c.
| enum mdl_config_defaults_t : uint16_t |
Default politeness bounds (ms) applied before the file is read.
Definition at line 46 of file mdl_config.c.
| enum mdl_config_io_limit_t : uint32_t |
Complete descriptor and backend-progress ceilings.
| Enumerator | |
|---|---|
| k_config_file_max | Largest accepted descriptor file. |
| k_config_read_calls | One-byte reads plus EOF. |
| k_config_dec_base | Base-10 integer fields. |
Definition at line 22 of file mdl_config.c.
| enum mdl_config_polite_floor_t : uint16_t |
--polite per-request delay floors (milliseconds).
| Enumerator | |
|---|---|
| k_polite_img_min_ms | Polite per-image floor. |
| k_polite_img_max_ms | Polite per-image ceiling. |
| k_polite_chap_min_ms | Polite inter-chapter floor. |
| k_polite_chap_max_ms | Polite inter-chapter ceiling. |
Definition at line 54 of file mdl_config.c.
| enum mdl_kv_result_t : uint8_t |
Result of applying one descriptor key.
| Enumerator | |
|---|---|
| k_kv_unknown | Key is not owned by this helper. |
| k_kv_applied | Key and value were accepted. |
| k_kv_invalid | Key is known but value is invalid. |
Definition at line 39 of file mdl_config.c.
| enum mdl_parse_limits_t : uint16_t |
Local parser limits.
| Enumerator | |
|---|---|
| k_line_max | Max config line bytes including NUL. |
Definition at line 17 of file mdl_config.c.
|
static |
Apply one already bounded descriptor record.
Trims whitespace, ignores blank/comment/section records, and applies exactly one complete key/value pair for every active record.
| [in,out] | site | Descriptor receiving the record. |
| [in,out] | line | Mutable NUL-terminated record text. |
| k_ra8_ok | A blank/comment/section line was ignored or a pair applied. |
| k_ra8_err_invalid_state | The record was malformed or unsupported. |
line is NUL-terminated. line is writable because the separator is replaced in place. Definition at line 454 of file mdl_config.c.
References internal_config_apply_pair(), internal_config_trim(), k_ra8_err_invalid_state, k_ra8_ok, RA8_INTERNAL, and strchr().
Referenced by internal_config_parse().
|
static |
Apply one descriptor key/value pair.
Dispatches string, unsigned-integer, and chapter-order keys while rejecting unknown names and malformed values.
| [in,out] | s | Site descriptor being populated. |
| [in] | key | NUL-terminated key spelling. |
| [in] | val | NUL-terminated value text. |
| true | The matching descriptor field was updated. |
| false | The key is unknown or its value is invalid. |
s, key, and val are non-NULL. Definition at line 285 of file mdl_config.c.
References mdl_site_t::chapter_order, internal_config_apply_string(), internal_config_apply_u32(), internal_config_parse_order(), k_kv_applied, k_kv_unknown, RA8_INTERNAL, and strcmp().
Referenced by internal_config_apply_line().
|
static |
Apply a string-valued key and distinguish unknown from invalid.
Searches the fixed descriptor-field table and copies only complete, bounded values into the selected field.
| [in,out] | s | Descriptor receiving a recognized string field. |
| [in] | key | NUL-terminated configuration key. |
| [in] | val | NUL-terminated configuration value. |
| k_kv_applied | A recognized key was copied without truncation. |
| k_kv_invalid | A recognized value exceeded its destination bound. |
| k_kv_unknown | The key is not a string-valued descriptor field. |
key and val are NUL-terminated. < Config key spelling.
< Descriptor field it fills.
< Capacity of that field.
Definition at line 121 of file mdl_config.c.
References mdl_site_t::browse_url, mdl_site_t::chapter_number_selector, mdl_site_t::chapter_title_selector, mdl_site_t::chapter_url_contains, mdl_site_t::chapter_url_prefix, mdl_site_t::contact, mdl_site_t::host, internal_config_set_str(), k_kv_applied, k_kv_invalid, k_kv_unknown, mdl_site_t::kind, mdl_site_t::language, mdl_site_t::name, mdl_site_t::page_img_attr, mdl_site_t::page_img_url_contains, mdl_site_t::reading_direction, mdl_site_t::search_result_contains, mdl_site_t::search_url, mdl_site_t::series_artist_selector, mdl_site_t::series_author_selector, mdl_site_t::series_cover_selector, mdl_site_t::series_summary_selector, mdl_site_t::series_title_selector, and strcmp().
Referenced by internal_config_apply_pair().
|
static |
Apply an unsigned-integer key (jitter delay or governor bound).
Searches the fixed integer-field table and delegates complete, overflow-safe decimal conversion to internal_config_parse_u32.
| [in,out] | s | Descriptor receiving a recognized integer field. |
| [in] | key | NUL-terminated configuration key. |
| [in] | val | NUL-terminated unsigned decimal value. |
| k_kv_applied | A recognized key received a valid integer. |
| k_kv_invalid | A recognized key carried an invalid integer. |
| k_kv_unknown | The key is not an integer-valued descriptor field. |
key and val are NUL-terminated. < Config key spelling.
< Descriptor field it fills.
Definition at line 212 of file mdl_config.c.
References mdl_site_t::backoff_base_ms, mdl_site_t::backoff_max_ms, mdl_site_t::burst, mdl_site_t::chapter_delay_max, mdl_site_t::chapter_delay_min, mdl_site_t::img_delay_max, mdl_site_t::img_delay_min, internal_config_parse_u32(), k_kv_applied, k_kv_invalid, k_kv_unknown, mdl_site_t::max_inflight, mdl_site_t::rate_per_min, and strcmp().
Referenced by internal_config_apply_pair().
|
static |
Return the larger of two unsigned values.
Performs one comparison without arithmetic or overflow risk.
| [in] | a | First candidate. |
| [in] | b | Second candidate. |
| a | a is greater than or equal to b. |
| b | b is greater than a. |
Definition at line 620 of file mdl_config.c.
References RA8_INTERNAL.
Referenced by mdl_config_apply_polite().
|
static |
Read one byte through a bounded buffered portable stream.
Refills the storage binding's caller-owned scratch when exhausted; a successful zero-byte read is represented only through out_eof.
| [in,out] | reader | Open descriptor reader. |
| [out] | out_byte | Next byte when one is available. |
| [out] | out_eof | Whether clean end-of-file was reached. |
| k_ra8_ok | A byte or clean EOF was reported. |
| k_ra8_err_invalid_size | The bounded read-call ceiling was exhausted. |
| other | A backend read failure propagated unchanged. |
reader owns an open file. out_eof and initializes out_byte unless EOF. Definition at line 358 of file mdl_config.c.
References internal_config_reader_t::available, internal_config_reader_t::eof, internal_config_reader_t::file, fw_fs_read(), mdl_storage_t::io_buffer, mdl_storage_t::io_buffer_bytes, k_config_read_calls, k_ra8_err_invalid_size, k_ra8_ok, internal_config_reader_t::position, internal_config_reader_t::read_calls, and internal_config_reader_t::storage.
Referenced by internal_config_read_line().
|
static |
Parse every descriptor record from an open portable stream.
Reuses one fixed stack line and stops only at clean EOF or the first bounded reader or record-validation failure.
| [in,out] | reader | Open descriptor reader. |
| [in,out] | out | Descriptor receiving parsed overrides. |
| k_ra8_ok | Every record was valid and EOF was clean. |
| k_ra8_err_invalid_state | A line or key/value was invalid. |
| other | A bounded stream failure propagated unchanged. |
Definition at line 488 of file mdl_config.c.
References internal_config_apply_line(), internal_config_read_line(), k_line_max, k_ra8_ok, and RA8_INTERNAL.
Referenced by mdl_config_load().
|
static |
Parse the configured chapter-order spelling.
Accepts only reverse, asc, or doc; there is no silent default.
| [in] | val | NUL-terminated order spelling. |
| [out] | out | Parsed order destination. |
val is one supported spelling. | true | out received the corresponding enum value. |
| false | val is unsupported and out is unchanged. |
val and out are non-NULL. val is NUL-terminated. out is a valid mdl_chapter_order_t value. val is unchanged. Definition at line 251 of file mdl_config.c.
References k_mdl_order_asc, k_mdl_order_doc, k_mdl_order_reverse, RA8_INTERNAL, and strcmp().
Referenced by internal_config_apply_pair().
|
static |
Parse one complete unsigned 32-bit decimal field.
Rejects signs, empty text, overflow, and trailing characters.
| [in] | val | NUL-terminated decimal text. |
| [out] | out | Parsed integer destination. |
| true | out received the parsed value. |
| false | The text was empty, signed, malformed, or out of range. |
val and out are non-NULL. val is NUL-terminated. out contains the exact parsed value. out is unchanged. Definition at line 173 of file mdl_config.c.
References k_config_dec_base, and RA8_INTERNAL.
Referenced by internal_config_apply_u32().
|
static |
Read one complete bounded descriptor line.
Accepts a final line without newline and rejects the first non-newline byte that would leave no room for the required terminator.
| [in,out] | reader | Open descriptor reader. |
| [out] | line | Destination for one NUL-terminated line without newline. |
| [in] | capacity | Writable bytes at line. |
| [out] | out_present | Whether a line, including an empty one, was read. |
| k_ra8_ok | A line or clean EOF was reported. |
| k_ra8_err_invalid_state | A line exceeded the fixed parser bound. |
| other | A stream error propagated unchanged. |
capacity is nonzero. reader owns an open read-only file. line is always NUL-terminated on success. out_present false. Definition at line 406 of file mdl_config.c.
References internal_config_next(), k_ra8_err_invalid_state, k_ra8_ok, and RA8_INTERNAL.
Referenced by internal_config_parse().
|
static |
Apply the polite default descriptor before the file overrides it.
Clears the complete descriptor, installs bounded textual defaults, and copies the single governor baseline into numeric fields.
| [out] | out | Descriptor receiving deterministic defaults. |
out is non-NULL. out addresses writable storage for one complete descriptor. out. Definition at line 313 of file mdl_config.c.
References mdl_gov_cfg_t::backoff_base_ms, mdl_site_t::backoff_base_ms, mdl_gov_cfg_t::backoff_max_ms, mdl_site_t::backoff_max_ms, mdl_gov_cfg_t::burst, mdl_site_t::burst, mdl_site_t::chapter_delay_max, mdl_site_t::chapter_delay_min, mdl_site_t::chapter_order, mdl_site_t::chapter_url_contains, mdl_site_t::img_delay_max, mdl_site_t::img_delay_min, internal_config_set_str(), k_def_chapter_delay_max, k_def_chapter_delay_min, k_def_img_delay_max, k_def_img_delay_min, k_mdl_order_asc, mdl_site_t::kind, mdl_site_t::language, mdl_gov_cfg_t::max_inflight, mdl_site_t::max_inflight, mdl_gov_cfg_default(), mdl_site_t::name, mdl_site_t::page_img_attr, RA8_INTERNAL, mdl_gov_cfg_t::rate_per_min, mdl_site_t::rate_per_min, and mdl_site_t::reading_direction.
Referenced by mdl_config_load().
|
static |
Copy one descriptor value without truncation.
Measures the complete source before copying it into fixed storage.
| [out] | dst | Destination character array. |
| [in] | cap | Destination capacity including NUL. |
| [in] | val | NUL-terminated source value. |
| true | dst contains an exact copy of val. |
| false | val did not fit and dst is unchanged. |
dst and val are non-NULL. cap is greater than zero and describes writable dst storage. dst is NUL-terminated. val is unchanged. Definition at line 92 of file mdl_config.c.
References memcpy(), RA8_INTERNAL, and strlen().
Referenced by internal_config_apply_string(), and internal_config_set_defaults().
|
static |
Trim leading/trailing ASCII whitespace in place; return start.
Definition at line 62 of file mdl_config.c.
References RA8_INTERNAL, and strlen().
Referenced by internal_config_apply_line().
|
static |
Validate descriptor cross-field and selector invariants.
Checks selector grammar, required static metadata, delay ordering, governor bounds, and reading direction after parsing completes.
| [in] | site | Fully populated site descriptor. |
| true | The descriptor is safe for fetch/search use. |
| false | A required value, selector, or cross-field bound is invalid. |
site is non-NULL. site is NUL-terminated. site is unchanged. Definition at line 520 of file mdl_config.c.
References mdl_site_t::backoff_base_ms, mdl_site_t::backoff_max_ms, mdl_site_t::burst, mdl_site_t::chapter_delay_max, mdl_site_t::chapter_delay_min, mdl_site_t::chapter_number_selector, mdl_site_t::chapter_title_selector, mdl_site_t::host, mdl_site_t::img_delay_max, mdl_site_t::img_delay_min, mdl_site_t::language, mdl_site_t::max_inflight, RA8_INTERNAL, mdl_site_t::reading_direction, mdl_site_t::series_artist_selector, mdl_site_t::series_author_selector, mdl_site_t::series_cover_selector, mdl_site_t::series_summary_selector, mdl_site_t::series_title_selector, strcmp(), strlen(), and strncmp().
Referenced by mdl_config_load().
| void mdl_config_apply_polite | ( | mdl_site_t * | site | ) |
Raise a descriptor's per-request delay floors for --polite.
The --polite opt-in lifts the per-image and inter-chapter jitter floors to cautious minimums (never lowering a site that is already slower). Shared by the series and discovery paths so both interpret --polite the same way.
| [in,out] | site | Descriptor whose delay floors are raised in place. |
site is non-NULL and was populated by mdl_config_load. site in place. Definition at line 625 of file mdl_config.c.
References mdl_site_t::chapter_delay_max, mdl_site_t::chapter_delay_min, mdl_site_t::img_delay_max, mdl_site_t::img_delay_min, internal_config_max_u32(), k_polite_chap_max_ms, k_polite_chap_min_ms, k_polite_img_max_ms, and k_polite_img_min_ms.
Referenced by mdl_app_run_discover(), and mdl_app_run_series().
| mdl_gov_cfg_t mdl_config_gov_cfg | ( | const mdl_site_t * | site | ) |
Build the politeness-governor tunables for a loaded site descriptor.
Overlays the descriptor's governor fields (rate/burst/backoff/in-flight) onto the conservative mdl_gov_cfg_default baseline, so every run mode – series download, discovery, library update – derives its governor identically from one place rather than re-copying the same six assignments.
| [in] | site | Loaded descriptor (never NULL). |
site. | (by | value) Defaults with the descriptor's governor fields applied. |
site is non-NULL and was populated by mdl_config_load. site is unchanged.Definition at line 594 of file mdl_config.c.
References mdl_gov_cfg_t::backoff_base_ms, mdl_site_t::backoff_base_ms, mdl_gov_cfg_t::backoff_max_ms, mdl_site_t::backoff_max_ms, mdl_gov_cfg_t::burst, mdl_site_t::burst, mdl_gov_cfg_t::max_inflight, mdl_site_t::max_inflight, mdl_gov_cfg_default(), mdl_gov_cfg_t::rate_per_min, and mdl_site_t::rate_per_min.
Referenced by internal_run_prepared(), and mdl_app_run_discover().
|
nodiscard |
Load a site descriptor from a flat key=value file.
| [in,out] | storage | Initialized portable filesystem binding and exclusive file/I/O workspace. |
| [in] | path | Canonical path beneath the bound filesystem root. |
| [out] | out | Descriptor to fill; defaults are applied first, then the file overrides recognised keys. |
| k_ra8_ok | Loaded and every key/value passed validation. |
| k_ra8_err_invalid_arg | Invalid binding, pointer, or path. |
| k_ra8_err_invalid_size | Descriptor or backend progress bound exceeded. |
| k_ra8_err_invalid_state | A line, key, value, or required field was invalid. |
| other | Open, size, read, or close error propagated by the filesystem. |
storage was initialized by mdl_storage_init and is exclusively owned. path is canonical under the injected binding (for example /sites/a.conf). out. Definition at line 557 of file mdl_config.c.
References internal_config_reader_t::file, mdl_storage_t::file_workspace, mdl_storage_t::file_workspace_bytes, mdl_storage_t::fs, fw_fs_close(), fw_fs_file_size(), fw_fs_open(), internal_config_parse(), internal_config_set_defaults(), internal_config_valid(), mdl_storage_t::io_buffer, mdl_storage_t::io_buffer_bytes, k_config_file_max, k_fw_fs_open_read, k_ra8_err_invalid_arg, k_ra8_err_invalid_size, k_ra8_err_invalid_state, k_ra8_ok, and fw_fs_t::streams.
Referenced by mdl_app_run_discover(), and mdl_app_run_series().