From f394535cc26c88ecd8bf0885ce1d35b4d5bd8105 Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 09:32:11 -0700 Subject: [PATCH 1/8] update to v1 --- Cargo.toml | 4 ++-- src/lib.rs | 27 +++++++++++++++------------ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1753393..02f0207 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,10 +15,10 @@ exclude = [ ] [dependencies] -embedded-hal = "0.2.7" +embedded-hal = "1.0.0" bit_reverse = { version = "0.1.7", default-features = false } bitflags = "1.0" byteorder = { version = "1.2", default-features = false } [dev-dependencies] -linux-embedded-hal = "0.2.2" +linux-embedded-hal = "0.4.0" diff --git a/src/lib.rs b/src/lib.rs index 337d2f2..c2f3d7b 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -66,8 +66,8 @@ extern crate embedded_hal as hal; use bit_reverse::ParallelReverse; use core::fmt; -use hal::blocking::spi; -use hal::digital::v2::OutputPin; +use hal::digital::OutputPin; +use hal::spi::SpiBus; use baton::Baton; use classic::{Classic, GamepadButtons}; @@ -285,9 +285,9 @@ pub struct PlayStationPort { multitap_port: MultitapPort, } -impl PlayStationPort +impl PlayStationPort where - SPI: spi::Transfer, + SPI: SpiBus, CS: OutputPin, { /// Create a new device to talk over the PlayStation's controller @@ -319,7 +319,7 @@ where } /// Sends commands to the underlying hardware and provides responses - pub fn send_command(&mut self, command: &[u8], result: &mut [u8]) -> Result<(), E> { + pub fn send_command(&mut self, command: &[u8], result: &mut [u8]) -> Result<(), SPI::Error> { // Pack in bytes for the command we'll be sending result[..command.len()].copy_from_slice(command); result[0] = self.multitap_port.clone() as u8; @@ -332,7 +332,7 @@ where let _ = x.set_low(); } - self.dev.transfer(result)?; + self.dev.transfer_in_place(result)?; if let Some(ref mut x) = self.select { let _ = x.set_high(); @@ -345,7 +345,7 @@ where /// Configure the controller to set it to DualShock2 mode. This will also /// enable analog mode on DualShock1 controllers. - pub fn enable_pressure(&mut self) -> Result<(), E> { + pub fn enable_pressure(&mut self) -> Result<(), SPI::Error> { // TODO: Redefine this to allow input parameters. Right now they're are hard coded // TODO: Detect and return actual protocol errors @@ -370,7 +370,7 @@ where /// JogCon will go to sleep until buttons are pressed. If no polling is /// done for 10 seconds, it will drop out of this mode and revert to /// the standard Controller mode - pub fn enable_jogcon(&mut self) -> Result<(), E> { + pub fn enable_jogcon(&mut self) -> Result<(), SPI::Error> { let mut buffer = [0u8; MESSAGE_MAX_LENGTH]; // Wake up the controller if needed @@ -386,7 +386,7 @@ where /// Read various parameters from the controller including its current /// status. - pub fn read_config(&mut self) -> Result { + pub fn read_config(&mut self) -> Result { let mut config: ControllerConfiguration = Default::default(); let mut buffer = [0u8; MESSAGE_MAX_LENGTH]; @@ -418,7 +418,7 @@ where fn read_port( &mut self, command: Option<&dyn PollCommand>, - ) -> Result<[u8; MESSAGE_MAX_LENGTH], Error> { + ) -> Result<[u8; MESSAGE_MAX_LENGTH], Error> { let mut buffer = [0u8; MESSAGE_MAX_LENGTH]; let mut data = [0u8; MESSAGE_MAX_LENGTH]; @@ -453,7 +453,7 @@ where pub fn read_raw( &mut self, command: Option<&dyn PollCommand>, - ) -> Result> { + ) -> Result> { let mut buffer = [0u8; MESSAGE_MAX_LENGTH]; let data = self.read_port(command)?; @@ -468,7 +468,10 @@ where /// Ask the controller for input states. Different contoller types will be returned automatically /// for you. If you'd like to cooerce a controller yourself, use `read_raw`. - pub fn read_input(&mut self, command: Option<&dyn PollCommand>) -> Result> { + pub fn read_input( + &mut self, + command: Option<&dyn PollCommand>, + ) -> Result> { let mut buffer = [0u8; MESSAGE_MAX_LENGTH]; let data = self.read_port(command)?; From 83442c27551bc8bf821f86d7936910b8074ead1d Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 10:03:23 -0700 Subject: [PATCH 2/8] update examples for linux-hal --- examples/baton.rs | 9 ++++----- examples/console.rs | 16 +++++++++------- examples/mouse.rs | 9 ++++----- examples/playstation.rs | 9 ++++----- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/examples/baton.rs b/examples/baton.rs index a1642b6..6b13a00 100755 --- a/examples/baton.rs +++ b/examples/baton.rs @@ -2,9 +2,8 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; +use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; use std::io; use pscontroller_rs::PlayStationPort; @@ -20,7 +19,7 @@ fn build_spi() -> io::Result { let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -29,7 +28,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None::); let mut controller; diff --git a/examples/console.rs b/examples/console.rs index 01797bb..96caef9 100755 --- a/examples/console.rs +++ b/examples/console.rs @@ -2,9 +2,8 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; +use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; use std::io; use std::{thread, time}; @@ -16,14 +15,14 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 100_000; // If you need to use an alternate pin for cable select, uncomment the relevant bits // and pass the pin into psp's new() function. -//const SPI_ENABLE_PIN: u64 = 4; +//const SPI_ENABLE_PIN: u32 = 4; fn build_spi() -> io::Result { let mut spi = Spidev::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -32,9 +31,12 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - //let enable_pin = Pin::new(SPI_ENABLE_PIN); + //const GPIO_CHIP: &str = "/dev/gpiochip0"; + //let mut chip = Chip::new(GPIO_CHIP).unwrap(); + //let enable_pin = chip.get_line(SPI_ENABLE_PIN).unwrap() + // .request(LineRequestFlags::OUTPUT, 1, "pscontroller").unwrap(); //let mut psp = PlayStationPort::new(spi, Some(enable_pin)); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None::); let mut command = [0u8; 32]; let mut buffer = [0u8; 32]; diff --git a/examples/mouse.rs b/examples/mouse.rs index 4cd3fac..706edd1 100755 --- a/examples/mouse.rs +++ b/examples/mouse.rs @@ -3,9 +3,8 @@ extern crate pscontroller_rs; use std::{io, thread, time}; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; +use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; use pscontroller_rs::{Device, PlayStationPort}; @@ -20,7 +19,7 @@ fn build_spi() -> io::Result { let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -29,7 +28,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None::); let sleep_duration = time::Duration::from_millis(10); let mut x: i32 = 0; diff --git a/examples/playstation.rs b/examples/playstation.rs index bd9c231..2610652 100755 --- a/examples/playstation.rs +++ b/examples/playstation.rs @@ -2,9 +2,8 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; +use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; use std::io; use pscontroller_rs::{Device, PlayStationPort}; @@ -20,7 +19,7 @@ fn build_spi() -> io::Result { let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -36,7 +35,7 @@ fn dump_hex(buffer: &[u8]) { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None::); psp.enable_pressure().unwrap(); From 227620fa2ef0ec2abc7dea40b2c031addccaf17e Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 10:26:35 -0700 Subject: [PATCH 3/8] fix rest of examples - use bus, non generic none --- examples/baton.rs | 9 ++++----- examples/console.rs | 14 +++++++------- examples/dualshock.rs | 12 +++++------- examples/guitarhero.rs | 12 +++++------- examples/jogcon.rs | 12 +++++------- examples/mouse.rs | 9 ++++----- examples/playstation.rs | 9 ++++----- examples/scanner.rs | 12 +++++------- 8 files changed, 39 insertions(+), 50 deletions(-) diff --git a/examples/baton.rs b/examples/baton.rs index 6b13a00..feb6f1b 100755 --- a/examples/baton.rs +++ b/examples/baton.rs @@ -2,8 +2,7 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; -use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use pscontroller_rs::PlayStationPort; @@ -14,8 +13,8 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; // This will build the SPI device communication for us -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) @@ -28,7 +27,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let mut controller; diff --git a/examples/console.rs b/examples/console.rs index 96caef9..25bc107 100755 --- a/examples/console.rs +++ b/examples/console.rs @@ -2,8 +2,7 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; -use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use std::{thread, time}; @@ -17,8 +16,8 @@ const SPI_SPEED: u32 = 100_000; // and pass the pin into psp's new() function. //const SPI_ENABLE_PIN: u32 = 4; -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) @@ -31,12 +30,13 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); + // Example of using GPIO pin for chip select: //const GPIO_CHIP: &str = "/dev/gpiochip0"; //let mut chip = Chip::new(GPIO_CHIP).unwrap(); - //let enable_pin = chip.get_line(SPI_ENABLE_PIN).unwrap() - // .request(LineRequestFlags::OUTPUT, 1, "pscontroller").unwrap(); + //let enable_pin = CdevPin::new(chip.get_line(SPI_ENABLE_PIN).unwrap() + // .request(LineRequestFlags::OUTPUT, 1, "pscontroller").unwrap()).unwrap(); //let mut psp = PlayStationPort::new(spi, Some(enable_pin)); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let mut command = [0u8; 32]; let mut buffer = [0u8; 32]; diff --git a/examples/dualshock.rs b/examples/dualshock.rs index 4702b5f..1a6ac3b 100755 --- a/examples/dualshock.rs +++ b/examples/dualshock.rs @@ -2,9 +2,7 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; use std::io; use pscontroller_rs::{classic::GamepadButtons, dualshock::ControlDS, Device, PlayStationPort}; @@ -15,12 +13,12 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; // This will build the -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -47,7 +45,7 @@ fn set_motors(buttons: &GamepadButtons, small: &mut bool, big: &mut u8) { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let mut control_ds = ControlDS::new(false, 0); let mut big: u8 = 0; diff --git a/examples/guitarhero.rs b/examples/guitarhero.rs index 8989fc1..2e0dbc6 100755 --- a/examples/guitarhero.rs +++ b/examples/guitarhero.rs @@ -2,9 +2,7 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; use std::io; use pscontroller_rs::PlayStationPort; @@ -15,12 +13,12 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; // This will build the -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -29,7 +27,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let mut controller; diff --git a/examples/jogcon.rs b/examples/jogcon.rs index 061cd14..3583847 100755 --- a/examples/jogcon.rs +++ b/examples/jogcon.rs @@ -9,9 +9,7 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; use std::io; use pscontroller_rs::{ @@ -24,12 +22,12 @@ use pscontroller_rs::{ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -38,7 +36,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let mut control_jc = ControlJC::new(JogControl::Stop, 15); psp.enable_jogcon() diff --git a/examples/mouse.rs b/examples/mouse.rs index 706edd1..2b295c8 100755 --- a/examples/mouse.rs +++ b/examples/mouse.rs @@ -3,8 +3,7 @@ extern crate pscontroller_rs; use std::{io, thread, time}; -use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; -use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use pscontroller_rs::{Device, PlayStationPort}; @@ -14,8 +13,8 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 100_000; // This will build the -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) @@ -28,7 +27,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let sleep_duration = time::Duration::from_millis(10); let mut x: i32 = 0; diff --git a/examples/playstation.rs b/examples/playstation.rs index 2610652..f4960a2 100755 --- a/examples/playstation.rs +++ b/examples/playstation.rs @@ -2,8 +2,7 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::gpio_cdev::{Chip, LineHandle, LineRequestFlags}; -use linux_hal::spidev::{SpiModeFlags, Spidev, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use pscontroller_rs::{Device, PlayStationPort}; @@ -14,8 +13,8 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 100_000; // This will build the -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) @@ -35,7 +34,7 @@ fn dump_hex(buffer: &[u8]) { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); psp.enable_pressure().unwrap(); diff --git a/examples/scanner.rs b/examples/scanner.rs index 921dd7d..e7eeeec 100755 --- a/examples/scanner.rs +++ b/examples/scanner.rs @@ -2,9 +2,7 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevOptions, SPI_MODE_3}; -use linux_hal::Pin; -use linux_hal::Spidev; +use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; use std::io; use std::{thread, time}; @@ -26,12 +24,12 @@ const SCAN_RESPONSE_WIDTH: u8 = 10; const SAMPLE_PAUSE: u64 = 0_000; const USE_MULTITAP: bool = false; -fn build_spi() -> io::Result { - let mut spi = Spidev::open(SPI_DEVICE)?; +fn build_spi() -> io::Result { + let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) .max_speed_hz(SPI_SPEED) - .mode(SPI_MODE_3) + .mode(SpiModeFlags::SPI_MODE_3) .build(); spi.configure(&opts)?; @@ -40,7 +38,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None::); + let mut psp = PlayStationPort::new(spi, None); let mut command = [0u8; SCAN_RESPONSE_WIDTH as usize]; let mut buffer = [0u8; SCAN_RESPONSE_WIDTH as usize]; let mut _dummy = [0u8; SCAN_RESPONSE_WIDTH as usize]; From a585347923ef8b3ab38b60798fca458a6eb648e4 Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 10:28:42 -0700 Subject: [PATCH 4/8] fmt --- examples/dualshock.rs | 2 +- examples/guitarhero.rs | 2 +- examples/jogcon.rs | 2 +- examples/scanner.rs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/dualshock.rs b/examples/dualshock.rs index 1a6ac3b..be8cefd 100755 --- a/examples/dualshock.rs +++ b/examples/dualshock.rs @@ -2,7 +2,7 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use pscontroller_rs::{classic::GamepadButtons, dualshock::ControlDS, Device, PlayStationPort}; diff --git a/examples/guitarhero.rs b/examples/guitarhero.rs index 2e0dbc6..271ab69 100755 --- a/examples/guitarhero.rs +++ b/examples/guitarhero.rs @@ -2,7 +2,7 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use pscontroller_rs::PlayStationPort; diff --git a/examples/jogcon.rs b/examples/jogcon.rs index 3583847..4a49a6b 100755 --- a/examples/jogcon.rs +++ b/examples/jogcon.rs @@ -9,7 +9,7 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use pscontroller_rs::{ diff --git a/examples/scanner.rs b/examples/scanner.rs index e7eeeec..84ee2d6 100755 --- a/examples/scanner.rs +++ b/examples/scanner.rs @@ -2,7 +2,7 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpidevBus, SpidevOptions, SpiModeFlags}; +use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; use std::io; use std::{thread, time}; From 1bb2b987040a8885f75e7b04cdc286fa1f245956 Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 10:36:12 -0700 Subject: [PATCH 5/8] Spidevbus from root --- examples/baton.rs | 3 ++- examples/console.rs | 3 ++- examples/dualshock.rs | 3 ++- examples/guitarhero.rs | 3 ++- examples/jogcon.rs | 3 ++- examples/mouse.rs | 3 ++- examples/playstation.rs | 3 ++- examples/scanner.rs | 3 ++- 8 files changed, 16 insertions(+), 8 deletions(-) diff --git a/examples/baton.rs b/examples/baton.rs index feb6f1b..bcc0f4a 100755 --- a/examples/baton.rs +++ b/examples/baton.rs @@ -2,7 +2,8 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use pscontroller_rs::PlayStationPort; diff --git a/examples/console.rs b/examples/console.rs index 25bc107..48bc37b 100755 --- a/examples/console.rs +++ b/examples/console.rs @@ -2,7 +2,8 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use std::{thread, time}; diff --git a/examples/dualshock.rs b/examples/dualshock.rs index be8cefd..b233a7c 100755 --- a/examples/dualshock.rs +++ b/examples/dualshock.rs @@ -2,7 +2,8 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use pscontroller_rs::{classic::GamepadButtons, dualshock::ControlDS, Device, PlayStationPort}; diff --git a/examples/guitarhero.rs b/examples/guitarhero.rs index 271ab69..7246e7d 100755 --- a/examples/guitarhero.rs +++ b/examples/guitarhero.rs @@ -2,7 +2,8 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use pscontroller_rs::PlayStationPort; diff --git a/examples/jogcon.rs b/examples/jogcon.rs index 4a49a6b..47c7d40 100755 --- a/examples/jogcon.rs +++ b/examples/jogcon.rs @@ -9,7 +9,8 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use pscontroller_rs::{ diff --git a/examples/mouse.rs b/examples/mouse.rs index 2b295c8..d32a6bf 100755 --- a/examples/mouse.rs +++ b/examples/mouse.rs @@ -3,7 +3,8 @@ extern crate pscontroller_rs; use std::{io, thread, time}; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use pscontroller_rs::{Device, PlayStationPort}; diff --git a/examples/playstation.rs b/examples/playstation.rs index f4960a2..ef5a16e 100755 --- a/examples/playstation.rs +++ b/examples/playstation.rs @@ -2,7 +2,8 @@ extern crate bit_reverse; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use pscontroller_rs::{Device, PlayStationPort}; diff --git a/examples/scanner.rs b/examples/scanner.rs index 84ee2d6..6d0f782 100755 --- a/examples/scanner.rs +++ b/examples/scanner.rs @@ -2,7 +2,8 @@ extern crate embedded_hal; extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use linux_hal::spidev::{SpiModeFlags, SpidevBus, SpidevOptions}; +use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; +use linux_hal::SpidevBus; use std::io; use std::{thread, time}; From 8354ecc050f21da6082f5a94e1a2e4ef6480f4e3 Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 11:01:24 -0700 Subject: [PATCH 6/8] Box the errors --- examples/baton.rs | 6 +++--- examples/console.rs | 6 +++--- examples/dualshock.rs | 6 +++--- examples/guitarhero.rs | 6 +++--- examples/jogcon.rs | 6 +++--- examples/mouse.rs | 6 +++--- examples/playstation.rs | 6 +++--- examples/scanner.rs | 6 +++--- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/examples/baton.rs b/examples/baton.rs index bcc0f4a..e2f4c92 100755 --- a/examples/baton.rs +++ b/examples/baton.rs @@ -3,7 +3,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use pscontroller_rs::PlayStationPort; @@ -14,7 +14,7 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; // This will build the SPI device communication for us -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -28,7 +28,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut controller; diff --git a/examples/console.rs b/examples/console.rs index 48bc37b..0fb7557 100755 --- a/examples/console.rs +++ b/examples/console.rs @@ -3,7 +3,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use std::{thread, time}; @@ -17,7 +17,7 @@ const SPI_SPEED: u32 = 100_000; // and pass the pin into psp's new() function. //const SPI_ENABLE_PIN: u32 = 4; -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -37,7 +37,7 @@ fn main() { //let enable_pin = CdevPin::new(chip.get_line(SPI_ENABLE_PIN).unwrap() // .request(LineRequestFlags::OUTPUT, 1, "pscontroller").unwrap()).unwrap(); //let mut psp = PlayStationPort::new(spi, Some(enable_pin)); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut command = [0u8; 32]; let mut buffer = [0u8; 32]; diff --git a/examples/dualshock.rs b/examples/dualshock.rs index b233a7c..c835ace 100755 --- a/examples/dualshock.rs +++ b/examples/dualshock.rs @@ -3,7 +3,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use pscontroller_rs::{classic::GamepadButtons, dualshock::ControlDS, Device, PlayStationPort}; @@ -14,7 +14,7 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; // This will build the -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -46,7 +46,7 @@ fn set_motors(buttons: &GamepadButtons, small: &mut bool, big: &mut u8) { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut control_ds = ControlDS::new(false, 0); let mut big: u8 = 0; diff --git a/examples/guitarhero.rs b/examples/guitarhero.rs index 7246e7d..da02e36 100755 --- a/examples/guitarhero.rs +++ b/examples/guitarhero.rs @@ -3,7 +3,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use pscontroller_rs::PlayStationPort; @@ -14,7 +14,7 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; // This will build the -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -28,7 +28,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut controller; diff --git a/examples/jogcon.rs b/examples/jogcon.rs index 47c7d40..0c788cb 100755 --- a/examples/jogcon.rs +++ b/examples/jogcon.rs @@ -10,7 +10,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use pscontroller_rs::{ @@ -23,7 +23,7 @@ use pscontroller_rs::{ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 10_000; -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -37,7 +37,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut control_jc = ControlJC::new(JogControl::Stop, 15); psp.enable_jogcon() diff --git a/examples/mouse.rs b/examples/mouse.rs index d32a6bf..e26608f 100755 --- a/examples/mouse.rs +++ b/examples/mouse.rs @@ -4,7 +4,7 @@ extern crate pscontroller_rs; use std::{io, thread, time}; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use pscontroller_rs::{Device, PlayStationPort}; @@ -14,7 +14,7 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 100_000; // This will build the -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -28,7 +28,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let sleep_duration = time::Duration::from_millis(10); let mut x: i32 = 0; diff --git a/examples/playstation.rs b/examples/playstation.rs index ef5a16e..10f1f8d 100755 --- a/examples/playstation.rs +++ b/examples/playstation.rs @@ -3,7 +3,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use pscontroller_rs::{Device, PlayStationPort}; @@ -14,7 +14,7 @@ const SPI_DEVICE: &str = "/dev/spidev0.0"; const SPI_SPEED: u32 = 100_000; // This will build the -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -35,7 +35,7 @@ fn dump_hex(buffer: &[u8]) { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); psp.enable_pressure().unwrap(); diff --git a/examples/scanner.rs b/examples/scanner.rs index 6d0f782..3c47967 100755 --- a/examples/scanner.rs +++ b/examples/scanner.rs @@ -3,7 +3,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; -use linux_hal::SpidevBus; +use linux_hal::{CdevPin, SpidevBus}; use std::io; use std::{thread, time}; @@ -25,7 +25,7 @@ const SCAN_RESPONSE_WIDTH: u8 = 10; const SAMPLE_PAUSE: u64 = 0_000; const USE_MULTITAP: bool = false; -fn build_spi() -> io::Result { +fn build_spi() -> Result> { let mut spi = SpidevBus::open(SPI_DEVICE)?; let opts = SpidevOptions::new() .bits_per_word(8) @@ -39,7 +39,7 @@ fn build_spi() -> io::Result { fn main() { let spi = build_spi().unwrap(); - let mut psp = PlayStationPort::new(spi, None); + let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut command = [0u8; SCAN_RESPONSE_WIDTH as usize]; let mut buffer = [0u8; SCAN_RESPONSE_WIDTH as usize]; let mut _dummy = [0u8; SCAN_RESPONSE_WIDTH as usize]; From 23216d09b3b76ae0812f2bfdac73621bbf4daf9e Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 11:05:53 -0700 Subject: [PATCH 7/8] Remove unused imports --- examples/baton.rs | 1 - examples/console.rs | 1 - examples/dualshock.rs | 1 - examples/guitarhero.rs | 1 - examples/jogcon.rs | 1 - examples/mouse.rs | 2 +- examples/playstation.rs | 1 - examples/scanner.rs | 1 - 8 files changed, 1 insertion(+), 8 deletions(-) diff --git a/examples/baton.rs b/examples/baton.rs index e2f4c92..7de49f7 100755 --- a/examples/baton.rs +++ b/examples/baton.rs @@ -4,7 +4,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use pscontroller_rs::PlayStationPort; diff --git a/examples/console.rs b/examples/console.rs index 0fb7557..ff08750 100755 --- a/examples/console.rs +++ b/examples/console.rs @@ -4,7 +4,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use std::{thread, time}; use pscontroller_rs::PlayStationPort; diff --git a/examples/dualshock.rs b/examples/dualshock.rs index c835ace..69e5004 100755 --- a/examples/dualshock.rs +++ b/examples/dualshock.rs @@ -4,7 +4,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use pscontroller_rs::{classic::GamepadButtons, dualshock::ControlDS, Device, PlayStationPort}; diff --git a/examples/guitarhero.rs b/examples/guitarhero.rs index da02e36..938d9ea 100755 --- a/examples/guitarhero.rs +++ b/examples/guitarhero.rs @@ -4,7 +4,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use pscontroller_rs::PlayStationPort; diff --git a/examples/jogcon.rs b/examples/jogcon.rs index 0c788cb..764d4f9 100755 --- a/examples/jogcon.rs +++ b/examples/jogcon.rs @@ -11,7 +11,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use pscontroller_rs::{ jogcon::{ControlJC, JogControl}, diff --git a/examples/mouse.rs b/examples/mouse.rs index e26608f..378d36f 100755 --- a/examples/mouse.rs +++ b/examples/mouse.rs @@ -1,7 +1,7 @@ extern crate linux_embedded_hal as linux_hal; extern crate pscontroller_rs; -use std::{io, thread, time}; +use std::{thread, time}; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; diff --git a/examples/playstation.rs b/examples/playstation.rs index 10f1f8d..d14bd2a 100755 --- a/examples/playstation.rs +++ b/examples/playstation.rs @@ -4,7 +4,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use pscontroller_rs::{Device, PlayStationPort}; diff --git a/examples/scanner.rs b/examples/scanner.rs index 3c47967..a1efb01 100755 --- a/examples/scanner.rs +++ b/examples/scanner.rs @@ -4,7 +4,6 @@ extern crate pscontroller_rs; use linux_hal::spidev::{SpiModeFlags, SpidevOptions}; use linux_hal::{CdevPin, SpidevBus}; -use std::io; use std::{thread, time}; use pscontroller_rs::{MultitapPort, PlayStationPort}; From 696510fc186dfd8fe033316598b6720e63bd0199 Mon Sep 17 00:00:00 2001 From: Rex Magana Date: Thu, 17 Jul 2025 11:34:14 -0700 Subject: [PATCH 8/8] Remove commented out code --- examples/console.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/examples/console.rs b/examples/console.rs index ff08750..b6d8d02 100755 --- a/examples/console.rs +++ b/examples/console.rs @@ -30,12 +30,6 @@ fn build_spi() -> Result> { fn main() { let spi = build_spi().unwrap(); - // Example of using GPIO pin for chip select: - //const GPIO_CHIP: &str = "/dev/gpiochip0"; - //let mut chip = Chip::new(GPIO_CHIP).unwrap(); - //let enable_pin = CdevPin::new(chip.get_line(SPI_ENABLE_PIN).unwrap() - // .request(LineRequestFlags::OUTPUT, 1, "pscontroller").unwrap()).unwrap(); - //let mut psp = PlayStationPort::new(spi, Some(enable_pin)); let mut psp: PlayStationPort<_, CdevPin> = PlayStationPort::new(spi, None); let mut command = [0u8; 32]; let mut buffer = [0u8; 32];