1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-18 12:52:44 +01:00
RIOT/examples/rust-gcoap/src/lib.rs

60 lines
1.8 KiB
Rust

// Copyright (C) 2020 Christian Amsüss
//
// This file is subject to the terms and conditions of the GNU Lesser
// General Public License v2.1. See the file LICENSE in the top level
// directory for more details.
#![no_std]
use riot_wrappers::{riot_main, println};
use riot_wrappers::{gcoap, thread, ztimer, gnrc};
use coap_handler_implementations::{ReportingHandlerBuilder, HandlerBuilder};
extern crate rust_riotmodules;
riot_main!(main);
fn main() {
extern "C" {
fn do_vfs_init();
}
unsafe { do_vfs_init() };
let handler = coap_message_demos::full_application_tree(None)
.below(&["ps"], riot_coap_handler_demos::ps::ps_tree())
.below(&["vfs"], riot_coap_handler_demos::vfs::vfs("/const"))
.with_wkc()
;
let mut handler = riot_wrappers::coap_handler::GcoapHandler(handler);
let mut listener = gcoap::SingleHandlerListener::new_catch_all(&mut handler);
gcoap::scope(|greg| {
greg.register(&mut listener);
println!("CoAP server ready; waiting for interfaces to settle before reporting addresses...");
let sectimer = ztimer::Clock::sec();
sectimer.sleep_ticks(2);
for netif in gnrc::Netif::all() {
println!("Active interface from PID {:?} ({:?})", netif.pid(), netif.pid().get_name().unwrap_or("unnamed"));
match netif.ipv6_addrs() {
Ok(addrs) => {
for a in &addrs {
println!(" Address {:?}", a);
}
}
_ => {
println!(" Does not support IPv6.");
}
}
}
// Sending main thread to sleep; can't return or the Gcoap handler would need to be
// deregistered (which it can't).
loop { thread::sleep(); }
})
}