5export module zxfoundation.sys.printk.core;
6import zxfoundation.base.types;
7import zxfoundation.sys.printk.types;
8import zxfoundation.sys.printk.format;
14namespace zxfoundation::sys::printk {
16 auto set_min_level(log_level level)
noexcept ->
void;
18 auto get_current_level()
noexcept -> log_level;
20 auto handle_min_level(std::string_view val)
noexcept ->
bool;
22 auto init()
noexcept ->
void;
24 auto register_backend(
const printk_backend& backend)
noexcept ->
void;
26 auto read_logs(std::span<u8> dest,
bool consume)
noexcept -> usize;
28 auto log_size()
noexcept -> usize;
34 auto printk_commit(
const char* buf, usize offset)
noexcept ->
void;
36 template <
typename... Args>
37 auto printk(log_level level, std::string_view fmt, Args&&... args)
noexcept ->
void {
38 if (
static_cast<u8>(level) >
static_cast<u8>(get_current_level()))
41 char buf[PRINTK_LINE_MAX]{};
42 usize offset = prepare_header(level, buf, PRINTK_LINE_MAX);
44 offset += lib::format::format_to(
45 {buf + offset, PRINTK_LINE_MAX - offset},
47 std::forward<Args>(args)...);
49 if (offset < (PRINTK_LINE_MAX - 1) && (offset == 0 || buf[offset-1] !=
'\n')) {
54 printk_commit(buf, offset);
57 template <
typename... Args>
auto pemerg(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::EMERG, fmt, std::forward<Args>(args)...); }
58 template <
typename... Args>
auto palert(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::ALERT, fmt, std::forward<Args>(args)...); }
59 template <
typename... Args>
auto pcrit(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::CRIT, fmt, std::forward<Args>(args)...); }
60 template <
typename... Args>
auto perr(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::ERROR, fmt, std::forward<Args>(args)...); }
61 template <
typename... Args>
auto pwarn(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::WARN, fmt, std::forward<Args>(args)...); }
62 template <
typename... Args>
auto pnotice(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::NOTICE, fmt, std::forward<Args>(args)...); }
63 template <
typename... Args>
auto pinfo(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::INFO, fmt, std::forward<Args>(args)...); }
64 template <
typename... Args>
auto pverbose(std::string_view fmt, Args&&... args)
noexcept ->
void { printk(log_level::VERBOSE, fmt, std::forward<Args>(args)...); }