add a routine to initialize the ioconfig from the resource spec

in particular this makes sure the io config masks are extracted.
This commit is contained in:
bunnie 2026-02-28 23:20:04 +08:00
parent f0b0c038f2
commit c38214865f

View file

@ -18,6 +18,8 @@ use num_traits::ToPrimitive;
use xous::MemoryRange;
use crate::IoxPort;
#[cfg(feature = "std")]
use crate::bio_resources::ResourceSpec;
pub const BIO_SERVER_NAME: &'static str = "_BIO server_";
@ -401,6 +403,22 @@ impl Default for IoConfig {
}
}
}
#[cfg(feature = "std")]
impl IoConfig {
pub fn from_resource_spec(spec: &ResourceSpec, mode: &Option<IoConfigMode>) -> Result<Self, String> {
let mut mask: u32 = 0;
for &pin in spec.static_pins.iter() {
if pin > 31 {
return Err(format!("Pin {} exceeds maximum bit position of 31", pin));
}
mask |= 1u32 << pin;
}
let mut ret = IoConfig::default();
ret.mapped = mask;
ret.mode = mode.unwrap_or(IoConfigMode::Overwrite);
Ok(ret)
}
}
#[bitfield(u8)]
#[derive(Debug)]