ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_viewer_output.c
Go to the documentation of this file.
1
10
11#include <stddef.h>
12#include <stdint.h>
13
14#include "ra8_attributes.h"
15#include "ra8_err.h"
16#include "ra8_io_stream.h"
18
37internal_put_text(ra8_io_stream_t* output, ra8_err_t current, const char* text)
38{
39 return (current == k_ra8_ok) ? ra8_io_stream_puts(output, text) : current;
40}
41
60internal_put_u32(ra8_io_stream_t* output, ra8_err_t current, uint32_t value)
61{
62 return (current == k_ra8_ok) ? ra8_io_stream_put_u32(output, value) : current;
63}
64
83internal_put_u64(ra8_io_stream_t* output, ra8_err_t current, uint64_t value)
84{
85 return (current == k_ra8_ok) ? ra8_io_stream_put_u64(output, value) : current;
86}
87
107internal_put_hex(ra8_io_stream_t* output, ra8_err_t current, uint32_t value)
108{
109 return (current == k_ra8_ok) ? ra8_io_stream_put_hex(output, value, 1U) : current;
110}
111
112ra8_err_t priv_viewer_output_usage(ra8_io_stream_t* output, const char* executable)
113{
114 ra8_err_t error = ra8_io_stream_puts(output, "usage: ");
115 error = internal_put_text(output, error, executable);
116 error = internal_put_text(output,
117 error,
118 " <file.jof> [--headless]\n"
119 " [--dump-ppm PATH [--page N | --dump-tile N]]\n"
120 " window: resizable, fit-to-width, continuous scroll "
121 "(wheel/trackpad/PageUp-Dn/Home/End)\n");
122 return error;
123}
124
126 const char* subject,
127 size_t required,
128 size_t supplied)
129{
130 ra8_err_t error = ra8_io_stream_puts(output, subject);
131 error = internal_put_text(output, error, " workspace requires ");
132 error = internal_put_u64(output, error, (uint64_t)required);
133 error = internal_put_text(output, error, " bytes, supplied ");
134 error = internal_put_u64(output, error, (uint64_t)supplied);
135 return internal_put_text(output, error, " bytes\n");
136}
137
139 const char* operation,
140 uint32_t index,
141 ra8_err_t error_code)
142{
143 ra8_err_t error = ra8_io_stream_puts(output, operation);
144 error = internal_put_u32(output, error, index);
145 error = internal_put_text(output, error, " failed: 0x");
146 error = internal_put_hex(output, error, (uint32_t)error_code);
147 return internal_put_text(output, error, "\n");
148}
149
151priv_viewer_output_error(ra8_io_stream_t* output, const char* operation, ra8_err_t error_code)
152{
153 ra8_err_t error = ra8_io_stream_puts(output, operation);
154 error = internal_put_text(output, error, " failed: 0x");
155 error = internal_put_hex(output, error, (uint32_t)error_code);
156 return internal_put_text(output, error, "\n");
157}
158
160priv_viewer_output_open_error(ra8_io_stream_t* output, const char* path, ra8_err_t error_code)
161{
162 ra8_err_t error = ra8_io_stream_puts(output, "open '");
163 error = internal_put_text(output, error, path);
164 error = internal_put_text(output, error, "' failed: 0x");
165 error = internal_put_hex(output, error, (uint32_t)error_code);
166 return internal_put_text(output, error, "\n");
167}
168
169ra8_err_t priv_viewer_output_opened(ra8_io_stream_t* output, const char* path, uint32_t page_count)
170{
171 ra8_err_t error = ra8_io_stream_puts(output, "opened '");
172 error = internal_put_text(output, error, path);
173 error = internal_put_text(output, error, "': ");
174 error = internal_put_u32(output, error, page_count);
175 return internal_put_text(output, error, " page(s)\n");
176}
177
179{
180 ra8_err_t error = ra8_io_stream_puts(output, "wrote ");
181 error = internal_put_text(output, error, path);
182 return internal_put_text(output, error, "\n");
183}
184
186 uint32_t tile,
187 uint32_t width,
188 uint32_t height,
189 const char* path)
190{
191 ra8_err_t error = ra8_io_stream_puts(output, "wrote tile ");
192 error = internal_put_u32(output, error, tile);
193 error = internal_put_text(output, error, " (");
194 error = internal_put_u32(output, error, width);
195 error = internal_put_text(output, error, "x");
196 error = internal_put_u32(output, error, height);
197 error = internal_put_text(output, error, ") -> ");
198 error = internal_put_text(output, error, path);
199 return internal_put_text(output, error, "\n");
200}
201
203{
204 return ra8_io_stream_puts(output, text);
205}
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Error Code Definitions for ra8-firmware.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_io targetable byte-stream facade – one writer, many destinations.
ra8_err_t ra8_io_stream_puts(ra8_io_stream_t *s, const char *str)
Write a NUL-terminated string (without the NUL) to the bound sink.
ra8_err_t ra8_io_stream_put_u32(ra8_io_stream_t *s, uint32_t value)
Write value as unsigned decimal ASCII (no leading zeros).
ra8_err_t ra8_io_stream_put_u64(ra8_io_stream_t *s, uint64_t value)
Write value as unsigned 64-bit decimal ASCII without leading zeros.
ra8_err_t ra8_io_stream_put_hex(ra8_io_stream_t *s, uint32_t value, uint8_t min_digits)
Write value as lowercase hex ASCII, zero-padded to min_digits.
ra8_err_t priv_viewer_output_error(ra8_io_stream_t *output, const char *operation, ra8_err_t error_code)
Write an unnumbered operation failure and hexadecimal status.
static ra8_err_t internal_put_hex(ra8_io_stream_t *output, ra8_err_t current, uint32_t value)
Append an unpadded hexadecimal value while a sequence remains successful.
ra8_err_t priv_viewer_output_index_error(ra8_io_stream_t *output, const char *operation, uint32_t index, ra8_err_t error_code)
Write a numbered operation failure and hexadecimal status.
ra8_err_t priv_viewer_output_text(ra8_io_stream_t *output, const char *text)
Write one fixed diagnostic without a terminating byte.
ra8_err_t priv_viewer_output_wrote(ra8_io_stream_t *output, const char *path)
Write a successful path-publication diagnostic.
ra8_err_t priv_viewer_output_usage(ra8_io_stream_t *output, const char *executable)
Write the complete command-line usage message.
static ra8_err_t internal_put_text(ra8_io_stream_t *output, ra8_err_t current, const char *text)
Append text only while an output sequence remains successful.
ra8_err_t priv_viewer_output_open_error(ra8_io_stream_t *output, const char *path, ra8_err_t error_code)
Write a document-open failure with its path and status.
ra8_err_t priv_viewer_output_opened(ra8_io_stream_t *output, const char *path, uint32_t page_count)
Write a successful document-open diagnostic.
static ra8_err_t internal_put_u32(ra8_io_stream_t *output, ra8_err_t current, uint32_t value)
Append a decimal 32-bit value while a sequence remains successful.
ra8_err_t priv_viewer_output_tile(ra8_io_stream_t *output, uint32_t tile, uint32_t width, uint32_t height, const char *path)
Write a successful tile-publication diagnostic.
static ra8_err_t internal_put_u64(ra8_io_stream_t *output, ra8_err_t current, uint64_t value)
Append a decimal 64-bit value while a sequence remains successful.
ra8_err_t priv_viewer_output_capacity(ra8_io_stream_t *output, const char *subject, size_t required, size_t supplied)
Write an exact workspace requirement diagnostic.
Private typed diagnostic writers for the host viewer.
Caller-allocated byte-stream handle binding a sink to its context.