From 2ce1b57343edf71377a9b204f7c9033c87126004 Mon Sep 17 00:00:00 2001
From: Jorge Aparicio <jorge@japaric.io>
Date: Sun, 23 Jul 2017 21:46:03 -0500
Subject: [PATCH] rustfmt, refactor a bit

---
 src/adc.rs     |   2 +-
 src/capture.rs | 130 ++++++++++++++++++++++---------------------------
 src/dma.rs     | 117 ++++++++++++++++++++++----------------------
 src/pwm.rs     |   2 +-
 src/qei.rs     |   2 +-
 src/serial.rs  |   4 +-
 src/spi.rs     |   7 ++-
 src/timer.rs   |   2 +-
 8 files changed, 125 insertions(+), 141 deletions(-)

diff --git a/src/adc.rs b/src/adc.rs
index 571c540..a4c60bc 100644
--- a/src/adc.rs
+++ b/src/adc.rs
@@ -7,7 +7,7 @@ use hal::prelude::*;
 use static_ref::Static;
 
 use dma::{self, CircBuffer, Dma1Channel1};
-use stm32f103xx::{ADC1, DMA1, GPIOA, RCC, TIM2};
+use stm32f103xx::{ADC1, DMA1, TIM2, GPIOA, RCC};
 use {Channel, Pwm};
 
 /// ADC Channel 1 (PA1)
diff --git a/src/capture.rs b/src/capture.rs
index ef30b36..f4f1511 100644
--- a/src/capture.rs
+++ b/src/capture.rs
@@ -39,7 +39,7 @@ use core::u16;
 use cast::{u16, u32};
 use hal;
 use nb;
-use stm32f103xx::{AFIO, GPIOA, RCC, TIM1, TIM2, TIM3, TIM4};
+use stm32f103xx::{TIM1, TIM2, TIM3, TIM4, AFIO, GPIOA, RCC};
 
 use timer::{Channel, TIM};
 
