1use super::{basic_pack, mapping, record01, records};
6use crate::record01::View;
7use crate::Rcvbp;
8use anyhow::Result;
9use panelspec::{ChipLibrary, PanelSpec};
10
11pub struct Generated {
12 pub rcvbp: Rcvbp,
13 pub basic_pack: [u8; 256],
14 pub sources: Vec<String>,
16}
17
18pub fn generate(spec: &PanelSpec, chip: &ChipLibrary) -> Result<Generated> {
21 spec.validate()?;
22 let mut prov = Vec::new();
23 let rec01 = record01::build(spec, chip, &mut prov)?.to_vec();
24 let mapping = mapping::record(spec);
25 prov.push(format!(
26 "rcvbp record 0x03 <- generated ({}x{} stored, 1/{}, groups {}, lines {})",
27 spec.module.width,
28 spec.module.height / 2,
29 spec.module.scan,
30 if spec.mapping.reversed_groups { "reversed" } else { "forward" },
31 if spec.mapping.reversed_lines { "reversed" } else { "top-down" },
32 ));
33 let regs = chip.record_84(spec.module.scan)?.map(|r| r.to_vec());
34 match ®s {
35 Some(_) => prov.push(format!("rcvbp record 0x84 <- chip library {} (reg 0x02 = scan-1)", chip.name)),
36 None => prov.push(format!("rcvbp record 0x84 omitted: {} has no addressed register table", chip.name)),
37 }
38 prov.push("rcvbp other records <- decoded vendor defaults (records.rs)".into());
39 let basic_pack = basic_pack::body(spec, View::new(&rec01)?, &mut prov);
40 let rcvbp = records::assemble(spec, rec01, mapping, regs);
41 Ok(Generated {
42 rcvbp,
43 basic_pack,
44 sources: prov,
45 })
46}