Skip to content

Commit e909664

Browse files
committed
const generics before mode
1 parent be4d08d commit e909664

File tree

18 files changed

+311
-311
lines changed

18 files changed

+311
-311
lines changed

examples/i2s-audio-out-dma.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,10 @@ type I2sDmaTransfer = Transfer<
214214
I2s<
215215
SPI3,
216216
(
217-
PA4<Alternate<PushPull, 6>>,
218-
PC10<Alternate<PushPull, 6>>,
219-
PC7<Alternate<PushPull, 6>>,
220-
PC12<Alternate<PushPull, 6>>,
217+
PA4<Alternate<6, PushPull>>,
218+
PC10<Alternate<6, PushPull>>,
219+
PC7<Alternate<6, PushPull>>,
220+
PC12<Alternate<6, PushPull>>,
221221
),
222222
>,
223223
TransmitMode<Data16Frame16>,

src/can.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ pub trait Pins<CAN> {
2727

2828
impl<CAN, TX, RX, const TXA: u8, const RXA: u8> Pins<CAN> for (TX, RX)
2929
where
30-
TX: PinA<Tx, CAN, A = Const<TXA>> + SetAlternate<PushPull, TXA>,
31-
RX: PinA<Rx, CAN, A = Const<RXA>> + SetAlternate<PushPull, RXA>,
30+
TX: PinA<Tx, CAN, A = Const<TXA>> + SetAlternate<TXA, PushPull>,
31+
RX: PinA<Rx, CAN, A = Const<RXA>> + SetAlternate<RXA, PushPull>,
3232
{
3333
fn set_alt_mode(&mut self) {
3434
self.0.set_alt_mode();

src/fsmc_lcd/pins.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ mod common_pins {
604604
};
605605

606606
// All FSMC/FMC pins use AF12
607-
type FmcAlternate = Alternate<PushPull, 12>;
607+
type FmcAlternate = Alternate<12, PushPull>;
608608

609609
impl PinD2 for PD0<FmcAlternate> {}
610610
impl PinD3 for PD1<FmcAlternate> {}
@@ -723,36 +723,36 @@ mod extra_pins {
723723
};
724724

725725
// Most FSMC/FMC pins use AF12, but a few use AF10
726-
type FmcAlternate = Alternate<PushPull, 12>;
726+
type FmcAlternate = Alternate<12, PushPull>;
727727

728728
impl PinD4 for PA2<FmcAlternate> {}
729729
impl PinD5 for PA3<FmcAlternate> {}
730730
impl PinD6 for PA4<FmcAlternate> {}
731731
impl PinD7 for PA5<FmcAlternate> {}
732732
impl PinD13 for PB12<FmcAlternate> {}
733-
impl PinD0 for PB14<Alternate<PushPull, 10>> {}
733+
impl PinD0 for PB14<Alternate<10, PushPull>> {}
734734
impl PinWriteEnable for PC2<FmcAlternate> {}
735735
impl PinAddress for PC3<FmcAlternate> {}
736736
impl Sealed for PC3<FmcAlternate> {}
737737
impl PinChipSelect4 for PC4<FmcAlternate> {}
738738
impl Sealed for PC4<FmcAlternate> {}
739739
impl PinReadEnable for PC5<FmcAlternate> {}
740-
impl PinD1 for PC6<Alternate<PushPull, 10>> {}
741-
impl PinD2 for PC11<Alternate<PushPull, 10>> {}
742-
impl PinD3 for PC12<Alternate<PushPull, 10>> {}
743-
impl PinWriteEnable for PD2<Alternate<PushPull, 10>> {}
740+
impl PinD1 for PC6<Alternate<10, PushPull>> {}
741+
impl PinD2 for PC11<Alternate<10, PushPull>> {}
742+
impl PinD3 for PC12<Alternate<10, PushPull>> {}
743+
impl PinWriteEnable for PD2<Alternate<10, PushPull>> {}
744744

745745
// Sealed trait boilerplate
746746
impl Sealed for PA2<FmcAlternate> {}
747747
impl Sealed for PA3<FmcAlternate> {}
748748
impl Sealed for PA4<FmcAlternate> {}
749749
impl Sealed for PA5<FmcAlternate> {}
750750
impl Sealed for PB12<FmcAlternate> {}
751-
impl Sealed for PB14<Alternate<PushPull, 10>> {}
751+
impl Sealed for PB14<Alternate<10, PushPull>> {}
752752
impl Sealed for PC2<FmcAlternate> {}
753753
impl Sealed for PC5<FmcAlternate> {}
754-
impl Sealed for PC6<Alternate<PushPull, 10>> {}
755-
impl Sealed for PC11<Alternate<PushPull, 10>> {}
756-
impl Sealed for PC12<Alternate<PushPull, 10>> {}
757-
impl Sealed for PD2<Alternate<PushPull, 10>> {}
754+
impl Sealed for PC6<Alternate<10, PushPull>> {}
755+
impl Sealed for PC11<Alternate<10, PushPull>> {}
756+
impl Sealed for PC12<Alternate<10, PushPull>> {}
757+
impl Sealed for PD2<Alternate<10, PushPull>> {}
758758
}

src/gpio.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ pub trait PinExt {
9999
}
100100

101101
/// Some alternate mode (type state)
102-
pub struct Alternate<Otype, const A: u8>(PhantomData<Otype>);
102+
pub struct Alternate<const A: u8, Otype>(PhantomData<Otype>);
103103

104104
/// Input mode (type state)
105105
pub struct Input<MODE> {
@@ -129,7 +129,7 @@ pub struct PushPull;
129129
/// Analog mode (type state)
130130
pub struct Analog;
131131

132-
pub type Debugger = Alternate<PushPull, 0>;
132+
pub type Debugger = Alternate<0, PushPull>;
133133

134134
/// GPIO Pin speed selection
135135
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
@@ -262,16 +262,16 @@ where
262262
/// - `MODE` is one of the pin modes (see [Modes](crate::gpio#modes) section).
263263
/// - `P` is port name: `A` for GPIOA, `B` for GPIOB, etc.
264264
/// - `N` is pin number: from `0` to `15`.
265-
pub struct Pin<MODE, const P: char, const N: u8> {
265+
pub struct Pin<const P: char, const N: u8, MODE> {
266266
_mode: PhantomData<MODE>,
267267
}
268-
impl<MODE, const P: char, const N: u8> Pin<MODE, P, N> {
268+
impl<const P: char, const N: u8, MODE> Pin<P, N, MODE> {
269269
const fn new() -> Self {
270270
Self { _mode: PhantomData }
271271
}
272272
}
273273

274-
impl<MODE, const P: char, const N: u8> fmt::Debug for Pin<MODE, P, N> {
274+
impl<const P: char, const N: u8, MODE> fmt::Debug for Pin<P, N, MODE> {
275275
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
276276
formatter.write_fmt(format_args!(
277277
"P{}{}<{}>",
@@ -283,13 +283,13 @@ impl<MODE, const P: char, const N: u8> fmt::Debug for Pin<MODE, P, N> {
283283
}
284284

285285
#[cfg(feature = "defmt")]
286-
impl<MODE, const P: char, const N: u8> defmt::Format for Pin<MODE, P, N> {
286+
impl<const P: char, const N: u8, MODE> defmt::Format for Pin<P, N, MODE> {
287287
fn format(&self, f: defmt::Formatter) {
288288
defmt::write!(f, "P{}{}<{}>", P, N, crate::stripped_type_name::<MODE>());
289289
}
290290
}
291291

292-
impl<MODE, const P: char, const N: u8> PinExt for Pin<MODE, P, N> {
292+
impl<const P: char, const N: u8, MODE> PinExt for Pin<P, N, MODE> {
293293
type Mode = MODE;
294294

295295
#[inline(always)]
@@ -302,7 +302,7 @@ impl<MODE, const P: char, const N: u8> PinExt for Pin<MODE, P, N> {
302302
}
303303
}
304304

305-
impl<MODE, const P: char, const N: u8> Pin<Output<MODE>, P, N> {
305+
impl<const P: char, const N: u8, MODE> Pin<P, N, Output<MODE>> {
306306
/// Set pin speed
307307
pub fn set_speed(self, speed: Speed) -> Self {
308308
let offset = 2 * { N };
@@ -317,7 +317,7 @@ impl<MODE, const P: char, const N: u8> Pin<Output<MODE>, P, N> {
317317
}
318318
}
319319

320-
impl<const P: char, const N: u8> Pin<Output<OpenDrain>, P, N> {
320+
impl<const P: char, const N: u8> Pin<P, N, Output<OpenDrain>> {
321321
/// Enables / disables the internal pull up
322322
pub fn internal_pull_up(self, on: bool) -> Self {
323323
let offset = 2 * { N };
@@ -345,7 +345,7 @@ impl<const P: char, const N: u8> Pin<Output<OpenDrain>, P, N> {
345345
}
346346
}
347347

348-
impl<const P: char, const N: u8, const A: u8> Pin<Alternate<PushPull, A>, P, N> {
348+
impl<const P: char, const N: u8, const A: u8> Pin<P, N, Alternate<A, PushPull>> {
349349
/// Set pin speed
350350
pub fn set_speed(self, speed: Speed) -> Self {
351351
let offset = 2 * { N };
@@ -386,9 +386,9 @@ impl<const P: char, const N: u8, const A: u8> Pin<Alternate<PushPull, A>, P, N>
386386
}
387387
}
388388

389-
impl<const P: char, const N: u8, const A: u8> Pin<Alternate<PushPull, A>, P, N> {
389+
impl<const P: char, const N: u8, const A: u8> Pin<P, N, Alternate<A, PushPull>> {
390390
/// Turns pin alternate configuration pin into open drain
391-
pub fn set_open_drain(self) -> Pin<Alternate<OpenDrain, A>, P, N> {
391+
pub fn set_open_drain(self) -> Pin<P, N, Alternate<A, OpenDrain>> {
392392
let offset = { N };
393393
unsafe {
394394
(*Gpio::<P>::ptr())
@@ -400,12 +400,12 @@ impl<const P: char, const N: u8, const A: u8> Pin<Alternate<PushPull, A>, P, N>
400400
}
401401
}
402402

403-
impl<MODE, const P: char, const N: u8> Pin<MODE, P, N> {
403+
impl<const P: char, const N: u8, MODE> Pin<P, N, MODE> {
404404
/// Erases the pin number from the type
405405
///
406406
/// This is useful when you want to collect the pins into an array where you
407407
/// need all the elements to have the same type
408-
pub fn erase_number(self) -> PEPin<MODE, P> {
408+
pub fn erase_number(self) -> PEPin<P, MODE> {
409409
PEPin::new(N)
410410
}
411411

@@ -418,7 +418,7 @@ impl<MODE, const P: char, const N: u8> Pin<MODE, P, N> {
418418
}
419419
}
420420

421-
impl<MODE, const P: char, const N: u8> Pin<MODE, P, N> {
421+
impl<const P: char, const N: u8, MODE> Pin<P, N, MODE> {
422422
/// Set the output of the pin regardless of its mode.
423423
/// Primarily used to set the output value of the pin
424424
/// before changing its mode to an output to avoid
@@ -452,7 +452,7 @@ impl<MODE, const P: char, const N: u8> Pin<MODE, P, N> {
452452
}
453453
}
454454

455-
impl<MODE, const P: char, const N: u8> Pin<Output<MODE>, P, N> {
455+
impl<const P: char, const N: u8, MODE> Pin<P, N, Output<MODE>> {
456456
#[inline(always)]
457457
pub fn set_high(&mut self) {
458458
self._set_high()
@@ -500,7 +500,7 @@ impl<MODE, const P: char, const N: u8> Pin<Output<MODE>, P, N> {
500500
}
501501
}
502502

503-
impl<const P: char, const N: u8> Pin<Output<OpenDrain>, P, N> {
503+
impl<const P: char, const N: u8> Pin<P, N, Output<OpenDrain>> {
504504
#[inline(always)]
505505
pub fn is_high(&self) -> bool {
506506
!self.is_low()
@@ -512,7 +512,7 @@ impl<const P: char, const N: u8> Pin<Output<OpenDrain>, P, N> {
512512
}
513513
}
514514

515-
impl<MODE, const P: char, const N: u8> Pin<Input<MODE>, P, N> {
515+
impl<const P: char, const N: u8, MODE> Pin<P, N, Input<MODE>> {
516516
#[inline(always)]
517517
pub fn is_high(&self) -> bool {
518518
!self.is_low()
@@ -564,10 +564,10 @@ macro_rules! gpio {
564564
}
565565
}
566566

567-
pub type $PXn<MODE> = super::PEPin<MODE, $port_id>;
567+
pub type $PXn<MODE> = super::PEPin<$port_id, MODE>;
568568

569569
$(
570-
pub type $PXi<MODE> = super::Pin<MODE, $port_id, $i>;
570+
pub type $PXi<MODE> = super::Pin<$port_id, $i, MODE>;
571571
)+
572572

573573
}

src/gpio/alt.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ use crate::{gpio, i2c, i2s, pac, serial, spi};
33

44
pub struct Const<const A: u8>;
55

6-
pub trait SetAlternate<Otype, const A: u8> {
6+
pub trait SetAlternate<const A: u8, Otype> {
77
fn set_alt_mode(&mut self);
88
fn restore_mode(&mut self);
99
}
10-
impl<Otype> SetAlternate<Otype, 0> for NoPin {
10+
impl<Otype> SetAlternate<0, Otype> for NoPin {
1111
fn set_alt_mode(&mut self) {}
1212
fn restore_mode(&mut self) {}
1313
}
14-
impl<MODE: PinMode, const P: char, const N: u8, const A: u8> SetAlternate<PushPull, A>
15-
for Pin<MODE, P, N>
14+
impl<const P: char, const N: u8, MODE: PinMode, const A: u8> SetAlternate<A, PushPull>
15+
for Pin<P, N, MODE>
1616
{
1717
fn set_alt_mode(&mut self) {
1818
self.set_alternate::<A>();
@@ -23,8 +23,8 @@ impl<MODE: PinMode, const P: char, const N: u8, const A: u8> SetAlternate<PushPu
2323
}
2424
}
2525

26-
impl<MODE: PinMode, const P: char, const N: u8, const A: u8> SetAlternate<OpenDrain, A>
27-
for Pin<MODE, P, N>
26+
impl<const P: char, const N: u8, MODE: PinMode, const A: u8> SetAlternate<A, OpenDrain>
27+
for Pin<P, N, MODE>
2828
{
2929
fn set_alt_mode(&mut self) {
3030
self.set_alternate::<A>();
@@ -40,15 +40,15 @@ impl<MODE: PinMode, const P: char, const N: u8, const A: u8> SetAlternate<OpenDr
4040
}
4141
}
4242

43-
impl<const P: char, const N: u8, const A: u8> SetAlternate<PushPull, A>
44-
for Pin<Alternate<PushPull, A>, P, N>
43+
impl<const P: char, const N: u8, const A: u8> SetAlternate<A, PushPull>
44+
for Pin<P, N, Alternate<A, PushPull>>
4545
{
4646
fn set_alt_mode(&mut self) {}
4747
fn restore_mode(&mut self) {}
4848
}
4949

50-
impl<const P: char, const N: u8, const A: u8> SetAlternate<OpenDrain, A>
51-
for Pin<Alternate<OpenDrain, A>, P, N>
50+
impl<const P: char, const N: u8, const A: u8> SetAlternate<A, OpenDrain>
51+
for Pin<P, N, Alternate<A, OpenDrain>>
5252
{
5353
fn set_alt_mode(&mut self) {}
5454
fn restore_mode(&mut self) {}

0 commit comments

Comments
 (0)