ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
usb_selftest_wlun_console.c File Reference

examples/ek_ra8d2/hil_needs_revalidation/usb_selftest_wlun/src/usb_selftest_wlun_console.c More...

#include <stdint.h>
#include "ra8_board_ek_ra8d2.h"
#include "ra8_err.h"
#include "usb_selftest_wlun_steps.h"
Include dependency graph for usb_selftest_wlun_console.c:

Go to the source code of this file.

Functions

void wlun_pattern_fill (uint32_t lun, uint32_t lba, UCHAR *out)
 Fill one 512-byte sector with this LUN/LBA's deterministic bytes.
uint8_t wlun_nibble_to_hex (uint32_t nibble)
 Format one nibble (0..15) into an uppercase hex character.
uint32_t wlun_str_len (const char *text)
 Bounded ASCII string length (cap k_wlun_print_cap).
ra8_err_t wlun_sci_write (const uint8_t *data, uint32_t len)
 Push a literal block over SCI8 polled.
ra8_err_t wlun_print (const char *text)
 Print a NUL-terminated ASCII string over the console.
ra8_err_t wlun_print_dec (uint32_t value)
 Print a uint32_t as ASCII decimal.
ra8_err_t wlun_print_hex (uint32_t value, uint8_t digits)
 Print a value as fixed-width uppercase hex.
ra8_err_t wlun_print_fail (const char *what, ra8_err_t err)
 Print "FAIL <what> err=0xNNNNNNNN" on its own line.

Detailed Description

examples/ek_ra8d2/hil_needs_revalidation/usb_selftest_wlun/src/usb_selftest_wlun_console.c

Pattern generator + SCI8 polled console formatters for the wlun loop

Tag
[Ring 6 / APP] {World: S}

The deterministic per-(LUN,LBA) sector pattern and the SCI8 (J-Link OB CDC, 115200) polled text formatters used by the writable-LUN self-loop. The pattern generator is shared by the device-side media-read callback in main.c and the host-side verifier in usb_selftest_wlun_host.c; the console formatters stream the host ladder's verdicts. Split out of main.c so each translation unit stays under the per-file line cap. The full contracts live in usb_selftest_wlun_steps.h.

Author
Brighton Sikarskie
Date
2026-06-13
Since
0.1.0

Definition in file usb_selftest_wlun_console.c.

Function Documentation

◆ wlun_nibble_to_hex()

uint8_t wlun_nibble_to_hex ( uint32_t nibble)

Format one nibble (0..15) into an uppercase hex character.

Standard '0'-'9' then 'A'-'F' mapping.

Parameters
[in]nibble4-bit value.
Returns
ASCII '0'..'9' or 'A'..'F'.
Return values
'0'For a zero nibble.
Precondition
Caller has masked the value to 4 bits.
None beyond the mask contract.
Postcondition
Returned byte is printable hex.
No state changes.
Note
Pure function.
Since
0.1.0

Definition at line 50 of file usb_selftest_wlun_console.c.

References k_wlun_hex_digit_split.

Referenced by wlun_print_hex().

◆ wlun_pattern_fill()

void wlun_pattern_fill ( uint32_t lun,
uint32_t lba,
UCHAR * out )

Fill one 512-byte sector with this LUN/LBA's deterministic bytes.

Byte i = (lun*97 + lba*7 + i + 0x5A) & 0xFF. Distinct per LUN and per LBA so the host can prove it addressed the right logical unit and sector. The device media-read and the host verifier compute it identically.

Parameters
[in]lunThe logical unit (0..1).
[in]lbaThe logical block address within the LUN.
[out]out512-byte destination buffer.
Precondition
out has k_wlun_block_size writable bytes.
lun and lba are within the exposed geometry.
Postcondition
out holds the sector's pattern bytes.
No global state changes.
Note
Pure function.
Since
0.1.0

Definition at line 37 of file usb_selftest_wlun_console.c.

References k_wlun_block_size, k_wlun_byte_mask, k_wlun_pat_bias, k_wlun_pat_lba_mul, and k_wlun_pat_lun_mul.

Referenced by wlun_verify_one(), and wlun_write_disk().

◆ wlun_print()

ra8_err_t wlun_print ( const char * text)
nodiscard

Print a NUL-terminated ASCII string over the console.

Length-bounded by wlun_str_len.

Parameters
[in]textString to print (CR/LF included by the caller).
Returns
ra8_err_t propagated from the SCI helper.
Return values
k_ra8_okAll bytes queued.
Precondition
SCI8 init already ran; text is non-NULL.
text is NUL-terminated within k_wlun_print_cap bytes.
Postcondition
The string bytes are in the SCI8 TX FIFO.
No other state changes.
Note
Blocking polled TX.
Since
0.1.0

