CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
Console.cpp
Go to the documentation of this file.
1
5
7#include "cdc_log.h"
8#include <cstdarg>
9#include <cstdio>
10#include <cstdlib>
11#include <cstring>
12
13namespace cdc::serial {
14
15static bool s_initialized = false;
16
22 if (s_initialized) return;
23 // cdc_log console_init() is called by log_init()
24 s_initialized = true;
25}
26
32void Console::printf(const char* format, ...) {
33 va_list args;
34 va_start(args, format);
35 vprintf(format, args);
36 va_end(args);
37}
38
45void Console::vprintf(const char* format, va_list args) {
46 char buffer[256];
47 va_list args_copy;
48 va_copy(args_copy, args);
49 int len = vsnprintf(buffer, sizeof(buffer), format, args);
50 if (len <= 0) {
51 va_end(args_copy);
52 return;
53 }
54 if (static_cast<size_t>(len) < sizeof(buffer)) {
55 print(buffer);
56 va_end(args_copy);
57 return;
58 }
59 // Output exceeds the stack buffer: format into a heap buffer so the tail
60 // (e.g. the CRC and END line of an armored block, or a long vCard line) is
61 // not silently dropped.
62 char* heap = static_cast<char*>(malloc(static_cast<size_t>(len) + 1));
63 if (heap) {
64 vsnprintf(heap, static_cast<size_t>(len) + 1, format, args_copy);
65 print(heap);
66 free(heap);
67 } else {
68 print(buffer);
69 }
70 va_end(args_copy);
71}
72
78void Console::print(const char* str) {
79 if (!str) return;
80 console_print(str);
81}
82
88void Console::putchar(char c) {
90}
91
97 return console_getchar();
98}
99
106}
107
113 return console_available();
114}
115
121 print("> ");
122 flush();
123}
124
125} // namespace cdc::serial
CDC Log: logging over TinyUSB CDC and UART.
int console_getchar(void)
Reads one character from available console input source.
Definition cdc_log.cpp:283
bool console_available(void)
Returns whether any console input source has pending data.
Definition cdc_log.cpp:262
void console_print(const char *str)
Writes string to active console outputs.
Definition cdc_log.cpp:313
void console_flush(void)
Flushes buffered console output transports.
Definition cdc_log.cpp:407
void console_putchar(char c)
Writes single character to active console outputs.
Definition cdc_log.cpp:387
static void print(const char *str)
Prints raw string to console.
Definition Console.cpp:78
static void showPrompt()
Prints standard shell prompt.
Definition Console.cpp:120
static void static void vprintf(const char *format, va_list args)
Prints formatted text with explicit varargs list.
Definition Console.cpp:45
static void flush()
Flushes pending console output.
Definition Console.cpp:104
static void printf(const char *format,...) __attribute__((format(printf
Prints formatted text to console.
Definition Console.cpp:32
static bool available()
Checks whether console input is available.
Definition Console.cpp:112
static void putchar(char c)
Writes a single character to console.
Definition Console.cpp:88
static int getchar()
Reads one character from console input.
Definition Console.cpp:96
static void init()
Initializes console wrapper state.
Definition Console.cpp:21
static bool s_initialized
Definition Console.cpp:15