Add more convenience GPIO functions
This commit is contained in:
parent
e4cacc3bb8
commit
98dcce81ca
1 changed files with 96 additions and 0 deletions
|
@ -141,6 +141,14 @@ impl<'d, T: Pin> Flex<'d, T> {
|
|||
state == vals::Idr::LOW
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn get_level(&self) -> Level {
|
||||
match self.is_high() {
|
||||
true => Level::High,
|
||||
false => Level::Low,
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn is_set_high(&self) -> bool {
|
||||
!self.is_set_low()
|
||||
|
@ -153,6 +161,15 @@ impl<'d, T: Pin> Flex<'d, T> {
|
|||
state == vals::Odr::LOW
|
||||
}
|
||||
|
||||
/// What level output is set to
|
||||
#[inline]
|
||||
pub fn get_set_level(&self) -> Level {
|
||||
match self.is_set_high() {
|
||||
true => Level::High,
|
||||
false => Level::Low,
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_high(&mut self) {
|
||||
self.pin.set_high();
|
||||
|
@ -164,6 +181,14 @@ impl<'d, T: Pin> Flex<'d, T> {
|
|||
self.pin.set_low();
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_level(&mut self, level: Level) {
|
||||
match level {
|
||||
Level::Low => self.pin.set_low(),
|
||||
Level::High => self.pin.set_high(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Toggle pin output
|
||||
#[inline]
|
||||
pub fn toggle(&mut self) {
|
||||
|
@ -281,6 +306,14 @@ impl<'d, T: Pin> Input<'d, T> {
|
|||
pub fn is_low(&self) -> bool {
|
||||
self.pin.is_low()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn get_level(&self) -> Level {
|
||||
match self.pin.is_high() {
|
||||
true => Level::High,
|
||||
false => Level::Low,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Digital input or output level.
|
||||
|
@ -291,6 +324,24 @@ pub enum Level {
|
|||
High,
|
||||
}
|
||||
|
||||
impl From<bool> for Level {
|
||||
fn from(val: bool) -> Self {
|
||||
match val {
|
||||
true => Self::High,
|
||||
false => Self::Low,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<bool> for Level {
|
||||
fn into(self) -> bool {
|
||||
match self {
|
||||
Level::Low => false,
|
||||
Level::High => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// GPIO output driver.
|
||||
pub struct Output<'d, T: Pin> {
|
||||
pub(crate) pin: Flex<'d, T>,
|
||||
|
@ -320,6 +371,15 @@ impl<'d, T: Pin> Output<'d, T> {
|
|||
self.pin.set_low();
|
||||
}
|
||||
|
||||
/// Set the output level.
|
||||
#[inline]
|
||||
pub fn set_level(&mut self, level: Level) {
|
||||
match level {
|
||||
Level::Low => self.pin.set_low(),
|
||||
Level::High => self.pin.set_high(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Is the output pin set as high?
|
||||
#[inline]
|
||||
pub fn is_set_high(&self) -> bool {
|
||||
|
@ -332,6 +392,15 @@ impl<'d, T: Pin> Output<'d, T> {
|
|||
self.pin.is_set_low()
|
||||
}
|
||||
|
||||
/// What level output is set to
|
||||
#[inline]
|
||||
pub fn get_set_level(&self) -> Level {
|
||||
match self.pin.is_set_high() {
|
||||
true => Level::High,
|
||||
false => Level::Low,
|
||||
}
|
||||
}
|
||||
|
||||
/// Toggle pin output
|
||||
#[inline]
|
||||
pub fn toggle(&mut self) {
|
||||
|
@ -368,6 +437,15 @@ impl<'d, T: Pin> OutputOpenDrain<'d, T> {
|
|||
self.pin.is_low()
|
||||
}
|
||||
|
||||
/// Returns current pin level
|
||||
#[inline]
|
||||
pub fn get_level(&self) -> Level {
|
||||
match self.pin.is_high() {
|
||||
true => Level::High,
|
||||
false => Level::Low,
|
||||
}
|
||||
}
|
||||
|
||||
/// Set the output as high.
|
||||
#[inline]
|
||||
pub fn set_high(&mut self) {
|
||||
|
@ -380,6 +458,15 @@ impl<'d, T: Pin> OutputOpenDrain<'d, T> {
|
|||
self.pin.set_low();
|
||||
}
|
||||
|
||||
/// Set the output level.
|
||||
#[inline]
|
||||
pub fn set_level(&mut self, level: Level) {
|
||||
match level {
|
||||
Level::Low => self.pin.set_low(),
|
||||
Level::High => self.pin.set_high(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Is the output pin set as high?
|
||||
#[inline]
|
||||
pub fn is_set_high(&self) -> bool {
|
||||
|
@ -392,6 +479,15 @@ impl<'d, T: Pin> OutputOpenDrain<'d, T> {
|
|||
self.pin.is_set_low()
|
||||
}
|
||||
|
||||
/// What level output is set to
|
||||
#[inline]
|
||||
pub fn get_set_level(&self) -> Level {
|
||||
match self.pin.is_set_high() {
|
||||
true => Level::High,
|
||||
false => Level::Low,
|
||||
}
|
||||
}
|
||||
|
||||
/// Toggle pin output
|
||||
#[inline]
|
||||
pub fn toggle(&mut self) {
|
||||
|
|
Loading…
Reference in a new issue