use crate::svd::register::{
create_bit_range, create_field, create_register, create_register_properties,
};
use crate::Result;
pub fn create() -> Result<svd::RegisterCluster> {
let fields = [
create_field(
"nonce_mode",
"TRNG Nonce operating mode",
create_bit_range("[2:2]")?,
svd::Access::ReadOnly,
None,
)?,
create_field(
"r256",
"TRNG 256-bit random number operating mode",
create_bit_range("[3:3]")?,
svd::Access::ReadOnly,
None,
)?,
create_field(
"mission_mode",
"TRNG Mission Mode operating mode",
create_bit_range("[8:8]")?,
svd::Access::ReadOnly,
None,
)?,
create_field(
"seeded",
"TRNG Seeded operating mode",
create_bit_range("[9:9]")?,
svd::Access::ReadOnly,
None,
)?,
]
.into_iter()
.chain((0..8).filter_map(|idx| {
create_field(
format!("last_reseed{idx}").as_str(),
format!("TRNG Last Reseed {idx} status").as_str(),
create_bit_range(format!("[{}:{}]", 0x10 + idx, 0x10 + idx).as_str()).ok()?,
svd::Access::ReadOnly,
None,
)
.ok()
}))
.chain([
create_field(
"srvc_rqst",
"TRNG Service Request",
create_bit_range("[27:27]")?,
svd::Access::ReadOnly,
None,
)?,
create_field(
"rand_generating",
"TRNG Random Number Generating Status",
create_bit_range("[30:30]")?,
svd::Access::ReadOnly,
None,
)?,
create_field(
"rand_seeding",
"TRNG Random Number Seeding Status",
create_bit_range("[31:31]")?,
svd::Access::ReadOnly,
None,
)?,
])
.collect::<Vec<svd::Field>>();
Ok(svd::RegisterCluster::Register(create_register(
"stat",
"TRNG STAT Register",
0x4,
create_register_properties(32, 0)?,
Some(fields.as_ref()),
None,
)?))
}