@@ -137,7 +137,7 @@ macro_rules! gpio {
137
137
pub mod $gpiox {
138
138
use core:: marker:: PhantomData ;
139
139
140
- use crate :: hal:: digital:: { OutputPin , InputPin } ;
140
+ use crate :: hal:: digital:: v2 :: { OutputPin , InputPin } ;
141
141
use crate :: stm32:: { $gpioy, $GPIOX} ;
142
142
143
143
use crate :: rcc:: AHB2 ;
@@ -249,14 +249,18 @@ macro_rules! gpio {
249
249
}
250
250
251
251
impl <MODE > OutputPin for $PXx<Output <MODE >> {
252
- fn set_high( & mut self ) {
252
+ type Error = ( ) ;
253
+
254
+ fn set_high( & mut self ) -> Result <( ) , Self :: Error > {
253
255
// NOTE(unsafe) atomic write to a stateless register
254
256
unsafe { ( * $GPIOX:: ptr( ) ) . bsrr. write( |w| w. bits( 1 << self . i) ) }
257
+ Ok ( ( ) )
255
258
}
256
259
257
- fn set_low( & mut self ) {
260
+ fn set_low( & mut self ) -> Result < ( ) , Self :: Error > {
258
261
// NOTE(unsafe) atomic write to a stateless register
259
262
unsafe { ( * $GPIOX:: ptr( ) ) . bsrr. write( |w| w. bits( 1 << ( 16 + self . i) ) ) }
263
+ Ok ( ( ) )
260
264
}
261
265
}
262
266
@@ -376,8 +380,8 @@ macro_rules! gpio {
376
380
// spurious signals (e.g. LED flash)
377
381
// TODO: I still see a flash of LED using this order
378
382
match initial_state {
379
- State :: High => res. set_high( ) ,
380
- State :: Low => res. set_low( ) ,
383
+ State :: High => res. set_high( ) . unwrap ( ) ,
384
+ State :: Low => res. set_low( ) . unwrap ( ) ,
381
385
}
382
386
383
387
let offset = 2 * $i;
@@ -450,25 +454,31 @@ macro_rules! gpio {
450
454
}
451
455
452
456
impl <MODE > OutputPin for $PXi<Output <MODE >> {
453
- fn set_high( & mut self ) {
457
+ type Error = ( ) ;
458
+
459
+ fn set_high( & mut self ) -> Result <( ) , Self :: Error > {
454
460
// NOTE(unsafe) atomic write to a stateless register
455
461
unsafe { ( * $GPIOX:: ptr( ) ) . bsrr. write( |w| w. bits( 1 << $i) ) }
462
+ Ok ( ( ) )
456
463
}
457
464
458
- fn set_low( & mut self ) {
465
+ fn set_low( & mut self ) -> Result < ( ) , Self :: Error > {
459
466
// NOTE(unsafe) atomic write to a stateless register
460
467
unsafe { ( * $GPIOX:: ptr( ) ) . bsrr. write( |w| w. bits( 1 << ( 16 + $i) ) ) }
468
+ Ok ( ( ) )
461
469
}
462
470
}
463
471
464
472
impl <MODE > InputPin for $PXi<Input <MODE >> {
465
- fn is_high( & self ) -> bool {
466
- !self . is_low( )
473
+ type Error = ( ) ;
474
+
475
+ fn is_high( & self ) -> Result <bool , Self :: Error > {
476
+ Ok ( !self . is_low( ) . unwrap( ) )
467
477
}
468
478
469
- fn is_low( & self ) -> bool {
479
+ fn is_low( & self ) -> Result < bool , Self :: Error > {
470
480
// NOTE(unsafe) atomic read with no side effects
471
- unsafe { ( * $GPIOX:: ptr( ) ) . idr. read( ) . bits( ) & ( 1 << $i) == 0 }
481
+ Ok ( unsafe { ( * $GPIOX:: ptr( ) ) . idr. read( ) . bits( ) & ( 1 << $i) == 0 } )
472
482
}
473
483
}
474
484
0 commit comments