More user-friendly method of how to use the Drivers struct
diff --git a/examples/adc.rs b/examples/adc.rs index 8aaf194..711176e 100644 --- a/examples/adc.rs +++ b/examples/adc.rs
@@ -3,21 +3,15 @@ use core::fmt::Write; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut adc_driver_factory, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let adc_driver = adc_driver_factory.init_driver()?; - let mut driver = timer_context.create_timer_driver(); - let timer_driver = driver.activate()?; - let mut console = console_driver.create_console(); + let adc_driver = drivers.adc.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); + let timer_driver = timer_driver.activate()?; + let mut console = drivers.console.create_console(); let mut callback = |channel, value| { writeln!(console, "channel: {}, value: {}", channel, value).unwrap();
diff --git a/examples/adc_buffer.rs b/examples/adc_buffer.rs index d06f356..86f94b2 100644 --- a/examples/adc_buffer.rs +++ b/examples/adc_buffer.rs
@@ -4,19 +4,14 @@ use libtock::adc::AdcBuffer; use libtock::result::TockResult; use libtock::syscalls; -use libtock::Drivers; #[libtock::main] /// Reads a 128 byte sample into a buffer and prints the first value to the console. async fn main() -> TockResult<()> { - let Drivers { - mut adc_driver_factory, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let adc_driver = adc_driver_factory.init_driver()?; - let mut console = console_driver.create_console(); + let adc_driver = drivers.adc.init_driver()?; + let mut console = drivers.console.create_console(); let mut adc_buffer = AdcBuffer::default(); let mut temp_buffer = [0; libtock::adc::BUFFER_SIZE];
diff --git a/examples/ble_scanning.rs b/examples/ble_scanning.rs index 10e269b..8396399 100644 --- a/examples/ble_scanning.rs +++ b/examples/ble_scanning.rs
@@ -6,7 +6,6 @@ use libtock::simple_ble; use libtock::simple_ble::BleCallback; use libtock::simple_ble::BleScanningDriver; -use libtock::Drivers; use serde::Deserialize; #[derive(Deserialize)] @@ -17,17 +16,13 @@ #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut ble_scanning_driver, - mut leds_driver_factory, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let leds_driver = leds_driver_factory.init_driver()?; + let leds_driver = drivers.leds.init_driver()?; let mut shared_buffer = BleScanningDriver::create_scan_buffer(); let mut my_buffer = BleScanningDriver::create_scan_buffer(); - let shared_memory = ble_scanning_driver.share_memory(&mut shared_buffer)?; + let shared_memory = drivers.ble_scanning.share_memory(&mut shared_buffer)?; let mut callback = BleCallback::new(|_: usize, _: usize| { shared_memory.read_bytes(&mut my_buffer[..]); @@ -37,7 +32,7 @@ .and_then(|msg| leds_driver.get(msg.nr as usize).map(|led| led.set(msg.st))); }); - let _subscription = ble_scanning_driver.start(&mut callback)?; + let _subscription = drivers.ble_scanning.start(&mut callback)?; future::pending().await }
diff --git a/examples/blink.rs b/examples/blink.rs index 8d6f6da..fd3b1e5 100644 --- a/examples/blink.rs +++ b/examples/blink.rs
@@ -2,18 +2,13 @@ use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut leds_driver_factory, - mut timer_context, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let leds_driver = leds_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let leds_driver = drivers.leds.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; // Blink the LEDs in a binary count pattern and scale
diff --git a/examples/blink_random.rs b/examples/blink_random.rs index 985746d..60bac18 100644 --- a/examples/blink_random.rs +++ b/examples/blink_random.rs
@@ -3,19 +3,13 @@ use libtock::leds::LedsDriver; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut leds_driver_factory, - mut rng_driver, - mut timer_context, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let leds_driver = leds_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let leds_driver = drivers.leds.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; // blink_nibble assumes 4 leds. @@ -23,7 +17,7 @@ let mut buf = [0; 64]; loop { - rng_driver.fill_buffer(&mut buf).await?; + drivers.rng.fill_buffer(&mut buf).await?; for &x in buf.iter() { blink_nibble(&leds_driver, x)?;
diff --git a/examples/button_leds.rs b/examples/button_leds.rs index 94fdd85..794251d 100644 --- a/examples/button_leds.rs +++ b/examples/button_leds.rs
@@ -3,18 +3,13 @@ use futures::future; use libtock::buttons::ButtonState; use libtock::result::TockResult; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut buttons_driver_factory, - mut leds_driver_factory, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let buttons_driver = buttons_driver_factory.init_driver()?; - let leds_driver = leds_driver_factory.init_driver()?; + let buttons_driver = drivers.buttons.init_driver()?; + let leds_driver = drivers.leds.init_driver()?; let mut callback = |button_num, state| { if let (ButtonState::Pressed, Some(led)) = (state, leds_driver.get(button_num)) {
diff --git a/examples/button_read.rs b/examples/button_read.rs index 252493b..c3f9aa6 100644 --- a/examples/button_read.rs +++ b/examples/button_read.rs
@@ -3,21 +3,15 @@ use core::fmt::Write; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut buttons_driver_factory, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let buttons_driver = buttons_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let buttons_driver = drivers.buttons.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); loop { for button in buttons_driver.buttons() {
diff --git a/examples/button_subscribe.rs b/examples/button_subscribe.rs index 9fd64f4..d06a0e9 100644 --- a/examples/button_subscribe.rs +++ b/examples/button_subscribe.rs
@@ -5,21 +5,15 @@ use libtock::buttons::ButtonState; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut buttons_driver_factory, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let buttons_driver = buttons_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let buttons_driver = drivers.buttons.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); let pressed_count = Cell::new(0usize); let released_count = Cell::new(0usize);
diff --git a/examples/gpio.rs b/examples/gpio.rs index 2f2c94f..9241e74 100644 --- a/examples/gpio.rs +++ b/examples/gpio.rs
@@ -2,19 +2,14 @@ use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; // Example works on P0.03 #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut gpio_driver_factory, - mut timer_context, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut gpio_driver = gpio_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let mut gpio_driver = drivers.gpio.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; let mut gpio = gpio_driver.gpios().next().unwrap();
diff --git a/examples/gpio_read.rs b/examples/gpio_read.rs index 88e723d..a29662e 100644 --- a/examples/gpio_read.rs +++ b/examples/gpio_read.rs
@@ -4,22 +4,16 @@ use libtock::gpio::ResistorMode; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; // example works on p0.03 #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut gpio_driver_factory, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut gpio_driver = gpio_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let mut gpio_driver = drivers.gpio.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); let mut gpio = gpio_driver.gpios().next().unwrap(); let gpio_in = gpio.enable_input(ResistorMode::PullDown)?;
diff --git a/examples/hardware_test.rs b/examples/hardware_test.rs index 73b4204..2f7028c 100644 --- a/examples/hardware_test.rs +++ b/examples/hardware_test.rs
@@ -15,7 +15,6 @@ use libtock::result::TockResult; use libtock::timer::DriverContext; use libtock::timer::Duration; -use libtock::Drivers; static mut STATIC: usize = 0; @@ -37,15 +36,10 @@ #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut gpio_driver_factory, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut gpio_driver = gpio_driver_factory.init_driver()?; - let mut console = console_driver.create_console(); + let mut gpio_driver = drivers.gpio.init_driver()?; + let mut console = drivers.console.create_console(); let mut gpios = gpio_driver.gpios(); let mut pin_in = gpios.next().unwrap(); @@ -63,7 +57,7 @@ test_trait_objects(&mut console, &pin_in, &mut pin_out)?; - test_callbacks_and_wait_forever(&mut console, &mut timer_context).await + test_callbacks_and_wait_forever(&mut console, &mut drivers.timer).await } fn test_heap(console: &mut Console) {
diff --git a/examples/sensors.rs b/examples/sensors.rs index afe365c..7ea87c7 100644 --- a/examples/sensors.rs +++ b/examples/sensors.rs
@@ -2,34 +2,37 @@ use core::fmt::Write; use libtock::result::TockResult; -use libtock::sensors::*; +use libtock::sensors::Sensor; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut temperature_sensor, - mut humidity_sensor, - mut ambient_light_sensor, - mut ninedof_driver, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut timer_driver = timer_context.create_timer_driver(); + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); loop { - writeln!(console, "Humidity: {}\n", humidity_sensor.read()?)?; - writeln!(console, "Temperature: {}\n", temperature_sensor.read()?)?; - writeln!(console, "Light: {}\n", ambient_light_sensor.read()?)?; + writeln!( + console, + "Humidity: {}\n", + drivers.humidity_sensor.read()? + )?; + writeln!( + console, + "Temperature: {}\n", + drivers.temperature_sensor.read()? + )?; + writeln!( + console, + "Light: {}\n", + drivers.ambient_light_sensor.read()? + )?; writeln!( console, "Accel: {}\n", - ninedof_driver.read_acceleration()? + drivers.ninedof.read_acceleration()? )?; timer_driver.sleep(Duration::from_ms(500)).await?; }
diff --git a/examples/seven_segment.rs b/examples/seven_segment.rs index 5637497..88b0700 100644 --- a/examples/seven_segment.rs +++ b/examples/seven_segment.rs
@@ -3,7 +3,6 @@ use libtock::electronics::ShiftRegister; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; fn number_to_bits(n: u8) -> [bool; 8] { match n { @@ -24,13 +23,9 @@ // Example works on a shift register on P0.03, P0.04, P0.28 #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut gpio_driver_factory, - mut timer_context, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut gpio_driver = gpio_driver_factory.init_driver()?; + let mut gpio_driver = drivers.gpio.init_driver()?; let mut gpios = gpio_driver.gpios(); let mut gpio0 = gpios.next().unwrap(); let gpio0 = gpio0.enable_output()?; @@ -40,7 +35,7 @@ let gpio2 = gpio2.enable_output()?; let mut shift_register = ShiftRegister::new(&gpio0, &gpio1, &gpio2); - let mut driver = timer_context.create_timer_driver(); + let mut driver = drivers.timer.create_timer_driver(); let timer_driver = driver.activate()?; let mut i = 0;
diff --git a/examples/simple_ble.rs b/examples/simple_ble.rs index a6e5289..23543ed 100644 --- a/examples/simple_ble.rs +++ b/examples/simple_ble.rs
@@ -5,7 +5,6 @@ use libtock::result::TockResult; use libtock::simple_ble::BleAdvertisingDriver; use libtock::timer::Duration; -use libtock::Drivers; use serde::Serialize; #[derive(Serialize)] @@ -16,16 +15,11 @@ #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut leds_driver_factory, - mut ble_advertising_driver, - mut timer_context, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let leds_driver = leds_driver_factory.init_driver()?; - let mut driver = timer_context.create_timer_driver(); - let timer_driver = driver.activate()?; + let leds_driver = drivers.leds.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); + let timer_driver = timer_driver.activate()?; let led = leds_driver.leds().next().unwrap(); @@ -50,7 +44,9 @@ gap_payload.add_service_payload([91, 79], &payload).unwrap(); - let _handle = ble_advertising_driver.initialize(100, &gap_payload, &mut buffer); + let _handle = drivers + .ble_advertising + .initialize(100, &gap_payload, &mut buffer); loop { led.on()?;
diff --git a/examples/temperature.rs b/examples/temperature.rs index aa868ff..7428187 100644 --- a/examples/temperature.rs +++ b/examples/temperature.rs
@@ -3,21 +3,15 @@ use core::fmt::Write; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut temperature_driver_factory, - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut temperature_driver = temperature_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let mut temperature_driver = drivers.temperature.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); loop { let temperature = temperature_driver.measure_temperature().await?;
diff --git a/examples/timer.rs b/examples/timer.rs index bb6d862..493f0b9 100644 --- a/examples/timer.rs +++ b/examples/timer.rs
@@ -8,26 +8,21 @@ use libtock::result::TockResult; use libtock::timer::DriverContext; use libtock::timer::Duration; -use libtock::Drivers; const DELAY_MS: usize = 500; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); let mut previous_ticks = None; for i in 0.. { - print_now(&mut console, &mut timer_context, &mut previous_ticks, i)?; - let mut driver = timer_context.create_timer_driver(); - let timer_driver = driver.activate()?; + print_now(&mut console, &mut drivers.timer, &mut previous_ticks, i)?; + let mut timer_driver = drivers.timer.create_timer_driver(); + let timer_driver = timer_driver.activate()?; timer_driver.sleep(Duration::from_ms(DELAY_MS)).await?; }
diff --git a/examples/timer_parallel.rs b/examples/timer_parallel.rs index d2ce3ae..66ddac2 100644 --- a/examples/timer_parallel.rs +++ b/examples/timer_parallel.rs
@@ -5,7 +5,6 @@ use libtock::result::TockResult; use libtock::timer::Duration; use libtock::timer::ParallelSleepDriver; -use libtock::Drivers; async fn blink( timer_driver: &ParallelSleepDriver<'_>, @@ -21,14 +20,10 @@ #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut leds_driver_factory, - timer_context, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let leds_driver = leds_driver_factory.init_driver()?; - let mut timer_driver = timer_context.create_timer_driver(); + let leds_driver = drivers.leds.init_driver()?; + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate()?; let mut leds = leds_driver.leds();
diff --git a/examples/timer_subscribe.rs b/examples/timer_subscribe.rs index 6f7ec1b..5c69be1 100644 --- a/examples/timer_subscribe.rs +++ b/examples/timer_subscribe.rs
@@ -4,19 +4,14 @@ use futures::future; use libtock::result::TockResult; use libtock::timer::Duration; -use libtock::Drivers; #[libtock::main] async fn main() -> TockResult<()> { - let Drivers { - mut timer_context, - console_driver, - .. - } = libtock::retrieve_drivers()?; + let mut drivers = libtock::retrieve_drivers()?; - let mut console = console_driver.create_console(); + let mut console = drivers.console.create_console(); - let mut with_callback = timer_context.with_callback(|_, _| { + let mut with_callback = drivers.timer.with_callback(|_, _| { writeln!( console, "This line is printed 2 seconds after the start of the program.",
diff --git a/src/debug/mod.rs b/src/debug/mod.rs index 1e55bb3..4596aaa 100644 --- a/src/debug/mod.rs +++ b/src/debug/mod.rs
@@ -1,23 +1,23 @@ //! Heapless debugging functions for Tock troubleshooting mod low_level_debug; -use crate::drivers::Drivers; -pub use low_level_debug::*; -use crate::retrieve_drivers_unsafe; +use crate::drivers; + +pub use low_level_debug::*; pub fn println() { let buffer = [b'\n']; - let Drivers { console_driver, .. } = unsafe { retrieve_drivers_unsafe() }; - let mut console = console_driver.create_console(); + let drivers = unsafe { drivers::retrieve_drivers_unsafe() }; + let mut console = drivers.console.create_console(); let _ = console.write(&buffer); } pub fn print_as_hex(value: usize) { let mut buffer = [b'\n'; 11]; write_as_hex(&mut buffer, value); - let Drivers { console_driver, .. } = unsafe { retrieve_drivers_unsafe() }; - let mut console = console_driver.create_console(); + let drivers = unsafe { drivers::retrieve_drivers_unsafe() }; + let mut console = drivers.console.create_console(); let _ = console.write(buffer); } @@ -29,8 +29,8 @@ let mut buffer = [b'\n'; 15]; buffer[0..4].clone_from_slice(b"SP: "); write_as_hex(&mut buffer[4..15], stack_pointer); - let Drivers { console_driver, .. } = unsafe { retrieve_drivers_unsafe() }; - let mut console = console_driver.create_console(); + let drivers = unsafe { drivers::retrieve_drivers_unsafe() }; + let mut console = drivers.console.create_console(); let _ = console.write(buffer); } @@ -54,8 +54,8 @@ } } buffer[27] = b'\n'; - let Drivers { console_driver, .. } = retrieve_drivers_unsafe(); - let mut console = console_driver.create_console(); + let drivers = drivers::retrieve_drivers_unsafe(); + let mut console = drivers.console.create_console(); let _ = console.write(&buffer); }
diff --git a/src/drivers.rs b/src/drivers.rs index b7c9845..a8e1e98 100644 --- a/src/drivers.rs +++ b/src/drivers.rs
@@ -20,20 +20,20 @@ /// Struct containing all drivers constructible through [retrieve_drivers()] #[non_exhaustive] pub struct Drivers { - pub console_driver: ConsoleDriver, - pub leds_driver_factory: LedsDriverFactory, - pub timer_context: DriverContext, - pub gpio_driver_factory: GpioDriverFactory, - pub temperature_driver_factory: TemperatureDriverFactory, - pub buttons_driver_factory: ButtonsDriverFactory, - pub adc_driver_factory: AdcDriverFactory, - pub rng_driver: RngDriver, - pub ble_advertising_driver: BleAdvertisingDriver, - pub ble_scanning_driver: BleScanningDriver, + pub console: ConsoleDriver, + pub leds: LedsDriverFactory, + pub timer: DriverContext, + pub gpio: GpioDriverFactory, + pub temperature: TemperatureDriverFactory, + pub buttons: ButtonsDriverFactory, + pub adc: AdcDriverFactory, + pub rng: RngDriver, + pub ble_advertising: BleAdvertisingDriver, + pub ble_scanning: BleScanningDriver, pub ambient_light_sensor: AmbientLightSensor, pub temperature_sensor: TemperatureSensor, pub humidity_sensor: HumiditySensor, - pub ninedof_driver: NinedofDriver, + pub ninedof: NinedofDriver, } /// Retrieve [Drivers] struct. Returns struct only once. @@ -56,31 +56,30 @@ #[allow(clippy::declare_interior_mutable_const)] const DRIVERS: Drivers = Drivers { - adc_driver_factory: AdcDriverFactory, - ble_advertising_driver: BleAdvertisingDriver, - ble_scanning_driver: BleScanningDriver, - buttons_driver_factory: ButtonsDriverFactory, - console_driver: ConsoleDriver, - leds_driver_factory: LedsDriverFactory, - timer_context: DriverContext { + adc: AdcDriverFactory, + ble_advertising: BleAdvertisingDriver, + ble_scanning: BleScanningDriver, + buttons: ButtonsDriverFactory, + console: ConsoleDriver, + leds: LedsDriverFactory, + timer: DriverContext { active_timer: Cell::new(None), }, - gpio_driver_factory: GpioDriverFactory, - temperature_driver_factory: TemperatureDriverFactory, - rng_driver: RngDriver, + gpio: GpioDriverFactory, + temperature: TemperatureDriverFactory, + rng: RngDriver, ambient_light_sensor: AmbientLightSensor, temperature_sensor: TemperatureSensor, humidity_sensor: HumiditySensor, - ninedof_driver: NinedofDriver, + ninedof: NinedofDriver, }; static mut DRIVERS_SINGLETON: Option<Drivers> = Some(DRIVERS); #[cfg(test)] mod test { - use super::DRIVERS; - use super::DRIVERS_SINGLETON; - use crate::retrieve_drivers; + use super::*; + #[test] pub fn can_be_retrieved_once() { reset_drivers_singleton();
diff --git a/src/lang_items.rs b/src/lang_items.rs index 4f8d947..69ddf85 100644 --- a/src/lang_items.rs +++ b/src/lang_items.rs
@@ -18,12 +18,12 @@ //! `rustc_main`. That's covered by the `_start` function in the root of this //! crate. +use crate::drivers; use crate::entry_point::TockAllocator; use crate::leds::LedsDriver; use crate::result::TockResult; use crate::timer::Duration; use crate::timer::ParallelSleepDriver; -use crate::Drivers; use core::alloc::Layout; use core::executor; use core::panic::PanicInfo; @@ -50,14 +50,10 @@ // Flash all LEDs (if available). executor::block_on(async { - let Drivers { - mut leds_driver_factory, - timer_context, - .. - } = crate::retrieve_drivers_unsafe(); + let mut drivers = drivers::retrieve_drivers_unsafe(); - let leds_driver = leds_driver_factory.init_driver(); - let mut timer_driver = timer_context.create_timer_driver(); + let leds_driver = drivers.leds.init_driver(); + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate(); if let (Ok(leds_driver), Ok(timer_driver)) = (leds_driver, timer_driver) { @@ -89,14 +85,10 @@ #[alloc_error_handler] unsafe fn alloc_error_handler(_: Layout) -> ! { executor::block_on(async { - let Drivers { - mut leds_driver_factory, - timer_context, - .. - } = crate::retrieve_drivers_unsafe(); + let mut drivers = drivers::retrieve_drivers_unsafe(); - let leds_driver = leds_driver_factory.init_driver(); - let mut timer_driver = timer_context.create_timer_driver(); + let leds_driver = drivers.leds.init_driver(); + let mut timer_driver = drivers.timer.create_timer_driver(); let timer_driver = timer_driver.activate(); if let (Ok(leds_driver), Ok(timer_driver)) = (leds_driver, timer_driver) {
diff --git a/src/lib.rs b/src/lib.rs index 6752ea8..e7d9d63 100644 --- a/src/lib.rs +++ b/src/lib.rs
@@ -1,7 +1,6 @@ #![feature(asm, alloc_error_handler, lang_items, naked_functions)] #![cfg_attr(any(target_arch = "arm", target_arch = "riscv32"), no_std)] -mod drivers; mod entry_point; #[cfg(any(target_arch = "arm", target_arch = "riscv32"))] mod lang_items; @@ -13,6 +12,7 @@ pub mod callback; pub mod console; pub mod debug; +pub mod drivers; pub mod electronics; pub mod futures; pub mod gpio; @@ -28,5 +28,5 @@ pub mod timer; pub mod unwind_symbols; -pub use drivers::*; +pub use drivers::retrieve_drivers; pub use libtock_codegen::main;
diff --git a/src/timer.rs b/src/timer.rs index d93198e..7319109 100644 --- a/src/timer.rs +++ b/src/timer.rs
@@ -283,12 +283,10 @@ /// Context for the time driver. /// You can create a context as follows: /// ```no_run -/// # use libtock::timer::DriverContext; /// # use libtock::result::TockResult; -/// # use libtock::Drivers; -/// # #[libtock::main] -/// # async fn main() -> TockResult<()> { -/// let Drivers { timer_context, .. } = libtock::retrieve_drivers()?; +/// # async fn doc() -> TockResult<()> { +/// let mut drivers = libtock::retrieve_drivers()?; +/// let mut timer_context = drivers.timer; /// # Ok(()) /// # } /// ``` @@ -317,14 +315,12 @@ /// Timer driver instance. You can create a TimerDriver from a DriverContext as follows: /// ```no_run -/// # use libtock::timer::DriverContext; /// # use libtock::result::TockResult; -/// # use libtock::Drivers; -/// # #[libtock::main] -/// # async fn main() -> TockResult<()> { -/// # let Drivers { timer_context,.. } = libtock::retrieve_drivers()?; -/// # let mut driver = timer_context.create_timer_driver(); -/// let timer_driver = driver.activate()?; +/// # async fn doc() -> TockResult<()> { +/// # let mut drivers = libtock::retrieve_drivers()?; +/// # let mut timer_context = drivers.timer; +/// let mut timer_driver = timer_context.create_timer_driver(); +/// let timer_driver = timer_driver.activate()?; /// # Ok(()) /// # } /// ``` @@ -343,15 +339,12 @@ /// active alarms. /// Example usage (sleep for 1 second): /// ```no_run -/// # use libtock::timer::DriverContext; /// # use libtock::result::TockResult; /// # use libtock::timer::Duration; -/// # use libtock::Drivers; -/// # #[libtock::main] -/// # async fn main() -> TockResult<()> { -/// # let Drivers { timer_context,.. } = libtock::retrieve_drivers()?; -/// # let mut driver = timer_context.create_timer_driver(); -/// let timer_driver = driver.activate()?; +/// # async fn doc() -> TockResult<()> { +/// # let mut drivers = libtock::retrieve_drivers()?; +/// # let mut timer_driver = drivers.timer.create_timer_driver(); +/// let timer_driver = timer_driver.activate()?; /// timer_driver.sleep(Duration::from_ms(1000)).await?; /// # Ok(()) /// # }