@@ -203,42 +203,34 @@ impl<'a> hal::Capture for Capture<'a, TIM1> {
         let sr = tim1.sr.read();
 
         match channel {
-            Channel::_1 => {
-                if sr.cc1of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc1if().bit_is_set() {
-                    Ok(tim1.ccr1.read().ccr1().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
-            Channel::_2 => {
-                if sr.cc2of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc2if().bit_is_set() {
-                    Ok(tim1.ccr2.read().ccr2().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
-            Channel::_3 => {
-                if sr.cc3of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc3if().bit_is_set() {
-                    Ok(tim1.ccr3.read().ccr3().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
-            Channel::_4 => {
-                if sr.cc4of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc4if().bit_is_set() {
-                    Ok(tim1.ccr4.read().ccr4().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
+            Channel::_1 => if sr.cc1of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc1if().bit_is_set() {
+                Ok(tim1.ccr1.read().ccr1().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
+            Channel::_2 => if sr.cc2of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc2if().bit_is_set() {
+                Ok(tim1.ccr2.read().ccr2().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
+            Channel::_3 => if sr.cc3of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc3if().bit_is_set() {
+                Ok(tim1.ccr3.read().ccr3().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
+            Channel::_4 => if sr.cc4of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc4if().bit_is_set() {
+                Ok(tim1.ccr4.read().ccr4().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
         }
     }
 
@@ -498,42 +490,34 @@ where
         let sr = tim1.sr.read();
 
         match channel {
-            Channel::_1 => {
-                if sr.cc1of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc1if().bit_is_set() {
-                    Ok(tim1.ccr1.read().ccr1().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
-            Channel::_2 => {
-                if sr.cc2of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc2if().bit_is_set() {
-                    Ok(tim1.ccr2.read().ccr2().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
-            Channel::_3 => {
-                if sr.cc3of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc3if().bit_is_set() {
-                    Ok(tim1.ccr3.read().ccr3().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
-            Channel::_4 => {
-                if sr.cc4of().bit_is_set() {
-                    Err(nb::Error::Other(Error::Overcapture))
-                } else if sr.cc4if().bit_is_set() {
-                    Ok(tim1.ccr4.read().ccr4().bits())
-                } else {
-                    Err(nb::Error::WouldBlock)
-                }
-            }
+            Channel::_1 => if sr.cc1of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc1if().bit_is_set() {
+                Ok(tim1.ccr1.read().ccr1().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
+            Channel::_2 => if sr.cc2of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc2if().bit_is_set() {
+                Ok(tim1.ccr2.read().ccr2().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
+            Channel::_3 => if sr.cc3of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc3if().bit_is_set() {
+                Ok(tim1.ccr3.read().ccr3().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
+            Channel::_4 => if sr.cc4of().bit_is_set() {
+                Err(nb::Error::Other(Error::Overcapture))
+            } else if sr.cc4if().bit_is_set() {
+                Ok(tim1.ccr4.read().ccr4().bits())
+            } else {
+                Err(nb::Error::WouldBlock)
+            },
         }
     }
 
diff --git a/src/dma.rs b/src/dma.rs
index 2aa1edc..0019657 100644
--- a/src/dma.rs
+++ b/src/dma.rs
@@ -40,18 +40,23 @@ pub struct Dma1Channel5 {
 }
 
 /// Buffer to be used with a certain DMA `CHANNEL`
+// NOTE(packed) workaround for rust-lang/rust#41315
+#[repr(packed)]
 pub struct Buffer<T, CHANNEL> {
     _marker: PhantomData<CHANNEL>,
     data: UnsafeCell<T>,
     flag: Cell<BorrowFlag>,
-    status: Cell<Status>,
+    state: Cell<State>,
 }
 
 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
-enum Status {
+enum State {
+    // A new `Buffer` starts in this state. We set it to zero to place this
+    // buffer in the .bss section
+    Unlocked = 0,
+
     Locked,
     MutLocked,
-    Unlocked,
 }
 
 type BorrowFlag = usize;
@@ -118,7 +123,7 @@ impl<T, CHANNEL> Buffer<T, CHANNEL> {
             _marker: PhantomData,
             data: UnsafeCell::new(data),
             flag: Cell::new(0),
-            status: Cell::new(Status::Unlocked),
+            state: Cell::new(State::Unlocked),
         }
     }
 
@@ -161,33 +166,33 @@ impl<T, CHANNEL> Buffer<T, CHANNEL> {
     }
 
     pub(crate) fn lock(&self) -> &T {
-        assert_eq!(self.status.get(), Status::Unlocked);
+        assert_eq!(self.state.get(), State::Unlocked);
         assert_ne!(self.flag.get(), WRITING);
 
         self.flag.set(self.flag.get() + 1);
-        self.status.set(Status::Locked);
+        self.state.set(State::Locked);
 
         unsafe { &*self.data.get() }
     }
 
     pub(crate) fn lock_mut(&self) -> &mut T {
-        assert_eq!(self.status.get(), Status::Unlocked);
+        assert_eq!(self.state.get(), State::Unlocked);
         assert_eq!(self.flag.get(), UNUSED);
 
         self.flag.set(WRITING);
-        self.status.set(Status::MutLocked);
+        self.state.set(State::MutLocked);
 
         unsafe { &mut *self.data.get() }
     }
 
-    unsafe fn unlock(&self, status: Status) {
-        match status {
-            Status::Locked => self.flag.set(self.flag.get() - 1),
-            Status::MutLocked => self.flag.set(UNUSED),
+    unsafe fn unlock(&self, state: State) {
+        match state {
+            State::Locked => self.flag.set(self.flag.get() - 1),
+            State::MutLocked => self.flag.set(UNUSED),
             _ => { /* unreachable!() */ }
         }
 
-        self.status.set(Status::Unlocked);
+        self.state.set(State::Unlocked);
     }
 }
 
@@ -195,16 +200,16 @@ impl<T, CHANNEL> Buffer<T, CHANNEL> {
 impl<T> Buffer<T, Dma1Channel2> {
     /// Waits until the DMA releases this buffer
     pub fn release(&self, dma1: &DMA1) -> nb::Result<(), Error> {
-        let status = self.status.get();
+        let state = self.state.get();
 
-        if status == Status::Unlocked {
+        if state == State::Unlocked {
             return Ok(());
         }
 
         if dma1.isr.read().teif2().bit_is_set() {
             Err(nb::Error::Other(Error::Transfer))
         } else if dma1.isr.read().tcif2().bit_is_set() {
-            unsafe { self.unlock(status) }
+            unsafe { self.unlock(state) }
             dma1.ifcr.write(|w| w.ctcif2().set_bit());
             dma1.ccr2.modify(|_, w| w.en().clear_bit());
             Ok(())
@@ -217,16 +222,16 @@ impl<T> Buffer<T, Dma1Channel2> {
 impl<T> Buffer<T, Dma1Channel4> {
     /// Waits until the DMA releases this buffer
     pub fn release(&self, dma1: &DMA1) -> nb::Result<(), Error> {
-        let status = self.status.get();
+        let state = self.state.get();
 
-        if status == Status::Unlocked {
+        if state == State::Unlocked {
             return Ok(());
         }
 
         if dma1.isr.read().teif4().bit_is_set() {
             Err(nb::Error::Other(Error::Transfer))
         } else if dma1.isr.read().tcif4().bit_is_set() {
-            unsafe { self.unlock(status) }
+            unsafe { self.unlock(state) }
             dma1.ifcr.write(|w| w.ctcif4().set_bit());
             dma1.ccr4.modify(|_, w| w.en().clear_bit());
             Ok(())
@@ -239,16 +244,16 @@ impl<T> Buffer<T, Dma1Channel4> {
 impl<T> Buffer<T, Dma1Channel5> {
     /// Waits until the DMA releases this buffer
     pub fn release(&self, dma1: &DMA1) -> nb::Result<(), Error> {
-        let status = self.status.get();
+        let state = self.state.get();
 
-        if status == Status::Unlocked {
+        if state == State::Unlocked {
             return Ok(());
         }
 
         if dma1.isr.read().teif5().bit_is_set() {
             Err(nb::Error::Other(Error::Transfer))
         } else if dma1.isr.read().tcif5().bit_is_set() {
-            unsafe { self.unlock(status) }
+            unsafe { self.unlock(state) }
             dma1.ifcr.write(|w| w.ctcif5().set_bit());
             dma1.ccr5.modify(|_, w| w.en().clear_bit());
             Ok(())
@@ -262,21 +267,21 @@ impl<T> Buffer<T, Dma1Channel5> {
 pub struct CircBuffer<B, CHANNEL> {
     _marker: PhantomData<CHANNEL>,
     buffer: UnsafeCell<[B; 2]>,
-    status: Cell<CircStatus>,
+    state: Cell<CircState>,
 }
 
 impl<B, CHANNEL> CircBuffer<B, CHANNEL> {
     pub(crate) fn lock(&self) -> &[B; 2] {
-        assert_eq!(self.status.get(), CircStatus::Free);
+        assert_eq!(self.state.get(), CircState::Free);
 
-        self.status.set(CircStatus::MutatingFirstHalf);
+        self.state.set(CircState::MutatingFirstHalf);
 
         unsafe { &*self.buffer.get() }
     }
 }
 
 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
-enum CircStatus {
+enum CircState {
     /// Not in use by the DMA
     Free,
     /// The DMA is mutating the first half of the buffer
@@ -291,7 +296,7 @@ impl<B> CircBuffer<B, Dma1Channel1> {
         CircBuffer {
             _marker: PhantomData,
             buffer: UnsafeCell::new(buffer),
-            status: Cell::new(CircStatus::Free),
+            state: Cell::new(CircState::Free),
         }
     }
 
@@ -301,54 +306,50 @@ impl<B> CircBuffer<B, Dma1Channel1> {
     where
         F: FnOnce(&B) -> R,
     {
-        let status = self.status.get();
+        let state = self.state.get();
 
-        assert_ne!(status, CircStatus::Free);
+        assert_ne!(state, CircState::Free);
 
         let isr = dma1.isr.read();
 
         if isr.teif1().bit_is_set() {
             Err(nb::Error::Other(Error::Transfer))
         } else {
-            match status {
-                CircStatus::MutatingFirstHalf => {
-                    if isr.tcif1().bit_is_set() {
-                        Err(nb::Error::Other(Error::Overrun))
-                    } else if isr.htif1().bit_is_set() {
-                        dma1.ifcr.write(|w| w.chtif1().set_bit());
+            match state {
+                CircState::MutatingFirstHalf => if isr.tcif1().bit_is_set() {
+                    Err(nb::Error::Other(Error::Overrun))
+                } else if isr.htif1().bit_is_set() {
+                    dma1.ifcr.write(|w| w.chtif1().set_bit());
 
-                        self.status.set(CircStatus::MutatingSecondHalf);
+                    self.state.set(CircState::MutatingSecondHalf);
 
-                        let ret = f(unsafe { &(*self.buffer.get())[0] });
+                    let ret = f(unsafe { &(*self.buffer.get())[0] });
 
-                        if isr.tcif1().bit_is_set() {
-                            Err(nb::Error::Other(Error::Overrun))
-                        } else {
-                            Ok(ret)
-                        }
+                    if isr.tcif1().bit_is_set() {
+                        Err(nb::Error::Other(Error::Overrun))
                     } else {
-                        Err(nb::Error::WouldBlock)
+                        Ok(ret)
                     }
-                }
-                CircStatus::MutatingSecondHalf => {
-                    if isr.htif1().bit_is_set() {
-                        Err(nb::Error::Other(Error::Overrun))
-                    } else if isr.tcif1().bit_is_set() {
-                        dma1.ifcr.write(|w| w.ctcif1().set_bit());
+                } else {
+                    Err(nb::Error::WouldBlock)
+                },
+                CircState::MutatingSecondHalf => if isr.htif1().bit_is_set() {
+                    Err(nb::Error::Other(Error::Overrun))
+                } else if isr.tcif1().bit_is_set() {
+                    dma1.ifcr.write(|w| w.ctcif1().set_bit());
 
-                        self.status.set(CircStatus::MutatingFirstHalf);
+                    self.state.set(CircState::MutatingFirstHalf);
 
-                        let ret = f(unsafe { &(*self.buffer.get())[1] });
+                    let ret = f(unsafe { &(*self.buffer.get())[1] });
 
-                        if isr.htif1().bit_is_set() {
-                            Err(nb::Error::Other(Error::Overrun))
-                        } else {
-                            Ok(ret)
-                        }
+                    if isr.htif1().bit_is_set() {
+                        Err(nb::Error::Other(Error::Overrun))
                     } else {
-                        Err(nb::Error::WouldBlock)
+                        Ok(ret)
                     }
-                }
+                } else {
+                    Err(nb::Error::WouldBlock)
+                },
                 _ => unreachable!(),
             }
         }
diff --git a/src/pwm.rs b/src/pwm.rs
index 54d87ee..05c0145 100644
--- a/src/pwm.rs
+++ b/src/pwm.rs
@@ -36,7 +36,7 @@ use core::marker::Unsize;
 use cast::{u16, u32};
 use hal;
 use static_ref::Static;
-use stm32f103xx::{AFIO, DMA1, GPIOA, RCC, TIM1, TIM2, TIM3, TIM4};
+use stm32f103xx::{DMA1, TIM1, TIM2, TIM3, TIM4, AFIO, GPIOA, RCC};
 
 use dma::{self, Buffer, Dma1Channel2};
 use timer::{Channel, TIM};
diff --git a/src/qei.rs b/src/qei.rs
index 6281bbc..13ff176 100644
--- a/src/qei.rs
+++ b/src/qei.rs
@@ -24,7 +24,7 @@ use core::any::{Any, TypeId};
 use core::u16;
 
 use hal;
-use stm32f103xx::{AFIO, GPIOA, RCC, TIM1, TIM2, TIM3, TIM4};
+use stm32f103xx::{TIM1, TIM2, TIM3, TIM4, AFIO, GPIOA, RCC};
 
 use timer::TIM;
 
diff --git a/src/serial.rs b/src/serial.rs
index baffdf6..8d9ceaa 100644
--- a/src/serial.rs
+++ b/src/serial.rs
@@ -29,8 +29,8 @@ use cast::u16;
 use hal;
 use nb;
 use static_ref::Static;
-use stm32f103xx::{AFIO, DMA1, GPIOA, GPIOB, RCC, USART1, USART2, USART3,
-                  gpioa, usart1};
+use stm32f103xx::{gpioa, DMA1, USART1, USART2, USART3, usart1, AFIO, GPIOA,
+                  GPIOB, RCC};
 
 use dma::{self, Buffer, Dma1Channel4, Dma1Channel5};
 
diff --git a/src/spi.rs b/src/spi.rs
index d0ecfc9..ddf407a 100644
--- a/src/spi.rs
+++ b/src/spi.rs
@@ -22,7 +22,7 @@ use core::ptr;
 
 use hal;
 use nb;
-use stm32f103xx::{AFIO, GPIOA, GPIOB, RCC, SPI1, SPI2, gpioa, spi1};
+use stm32f103xx::{gpioa, SPI1, SPI2, spi1, AFIO, GPIOA, GPIOB, RCC};
 
 /// SPI instance that can be used with the `Spi` abstraction
 pub unsafe trait SPI: Deref<Target = spi1::RegisterBlock> {
@@ -101,9 +101,8 @@ where
         } else if spi.get_type_id() == TypeId::of::<SPI2>() {
             // enable AFIO, SPI1, GPIOA
             rcc.apb1enr.modify(|_, w| w.spi2en().enabled());
-            rcc.apb2enr.modify(
-                |_, w| w.afioen().enabled().iopben().enabled(),
-            );
+            rcc.apb2enr
+                .modify(|_, w| w.afioen().enabled().iopben().enabled());
 
             // NSS = PB12 = Alternate function push pull
             // SCK = PB13 = Alternate function push pull
diff --git a/src/timer.rs b/src/timer.rs
index f1acddd..a60aaac 100644
--- a/src/timer.rs
+++ b/src/timer.rs
@@ -6,7 +6,7 @@ use core::ops::Deref;
 use cast::{u16, u32};
 use hal;
 use nb::{self, Error};
-use stm32f103xx::{GPIOA, GPIOB, RCC, TIM1, TIM2, TIM3, TIM4, gpioa, tim2};
+use stm32f103xx::{gpioa, TIM1, TIM2, TIM3, TIM4, tim2, GPIOA, GPIOB, RCC};
 
 /// Channel associated to a timer
 #[derive(Clone, Copy, Debug)]
-- 
GitLab