| extern crate spidev; |
| use spidev::spidevioctl::SpidevTransfer; |
| use spidev::{SpiModeFlags, Spidev, SpidevOptions}; |
| |
| fn main() { |
| let mut spidev = Spidev::open("/dev/spidev0.0").unwrap(); |
| let options = SpidevOptions::new() |
| .bits_per_word(8) |
| .max_speed_hz(5000) |
| .lsb_first(false) |
| .mode(SpiModeFlags::SPI_MODE_0) |
| .build(); |
| spidev.configure(&options).unwrap(); |
| |
| println!("===== Single transfer ========="); |
| let tx_buf = [0xaa, 0xbb, 0xcc, 0xdd, 0xee]; |
| let mut rx_buf = [0; 5]; |
| let mut transfer = SpidevTransfer::read_write(&tx_buf, &mut rx_buf); |
| println!("{:?}", spidev.transfer(&mut transfer)); |
| |
| println!("===== Multi Transfer ========="); |
| let mut rx_buf1 = [0; 10]; |
| let tx_buf2 = [0x00, 0x01, 0x02, 0x03]; |
| let delay_usecs = 10; |
| let tx_buf3 = [0xff, 0xfe, 0xfd]; |
| let mut rx_buf3 = [0; 3]; |
| let result = { |
| let mut transfers = vec![ |
| SpidevTransfer::read(&mut rx_buf1), |
| SpidevTransfer::write(&tx_buf2), |
| SpidevTransfer::delay(delay_usecs), |
| SpidevTransfer::read_write(&tx_buf3, &mut rx_buf3), |
| ]; |
| spidev.transfer_multiple(&mut transfers) |
| }; |
| match result { |
| Ok(_) => { |
| println!("Read {:?}", rx_buf1); |
| println!("Wrote {:?}", tx_buf2); |
| println!("Delayed by {} microseconds", delay_usecs); |
| println!("Wrote {:?} and read {:?}", tx_buf3, rx_buf3); |
| } |
| Err(err) => println!("{:?}", err), |
| } |
| } |