Definition at line 75 of file usb_selftest_wlun_console.c.

References wlun_sci_write(), and wlun_str_len().

Referenced by wlun_host_enumerate(), wlun_host_pass(), wlun_print_fail(), and wlun_print_lun_ok().

◆ wlun_print_dec()

ra8_err_t wlun_print_dec ( uint32_t value)
nodiscard

Print a uint32_t as ASCII decimal.

Digit-reversal into a bounded scratch buffer.

Parameters
[in]valueValue to print.
Returns
ra8_err_t propagated from the SCI helper.
Return values
k_ra8_okAll bytes queued.
Precondition
SCI8 init already ran.
None beyond console readiness.
Postcondition
One ASCII decimal token is in the SCI8 TX FIFO.
No other state changes.
Note
Blocking polled TX.
Since
0.1.0

Definition at line 80 of file usb_selftest_wlun_console.c.

References k_wlun_dec_chars_u32, k_wlun_dec_radix, and wlun_sci_write().

Referenced by wlun_host_enumerate(), and wlun_print_lun_ok().

◆ wlun_print_fail()

ra8_err_t wlun_print_fail ( const char * what,
ra8_err_t err )
nodiscard

Print "FAIL <what> err=0xNNNNNNNN" on its own line.

One-line diagnostic; first failing chunk's code returned.

Parameters
[in]whatShort description of the failed step.
[in]errError code returned by the step.
Returns
ra8_err_t propagated from the SCI helpers.
Return values
k_ra8_okThe diagnostic line is queued.
Precondition
SCI8 init already ran.
what is NUL-terminated within the print cap.
Postcondition
One diagnostic line is in the SCI8 TX FIFO.
No other state changes.
Note
Blocking polled TX.
Since
0.1.0

Definition at line 118 of file usb_selftest_wlun_console.c.

References k_ra8_ok, k_wlun_hex_chars_u32, wlun_print(), and wlun_print_hex().

Referenced by wlun_host_enumerate(), wlun_host_pass(), wlun_verify_one(), and wlun_write_disk().

◆ wlun_print_hex()

ra8_err_t wlun_print_hex ( uint32_t value,
uint8_t digits )
nodiscard

Print a value as fixed-width uppercase hex.

Width is clamped to 8 hex digits.

Parameters
[in]valueValue to print.
[in]digitsHex digit count (4 for u16, 8 for u32).
Returns
ra8_err_t propagated from the SCI helper.
Return values
k_ra8_okAll bytes queued.
Precondition
SCI8 init already ran.
digits is at most k_wlun_hex_chars_u32.
Postcondition
One fixed-width hex token is in the SCI8 TX FIFO.
No other state changes.
Note
Blocking polled TX.
Since
0.1.0

Definition at line 104 of file usb_selftest_wlun_console.c.

References k_wlun_hex_chars_u32, k_wlun_nibble_bits, k_wlun_nibble_mask, wlun_nibble_to_hex(), and wlun_sci_write().

Referenced by wlun_host_enumerate(), and wlun_print_fail().

◆ wlun_sci_write()

ra8_err_t wlun_sci_write ( const uint8_t * data,
uint32_t len )
nodiscard

Push a literal block over SCI8 polled.

Thin wrapper fixing the console channel.

Parameters
[in]dataBuffer to send.
[in]lenByte count.
Returns
ra8_err_t passthrough from ra8_board_uart_console_write.
Return values
k_ra8_okAll bytes queued.
Precondition
data is non-NULL; SCI8 init already ran.
len excludes any NUL terminator.
Postcondition
Bytes are in the SCI8 TX FIFO.
No other state changes.
Note
Blocking polled TX.
Since
0.1.0

Definition at line 70 of file usb_selftest_wlun_console.c.

References ra8_board_uart_console_write().

Referenced by wlun_print(), wlun_print_dec(), and wlun_print_hex().

◆ wlun_str_len()

uint32_t wlun_str_len ( const char * text)

Bounded ASCII string length (cap k_wlun_print_cap).

Linear scan with a hard upper bound.

Parameters
[in]textNUL-terminated string.
Returns
Number of bytes before the NUL, capped.
Return values
0For an empty string.
Precondition
text is non-NULL.
text points to readable storage of at least the length.
Postcondition
No state changes.
Return value never exceeds k_wlun_print_cap.
Note
Bounded scan.
Since
0.1.0

Definition at line 58 of file usb_selftest_wlun_console.c.

References k_wlun_print_cap.

Referenced by wlun_print().