Skip to content

Commit 2899cd6

Browse files
committed
device-selected to build-rs
1 parent 1c41a58 commit 2899cd6

File tree

6 files changed

+114
-122
lines changed

6 files changed

+114
-122
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
2121

2222
### Changed
2323

24+
- Check features enabled in `build-rs`
2425
- bump embedded-hal to `1.0-rc2`
2526
- Use `as_ptr` for register address casting
2627
- Updated `synopsys-usb-otg` to `0.4.0`

Cargo.toml

+55-40
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ systick-monotonic = { version = "1.0", optional = true }
4747
enumflags2 = "0.7.8"
4848
embedded-storage = "0.3"
4949
vcell = "0.1.3"
50+
document-features = "0.2"
5051

5152
[dependencies.time]
5253
version = "0.3.14"
@@ -99,27 +100,30 @@ default-features = false
99100
features = ["macros"]
100101

101102
[features]
102-
device-selected = []
103-
rt = [] # deprecated
103+
#! Use one of the supported STM32-serie related features:
104+
#! `stm32f401`, `stm32f405`, `stm32f407`, `stm32f415`, `stm32f417`, `stm32f410`,
105+
#! `stm32f411`, `stm32f412`, `stm32f413`, `stm32f423`, `stm32f427`, `stm32f429`,
106+
#! `stm32f437`, `stm32f439`, `stm32f446`, `stm32f469`, `stm32f479`.
107+
104108
# Note: stm32f4 has only one feature for some very similar device families,
105109
# so it's intended for e.g. stm32f405/415 to both enable stm32f4/stm32f405.
106-
stm32f401 = ["stm32f4/stm32f401", "device-selected", "gpio-f401",]
107-
stm32f405 = ["stm32f4/stm32f405", "device-selected", "gpio-f417"]
108-
stm32f407 = ["stm32f4/stm32f407", "device-selected", "gpio-f417"]
109-
stm32f415 = ["stm32f4/stm32f405", "device-selected", "gpio-f417", "cryp"]
110-
stm32f417 = ["stm32f4/stm32f407", "device-selected", "gpio-f417", "cryp"]
111-
stm32f410 = ["stm32f4/stm32f410", "device-selected", "gpio-f410"]
112-
stm32f411 = ["stm32f4/stm32f411", "device-selected", "gpio-f411"]
113-
stm32f412 = ["stm32f4/stm32f412", "device-selected", "gpio-f412"]
114-
stm32f413 = ["stm32f4/stm32f413", "device-selected", "gpio-f413"]
115-
stm32f423 = ["stm32f4/stm32f413", "device-selected", "gpio-f413", "aes"]
116-
stm32f427 = ["stm32f4/stm32f427", "device-selected", "gpio-f427", "fsmc"]
117-
stm32f429 = ["stm32f4/stm32f429", "device-selected", "gpio-f427", "fmc"]
118-
stm32f437 = ["stm32f4/stm32f427", "device-selected", "gpio-f427", "fsmc", "cryp"]
119-
stm32f439 = ["stm32f4/stm32f429", "device-selected", "gpio-f427", "fmc", "cryp"]
120-
stm32f446 = ["stm32f4/stm32f446", "device-selected", "gpio-f446"]
121-
stm32f469 = ["stm32f4/stm32f469", "device-selected", "gpio-f469"]
122-
stm32f479 = ["stm32f4/stm32f469", "device-selected", "gpio-f469", "cryp"]
110+
stm32f401 = ["stm32f4/stm32f401", "gpio-f401",]
111+
stm32f405 = ["stm32f4/stm32f405", "gpio-f417"]
112+
stm32f407 = ["stm32f4/stm32f407", "gpio-f417"]
113+
stm32f415 = ["stm32f4/stm32f405", "gpio-f417", "cryp"]
114+
stm32f417 = ["stm32f4/stm32f407", "gpio-f417", "cryp"]
115+
stm32f410 = ["stm32f4/stm32f410", "gpio-f410"]
116+
stm32f411 = ["stm32f4/stm32f411", "gpio-f411"]
117+
stm32f412 = ["stm32f4/stm32f412", "gpio-f412"]
118+
stm32f413 = ["stm32f4/stm32f413", "gpio-f413"]
119+
stm32f423 = ["stm32f4/stm32f413", "gpio-f413", "aes"]
120+
stm32f427 = ["stm32f4/stm32f427", "gpio-f427", "fsmc"]
121+
stm32f429 = ["stm32f4/stm32f429", "gpio-f427", "fmc"]
122+
stm32f437 = ["stm32f4/stm32f427", "gpio-f427", "fsmc", "cryp"]
123+
stm32f439 = ["stm32f4/stm32f429", "gpio-f427", "fmc", "cryp"]
124+
stm32f446 = ["stm32f4/stm32f446", "gpio-f446"]
125+
stm32f469 = ["stm32f4/stm32f469", "gpio-f469"]
126+
stm32f479 = ["stm32f4/stm32f469", "gpio-f469", "cryp"]
123127

