@@ -945,166 +945,93 @@ unsafe impl<SPI, STREAM, const CHANNEL: u8> DMASet<STREAM, CHANNEL, MemoryToPeri
945
945
{
946
946
}
947
947
948
- impl < SPI : Instance , const BIDI : bool , W : FrameSize > Spi < SPI , BIDI , W > {
949
- pub fn read_nonblocking ( & mut self ) -> nb:: Result < W , Error > {
950
- if BIDI {
951
- self . bidi_input ( ) ;
952
- }
953
- self . check_read ( )
954
- }
955
-
956
- pub fn write_nonblocking ( & mut self , byte : W ) -> nb:: Result < ( ) , Error > {
957
- if BIDI {
958
- self . bidi_output ( ) ;
959
- }
960
- self . check_send ( byte)
961
- }
948
+ macro_rules! spi_transfer {
949
+ ( $Spi: ident) => {
950
+ impl <SPI : Instance , const BIDI : bool , W : FrameSize > $Spi<SPI , BIDI , W > {
951
+ pub fn read_nonblocking( & mut self ) -> nb:: Result <W , Error > {
952
+ if BIDI {
953
+ self . bidi_input( ) ;
954
+ }
955
+ self . check_read( )
956
+ }
962
957
963
- pub fn transfer_in_place ( & mut self , words : & mut [ W ] ) -> Result < ( ) , Error > {
964
- for word in words {
965
- nb:: block!( self . write_nonblocking( * word) ) ?;
966
- * word = nb:: block!( self . read_nonblocking( ) ) ?;
967
- }
958
+ pub fn write_nonblocking( & mut self , byte: W ) -> nb:: Result <( ) , Error > {
959
+ if BIDI {
960
+ self . bidi_output( ) ;
961
+ }
962
+ self . check_send( byte)
963
+ }
968
964
969
- Ok ( ( ) )
970
- }
965
+ pub fn transfer_in_place( & mut self , words: & mut [ W ] ) -> Result <( ) , Error > {
966
+ for word in words {
967
+ nb:: block!( self . write_nonblocking( * word) ) ?;
968
+ * word = nb:: block!( self . read_nonblocking( ) ) ?;
969
+ }
971
970
972
- pub fn transfer ( & mut self , buff : & mut [ W ] , data : & [ W ] ) -> Result < ( ) , Error > {
973
- if data. len ( ) == buff. len ( ) {
974
- for ( d, b) in data. iter ( ) . cloned ( ) . zip ( buff. iter_mut ( ) ) {
975
- nb:: block!( self . write_nonblocking( d) ) ?;
976
- * b = nb:: block!( self . read_nonblocking( ) ) ?;
971
+ Ok ( ( ) )
977
972
}
978
- } else {
979
- let mut iter_r = buff. iter_mut ( ) ;
980
- let mut iter_w = data. iter ( ) . cloned ( ) ;
981
- loop {
982
- match ( iter_r. next ( ) , iter_w. next ( ) ) {
983
- ( Some ( r) , Some ( w) ) => {
984
- nb:: block!( self . write_nonblocking( w) ) ?;
985
- * r = nb:: block!( self . read_nonblocking( ) ) ?;
986
- }
987
- ( Some ( r) , None ) => {
988
- nb:: block!( self . write_nonblocking( W :: default ( ) ) ) ?;
989
- * r = nb:: block!( self . read_nonblocking( ) ) ?;
973
+
974
+ pub fn transfer( & mut self , buff: & mut [ W ] , data: & [ W ] ) -> Result <( ) , Error > {
975
+ if data. len( ) == buff. len( ) {
976
+ for ( d, b) in data. iter( ) . cloned( ) . zip( buff. iter_mut( ) ) {
977
+ nb:: block!( self . write_nonblocking( d) ) ?;
978
+ * b = nb:: block!( self . read_nonblocking( ) ) ?;
990
979
}
991
- ( None , Some ( w) ) => {
992
- nb:: block!( self . write_nonblocking( w) ) ?;
993
- let _ = nb:: block!( self . read_nonblocking( ) ) ?;
980
+ } else {
981
+ let mut iter_r = buff. iter_mut( ) ;
982
+ let mut iter_w = data. iter( ) . cloned( ) ;
983
+ loop {
984
+ match ( iter_r. next( ) , iter_w. next( ) ) {
985
+ ( Some ( r) , Some ( w) ) => {
986
+ nb:: block!( self . write_nonblocking( w) ) ?;
987
+ * r = nb:: block!( self . read_nonblocking( ) ) ?;
988
+ }
989
+ ( Some ( r) , None ) => {
990
+ nb:: block!( self . write_nonblocking( W :: default ( ) ) ) ?;
991
+ * r = nb:: block!( self . read_nonblocking( ) ) ?;
992
+ }
993
+ ( None , Some ( w) ) => {
994
+ nb:: block!( self . write_nonblocking( w) ) ?;
995
+ let _ = nb:: block!( self . read_nonblocking( ) ) ?;
996
+ }
997
+ ( None , None ) => break ,
998
+ }
994
999
}
995
- ( None , None ) => break ,
996
1000
}
997
- }
998
- }
999
-
1000
- Ok ( ( ) )
1001
- }
1002
1001
1003
- pub fn flush ( & mut self ) -> Result < ( ) , Error > {
1004
- Ok ( ( ) )
1005
- }
1006
-
1007
- pub fn write ( & mut self , words : & [ W ] ) -> Result < ( ) , Error > {
1008
- self . spi_write :: < BIDI , W > ( words. iter ( ) . copied ( ) )
1009
- }
1010
-
1011
- pub fn write_iter ( & mut self , words : impl IntoIterator < Item = W > ) -> Result < ( ) , Error > {
1012
- self . spi_write :: < BIDI , W > ( words)
1013
- }
1014
-
1015
- pub fn read ( & mut self , words : & mut [ W ] ) -> Result < ( ) , Error > {
1016
- if BIDI {
1017
- self . bidi_input ( ) ;
1018
- for word in words {
1019
- * word = nb:: block!( self . check_read( ) ) ?;
1002
+ Ok ( ( ) )
1020
1003
}
1021
- } else {
1022
- for word in words {
1023
- nb:: block!( self . check_send( W :: default ( ) ) ) ?;
1024
- * word = nb:: block!( self . check_read( ) ) ?;
1025
- }
1026
- }
1027
-
1028
- Ok ( ( ) )
1029
- }
1030
- }
1031
-
1032
- impl < SPI : Instance , const BIDI : bool , W : FrameSize > SpiSlave < SPI , BIDI , W > {
1033
- pub fn read_nonblocking ( & mut self ) -> nb:: Result < W , Error > {
1034
- if BIDI {
1035
- self . bidi_input ( ) ;
1036
- }
1037
- self . check_read ( )
1038
- }
1039
1004
1040
- pub fn write_nonblocking ( & mut self , byte : W ) -> nb:: Result < ( ) , Error > {
1041
- if BIDI {
1042
- self . bidi_output ( ) ;
1043
- }
1044
- self . check_send ( byte)
1045
- }
1046
-
1047
- pub fn transfer_in_place ( & mut self , words : & mut [ W ] ) -> Result < ( ) , Error > {
1048
- for word in words {
1049
- nb:: block!( self . write_nonblocking( * word) ) ?;
1050
- * word = nb:: block!( self . read_nonblocking( ) ) ?;
1051
- }
1005
+ pub fn flush( & mut self ) -> Result <( ) , Error > {
1006
+ Ok ( ( ) )
1007
+ }
1052
1008
1053
- Ok ( ( ) )
1054
- }
1009
+ pub fn write( & mut self , words: & [ W ] ) -> Result <( ) , Error > {
1010
+ self . spi_write:: <BIDI , W >( words. iter( ) . copied( ) )
1011
+ }
1055
1012
1056
- pub fn transfer ( & mut self , buff : & mut [ W ] , data : & [ W ] ) -> Result < ( ) , Error > {
1057
- if data. len ( ) == buff. len ( ) {
1058
- for ( d, b) in data. iter ( ) . cloned ( ) . zip ( buff. iter_mut ( ) ) {
1059
- nb:: block!( self . write_nonblocking( d) ) ?;
1060
- * b = nb:: block!( self . read_nonblocking( ) ) ?;
1013
+ pub fn write_iter( & mut self , words: impl IntoIterator <Item = W >) -> Result <( ) , Error > {
1014
+ self . spi_write:: <BIDI , W >( words)
1061
1015
}
1062
- } else {
1063
- let mut iter_r = buff. iter_mut ( ) ;
1064
- let mut iter_w = data. iter ( ) . cloned ( ) ;
1065
- loop {
1066
- match ( iter_r. next ( ) , iter_w. next ( ) ) {
1067
- ( Some ( r) , Some ( w) ) => {
1068
- nb:: block!( self . write_nonblocking( w) ) ?;
1069
- * r = nb:: block!( self . read_nonblocking( ) ) ?;
1070
- }
1071
- ( Some ( r) , None ) => {
1072
- nb:: block!( self . write_nonblocking( W :: default ( ) ) ) ?;
1073
- * r = nb:: block!( self . read_nonblocking( ) ) ?;
1016
+
1017
+ pub fn read( & mut self , words: & mut [ W ] ) -> Result <( ) , Error > {
1018
+ if BIDI {
1019
+ self . bidi_input( ) ;
1020
+ for word in words {
1021
+ * word = nb:: block!( self . check_read( ) ) ?;
1074
1022
}
1075
- ( None , Some ( w) ) => {
1076
- nb:: block!( self . write_nonblocking( w) ) ?;
1077
- let _ = nb:: block!( self . read_nonblocking( ) ) ?;
1023
+ } else {
1024
+ for word in words {
1025
+ nb:: block!( self . check_send( W :: default ( ) ) ) ?;
1026
+ * word = nb:: block!( self . check_read( ) ) ?;
1078
1027
}
1079
- ( None , None ) => break ,
1080
1028
}
1081
- }
1082
- }
1083
-
1084
- Ok ( ( ) )
1085
- }
1086
1029
1087
- pub fn flush ( & mut self ) -> Result < ( ) , Error > {
1088
- Ok ( ( ) )
1089
- }
1090
-
1091
- pub fn write ( & mut self , words : & [ W ] ) -> Result < ( ) , Error > {
1092
- self . spi_write :: < BIDI , W > ( words. iter ( ) . copied ( ) )
1093
- }
1094
-
1095
- pub fn read ( & mut self , words : & mut [ W ] ) -> Result < ( ) , Error > {
1096
- if BIDI {
1097
- self . bidi_input ( ) ;
1098
- for word in words {
1099
- * word = nb:: block!( self . check_read( ) ) ?;
1100
- }
1101
- } else {
1102
- for word in words {
1103
- nb:: block!( self . check_send( W :: default ( ) ) ) ?;
1104
- * word = nb:: block!( self . check_read( ) ) ?;
1030
+ Ok ( ( ) )
1105
1031
}
1106
1032
}
1107
-
1108
- Ok ( ( ) )
1109
- }
1033
+ } ;
1110
1034
}
1035
+
1036
+ spi_transfer ! ( Spi ) ;
1037
+ spi_transfer ! ( SpiSlave ) ;
0 commit comments