From a376b374263514a7bd6caf5bf1f26dcf6fb35b0b Mon Sep 17 00:00:00 2001 From: Astro Date: Mon, 20 Apr 2020 23:40:01 +0200 Subject: [PATCH] libsupport_zynq: add logger implementation for the `log` crate --- Cargo.lock | 18 ++++++++++++++++++ experiments/Cargo.toml | 1 + experiments/src/main.rs | 7 ++++++- libsupport_zynq/Cargo.toml | 1 + libsupport_zynq/src/lib.rs | 1 + libsupport_zynq/src/logger.rs | 27 +++++++++++++++++++++++++++ 6 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 libsupport_zynq/src/logger.rs diff --git a/Cargo.lock b/Cargo.lock index 68c7051..b4b7a60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,6 +15,11 @@ name = "byteorder" version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "compiler_builtins" version = "0.1.26" @@ -29,12 +34,14 @@ dependencies = [ "libcortex_a9 0.0.0", "libregister 0.0.0", "libsupport_zynq 0.0.0", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "libasync" version = "0.0.0" dependencies = [ + "libboard_zynq 0.0.0", "libcortex_a9 0.0.0", "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", "smoltcp 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -77,6 +84,7 @@ dependencies = [ "libcortex_a9 0.0.0", "libregister 0.0.0", "linked_list_allocator 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "r0 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -85,6 +93,14 @@ name = "linked_list_allocator" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "log" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "managed" version = "0.7.1" @@ -127,8 +143,10 @@ dependencies = [ "checksum bit_field 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a165d606cf084741d4ac3a28fb6e9b1eb0bd31f6cd999098cfddb0b2ab381dc0" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "checksum compiler_builtins 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "036b035e9ebcd705affece16319223d19f229e2358be6e3b7b094e57193312e6" "checksum linked_list_allocator 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5825aea823c659d0fdcdbe8c9b78baf56f3a10365d783db874f6d360df72626f" +"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum managed 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fdcec5e97041c7f0f1c5b7d93f12e57293c831c646f4cc7a5db59460c7ea8de6" "checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" "checksum r0 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd7a31eed1591dcbc95d92ad7161908e72f4677f8fabf2a32ca49b4237cbf211" diff --git a/experiments/Cargo.toml b/experiments/Cargo.toml index 8c0e18c..ddf863d 100644 --- a/experiments/Cargo.toml +++ b/experiments/Cargo.toml @@ -11,6 +11,7 @@ target_cora_z7_10 = ["libboard_zynq/target_cora_z7_10", "libsupport_zynq/target_ default = ["target_zc706"] [dependencies] +log = "0.4" libregister = { path = "../libregister" } libcortex_a9 = { path = "../libcortex_a9" } libboard_zynq = { path = "../libboard_zynq" } diff --git a/experiments/src/main.rs b/experiments/src/main.rs index aaabfd2..af2a125 100644 --- a/experiments/src/main.rs +++ b/experiments/src/main.rs @@ -5,6 +5,7 @@ extern crate alloc; use core::{mem::transmute, task::Poll}; use alloc::{borrow::ToOwned, collections::BTreeMap, format}; +use log::info; use libcortex_a9::{mutex::Mutex, sync_channel::{self, sync_channel}}; use libboard_zynq::{ print, println, @@ -34,9 +35,13 @@ static mut STACK_CORE1: [u32; 512] = [0; 512]; pub fn main_core0() { // zynq::clocks::CpuClocks::enable_io(1_250_000_000); println!("\nzc706 main"); + + libsupport_zynq::logger::init().unwrap(); + log::set_max_level(log::LevelFilter::Trace); + { use libregister::RegisterR; - println!("Boot mode: {:?}", zynq::slcr::RegisterBlock::new().boot_mode.read().boot_mode_pins()); + info!("Boot mode: {:?}", zynq::slcr::RegisterBlock::new().boot_mode.read().boot_mode_pins()); } #[cfg(feature = "target_zc706")] diff --git a/libsupport_zynq/Cargo.toml b/libsupport_zynq/Cargo.toml index 8921ac7..b36307a 100644 --- a/libsupport_zynq/Cargo.toml +++ b/libsupport_zynq/Cargo.toml @@ -12,6 +12,7 @@ target_cora_z7_10 = ["libboard_zynq/target_cora_z7_10"] [dependencies] r0 = "1" compiler_builtins = "0.1" +log = "0.4" linked_list_allocator = { version = "0.8", default-features = false } libregister = { path = "../libregister" } libcortex_a9 = { path = "../libcortex_a9" } diff --git a/libsupport_zynq/src/lib.rs b/libsupport_zynq/src/lib.rs index c1e0a5e..bd9faf6 100644 --- a/libsupport_zynq/src/lib.rs +++ b/libsupport_zynq/src/lib.rs @@ -10,4 +10,5 @@ pub extern crate compiler_builtins; pub mod boot; mod abort; mod panic; +pub mod logger; pub mod ram; diff --git a/libsupport_zynq/src/logger.rs b/libsupport_zynq/src/logger.rs new file mode 100644 index 0000000..534897e --- /dev/null +++ b/libsupport_zynq/src/logger.rs @@ -0,0 +1,27 @@ +//! A logger for the `log` crate + +use libboard_zynq::{println, stdio}; + +pub static LOGGER: Logger = Logger; + +pub struct Logger; + +pub fn init() -> Result<(), log::SetLoggerError> { + log::set_logger(&LOGGER) +} + +impl log::Log for Logger { + fn enabled(&self, metadata: &log::Metadata) -> bool { + metadata.level() <= log::Level::Trace + } + + fn log(&self, record: &log::Record) { + if true || self.enabled(record.metadata()) { + println!("{} - {}", record.level(), record.args()); + } + } + fn flush(&self) { + let uart = stdio::get_uart(); + while !uart.tx_fifo_empty() {} + } +}