@@ -95,3 +95,71 @@ mod nb {
95
95
}
96
96
}
97
97
}
98
+
99
+ mod io {
100
+ use core:: ops:: Deref ;
101
+
102
+ use super :: super :: { Error , Instance , RegisterBlockImpl , Rx , Serial , Tx } ;
103
+ use embedded_io:: Write ;
104
+
105
+ impl embedded_io:: Error for Error {
106
+ // TODO: fix error conversion
107
+ fn kind ( & self ) -> embedded_io:: ErrorKind {
108
+ embedded_io:: ErrorKind :: Other
109
+ }
110
+ }
111
+
112
+ impl < USART : Instance , WORD > embedded_io:: ErrorType for Serial < USART , WORD > {
113
+ type Error = Error ;
114
+ }
115
+
116
+ impl < USART : Instance , WORD > embedded_io:: ErrorType for Tx < USART , WORD > {
117
+ type Error = Error ;
118
+ }
119
+
120
+ impl < USART : Instance , WORD > embedded_io:: ErrorType for Rx < USART , WORD > {
121
+ type Error = Error ;
122
+ }
123
+
124
+ impl < USART : Instance > Write for Tx < USART , u8 >
125
+ where
126
+ <USART as Instance >:: RegisterBlock : RegisterBlockImpl ,
127
+ USART : Deref < Target = <USART as Instance >:: RegisterBlock > ,
128
+ {
129
+ fn write ( & mut self , bytes : & [ u8 ] ) -> Result < usize , Self :: Error > {
130
+ let mut i = 0 ;
131
+ for byte in bytes. iter ( ) {
132
+ match self . usart . write_u8 ( * byte) {
133
+ Ok ( _) => {
134
+ i += 1 ;
135
+ }
136
+ Err ( nb:: Error :: WouldBlock ) => {
137
+ return Ok ( i) ;
138
+ }
139
+ Err ( nb:: Error :: Other ( e) ) => {
140
+ return Err ( e) ;
141
+ }
142
+ }
143
+ }
144
+ Ok ( i)
145
+ }
146
+
147
+ fn flush ( & mut self ) -> Result < ( ) , Self :: Error > {
148
+ self . usart . bflush ( ) ?;
149
+ Ok ( ( ) )
150
+ }
151
+ }
152
+
153
+ impl < USART : Instance > Write for Serial < USART , u8 >
154
+ where
155
+ Tx < USART , u8 > : Write < Error = Error > ,
156
+ {
157
+ fn write ( & mut self , bytes : & [ u8 ] ) -> Result < usize , Self :: Error > {
158
+ self . tx . write ( bytes)
159
+ }
160
+
161
+ fn flush ( & mut self ) -> Result < ( ) , Self :: Error > {
162
+ self . tx . flush ( )
163
+ }
164
+ }
165
+ }
0 commit comments