-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
70 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,70 @@ | ||
//! LVGL Functions specific to Apache NuttX RTOS | ||
|
||
/// Import the Zig Standard Library | ||
const std = @import("std"); | ||
const builtin = @import("builtin"); | ||
|
||
/////////////////////////////////////////////////////////////////////////////// | ||
// Panic Handler | ||
|
||
/// Called by Zig when it hits a Panic. We print the Panic Message, Stack Trace and halt. See | ||
/// https://andrewkelley.me/post/zig-stack-traces-kernel-panic-bare-bones-os.html | ||
/// https://github.com/ziglang/zig/blob/master/lib/std/builtin.zig#L763-L847 | ||
pub fn panic(message: []const u8, _stack_trace: ?*std.builtin.StackTrace) noreturn { | ||
// Print the Panic Message | ||
_ = _stack_trace; | ||
_ = puts("\n!ZIG PANIC!"); | ||
_ = puts(@ptrCast([*c]const u8, message)); | ||
|
||
// Print the Stack Trace | ||
_ = puts("Stack Trace:"); | ||
var it = std.debug.StackIterator.init(@returnAddress(), null); | ||
while (it.next()) |return_address| { | ||
_ = printf("%p\n", return_address); | ||
} | ||
|
||
// Halt | ||
while (true) {} | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////////// | ||
// Logging | ||
|
||
/// Called by Zig for `std.log.debug`, `std.log.info`, `std.log.err`, ... | ||
/// https://gist.github.com/leecannon/d6f5d7e5af5881c466161270347ce84d | ||
pub fn log( | ||
comptime _message_level: std.log.Level, | ||
comptime _scope: @Type(.EnumLiteral), | ||
comptime format: []const u8, | ||
args: anytype, | ||
) void { | ||
_ = _message_level; | ||
_ = _scope; | ||
|
||
// Format the message | ||
var buf: [100]u8 = undefined; // Limit to 100 chars | ||
var slice = std.fmt.bufPrint(&buf, format, args) catch { | ||
_ = puts("*** log error: buf too small"); | ||
return; | ||
}; | ||
|
||
// Terminate the formatted message with a null | ||
var buf2: [buf.len + 1:0]u8 = undefined; | ||
std.mem.copy(u8, buf2[0..slice.len], slice[0..slice.len]); | ||
buf2[slice.len] = 0; | ||
|
||
// Print the formatted message | ||
_ = puts(&buf2); | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////////// | ||
// Imported Functions and Variables | ||
|
||
/// For safety, we import these functions ourselves to enforce Null-Terminated Strings. | ||
/// We changed `[*c]const u8` to `[*:0]const u8` | ||
extern fn printf(format: [*:0]const u8, ...) c_int; | ||
extern fn puts(str: [*:0]const u8) c_int; | ||
|
||
/// Aliases for Zig Standard Library | ||
const assert = std.debug.assert; | ||
const debug = std.log.debug; |