7
7
// except according to those terms.
8
8
9
9
// macros import
10
- use nix:: { ioctl_read, ioctl_write_ptr, ioctl_write_buf} ;
10
+ use super :: SpiModeFlags ;
11
+ use nix:: { ioctl_read, ioctl_write_buf, ioctl_write_ptr} ;
11
12
use std:: io;
12
13
use std:: marker:: PhantomData ;
13
14
use std:: os:: unix:: prelude:: * ;
14
- use super :: SpiModeFlags ;
15
15
16
16
fn from_nix_error ( err : :: nix:: Error ) -> io:: Error {
17
- io:: Error :: from_raw_os_error ( err. as_errno ( ) . unwrap_or_else ( || nix:: errno:: Errno :: UnknownErrno ) as i32 )
17
+ io:: Error :: from_raw_os_error (
18
+ err. as_errno ( )
19
+ . unwrap_or_else ( || nix:: errno:: Errno :: UnknownErrno ) as i32 ,
20
+ )
18
21
}
19
22
20
23
fn from_nix_result < T > ( res : :: nix:: Result < T > ) -> io:: Result < T > {
@@ -24,7 +27,6 @@ fn from_nix_result<T>(res: ::nix::Result<T>) -> io::Result<T> {
24
27
}
25
28
}
26
29
27
-
28
30
/// Structure that is used when performing communication
29
31
/// with the kernel.
30
32
///
@@ -130,18 +132,48 @@ mod ioctl {
130
132
ioctl_read ! ( get_lsb_first, SPI_IOC_MAGIC , SPI_IOC_NR_LSB_FIRST , u8 ) ;
131
133
ioctl_write_ptr ! ( set_lsb_first, SPI_IOC_MAGIC , SPI_IOC_NR_LSB_FIRST , u8 ) ;
132
134
133
- ioctl_read ! ( get_bits_per_word, SPI_IOC_MAGIC , SPI_IOC_NR_BITS_PER_WORD , u8 ) ;
134
- ioctl_write_ptr ! ( set_bits_per_word, SPI_IOC_MAGIC , SPI_IOC_NR_BITS_PER_WORD , u8 ) ;
135
-
136
- ioctl_read ! ( get_max_speed_hz, SPI_IOC_MAGIC , SPI_IOC_NR_MAX_SPEED_HZ , u32 ) ;
137
- ioctl_write_ptr ! ( set_max_speed_hz, SPI_IOC_MAGIC , SPI_IOC_NR_MAX_SPEED_HZ , u32 ) ;
135
+ ioctl_read ! (
136
+ get_bits_per_word,
137
+ SPI_IOC_MAGIC ,
138
+ SPI_IOC_NR_BITS_PER_WORD ,
139
+ u8
140
+ ) ;
141
+ ioctl_write_ptr ! (
142
+ set_bits_per_word,
143
+ SPI_IOC_MAGIC ,
144
+ SPI_IOC_NR_BITS_PER_WORD ,
145
+ u8
146
+ ) ;
147
+
148
+ ioctl_read ! (
149
+ get_max_speed_hz,
150
+ SPI_IOC_MAGIC ,
151
+ SPI_IOC_NR_MAX_SPEED_HZ ,
152
+ u32
153
+ ) ;
154
+ ioctl_write_ptr ! (
155
+ set_max_speed_hz,
156
+ SPI_IOC_MAGIC ,
157
+ SPI_IOC_NR_MAX_SPEED_HZ ,
158
+ u32
159
+ ) ;
138
160
139
161
// NOTE: this macro works for single transfers but cannot properly
140
162
// calculate size for multi transfer whose length we will not know
141
163
// until runtime. We fallback to using the underlying ioctl for that
142
164
// use case.
143
- ioctl_write_ptr ! ( spidev_transfer, SPI_IOC_MAGIC , SPI_IOC_NR_TRANSFER , spi_ioc_transfer) ;
144
- ioctl_write_buf ! ( spidev_transfer_buf, SPI_IOC_MAGIC , SPI_IOC_NR_TRANSFER , spi_ioc_transfer) ;
165
+ ioctl_write_ptr ! (
166
+ spidev_transfer,
167
+ SPI_IOC_MAGIC ,
168
+ SPI_IOC_NR_TRANSFER ,
169
+ spi_ioc_transfer
170
+ ) ;
171
+ ioctl_write_buf ! (
172
+ spidev_transfer_buf,
173
+ SPI_IOC_MAGIC ,
174
+ SPI_IOC_NR_TRANSFER ,
175
+ spi_ioc_transfer
176
+ ) ;
145
177
}
146
178
147
179
/// Representation of a spidev transfer that is shared
@@ -175,11 +207,7 @@ pub fn get_lsb_first(fd: RawFd) -> io::Result<u8> {
175
207
}
176
208
177
209
pub fn set_lsb_first ( fd : RawFd , lsb_first : bool ) -> io:: Result < ( ) > {
178
- let lsb_first_value: u8 = if lsb_first {
179
- 1
180
- } else {
181
- 0
182
- } ;
210
+ let lsb_first_value: u8 = if lsb_first { 1 } else { 0 } ;
183
211
from_nix_result ( unsafe { ioctl:: set_lsb_first ( fd, & lsb_first_value) } ) ?;
184
212
Ok ( ( ) )
185
213
}
@@ -214,8 +242,6 @@ pub fn transfer(fd: RawFd, transfer: &mut SpidevTransfer) -> io::Result<()> {
214
242
}
215
243
216
244
pub fn transfer_multiple ( fd : RawFd , transfers : & mut [ SpidevTransfer ] ) -> io:: Result < ( ) > {
217
- from_nix_result ( unsafe {
218
- ioctl:: spidev_transfer_buf ( fd, transfers)
219
- } ) ?;
245
+ from_nix_result ( unsafe { ioctl:: spidev_transfer_buf ( fd, transfers) } ) ?;
220
246
Ok ( ( ) )
221
247
}
0 commit comments