ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
usb_msc_sdcard_console.c
Go to the documentation of this file.
1
24
25#include <stddef.h>
26#include <stdint.h>
27
28#include "ra8_board_ek_ra8d2.h"
29#include "ra8_err.h"
31
32/* -------------------------------------------------------------------------- */
33/* Console helpers (SCI8 -> J-Link OB CDC) */
34/* -------------------------------------------------------------------------- */
35
54static uint8_t sdmsc_nibble_to_hex(uint32_t nibble)
55{
56 if (nibble < k_sdmsc_hex_digit_split) {
57 return (uint8_t)((uint8_t)'0' + (uint8_t)nibble);
58 }
59 return (uint8_t)((uint8_t)'A' + (uint8_t)nibble - (uint8_t)k_sdmsc_hex_digit_split);
60}
61
80static uint32_t sdmsc_str_len(const char* text)
81{
82 uint32_t len = 0U;
83 while (len < (uint32_t)k_sdmsc_print_cap) {
84 if (text[len] == '\0') {
85 break;
86 }
87 len++;
88 }
89 return len;
90}
91
112[[nodiscard]] static ra8_err_t sdmsc_sci_write(const uint8_t* data, uint32_t len)
113{
114 return ra8_board_uart_console_write(data, (size_t)len);
115}
116
117[[nodiscard]] ra8_err_t sdmsc_print(const char* text)
118{
119 return sdmsc_sci_write((const uint8_t*)text, sdmsc_str_len(text));
120}
121
123[[nodiscard]] ra8_err_t sdmsc_print_dec(uint32_t value)
124{
125 uint8_t scratch[k_sdmsc_dec_chars_u32] = {};
126 uint8_t out[k_sdmsc_dec_chars_u32] = {};
127 uint8_t count = 0U;
128 uint32_t v = value;
129 if (v == 0U) {
130 out[0] = (uint8_t)'0';
131 return sdmsc_sci_write(out, 1U);
132 }
133 while (v != 0U) {
134 if (count >= (uint8_t)k_sdmsc_dec_chars_u32) {
135 break;
136 }
137 scratch[count] = (uint8_t)((uint8_t)'0' + (uint8_t)(v % k_sdmsc_dec_radix));
138 v = v / k_sdmsc_dec_radix;
139 count++;
140 }
141 for (uint8_t i = 0U; i < count; i++) {
142 out[i] = scratch[count - 1U - i];
143 }
144 return sdmsc_sci_write(out, (uint32_t)count);
145}
146
148[[nodiscard]] ra8_err_t sdmsc_print_hex(uint32_t value, uint8_t digits)
149{
150 uint8_t out[k_sdmsc_hex_chars_u32] = {};
151 uint8_t width = digits;
152 if (width > (uint8_t)k_sdmsc_hex_chars_u32) {
153 width = (uint8_t)k_sdmsc_hex_chars_u32;
154 }
155 for (uint8_t i = 0U; i < width; i++) {
156 const uint8_t shift = (uint8_t)((width - 1U - i) * k_sdmsc_nibble_bits);
157 out[i] = sdmsc_nibble_to_hex((value >> shift) & k_sdmsc_nibble_mask);
158 }
159 return sdmsc_sci_write(out, (uint32_t)width);
160}
161
162[[nodiscard]] ra8_err_t sdmsc_print_fail(const char* what, ra8_err_t err)
163{
164 ra8_err_t e = sdmsc_print("usb_msc_sdcard: FAIL ");
165 if (e != k_ra8_ok) {
166 return e;
167 }
168 e = sdmsc_print(what);
169 if (e != k_ra8_ok) {
170 return e;
171 }
172 e = sdmsc_print(" err=0x");
173 if (e != k_ra8_ok) {
174 return e;
175 }
176 e = sdmsc_print_hex((uint32_t)err, (uint8_t)k_sdmsc_hex_chars_u32);
177 if (e != k_ra8_ok) {
178 return e;
179 }
180 return sdmsc_print("\r\n");
181}
Board-support layer for the Renesas EK-RA8D2 v1 evaluation kit.
ra8_err_t ra8_board_uart_console_write(const uint8_t *data, size_t len)
Polled blocking write to the J-Link OB VCOM console.
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_err_t sdmsc_print(const char *text)
Print a NUL-terminated ASCII string over the SCI8 console.
ra8_err_t sdmsc_print_hex(uint32_t value, uint8_t digits)
Implementation of sdmsc_print_hex() – width clamped to 8.
ra8_err_t sdmsc_print_dec(uint32_t value)
Implementation of sdmsc_print_dec() – digit-reversal scratch.
static uint8_t sdmsc_nibble_to_hex(uint32_t nibble)
Format one nibble (0..15) into an uppercase hex character.
static ra8_err_t sdmsc_sci_write(const uint8_t *data, uint32_t len)
Push a literal block over the J-Link OB CDC console polled.
static uint32_t sdmsc_str_len(const char *text)
Bounded ASCII string length (cap k_sdmsc_print_cap).
ra8_err_t sdmsc_print_fail(const char *what, ra8_err_t err)
Print "FAIL <what> err=0xNNNNNNNN" on its own console line.
examples/ek_ra8d2/hw_pending/manual/usb_msc_sdcard/inc/usb_msc_sdcard_steps.h
@ k_sdmsc_nibble_bits
Bits per hex nibble.
@ k_sdmsc_hex_digit_split
Threshold between '0-9'/'A-F'.
@ k_sdmsc_hex_chars_u32
32-bit value -> "ABCDEF01".
@ k_sdmsc_dec_chars_u32
Max digits for a 32-bit count.
@ k_sdmsc_nibble_mask
4-bit nibble mask.
@ k_sdmsc_dec_radix
Base for decimal conversion.
@ k_sdmsc_print_cap
Bound for console-string scans.