124128
gpio-f401 = [
125129
"gpiod", "gpioe",
@@ -255,16 +259,29 @@ gpio-f469 = [
255259
"usart3", "uart4", "uart5", "uart7", "uart8",
256260
]
257261

258-
usb_fs = ["synopsys-usb-otg", "synopsys-usb-otg/fs"]
259-
usb_hs = ["synopsys-usb-otg", "synopsys-usb-otg/hs"]
262+
## Support monotonic timers that can be used by [RTIC framework](https://crates.io/crates/cortex-m-rtic)
263+
rtic = ["dep:rtic-monotonic", "dep:systick-monotonic"]
264+
265+
## Implementation of `defmt::Format` for public enums and structures. See [defmt](https://crates.io/crates/defmt)
266+
defmt = ["dep:defmt", "fugit/defmt", "nb/defmt-0-3"]
260267

261-
can = ["bxcan"]
268+
## bxCAN peripheral support. See [bxcan](https://crates.io/crates/bxcan)
269+
can = ["dep:bxcan"]
262270

263-
i2s = ["stm32_i2s_v12x"]
271+
## I2S peripheral support. See [stm32_i2s_v12x](https://crates.io/crates/stm32_i2s_v12x)
272+
i2s = ["dep:stm32_i2s_v12x"]
264273

265-
fsmc_lcd = ["display-interface"]
274+
## USB OTG-FS peripheral support. See [synopsys-usb-otg](https://crates.io/crates/synopsys-usb-otg)
275+
usb_fs = ["dep:synopsys-usb-otg", "synopsys-usb-otg/fs"]
276+
## USB OTG-HS peripheral support. See [synopsys-usb-otg](https://crates.io/crates/synopsys-usb-otg)
277+
usb_hs = ["dep:synopsys-usb-otg", "synopsys-usb-otg/hs"]
278+
279+
## LCD support via FMC/FSMC peripheral. See [display-interface](https://crates.io/crates/display-interface)
280+
fsmc_lcd = ["dep:display-interface"]
281+
282+
## SDIO peripheral support. See [sdio-host](https://crates.io/crates/sdio-host)
283+
sdio-host = ["dep:sdio-host"]
266284

267-
defmt = ["dep:defmt", "fugit/defmt", "nb/defmt-0-3"]
268285
dfsdm = []
269286
sai = []
270287

@@ -328,8 +345,6 @@ uart8 = []
328345
uart9 = []
329346
uart10 = []
330347

331-
rtic = ["rtic-monotonic", "systick-monotonic"]
332-
333348
[profile.dev]
334349
debug = true
335350
lto = true
@@ -355,11 +370,11 @@ required-features = ["can", "stm32f405"]
355370

356371
[[example]]
357372
name = "delay-syst-blinky"
358-
required-features = ["device-selected"] # stm32f411
373+
required-features = [] # stm32f411
359374

360375
[[example]]
361376
name = "delay-timer-blinky"
362-
required-features = ["device-selected"] # stm32f411
377+
required-features = [] # stm32f411
363378

364379
[[example]]
365380
name = "display-touch"
@@ -371,27 +386,27 @@ required-features = ["gpiog"] # "stm32f429"
371386

372387
[[example]]
373388
name = "dynamic-gpio"
374-
required-features = ["device-selected"]
389+
required-features = []
375390

376391
[[example]]
377392
name = "f413disco-lcd-ferris"
378393
required-features = ["gpiod", "gpioe", "gpiof", "gpiog", "fsmc", "fsmc_lcd"] # stm32f413
379394

380395
[[example]]
381396
name = "hd44780"
382-
required-features = ["device-selected"]
397+
required-features = []
383398

384399
[[example]]
385400
name = "i2s-audio-out"
386401
required-features = ["stm32f411", "i2s"]
387402

388403
[[example]]
389404
name = "ist7920-bidi-normal-spi"
390-
required-features = ["device-selected"]
405+
required-features = []
391406

392407
[[example]]
393408
name = "pwm"
394-
required-features = ["device-selected"]
409+
required-features = []
395410

396411
[[example]]
397412
name = "pwm-input"
@@ -415,15 +430,15 @@ required-features = ["rng"] # stm32f407
415430

416431
[[example]]
417432
name = "rtc"
418-
required-features = ["device-selected"]
433+
required-features = []
419434

420435
[[example]]
421436
name = "rtc_alarm"
422437
required-features = ["stm32f411"]
423438

424439
[[example]]
425440
name = "rtic-adc-dma"
426-
required-features = ["device-selected", "rtic"] # stm32f401
441+
required-features = ["rtic"] # stm32f401
427442

428443
[[example]]
429444
name = "rtic-button"
@@ -467,7 +482,7 @@ required-features = ["gpiod", "sdio", "sdio-host"] # stm32f405
467482

468483
[[example]]
469484
name = "serial"
470-
required-features = ["device-selected"]
485+
required-features = []
471486

472487
[[example]]
473488
name = "serial-9bit"
@@ -483,7 +498,7 @@ required-features = ["stm32f405"]
483498

484499
[[example]]
485500
name = "ssd1306-image"
486-
required-features = ["device-selected"] # stm32f411
501+
required-features = [] # stm32f411
487502

488503
[[example]]
489504
name = "st7789-lcd"
@@ -499,11 +514,11 @@ required-features = ["tim2", "stm32f411"] # stm32f411
499514

500515
[[example]]
501516
name = "timer-periph"
502-
required-features = ["device-selected"]
517+
required-features = []
503518

504519
[[example]]
505520
name = "timer-syst"
506-
required-features = ["device-selected"]
521+
required-features = []
507522

508523
[[example]]
509524
name = "usb-serial-irq"
@@ -515,4 +530,4 @@ required-features = ["otg-fs", "usb_fs"] # stm32f401
515530

516531
[[example]]
517532
name = "ws2812-spi"
518-
required-features = ["device-selected"]
533+
required-features = []

build.rs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::env;
2+
3+
#[derive(Clone, Copy, Debug)]
4+
enum GetOneError {
5+
None,
6+
Multiple,
7+
}
8+
9+
trait IteratorExt: Iterator {
10+
fn get_one(self) -> Result<Self::Item, GetOneError>;
11+
}
12+
13+
impl<T: Iterator> IteratorExt for T {
14+
fn get_one(mut self) -> Result<Self::Item, GetOneError> {
15+
match (self.next(), self.next()) {
16+
(Some(res), None) => Ok(res),
17+
(None, _) => Err(GetOneError::None),
18+
_ => Err(GetOneError::Multiple),
19+
}
20+
}
21+
}
22+
23+
fn main() {
24+
let _chip_name = match env::vars()
25+
.map(|(a, _)| a)
26+
.filter(|x| x.starts_with("CARGO_FEATURE_STM32F4"))
27+
.get_one()
28+
{
29+
Ok(x) => x,
30+
Err(GetOneError::None) => panic!("No stm32xx Cargo feature enabled"),
31+
Err(GetOneError::Multiple) => panic!("Multiple stm32xx Cargo features enabled"),
32+
}
33+
.strip_prefix("CARGO_FEATURE_")
34+
.unwrap()
35+
.to_ascii_lowercase();
36+
}

src/i2s.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::pac;
1212
use crate::rcc::{self, Clocks, Reset};
1313
use fugit::HertzU32 as Hertz;
1414

15-
#[cfg(feature = "stm32_i2s_v12x")]
15+
#[cfg(feature = "i2s")]
1616
pub extern crate stm32_i2s_v12x;
1717

1818
// I2S pins are mostly the same as the corresponding SPI pins:
@@ -202,7 +202,7 @@ macro_rules! i2s {
202202
}
203203
}
204204

