Remove Pin from SPI
This commit is contained in:
		@@ -214,14 +214,13 @@ where
 | 
			
		||||
    type ReadFuture<'a> = impl Future<Output = Result<(), Error>> + 'a;
 | 
			
		||||
    type WriteReadFuture<'a> = impl Future<Output = Result<(), Error>> + 'a;
 | 
			
		||||
 | 
			
		||||
    fn read<'a>(self: Pin<&'a mut Self>, buf: &'a mut [u8]) -> Self::ReadFuture<'a> {
 | 
			
		||||
        let this = unsafe { self.get_unchecked_mut() };
 | 
			
		||||
    fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> Self::ReadFuture<'a> {
 | 
			
		||||
        #[allow(mutable_transmutes)]
 | 
			
		||||
        let static_buf: &'static mut [u8] = unsafe { mem::transmute(buf) };
 | 
			
		||||
 | 
			
		||||
        async move {
 | 
			
		||||
            let rx_stream = this.rx_stream.take().unwrap();
 | 
			
		||||
            let spi = this.spi.take().unwrap();
 | 
			
		||||
            let rx_stream = self.rx_stream.take().unwrap();
 | 
			
		||||
            let spi = self.spi.take().unwrap();
 | 
			
		||||
 | 
			
		||||
            spi.cr2.modify(|_, w| w.errie().set_bit());
 | 
			
		||||
 | 
			
		||||
@@ -236,8 +235,8 @@ where
 | 
			
		||||
                    .double_buffer(false),
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            let fut = InterruptFuture::new(&mut this.rx_int);
 | 
			
		||||
            let fut_err = InterruptFuture::new(&mut this.spi_int);
 | 
			
		||||
            let fut = InterruptFuture::new(&mut self.rx_int);
 | 
			
		||||
            let fut_err = InterruptFuture::new(&mut self.spi_int);
 | 
			
		||||
 | 
			
		||||
            rx_transfer.start(|_spi| {});
 | 
			
		||||
            future::select(fut, fut_err).await;
 | 
			
		||||
@@ -245,21 +244,20 @@ where
 | 
			
		||||
            let (rx_stream, spi, _buf, _) = rx_transfer.free();
 | 
			
		||||
 | 
			
		||||
            spi.cr2.modify(|_, w| w.errie().clear_bit());
 | 
			
		||||
            this.rx_stream.replace(rx_stream);
 | 
			
		||||
            this.spi.replace(spi);
 | 
			
		||||
            self.rx_stream.replace(rx_stream);
 | 
			
		||||
            self.spi.replace(spi);
 | 
			
		||||
 | 
			
		||||
            Ok(())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn write<'a>(self: Pin<&'a mut Self>, buf: &'a [u8]) -> Self::WriteFuture<'a> {
 | 
			
		||||
        let this = unsafe { self.get_unchecked_mut() };
 | 
			
		||||
    fn write<'a>(&'a mut self, buf: &'a [u8]) -> Self::WriteFuture<'a> {
 | 
			
		||||
        #[allow(mutable_transmutes)]
 | 
			
		||||
        let static_buf: &'static mut [u8] = unsafe { mem::transmute(buf) };
 | 
			
		||||
 | 
			
		||||
        async move {
 | 
			
		||||
            let tx_stream = this.tx_stream.take().unwrap();
 | 
			
		||||
            let spi = this.spi.take().unwrap();
 | 
			
		||||
            let tx_stream = self.tx_stream.take().unwrap();
 | 
			
		||||
            let spi = self.spi.take().unwrap();
 | 
			
		||||
 | 
			
		||||
            //            let mut tx_transfer = Transfer::init(
 | 
			
		||||
            //                tx_stream,
 | 
			
		||||
@@ -272,7 +270,7 @@ where
 | 
			
		||||
            //                    .double_buffer(false),
 | 
			
		||||
            //            );
 | 
			
		||||
            //
 | 
			
		||||
            //            let fut = InterruptFuture::new(&mut this.tx_int);
 | 
			
		||||
            //            let fut = InterruptFuture::new(&mut self.tx_int);
 | 
			
		||||
            //
 | 
			
		||||
            //            tx_transfer.start(|_spi| {});
 | 
			
		||||
            //            fut.await;
 | 
			
		||||
@@ -284,28 +282,26 @@ where
 | 
			
		||||
                nb::block!(write_sr(&spi, byte));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.tx_stream.replace(tx_stream);
 | 
			
		||||
            this.spi.replace(spi);
 | 
			
		||||
            self.tx_stream.replace(tx_stream);
 | 
			
		||||
            self.spi.replace(spi);
 | 
			
		||||
 | 
			
		||||
            Ok(())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn read_write<'a>(
 | 
			
		||||
        self: Pin<&'a mut Self>,
 | 
			
		||||
        &'a mut self,
 | 
			
		||||
        read_buf: &'a mut [u8],
 | 
			
		||||
        write_buf: &'a [u8],
 | 
			
		||||
    ) -> Self::WriteReadFuture<'a> {
 | 
			
		||||
        let this = unsafe { self.get_unchecked_mut() };
 | 
			
		||||
 | 
			
		||||
        #[allow(mutable_transmutes)]
 | 
			
		||||
        let write_static_buf: &'static mut [u8] = unsafe { mem::transmute(write_buf) };
 | 
			
		||||
        let read_static_buf: &'static mut [u8] = unsafe { mem::transmute(read_buf) };
 | 
			
		||||
 | 
			
		||||
        async move {
 | 
			
		||||
            let tx_stream = this.tx_stream.take().unwrap();
 | 
			
		||||
            let rx_stream = this.rx_stream.take().unwrap();
 | 
			
		||||
            let spi_tx = this.spi.take().unwrap();
 | 
			
		||||
            let tx_stream = self.tx_stream.take().unwrap();
 | 
			
		||||
            let rx_stream = self.rx_stream.take().unwrap();
 | 
			
		||||
            let spi_tx = self.spi.take().unwrap();
 | 
			
		||||
            let spi_rx: SPI = unsafe { mem::transmute_copy(&spi_tx) };
 | 
			
		||||
 | 
			
		||||
            spi_rx
 | 
			
		||||
@@ -334,9 +330,9 @@ where
 | 
			
		||||
            //                    .double_buffer(false),
 | 
			
		||||
            //            );
 | 
			
		||||
            //
 | 
			
		||||
            //            let tx_fut = InterruptFuture::new(&mut this.tx_int);
 | 
			
		||||
            //            let rx_fut = InterruptFuture::new(&mut this.rx_int);
 | 
			
		||||
            //            let rx_fut_err = InterruptFuture::new(&mut this.spi_int);
 | 
			
		||||
            //            let tx_fut = InterruptFuture::new(&mut self.tx_int);
 | 
			
		||||
            //            let rx_fut = InterruptFuture::new(&mut self.rx_int);
 | 
			
		||||
            //            let rx_fut_err = InterruptFuture::new(&mut self.spi_int);
 | 
			
		||||
            //
 | 
			
		||||
            //            rx_transfer.start(|_spi| {});
 | 
			
		||||
            //            tx_transfer.start(|_spi| {});
 | 
			
		||||
@@ -352,7 +348,7 @@ where
 | 
			
		||||
            for i in 0..(read_static_buf.len() - 1) {
 | 
			
		||||
                let byte = write_static_buf[i];
 | 
			
		||||
                loop {
 | 
			
		||||
                    let fut = InterruptFuture::new(&mut this.spi_int);
 | 
			
		||||
                    let fut = InterruptFuture::new(&mut self.spi_int);
 | 
			
		||||
                    match write_sr(&spi_tx, byte) {
 | 
			
		||||
                        Ok(()) => break,
 | 
			
		||||
                        _ => {}
 | 
			
		||||
@@ -361,7 +357,7 @@ where
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                loop {
 | 
			
		||||
                    let fut = InterruptFuture::new(&mut this.spi_int);
 | 
			
		||||
                    let fut = InterruptFuture::new(&mut self.spi_int);
 | 
			
		||||
                    match read_sr(&spi_tx) {
 | 
			
		||||
                        Ok(byte) => {
 | 
			
		||||
                            read_static_buf[i] = byte;
 | 
			
		||||
@@ -381,9 +377,9 @@ where
 | 
			
		||||
                    .rxneie()
 | 
			
		||||
                    .clear_bit()
 | 
			
		||||
            });
 | 
			
		||||
            this.rx_stream.replace(rx_stream);
 | 
			
		||||
            this.tx_stream.replace(tx_stream);
 | 
			
		||||
            this.spi.replace(spi_rx);
 | 
			
		||||
            self.rx_stream.replace(rx_stream);
 | 
			
		||||
            self.tx_stream.replace(tx_stream);
 | 
			
		||||
            self.spi.replace(spi_rx);
 | 
			
		||||
 | 
			
		||||
            Ok(())
 | 
			
		||||
        }
 | 
			
		||||
@@ -421,7 +417,7 @@ macro_rules! spi {
 | 
			
		||||
            impl Instance for pac::$SPI {
 | 
			
		||||
                unsafe fn enable_clock() {
 | 
			
		||||
                    const EN_BIT: u8 = $en;
 | 
			
		||||
                    // NOTE(unsafe) this reference will only be used for atomic writes with no side effects.
 | 
			
		||||
                    // NOTE(unsafe) self reference will only be used for atomic writes with no side effects.
 | 
			
		||||
                    let rcc = &(*pac::RCC::ptr());
 | 
			
		||||
                    // Enable clock.
 | 
			
		||||
                    bb::set(&rcc.$apbXenr, EN_BIT);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user