Restore mutability of references
diff --git a/examples/ble_scanning.rs b/examples/ble_scanning.rs index 8a871e8..8ee5567 100644 --- a/examples/ble_scanning.rs +++ b/examples/ble_scanning.rs
@@ -18,7 +18,7 @@ #[libtock::main] async fn main() -> TockResult<()> { let Hardware { - mut led_driver, + led_driver, mut ble_scanning_driver, .. } = libtock::retrieve_hardware()?; @@ -35,7 +35,7 @@ .and_then(|msg| { led_driver .get(msg.nr as usize) - .map(|mut led| led.set_state(msg.st)) + .map(|led| led.set_state(msg.st)) }); });
diff --git a/examples/blink.rs b/examples/blink.rs index 649a1bd..b18bf20 100644 --- a/examples/blink.rs +++ b/examples/blink.rs
@@ -7,7 +7,7 @@ #[libtock::main] async fn main() -> TockResult<()> { let Hardware { - mut led_driver, + led_driver, timer_context, .. } = libtock::retrieve_hardware()?; @@ -19,7 +19,7 @@ // to the number of LEDs on the board. let mut count: usize = 0; loop { - for mut led in led_driver.all() { + for led in led_driver.all() { let i = led.number(); if count & (1 << i) == (1 << i) { led.on()?;
diff --git a/examples/blink_random.rs b/examples/blink_random.rs index 3fc2d2d..9817282 100644 --- a/examples/blink_random.rs +++ b/examples/blink_random.rs
@@ -37,7 +37,7 @@ // Takes the 4 least-significant bits of x, and turn the 4 leds on/off accordingly. fn blink_nibble(x: u8, led_driver: &mut LedDriver) -> TockResult<()> { for i in 0..4 { - let mut led = led_driver.get(i).unwrap(); + let led = led_driver.get(i).unwrap(); if (x >> i) & 1 != 0 { led.on()?; } else {
diff --git a/examples/button_leds.rs b/examples/button_leds.rs index bdf18ba..8739e9f 100644 --- a/examples/button_leds.rs +++ b/examples/button_leds.rs
@@ -8,7 +8,7 @@ #[libtock::main] async fn main() -> TockResult<()> { let Hardware { - mut led_driver, + led_driver, button_driver, .. } = libtock::retrieve_hardware()?;
diff --git a/examples/gpio.rs b/examples/gpio.rs index 4de6085..6fc8f6c 100644 --- a/examples/gpio.rs +++ b/examples/gpio.rs
@@ -9,11 +9,11 @@ async fn main() -> TockResult<()> { let Hardware { timer_context, - mut gpio_driver, + gpio_driver, .. } = libtock::retrieve_hardware()?; let pin = gpio_driver.pin(0)?; - let mut pin = pin.open_for_write()?; + let pin = pin.open_for_write()?; let mut driver = timer_context.create_timer_driver(); let timer_driver = driver.activate()?;
diff --git a/examples/gpio_read.rs b/examples/gpio_read.rs index f3e6a8c..a4c9587 100644 --- a/examples/gpio_read.rs +++ b/examples/gpio_read.rs
@@ -1,7 +1,6 @@ #![no_std] use core::fmt::Write; -use libtock::gpio::GpioPinUnitialized; use libtock::gpio::InputMode; use libtock::result::TockResult; use libtock::timer::Duration; @@ -13,10 +12,11 @@ let Hardware { console_driver, timer_context, + gpio_driver, .. } = libtock::retrieve_hardware()?; let mut console = console_driver.create_console(); - let pin = GpioPinUnitialized::new(0); + let pin = gpio_driver.pin(0)?; let pin = pin.open_for_read(None, InputMode::PullDown)?; let mut driver = timer_context.create_timer_driver(); let timer_driver = driver.activate()?;
diff --git a/examples/hardware_test.rs b/examples/hardware_test.rs index f9c4c04..b33681c 100644 --- a/examples/hardware_test.rs +++ b/examples/hardware_test.rs
@@ -38,7 +38,7 @@ async fn main() -> TockResult<()> { let Hardware { console_driver, - mut gpio_driver, + gpio_driver, mut timer_context, .. } = libtock::retrieve_hardware()?;
diff --git a/examples/seven_segment.rs b/examples/seven_segment.rs index d6b913a..9125f2f 100644 --- a/examples/seven_segment.rs +++ b/examples/seven_segment.rs
@@ -1,7 +1,6 @@ #![no_std] use libtock::electronics::ShiftRegister; -use libtock::gpio::GpioPinUnitialized; use libtock::result::TockResult; use libtock::timer::Duration; use libtock::Hardware; @@ -25,11 +24,15 @@ // Example works on a shift register on P0.03, P0.04, P0.28 #[libtock::main] async fn main() -> TockResult<()> { - let Hardware { timer_context, .. } = libtock::retrieve_hardware()?; + let Hardware { + timer_context, + gpio_driver, + .. + } = libtock::retrieve_hardware()?; let mut shift_register = ShiftRegister::new( - GpioPinUnitialized::new(0).open_for_write()?, - GpioPinUnitialized::new(1).open_for_write()?, - GpioPinUnitialized::new(2).open_for_write()?, + gpio_driver.pin(0)?.open_for_write()?, + gpio_driver.pin(1)?.open_for_write()?, + gpio_driver.pin(2)?.open_for_write()?, ); let mut driver = timer_context.create_timer_driver();
diff --git a/examples/simple_ble.rs b/examples/simple_ble.rs index 7dadd96..a0bd16c 100644 --- a/examples/simple_ble.rs +++ b/examples/simple_ble.rs
@@ -17,13 +17,13 @@ #[libtock::main] async fn main() -> TockResult<()> { let Hardware { - mut led_driver, + led_driver, timer_context, mut ble_advertising_driver, .. } = libtock::retrieve_hardware()?; - let mut led = led_driver.get(0).unwrap(); + let led = led_driver.get(0).unwrap(); let uuid: [u8; 2] = [0x00, 0x18];
diff --git a/examples/timer_parallel.rs b/examples/timer_parallel.rs index e0b42c9..e379df3 100644 --- a/examples/timer_parallel.rs +++ b/examples/timer_parallel.rs
@@ -22,7 +22,7 @@ #[libtock::main] async fn main() -> TockResult<()> { let Hardware { - mut led_driver, + led_driver, timer_context, .. } = libtock::retrieve_hardware()?;
diff --git a/src/gpio.rs b/src/gpio.rs index e8e0373..c42b43d 100644 --- a/src/gpio.rs +++ b/src/gpio.rs
@@ -27,7 +27,7 @@ } impl GpioDriver { - pub fn all_pins<'a>(&'a mut self) -> TockResult<GpioIter<'a>> { + pub fn all_pins<'a>(&'a self) -> TockResult<GpioIter<'a>> { let number = self.number_of_pins()?; Ok(GpioIter { curr_gpio: 0, @@ -36,7 +36,7 @@ }) } - pub fn pin<'a>(&'a mut self, pin: usize) -> TockResult<GpioPinUnitialized<'a>> { + pub fn pin<'a>(&'a self, pin: usize) -> TockResult<GpioPinUnitialized<'a>> { let number = self.number_of_pins()?; if pin < number { Ok(GpioPinUnitialized { @@ -125,13 +125,6 @@ } impl<'a> GpioPinUnitialized<'a> { - pub fn new(number: usize) -> GpioPinUnitialized<'a> { - GpioPinUnitialized { - number, - phantom: PhantomData, - } - } - pub fn open_for_write(self) -> TockResult<GpioPinWrite<'a>> { syscalls::command(DRIVER_NUMBER, command_nr::ENABLE_OUTPUT, self.number, 0)?; Ok(GpioPinWrite { @@ -189,15 +182,15 @@ } impl<'a> GpioPinWrite<'a> { - pub fn set_low(&mut self) -> TockResult<()> { + pub fn set_low(&self) -> TockResult<()> { syscalls::command(DRIVER_NUMBER, command_nr::SET_LOW, self.number, 0)?; Ok(()) } - pub fn set_high(&mut self) -> TockResult<()> { + pub fn set_high(&self) -> TockResult<()> { syscalls::command(DRIVER_NUMBER, command_nr::SET_HIGH, self.number, 0)?; Ok(()) } - pub fn toggle(&mut self) -> TockResult<()> { + pub fn toggle(&self) -> TockResult<()> { syscalls::command(DRIVER_NUMBER, command_nr::TOGGLE, self.number, 0)?; Ok(()) }
diff --git a/src/lang_items.rs b/src/lang_items.rs index b43b43f..58d1de3 100644 --- a/src/lang_items.rs +++ b/src/lang_items.rs
@@ -47,7 +47,7 @@ // Flash all LEDs (if available). executor::block_on(async { let Hardware { - mut led_driver, + led_driver, timer_context, .. } = crate::retrieve_hardware_unsafe(); @@ -55,13 +55,13 @@ let timer_driver = driver.activate().ok(); loop { - for mut led in led_driver.all() { + for led in led_driver.all() { let _ = led.on(); } if let Some(ref timer_driver) = timer_driver { let _ = timer_driver.sleep(Duration::from_ms(100)).await; } - for mut led in led_driver.all() { + for led in led_driver.all() { let _ = led.off(); } if let Some(ref timer_driver) = timer_driver { @@ -77,7 +77,7 @@ unsafe fn cycle_leds(_: Layout) -> ! { executor::block_on(async { let Hardware { - mut led_driver, + led_driver, timer_context, .. } = crate::retrieve_hardware_unsafe(); @@ -85,13 +85,13 @@ let timer_driver = driver.activate().ok(); loop { - for mut led in led_driver.all() { + for led in led_driver.all() { let _ = led.on(); } if let Some(ref timer_driver) = timer_driver { let _ = timer_driver.sleep(Duration::from_ms(100)).await; } - for mut led in led_driver.all() { + for led in led_driver.all() { let _ = led.off(); } if let Some(ref timer_driver) = timer_driver {
diff --git a/src/led.rs b/src/led.rs index ae2a2d4..b8c669a 100644 --- a/src/led.rs +++ b/src/led.rs
@@ -21,7 +21,7 @@ } impl LedDriver { - pub fn get(&mut self, led_num: usize) -> Option<Led> { + pub fn get(&self, led_num: usize) -> Option<Led> { if led_num < self.count().ok().unwrap() { Some(Led { led_num, @@ -36,7 +36,7 @@ command(DRIVER_NUMBER, command_nr::COUNT, 0, 0).map_err(Into::into) } - pub fn all(&mut self) -> LedIter { + pub fn all(&self) -> LedIter { LedIter { curr_led: 0, led_count: self.count().unwrap_or(0), @@ -49,7 +49,7 @@ /// present, the iterator will be empty. impl<'a> Led<'a> { - pub fn set_state(&mut self, state: bool) -> TockResult<()> { + pub fn set_state(&self, state: bool) -> TockResult<()> { if state { self.on() } else { @@ -57,17 +57,17 @@ } } - pub fn on(&mut self) -> TockResult<()> { + pub fn on(&self) -> TockResult<()> { command(DRIVER_NUMBER, command_nr::ON, self.led_num, 0)?; Ok(()) } - pub fn off(&mut self) -> TockResult<()> { + pub fn off(&self) -> TockResult<()> { command(DRIVER_NUMBER, command_nr::OFF, self.led_num, 0)?; Ok(()) } - pub fn toggle(&mut self) -> TockResult<()> { + pub fn toggle(&self) -> TockResult<()> { command(DRIVER_NUMBER, command_nr::TOGGLE, self.led_num, 0)?; Ok(()) }