Fix the no_std build

This commit is contained in:
ivmarkov 2023-06-13 10:12:42 +00:00
parent 864692845b
commit 42470e1a34
3 changed files with 62 additions and 7 deletions

View file

@ -51,9 +51,10 @@ fn main() -> Result<(), Error> {
thread.join().unwrap() thread.join().unwrap()
} }
// NOTE: For no_std, name this entry point according to your MCU platform
#[cfg(not(feature = "std"))] #[cfg(not(feature = "std"))]
#[no_mangle] #[no_mangle]
fn main() { fn app_main() {
run().unwrap(); run().unwrap();
} }
@ -93,11 +94,27 @@ fn run() -> Result<(), Error> {
let dev_att = dev_att::HardCodedDevAtt::new(); let dev_att = dev_att::HardCodedDevAtt::new();
let matter = Matter::new_default( #[cfg(feature = "std")]
let epoch = matter::utils::epoch::sys_epoch;
#[cfg(feature = "std")]
let rand = matter::utils::rand::sys_rand;
// NOTE: For no_std, provide your own function here
#[cfg(not(feature = "std"))]
let epoch = matter::utils::epoch::dummy_epoch;
// NOTE: For no_std, provide your own function here
#[cfg(not(feature = "std"))]
let rand = matter::utils::rand::dummy_rand;
let matter = Matter::new(
// vid/pid should match those in the DAC // vid/pid should match those in the DAC
&dev_det, &dev_det,
&dev_att, &dev_att,
&mdns, &mdns,
epoch,
rand,
matter::MATTER_PORT, matter::MATTER_PORT,
); );
@ -203,6 +220,10 @@ fn run() -> Result<(), Error> {
let mut fut = pin!(async move { select(&mut io_fut, &mut mdns_fut).await.unwrap() }); let mut fut = pin!(async move { select(&mut io_fut, &mut mdns_fut).await.unwrap() });
info!("Final future: {:p}", &mut fut);
// NOTE: For no_std, replace with your own no_std way of polling the future
#[cfg(feature = "std")]
smol::block_on(&mut fut)?; smol::block_on(&mut fut)?;
Ok::<_, matter::error::Error>(()) Ok::<_, matter::error::Error>(())
@ -222,7 +243,19 @@ fn handler<'a>(matter: &'a Matter<'a>) -> impl Handler + 'a {
) )
} }
#[cfg(not(target_os = "espidf"))] // NOTE: For no_std, implement here your own way of initializing the logger
#[cfg(all(not(feature = "std"), not(target_os = "espidf")))]
#[inline(never)]
fn initialize_logger() {}
// NOTE: For no_std, implement here your own way of initializing the network
#[cfg(all(not(feature = "std"), not(target_os = "espidf")))]
#[inline(never)]
fn initialize_network() -> Result<(Ipv4Addr, Ipv6Addr, u32), Error> {
Ok((Ipv4Addr::UNSPECIFIED, Ipv6Addr::UNSPECIFIED, 0))
}
#[cfg(all(feature = "std", not(target_os = "espidf")))]
#[inline(never)] #[inline(never)]
fn initialize_logger() { fn initialize_logger() {
env_logger::init_from_env( env_logger::init_from_env(
@ -230,7 +263,7 @@ fn initialize_logger() {
); );
} }
#[cfg(not(target_os = "espidf"))] #[cfg(all(feature = "std", not(target_os = "espidf")))]
#[inline(never)] #[inline(never)]
fn initialize_network() -> Result<(Ipv4Addr, Ipv6Addr, u32), Error> { fn initialize_network() -> Result<(Ipv4Addr, Ipv6Addr, u32), Error> {
use log::error; use log::error;

View file

@ -27,7 +27,7 @@ pub fn hkdf_sha256(_salt: &[u8], _ikm: &[u8], _info: &[u8], _key: &mut [u8]) ->
Ok(()) Ok(())
} }
#[derive(Clone)] #[derive(Clone, Debug)]
pub struct Sha256 {} pub struct Sha256 {}
impl Sha256 { impl Sha256 {

View file

@ -150,7 +150,7 @@ mod dummy_udp {
use crate::error::*; use crate::error::*;
use log::{debug, info}; use log::{debug, info};
use crate::transport::network::SocketAddr; use crate::transport::network::{Ipv4Addr, Ipv6Addr, SocketAddr};
pub struct UdpListener {} pub struct UdpListener {}
@ -163,7 +163,29 @@ mod dummy_udp {
Ok(listener) Ok(listener)
} }
pub async fn join_multicast(&mut self, ip_addr: IpAddr) -> Result<(), Error> { pub fn join_multicast_v6(
&mut self,
multiaddr: Ipv6Addr,
interface: u32,
) -> Result<(), Error> {
info!(
"Pretending to join IPV6 multicast {}/{}",
multiaddr, interface
);
Ok(())
}
pub fn join_multicast_v4(
&mut self,
multiaddr: Ipv4Addr,
interface: Ipv4Addr,
) -> Result<(), Error> {
info!(
"Pretending to join IP multicast {}/{}",
multiaddr, interface
);
Ok(()) Ok(())
} }