This crate provides Rust Embedded HAL interfaces (GPIO, I2C and SPI) for Apache NuttX RTOS.
For a sample NuttX Rust app, see rust-i2c-nuttx
```rust // Open GPIO Output let mut gpio = nuttxembeddedhal::OutputPin::new("/dev/gpio1") .expect("open gpio failed");
// Set Chip Select to Low gpio.set_low() .expect("cs failed");
// Set Chip Select to High gpio.set_high() .expect("cs failed"); ```
rust
// Open GPIO Input
let gpio = nuttx_embedded_hal::InputPin::new("/dev/gpio0")
.expect("open gpio failed");
rust
// Open GPIO Interrupt
let gpio = nuttx_hal::InterruptPin::new("/dev/gpio2");
.expect("open gpio failed");
```rust // Open I2C Port let mut i2c = nuttxembeddedhal::I2c::new( "/dev/i2c0", // I2C Port 400000, // I2C Frequency: 400 kHz ).expect("open failed");
// Buffer for received I2C data let mut buf = [0 ; 1];
// Read register 0xD0 from I2C Address 0x77 i2c.write_read( 0x77, // I2C Address &[0xD0], // Register ID &mut buf // Buffer to be received ).expect("read register failed");
// Print the register value println!("Register value is 0x{:02x}", buf[0]); ```
The SPI interface requires the SPI Test Driver (/dev/spitest0) to be installed:
https://github.com/lupyuen/incubator-nuttx/tree/master/drivers/rf
```rust // Open GPIO Output for Chip Select let mut cs = nuttxembeddedhal::OutputPin::new("/dev/gpio1") .expect("open gpio failed");
// Open SPI Bus let mut spi = nuttxembeddedhal::Spi::new("/dev/spitest0") .expect("open spi failed");
// Set Chip Select to Low cs.set_low() .expect("cs failed");
// Transmit and receive SPI data let mut data: [ u8; 5 ] = [ 0x1d, 0x00, 0x08, 0x00, 0x00 ]; spi.transfer(&mut data) .expect("spi failed");
// Show the received SPI data for i in 0..data.len() { println!(" {:02x}", data[i as usize]); }
// Set Chip Select to High cs.set_high() .expect("cs failed"); ```