205-
#[cfg(feature = "stm32_i2s_v12x")]
205+
#[cfg(feature = "i2s")]
206206
impl stm32_i2s_v12x::WsPin for gpio::alt::$i2s::Ws {
207207
fn is_high(&self) -> bool {
208208
use crate::gpio::ReadPin;
@@ -214,7 +214,7 @@ macro_rules! i2s {
214214
}
215215
}
216216

217-
#[cfg(feature = "stm32_i2s_v12x")]
217+
#[cfg(feature = "i2s")]
218218
unsafe impl stm32_i2s_v12x::I2sPeripheral for I2s<$SPI>
219219
where
220220
$SPI: rcc::Reset,
@@ -388,7 +388,7 @@ macro_rules! dual_i2s {
388388
type I2sExtPeripheral = $I2SEXT;
389389
}
390390

391-
#[cfg(feature = "stm32_i2s_v12x")]
391+
#[cfg(feature = "i2s")]
392392
unsafe impl stm32_i2s_v12x::DualI2sPeripheral for DualI2s<$SPI>
393393
where
394394
$SPI: rcc::Reset,
@@ -445,7 +445,7 @@ dual_i2s!(pac::SPI3, pac::I2S3EXT, DualI2s3, i2s3, i2s_clk);
445445
dual_i2s!(pac::SPI3, pac::I2S3EXT, DualI2s3, i2s3, i2s_apb1_clk);
446446

447447
// DMA support: reuse existing mappings for SPI
448-
#[cfg(feature = "stm32_i2s_v12x")]
448+
#[cfg(feature = "i2s")]
449449
mod dma {
450450
use super::*;
451451
use crate::dma::traits::{DMASet, PeriAddress};

0 commit comments

Comments
 (0)