1 extern crate spidev;
2 use spidev::spidevioctl::SpidevTransfer;
3 use spidev::{SpiModeFlags, Spidev, SpidevOptions};
4
main()5 fn main() {
6 let mut spidev = Spidev::open("/dev/spidev0.0").unwrap();
7 let options = SpidevOptions::new()
8 .bits_per_word(8)
9 .max_speed_hz(5000)
10 .lsb_first(false)
11 .mode(SpiModeFlags::SPI_MODE_0)
12 .build();
13 spidev.configure(&options).unwrap();
14
15 println!("===== Single transfer =========");
16 let tx_buf = [0xaa, 0xbb, 0xcc, 0xdd, 0xee];
17 let mut rx_buf = [0; 5];
18 let mut transfer = SpidevTransfer::read_write(&tx_buf, &mut rx_buf);
19 println!("{:?}", spidev.transfer(&mut transfer));
20
21 println!("===== Multi Transfer =========");
22 let mut rx_buf1 = [0; 10];
23 let tx_buf2 = [0x00, 0x01, 0x02, 0x03];
24 let delay_usecs = 10;
25 let tx_buf3 = [0xff, 0xfe, 0xfd];
26 let mut rx_buf3 = [0; 3];
27 let result = {
28 let mut transfers = vec![
29 SpidevTransfer::read(&mut rx_buf1),
30 SpidevTransfer::write(&tx_buf2),
31 SpidevTransfer::delay(delay_usecs),
32 SpidevTransfer::read_write(&tx_buf3, &mut rx_buf3),
33 ];
34 spidev.transfer_multiple(&mut transfers)
35 };
36 match result {
37 Ok(_) => {
38 println!("Read {:?}", rx_buf1);
39 println!("Wrote {:?}", tx_buf2);
40 println!("Delayed by {} microseconds", delay_usecs);
41 println!("Wrote {:?} and read {:?}", tx_buf3, rx_buf3);
42 }
43 Err(err) => println!("{:?}", err),
44 }
45 }
46