@@ -416,13 +416,7 @@ where
416
416
MISO : PinMiso < SPI > ,
417
417
MOSI : PinMosi < SPI > ,
418
418
{
419
- pub fn new (
420
- spi : SPI ,
421
- pins : ( SCK , MISO , MOSI ) ,
422
- mode : Mode ,
423
- freq : Hertz ,
424
- clocks : Clocks ,
425
- ) -> Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeNormal > {
419
+ pub fn new ( spi : SPI , pins : ( SCK , MISO , MOSI ) , mode : Mode , freq : Hertz , clocks : Clocks ) -> Self {
426
420
unsafe {
427
421
// NOTE(unsafe) this reference will only be used for atomic writes with no side effects.
428
422
let rcc = & ( * RCC :: ptr ( ) ) ;
@@ -438,14 +432,22 @@ where
438
432
. pre_init ( mode, freq, SPI :: get_frequency ( & clocks) )
439
433
. init ( )
440
434
}
435
+ }
441
436
437
+ impl < SPI , SCK , MISO , MOSI > Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeBidi >
438
+ where
439
+ SPI : Instance ,
440
+ SCK : PinSck < SPI > ,
441
+ MISO : PinMiso < SPI > ,
442
+ MOSI : PinMosi < SPI > ,
443
+ {
442
444
pub fn new_bidi (
443
445
spi : SPI ,
444
446
pins : ( SCK , MISO , MOSI ) ,
445
447
mode : Mode ,
446
448
freq : Hertz ,
447
449
clocks : Clocks ,
448
- ) -> Spi < SPI , ( SCK , MISO , MOSI ) , TransferModeBidi > {
450
+ ) -> Self {
449
451
unsafe {
450
452
// NOTE(unsafe) this reference will only be used for atomic writes with no side effects.
451
453
let rcc = & ( * RCC :: ptr ( ) ) ;
@@ -698,28 +700,62 @@ where
698
700
}
699
701
}
700
702
701
- impl < SPI , PINS > embedded_hal:: blocking:: spi:: transfer :: Default < u8 >
702
- for Spi < SPI , PINS , TransferModeNormal >
703
+ impl < SPI , PINS , TRANSFER_MODE > embedded_hal:: blocking:: spi:: Transfer < u8 >
704
+ for Spi < SPI , PINS , TRANSFER_MODE >
703
705
where
706
+ Self : spi:: FullDuplex < u8 > ,
704
707
SPI : Instance ,
705
708
{
709
+ type Error = <Self as spi:: FullDuplex < u8 > >:: Error ;
710
+
711
+ fn transfer < ' w > ( & mut self , words : & ' w mut [ u8 ] ) -> Result < & ' w [ u8 ] , Self :: Error > {
712
+ use spi:: FullDuplex ;
713
+ for word in words. iter_mut ( ) {
714
+ nb:: block!( self . send( * word) ) ?;
715
+ * word = nb:: block!( self . read( ) ) ?;
716
+ }
717
+
718
+ Ok ( words)
719
+ }
706
720
}
707
721
708
- impl < SPI , PINS > embedded_hal:: blocking:: spi:: write :: Default < u8 >
709
- for Spi < SPI , PINS , TransferModeNormal >
722
+ impl < SPI , PINS , TRANSFER_MODE > embedded_hal:: blocking:: spi:: Write < u8 >
723
+ for Spi < SPI , PINS , TRANSFER_MODE >
710
724
where
725
+ Self : spi:: FullDuplex < u8 > ,
711
726
SPI : Instance ,
712
727
{
728
+ type Error = <Self as spi:: FullDuplex < u8 > >:: Error ;
729
+
730
+ fn write ( & mut self , words : & [ u8 ] ) -> Result < ( ) , Self :: Error > {
731
+ use spi:: FullDuplex ;
732
+ for word in words {
733
+ nb:: block!( self . send( * word) ) ?;
734
+ nb:: block!( self . read( ) ) ?;
735
+ }
736
+
737
+ Ok ( ( ) )
738
+ }
713
739
}
714
740
715
- impl < SPI , PINS > embedded_hal:: blocking:: spi:: transfer :: Default < u8 >
716
- for Spi < SPI , PINS , TransferModeBidi >
741
+ impl < SPI , PINS , TRANSFER_MODE > embedded_hal:: blocking:: spi:: WriteIter < u8 >
742
+ for Spi < SPI , PINS , TRANSFER_MODE >
717
743
where
744
+ Self : spi:: FullDuplex < u8 > ,
718
745
SPI : Instance ,
719
746
{
720
- }
747
+ type Error = <Self as spi:: FullDuplex < u8 > >:: Error ;
748
+
749
+ fn write_iter < WI > ( & mut self , words : WI ) -> Result < ( ) , Self :: Error >
750
+ where
751
+ WI : IntoIterator < Item = u8 > ,
752
+ {
753
+ use spi:: FullDuplex ;
754
+ for word in words. into_iter ( ) {
755
+ nb:: block!( self . send( word) ) ?;
756
+ nb:: block!( self . read( ) ) ?;
757
+ }
721
758
722
- impl < SPI , PINS > embedded_hal:: blocking:: spi:: write:: Default < u8 > for Spi < SPI , PINS , TransferModeBidi > where
723
- SPI : Instance
724
- {
759
+ Ok ( ( ) )
760
+ }
725
761
}
0 commit comments