Skip to content

Commit 4e9236d

Browse files
committed
codegen: Emit 'auto-generated' comment
1 parent 938bb36 commit 4e9236d

File tree

11 files changed

+56
-15
lines changed

11 files changed

+56
-15
lines changed

codegen/src/codegen/gpio.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ fn gen_port(port: &Port, feature: &str) -> Result<()> {
8080
);
8181
println!(" pins: [");
8282

83-
for pin in port.pins.iter() {
83+
for pin in &port.pins {
8484
gen_pin(pin)?;
8585
}
8686

@@ -130,7 +130,7 @@ fn get_pin_reset_mode(pin: &gpio::Pin) -> Result<&'static str> {
130130

131131
fn get_pin_af_numbers(pin: &gpio::Pin) -> Result<Vec<u8>> {
132132
let mut numbers = Vec::new();
133-
for signal in pin.pin_signals.iter() {
133+
for signal in &pin.pin_signals {
134134
numbers.push(signal.af()?);
135135
}
136136

codegen/src/codegen/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,11 @@
11
pub mod gpio;
2+
3+
use crate::cubemx::package::Package;
4+
5+
pub fn gen_autogen_comment(package: &Package) {
6+
println!("// auto-generated using codegen");
7+
println!(
8+
"// STM32CubeMX DB release: {}",
9+
package.pack_description.release
10+
);
11+
}

codegen/src/cubemx/db.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,11 @@ impl Db {
2323
serde_xml_rs::de::from_reader(file)
2424
.with_context(|| format!("cannot parse DB file: {:?}", path))
2525
}
26+
27+
pub fn load_mcu<'de, P: AsRef<Path>, T: Deserialize<'de>>(&self, name: P) -> Result<T> {
28+
let mut mcu_path = PathBuf::new();
29+
mcu_path.push("mcu");
30+
mcu_path.push(name);
31+
self.load(&mcu_path)
32+
}
2633
}

codegen/src/cubemx/families.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use anyhow::{Context, Result};
33
use serde::Deserialize;
44

55
pub fn load(db: &Db) -> Result<Families> {
6-
db.load("families")
6+
db.load_mcu("families")
77
}
88

99
pub fn load_f3(db: &Db) -> Result<Family> {

codegen/src/cubemx/ip/gpio.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
use super::ip_path;
21
use crate::cubemx::Db;
32
use anyhow::{bail, Context, Result};
43
use once_cell::sync::Lazy;
54
use regex::Regex;
65
use serde::Deserialize;
6+
use std::path::PathBuf;
77

88
pub fn load(db: &Db, version: &str) -> Result<Ip> {
99
let name = format!("GPIO-{}_Modes", version);
10-
db.load(ip_path(&name))
10+
let ip_path: PathBuf = ["IP", &name].iter().collect();
11+
db.load_mcu(&ip_path)
1112
}
1213

1314
#[derive(Debug, Deserialize)]

codegen/src/cubemx/ip/mod.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1 @@
11
pub mod gpio;
2-
3-
use std::path::PathBuf;
4-
5-
fn ip_path(name: &str) -> PathBuf {
6-
["IP", name].iter().collect()
7-
}

codegen/src/cubemx/mcu.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use anyhow::Result;
33
use serde::Deserialize;
44

55
pub fn load(db: &Db, name: &str) -> Result<Mcu> {
6-
db.load(name)
6+
db.load_mcu(name)
77
}
88

99
#[derive(Debug, Deserialize)]

codegen/src/cubemx/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
pub mod families;
22
pub mod ip;
33
pub mod mcu;
4+
pub mod package;
45

56
mod db;
67

codegen/src/cubemx/package.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use crate::cubemx::Db;
2+
use anyhow::Result;
3+
use serde::Deserialize;
4+
5+
pub fn load(db: &Db) -> Result<Package> {
6+
db.load("package")
7+
}
8+
9+
#[derive(Debug, Deserialize)]
10+
#[serde(rename_all = "PascalCase")]
11+
pub struct Package {
12+
pub pack_description: PackDescription,
13+
}
14+
15+
#[derive(Debug, Deserialize)]
16+
#[serde(rename_all = "PascalCase")]
17+
pub struct PackDescription {
18+
pub release: String,
19+
}

codegen/src/main.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ mod cubemx;
33

44
use anyhow::Result;
55
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
6+
use cubemx::Db;
67

78
fn parse_args() -> ArgMatches<'static> {
89
App::new("codegen")
@@ -33,8 +34,17 @@ fn handle_gpio(args: &ArgMatches) -> Result<()> {
3334
let db_path = args.value_of("db_path").unwrap();
3435
let db = cubemx::Db::new(db_path);
3536

37+
emit_autogen_comment(&db)?;
38+
3639
let gpio_ips = cubemx::load_f3_gpio_ips(&db)?;
3740
codegen::gpio::gen_mappings(&gpio_ips)?;
3841

3942
Ok(())
4043
}
44+
45+
fn emit_autogen_comment(db: &Db) -> Result<()> {
46+
let package = cubemx::package::load(&db)?;
47+
codegen::gen_autogen_comment(&package);
48+
49+
Ok(())
50+
}

src/gpio.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,9 +668,8 @@ macro_rules! gpio {
668668
}
669669
};
670670
}
671-
672-
// The below mappings were auto-generated with the `codegen` crate.
673-
// Do not edit them manually!
671+
// auto-generated using codegen
672+
// STM32CubeMX DB release: DB.6.0.0
674673

675674
#[cfg(feature = "gpio-f302")]
676675
gpio!([

0 commit comments

Comments
 (0)