Update lib to embedded_hal 1.0a2
parent
82f0fe2d15
commit
2a3cd1ae01
|
|
@ -17,7 +17,7 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
embedded-graphics = { version = "0.6.1", optional = true}
|
embedded-graphics = { version = "0.6.1", optional = true}
|
||||||
embedded-hal = {version = "0.2.3", features = ["unproven"]}
|
embedded-hal = "1.0.0-alpha.2"
|
||||||
bit_field = "0.10.1"
|
bit_field = "0.10.1"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
#![deny(warnings)]
|
#![deny(warnings)]
|
||||||
|
|
||||||
use embedded_hal::prelude::*;
|
|
||||||
use epd_waveshare::{epd1in54::EPD1in54, prelude::*};
|
use epd_waveshare::{epd1in54::EPD1in54, prelude::*};
|
||||||
use linux_embedded_hal::{
|
use linux_embedded_hal::{
|
||||||
spidev::{self, SpidevOptions},
|
spidev::{self, SpidevOptions},
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ const IS_BUSY_LOW: bool = false;
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::type_a::{
|
use crate::type_a::{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::interface::DisplayInterface;
|
use crate::interface::DisplayInterface;
|
||||||
|
|
@ -64,7 +64,7 @@ where
|
||||||
|
|
||||||
// power on
|
// power on
|
||||||
self.command(spi, Command::POWER_ON)?;
|
self.command(spi, Command::POWER_ON)?;
|
||||||
delay.delay_ms(5);
|
delay.try_delay_ms(5);
|
||||||
self.wait_until_idle();
|
self.wait_until_idle();
|
||||||
|
|
||||||
// set the panel settings
|
// set the panel settings
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::{InputPin, OutputPin},
|
digital::{InputPin, OutputPin},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::buffer_len;
|
use crate::buffer_len;
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ const IS_BUSY_LOW: bool = false;
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::type_a::{
|
use crate::type_a::{
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
//!```
|
//!```
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::interface::DisplayInterface;
|
use crate::interface::DisplayInterface;
|
||||||
|
|
@ -119,7 +119,7 @@ where
|
||||||
|
|
||||||
// power on
|
// power on
|
||||||
self.command(spi, Command::POWER_ON)?;
|
self.command(spi, Command::POWER_ON)?;
|
||||||
delay.delay_ms(5);
|
delay.try_delay_ms(5);
|
||||||
self.wait_until_idle();
|
self.wait_until_idle();
|
||||||
|
|
||||||
// set the panel settings
|
// set the panel settings
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::interface::DisplayInterface;
|
use crate::interface::DisplayInterface;
|
||||||
|
|
@ -120,7 +120,7 @@ where
|
||||||
|
|
||||||
// power on
|
// power on
|
||||||
self.command(spi, Command::POWER_ON)?;
|
self.command(spi, Command::POWER_ON)?;
|
||||||
delay.delay_ms(5);
|
delay.try_delay_ms(5);
|
||||||
self.wait_until_idle();
|
self.wait_until_idle();
|
||||||
|
|
||||||
// set the panel settings
|
// set the panel settings
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::{InputPin, OutputPin},
|
digital::{InputPin, OutputPin},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::color::Color;
|
use crate::color::Color;
|
||||||
|
|
@ -70,7 +70,7 @@ where
|
||||||
|
|
||||||
// Power on
|
// Power on
|
||||||
self.command(spi, Command::POWER_ON)?;
|
self.command(spi, Command::POWER_ON)?;
|
||||||
delay.delay_ms(5);
|
delay.try_delay_ms(5);
|
||||||
self.wait_until_idle();
|
self.wait_until_idle();
|
||||||
|
|
||||||
// Set the clock frequency to 50Hz (default)
|
// Set the clock frequency to 50Hz (default)
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::{InputPin, OutputPin},
|
digital::{InputPin, OutputPin},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::color::Color;
|
use crate::color::Color;
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use crate::traits::Command;
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The Connection Interface of all (?) Waveshare EPD-Devices
|
/// The Connection Interface of all (?) Waveshare EPD-Devices
|
||||||
|
|
@ -43,7 +43,7 @@ where
|
||||||
/// Enables direct interaction with the device with the help of [data()](DisplayInterface::data())
|
/// Enables direct interaction with the device with the help of [data()](DisplayInterface::data())
|
||||||
pub(crate) fn cmd<T: Command>(&mut self, spi: &mut SPI, command: T) -> Result<(), SPI::Error> {
|
pub(crate) fn cmd<T: Command>(&mut self, spi: &mut SPI, command: T) -> Result<(), SPI::Error> {
|
||||||
// low for commands
|
// low for commands
|
||||||
let _ = self.dc.set_low();
|
let _ = self.dc.try_set_low();
|
||||||
|
|
||||||
// Transfer the command over spi
|
// Transfer the command over spi
|
||||||
self.write(spi, &[command.address()])
|
self.write(spi, &[command.address()])
|
||||||
|
|
@ -54,7 +54,7 @@ where
|
||||||
/// Enables direct interaction with the device with the help of [command()](EPD4in2::command())
|
/// Enables direct interaction with the device with the help of [command()](EPD4in2::command())
|
||||||
pub(crate) fn data(&mut self, spi: &mut SPI, data: &[u8]) -> Result<(), SPI::Error> {
|
pub(crate) fn data(&mut self, spi: &mut SPI, data: &[u8]) -> Result<(), SPI::Error> {
|
||||||
// high for data
|
// high for data
|
||||||
let _ = self.dc.set_high();
|
let _ = self.dc.try_set_high();
|
||||||
|
|
||||||
// Transfer data (u8-array) over spi
|
// Transfer data (u8-array) over spi
|
||||||
self.write(spi, data)
|
self.write(spi, data)
|
||||||
|
|
@ -83,7 +83,7 @@ where
|
||||||
repetitions: u32,
|
repetitions: u32,
|
||||||
) -> Result<(), SPI::Error> {
|
) -> Result<(), SPI::Error> {
|
||||||
// high for data
|
// high for data
|
||||||
let _ = self.dc.set_high();
|
let _ = self.dc.try_set_high();
|
||||||
// Transfer data (u8) over spi
|
// Transfer data (u8) over spi
|
||||||
for _ in 0..repetitions {
|
for _ in 0..repetitions {
|
||||||
self.write(spi, &[val])?;
|
self.write(spi, &[val])?;
|
||||||
|
|
@ -94,21 +94,21 @@ where
|
||||||
// spi write helper/abstraction function
|
// spi write helper/abstraction function
|
||||||
fn write(&mut self, spi: &mut SPI, data: &[u8]) -> Result<(), SPI::Error> {
|
fn write(&mut self, spi: &mut SPI, data: &[u8]) -> Result<(), SPI::Error> {
|
||||||
// activate spi with cs low
|
// activate spi with cs low
|
||||||
let _ = self.cs.set_low();
|
let _ = self.cs.try_set_low();
|
||||||
|
|
||||||
// transfer spi data
|
// transfer spi data
|
||||||
// Be careful!! Linux has a default limit of 4096 bytes per spi transfer
|
// Be careful!! Linux has a default limit of 4096 bytes per spi transfer
|
||||||
// see https://raspberrypi.stackexchange.com/questions/65595/spi-transfer-fails-with-buffer-size-greater-than-4096
|
// see https://raspberrypi.stackexchange.com/questions/65595/spi-transfer-fails-with-buffer-size-greater-than-4096
|
||||||
if cfg!(target_os = "linux") {
|
if cfg!(target_os = "linux") {
|
||||||
for data_chunk in data.chunks(4096) {
|
for data_chunk in data.chunks(4096) {
|
||||||
spi.write(data_chunk)?;
|
spi.try_write(data_chunk)?;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
spi.write(data)?;
|
spi.try_write(data)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// deativate spi with cs high
|
// deativate spi with cs high
|
||||||
let _ = self.cs.set_high();
|
let _ = self.cs.try_set_high();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
@ -151,8 +151,8 @@ where
|
||||||
/// Most likely there was a mistake with the 2in9 busy connection
|
/// Most likely there was a mistake with the 2in9 busy connection
|
||||||
/// //TODO: use the #cfg feature to make this compile the right way for the certain types
|
/// //TODO: use the #cfg feature to make this compile the right way for the certain types
|
||||||
pub(crate) fn is_busy(&self, is_busy_low: bool) -> bool {
|
pub(crate) fn is_busy(&self, is_busy_low: bool) -> bool {
|
||||||
(is_busy_low && self.busy.is_low().unwrap_or(false))
|
(is_busy_low && self.busy.try_is_low().unwrap_or(false))
|
||||||
|| (!is_busy_low && self.busy.is_high().unwrap_or(false))
|
|| (!is_busy_low && self.busy.try_is_high().unwrap_or(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Resets the device.
|
/// Resets the device.
|
||||||
|
|
@ -163,14 +163,14 @@ where
|
||||||
/// Most displays seem to require keeping it low for 10ms, but the 7in5_v2 only seems to reset
|
/// Most displays seem to require keeping it low for 10ms, but the 7in5_v2 only seems to reset
|
||||||
/// properly with 2ms
|
/// properly with 2ms
|
||||||
pub(crate) fn reset<DELAY: DelayMs<u8>>(&mut self, delay: &mut DELAY, duration: u8) {
|
pub(crate) fn reset<DELAY: DelayMs<u8>>(&mut self, delay: &mut DELAY, duration: u8) {
|
||||||
let _ = self.rst.set_high();
|
let _ = self.rst.try_set_high();
|
||||||
delay.delay_ms(10);
|
delay.try_delay_ms(10);
|
||||||
|
|
||||||
let _ = self.rst.set_low();
|
let _ = self.rst.try_set_low();
|
||||||
delay.delay_ms(duration);
|
delay.try_delay_ms(duration);
|
||||||
let _ = self.rst.set_high();
|
let _ = self.rst.try_set_high();
|
||||||
//TODO: the upstream libraries always sleep for 200ms here
|
//TODO: the upstream libraries always sleep for 200ms here
|
||||||
// 10ms works fine with just for the 7in5_v2 but this needs to be validated for other devices
|
// 10ms works fine with just for the 7in5_v2 but this needs to be validated for other devices
|
||||||
delay.delay_ms(200);
|
delay.try_delay_ms(200);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use crate::color::Color;
|
||||||
use core::marker::Sized;
|
use core::marker::Sized;
|
||||||
use embedded_hal::{
|
use embedded_hal::{
|
||||||
blocking::{delay::*, spi::Write},
|
blocking::{delay::*, spi::Write},
|
||||||
digital::v2::*,
|
digital::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// All commands need to have this trait which gives the address of the command
|
/// All commands need to have this trait which gives the address of the command
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue