Add button driver to drivers object
diff --git a/examples/button_leds.rs b/examples/button_leds.rs
index 789cb9b..bdf18ba 100644
--- a/examples/button_leds.rs
+++ b/examples/button_leds.rs
@@ -1,16 +1,19 @@
#![no_std]
use futures::future;
-use libtock::buttons;
use libtock::buttons::ButtonState;
use libtock::result::TockResult;
use libtock::Hardware;
#[libtock::main]
async fn main() -> TockResult<()> {
- let Hardware { mut led_driver, .. } = libtock::retrieve_hardware()?;
+ let Hardware {
+ mut led_driver,
+ button_driver,
+ ..
+ } = libtock::retrieve_hardware()?;
- let mut with_callback = buttons::with_callback(|button_num: usize, state| {
+ let mut with_callback = button_driver.with_callback(|button_num: usize, state| {
match state {
ButtonState::Pressed => led_driver.get(button_num).unwrap().toggle().ok().unwrap(),
ButtonState::Released => (),
diff --git a/examples/button_read.rs b/examples/button_read.rs
index edb4f49..b82167d 100644
--- a/examples/button_read.rs
+++ b/examples/button_read.rs
@@ -1,7 +1,6 @@
#![no_std]
use core::fmt::Write;
-use libtock::buttons;
use libtock::buttons::ButtonState;
use libtock::result::TockResult;
use libtock::timer::Duration;
@@ -12,10 +11,11 @@
let Hardware {
console_driver,
timer_context,
+ button_driver,
..
} = libtock::retrieve_hardware()?;
let mut console = console_driver.create_console();
- let mut with_callback = buttons::with_callback(|_, _| {});
+ let mut with_callback = button_driver.with_callback(|_, _| {});
let mut buttons = with_callback.init()?;
let mut button = buttons.iter_mut().next().unwrap();
let button = button.enable()?;
diff --git a/examples/button_subscribe.rs b/examples/button_subscribe.rs
index afc8079..f5d0cbe 100644
--- a/examples/button_subscribe.rs
+++ b/examples/button_subscribe.rs
@@ -2,7 +2,6 @@
use core::fmt::Write;
use futures::future;
-use libtock::buttons;
use libtock::buttons::ButtonState;
use libtock::result::TockResult;
use libtock::Hardware;
@@ -10,9 +9,13 @@
// FIXME: Hangs up when buttons are pressed rapidly. Yielding in callback leads to stack overflow.
#[libtock::main]
async fn main() -> TockResult<()> {
- let Hardware { console_driver, .. } = libtock::retrieve_hardware()?;
+ let Hardware {
+ console_driver,
+ button_driver,
+ ..
+ } = libtock::retrieve_hardware()?;
let mut console = console_driver.create_console();
- let mut with_callback = buttons::with_callback(|button_num: usize, state| {
+ let mut with_callback = button_driver.with_callback(|button_num: usize, state| {
writeln!(
console,
"Button: {} - State: {}",
diff --git a/src/buttons.rs b/src/buttons.rs
index c360f7a..850dd11 100644
--- a/src/buttons.rs
+++ b/src/buttons.rs
@@ -17,8 +17,14 @@
pub const SUBSCRIBE_CALLBACK: usize = 0;
}
-pub fn with_callback<CB>(callback: CB) -> WithCallback<CB> {
- WithCallback { callback }
+pub struct ButtonDriver {
+ pub(crate) _unconstructible: (),
+}
+
+impl ButtonDriver {
+ pub fn with_callback<CB>(self, callback: CB) -> WithCallback<CB> {
+ WithCallback { callback }
+ }
}
pub struct WithCallback<CB> {
diff --git a/src/hardware.rs b/src/hardware.rs
index 1269f39..2e34ea7 100644
--- a/src/hardware.rs
+++ b/src/hardware.rs
@@ -1,3 +1,4 @@
+use crate::buttons::ButtonDriver;
use crate::console::ConsoleDriver;
use crate::gpio::GpioDriver;
use crate::led::LedDriver;
@@ -15,6 +16,7 @@
pub timer_context: DriverContext,
pub gpio_driver: GpioDriver,
pub temperature_driver: TemperatureDriver,
+ pub button_driver: ButtonDriver,
}
/// Retrieve Hardware struct. Returns Hardware only once.
@@ -52,6 +54,9 @@
temperature_driver: TemperatureDriver {
_unconstructible: (),
},
+ button_driver: ButtonDriver {
+ _unconstructible: (),
+ },
};
static mut HARDWARE_SINGLETON: Option<Hardware> = Some(HARDWARE);