• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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