diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-11-29 17:23:48 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-11-29 17:26:33 +0100 |
| commit | c6989dfbca51787146f50270c671af9db434f577 (patch) | |
| tree | 5974a8ec41c108d5208e4f68027b918d424a2046 /embassy-rp/src/uart | |
| parent | 384bad7bfaa1f2415baf2cd3b69ebf36dc0a02d7 (diff) | |
Remove nightly and unstable-traits features in preparation for 1.75.
Diffstat (limited to 'embassy-rp/src/uart')
| -rw-r--r-- | embassy-rp/src/uart/buffered.rs | 165 | ||||
| -rw-r--r-- | embassy-rp/src/uart/mod.rs | 244 |
2 files changed, 192 insertions, 217 deletions
diff --git a/embassy-rp/src/uart/buffered.rs b/embassy-rp/src/uart/buffered.rs index 9f638761d..ca030f560 100644 --- a/embassy-rp/src/uart/buffered.rs +++ b/embassy-rp/src/uart/buffered.rs | |||
| @@ -668,126 +668,117 @@ impl<'d, T: Instance + 'd> embedded_io::Write for BufferedUartTx<'d, T> { | |||
| 668 | } | 668 | } |
| 669 | } | 669 | } |
| 670 | 670 | ||
| 671 | mod eh02 { | 671 | impl<'d, T: Instance> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d, T> { |
| 672 | use super::*; | 672 | type Error = Error; |
| 673 | 673 | ||
| 674 | impl<'d, T: Instance> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d, T> { | 674 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { |
| 675 | type Error = Error; | 675 | let r = T::regs(); |
| 676 | if r.uartfr().read().rxfe() { | ||
| 677 | return Err(nb::Error::WouldBlock); | ||
| 678 | } | ||
| 676 | 679 | ||
| 677 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | 680 | let dr = r.uartdr().read(); |
| 678 | let r = T::regs(); | ||
| 679 | if r.uartfr().read().rxfe() { | ||
| 680 | return Err(nb::Error::WouldBlock); | ||
| 681 | } | ||
| 682 | 681 | ||
| 683 | let dr = r.uartdr().read(); | 682 | if dr.oe() { |
| 684 | 683 | Err(nb::Error::Other(Error::Overrun)) | |
| 685 | if dr.oe() { | 684 | } else if dr.be() { |
| 686 | Err(nb::Error::Other(Error::Overrun)) | 685 | Err(nb::Error::Other(Error::Break)) |
| 687 | } else if dr.be() { | 686 | } else if dr.pe() { |
| 688 | Err(nb::Error::Other(Error::Break)) | 687 | Err(nb::Error::Other(Error::Parity)) |
| 689 | } else if dr.pe() { | 688 | } else if dr.fe() { |
| 690 | Err(nb::Error::Other(Error::Parity)) | 689 | Err(nb::Error::Other(Error::Framing)) |
| 691 | } else if dr.fe() { | 690 | } else { |
| 692 | Err(nb::Error::Other(Error::Framing)) | 691 | Ok(dr.data()) |
| 693 | } else { | ||
| 694 | Ok(dr.data()) | ||
| 695 | } | ||
| 696 | } | 692 | } |
| 697 | } | 693 | } |
| 694 | } | ||
| 698 | 695 | ||
| 699 | impl<'d, T: Instance> embedded_hal_02::blocking::serial::Write<u8> for BufferedUartTx<'d, T> { | 696 | impl<'d, T: Instance> embedded_hal_02::blocking::serial::Write<u8> for BufferedUartTx<'d, T> { |
| 700 | type Error = Error; | 697 | type Error = Error; |
| 701 | 698 | ||
| 702 | fn bwrite_all(&mut self, mut buffer: &[u8]) -> Result<(), Self::Error> { | 699 | fn bwrite_all(&mut self, mut buffer: &[u8]) -> Result<(), Self::Error> { |
| 703 | while !buffer.is_empty() { | 700 | while !buffer.is_empty() { |
| 704 | match self.blocking_write(buffer) { | 701 | match self.blocking_write(buffer) { |
| 705 | Ok(0) => panic!("zero-length write."), | 702 | Ok(0) => panic!("zero-length write."), |
| 706 | Ok(n) => buffer = &buffer[n..], | 703 | Ok(n) => buffer = &buffer[n..], |
| 707 | Err(e) => return Err(e), | 704 | Err(e) => return Err(e), |
| 708 | } | ||
| 709 | } | 705 | } |
| 710 | Ok(()) | ||
| 711 | } | 706 | } |
| 707 | Ok(()) | ||
| 708 | } | ||
| 712 | 709 | ||
| 713 | fn bflush(&mut self) -> Result<(), Self::Error> { | 710 | fn bflush(&mut self) -> Result<(), Self::Error> { |
| 714 | self.blocking_flush() | 711 | self.blocking_flush() |
| 715 | } | ||
| 716 | } | 712 | } |
| 713 | } | ||
| 717 | 714 | ||
| 718 | impl<'d, T: Instance> embedded_hal_02::serial::Read<u8> for BufferedUart<'d, T> { | 715 | impl<'d, T: Instance> embedded_hal_02::serial::Read<u8> for BufferedUart<'d, T> { |
| 719 | type Error = Error; | 716 | type Error = Error; |
| 720 | 717 | ||
| 721 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | 718 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { |
| 722 | embedded_hal_02::serial::Read::read(&mut self.rx) | 719 | embedded_hal_02::serial::Read::read(&mut self.rx) |
| 723 | } | ||
| 724 | } | 720 | } |
| 721 | } | ||
| 725 | 722 | ||
| 726 | impl<'d, T: Instance> embedded_hal_02::blocking::serial::Write<u8> for BufferedUart<'d, T> { | 723 | impl<'d, T: Instance> embedded_hal_02::blocking::serial::Write<u8> for BufferedUart<'d, T> { |
| 727 | type Error = Error; | 724 | type Error = Error; |
| 728 | 725 | ||
| 729 | fn bwrite_all(&mut self, mut buffer: &[u8]) -> Result<(), Self::Error> { | 726 | fn bwrite_all(&mut self, mut buffer: &[u8]) -> Result<(), Self::Error> { |
| 730 | while !buffer.is_empty() { | 727 | while !buffer.is_empty() { |
| 731 | match self.blocking_write(buffer) { | 728 | match self.blocking_write(buffer) { |
| 732 | Ok(0) => panic!("zero-length write."), | 729 | Ok(0) => panic!("zero-length write."), |
| 733 | Ok(n) => buffer = &buffer[n..], | 730 | Ok(n) => buffer = &buffer[n..], |
| 734 | Err(e) => return Err(e), | 731 | Err(e) => return Err(e), |
| 735 | } | ||
| 736 | } | 732 | } |
| 737 | Ok(()) | ||
| 738 | } | 733 | } |
| 734 | Ok(()) | ||
| 735 | } | ||
| 739 | 736 | ||
| 740 | fn bflush(&mut self) -> Result<(), Self::Error> { | 737 | fn bflush(&mut self) -> Result<(), Self::Error> { |
| 741 | self.blocking_flush() | 738 | self.blocking_flush() |
| 742 | } | ||
| 743 | } | 739 | } |
| 744 | } | 740 | } |
| 745 | 741 | ||
| 746 | #[cfg(feature = "unstable-traits")] | 742 | impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartRx<'d, T> { |
| 747 | mod eh1 { | 743 | type Error = Error; |
| 748 | use super::*; | 744 | } |
| 749 | 745 | ||
| 750 | impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartRx<'d, T> { | 746 | impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartTx<'d, T> { |
| 751 | type Error = Error; | 747 | type Error = Error; |
| 752 | } | 748 | } |
| 753 | 749 | ||
| 754 | impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartTx<'d, T> { | 750 | impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUart<'d, T> { |
| 755 | type Error = Error; | 751 | type Error = Error; |
| 756 | } | 752 | } |
| 757 | 753 | ||
| 758 | impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUart<'d, T> { | 754 | impl<'d, T: Instance> embedded_hal_nb::serial::Read for BufferedUartRx<'d, T> { |
| 759 | type Error = Error; | 755 | fn read(&mut self) -> nb::Result<u8, Self::Error> { |
| 756 | embedded_hal_02::serial::Read::read(self) | ||
| 760 | } | 757 | } |
| 758 | } | ||
| 761 | 759 | ||
| 762 | impl<'d, T: Instance> embedded_hal_nb::serial::Read for BufferedUartRx<'d, T> { | 760 | impl<'d, T: Instance> embedded_hal_nb::serial::Write for BufferedUartTx<'d, T> { |
| 763 | fn read(&mut self) -> nb::Result<u8, Self::Error> { | 761 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { |
| 764 | embedded_hal_02::serial::Read::read(self) | 762 | self.blocking_write(&[char]).map(drop).map_err(nb::Error::Other) |
| 765 | } | ||
| 766 | } | 763 | } |
| 767 | 764 | ||
| 768 | impl<'d, T: Instance> embedded_hal_nb::serial::Write for BufferedUartTx<'d, T> { | 765 | fn flush(&mut self) -> nb::Result<(), Self::Error> { |
| 769 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { | 766 | self.blocking_flush().map_err(nb::Error::Other) |
| 770 | self.blocking_write(&[char]).map(drop).map_err(nb::Error::Other) | ||
| 771 | } | ||
| 772 | |||
| 773 | fn flush(&mut self) -> nb::Result<(), Self::Error> { | ||
| 774 | self.blocking_flush().map_err(nb::Error::Other) | ||
| 775 | } | ||
| 776 | } | 767 | } |
| 768 | } | ||
| 777 | 769 | ||
| 778 | impl<'d, T: Instance> embedded_hal_nb::serial::Read for BufferedUart<'d, T> { | 770 | impl<'d, T: Instance> embedded_hal_nb::serial::Read for BufferedUart<'d, T> { |
| 779 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | 771 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { |
| 780 | embedded_hal_02::serial::Read::read(&mut self.rx) | 772 | embedded_hal_02::serial::Read::read(&mut self.rx) |
| 781 | } | ||
| 782 | } | 773 | } |
| 774 | } | ||
| 783 | 775 | ||
| 784 | impl<'d, T: Instance> embedded_hal_nb::serial::Write for BufferedUart<'d, T> { | 776 | impl<'d, T: Instance> embedded_hal_nb::serial::Write for BufferedUart<'d, T> { |
| 785 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { | 777 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { |
| 786 | self.blocking_write(&[char]).map(drop).map_err(nb::Error::Other) | 778 | self.blocking_write(&[char]).map(drop).map_err(nb::Error::Other) |
| 787 | } | 779 | } |
| 788 | 780 | ||
| 789 | fn flush(&mut self) -> nb::Result<(), Self::Error> { | 781 | fn flush(&mut self) -> nb::Result<(), Self::Error> { |
| 790 | self.blocking_flush().map_err(nb::Error::Other) | 782 | self.blocking_flush().map_err(nb::Error::Other) |
| 791 | } | ||
| 792 | } | 783 | } |
| 793 | } | 784 | } |
diff --git a/embassy-rp/src/uart/mod.rs b/embassy-rp/src/uart/mod.rs index 461986c81..18705b141 100644 --- a/embassy-rp/src/uart/mod.rs +++ b/embassy-rp/src/uart/mod.rs | |||
| @@ -17,9 +17,7 @@ use crate::interrupt::typelevel::{Binding, Interrupt}; | |||
| 17 | use crate::pac::io::vals::{Inover, Outover}; | 17 | use crate::pac::io::vals::{Inover, Outover}; |
| 18 | use crate::{interrupt, pac, peripherals, Peripheral, RegExt}; | 18 | use crate::{interrupt, pac, peripherals, Peripheral, RegExt}; |
| 19 | 19 | ||
| 20 | #[cfg(feature = "nightly")] | ||
| 21 | mod buffered; | 20 | mod buffered; |
| 22 | #[cfg(feature = "nightly")] | ||
| 23 | pub use buffered::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx}; | 21 | pub use buffered::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx}; |
| 24 | 22 | ||
| 25 | #[derive(Clone, Copy, PartialEq, Eq, Debug)] | 23 | #[derive(Clone, Copy, PartialEq, Eq, Debug)] |
| @@ -193,7 +191,6 @@ impl<'d, T: Instance, M: Mode> UartTx<'d, T, M> { | |||
| 193 | } | 191 | } |
| 194 | 192 | ||
| 195 | impl<'d, T: Instance> UartTx<'d, T, Blocking> { | 193 | impl<'d, T: Instance> UartTx<'d, T, Blocking> { |
| 196 | #[cfg(feature = "nightly")] | ||
| 197 | pub fn into_buffered( | 194 | pub fn into_buffered( |
| 198 | self, | 195 | self, |
| 199 | irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>, | 196 | irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>, |
| @@ -307,7 +304,6 @@ impl<'d, T: Instance> UartRx<'d, T, Blocking> { | |||
| 307 | Self::new_inner(false, None) | 304 | Self::new_inner(false, None) |
| 308 | } | 305 | } |
| 309 | 306 | ||
| 310 | #[cfg(feature = "nightly")] | ||
| 311 | pub fn into_buffered( | 307 | pub fn into_buffered( |
| 312 | self, | 308 | self, |
| 313 | irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>, | 309 | irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>, |
| @@ -462,7 +458,6 @@ impl<'d, T: Instance> Uart<'d, T, Blocking> { | |||
| 462 | ) | 458 | ) |
| 463 | } | 459 | } |
| 464 | 460 | ||
| 465 | #[cfg(feature = "nightly")] | ||
| 466 | pub fn into_buffered( | 461 | pub fn into_buffered( |
| 467 | self, | 462 | self, |
| 468 | irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>, | 463 | irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>, |
| @@ -709,172 +704,163 @@ impl<'d, T: Instance> Uart<'d, T, Async> { | |||
| 709 | } | 704 | } |
| 710 | } | 705 | } |
| 711 | 706 | ||
| 712 | mod eh02 { | 707 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Read<u8> for UartRx<'d, T, M> { |
| 713 | use super::*; | 708 | type Error = Error; |
| 714 | 709 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | |
| 715 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Read<u8> for UartRx<'d, T, M> { | 710 | let r = T::regs(); |
| 716 | type Error = Error; | 711 | if r.uartfr().read().rxfe() { |
| 717 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | 712 | return Err(nb::Error::WouldBlock); |
| 718 | let r = T::regs(); | 713 | } |
| 719 | if r.uartfr().read().rxfe() { | ||
| 720 | return Err(nb::Error::WouldBlock); | ||
| 721 | } | ||
| 722 | 714 | ||
| 723 | let dr = r.uartdr().read(); | 715 | let dr = r.uartdr().read(); |
| 724 | 716 | ||
| 725 | if dr.oe() { | 717 | if dr.oe() { |
| 726 | Err(nb::Error::Other(Error::Overrun)) | 718 | Err(nb::Error::Other(Error::Overrun)) |
| 727 | } else if dr.be() { | 719 | } else if dr.be() { |
| 728 | Err(nb::Error::Other(Error::Break)) | 720 | Err(nb::Error::Other(Error::Break)) |
| 729 | } else if dr.pe() { | 721 | } else if dr.pe() { |
| 730 | Err(nb::Error::Other(Error::Parity)) | 722 | Err(nb::Error::Other(Error::Parity)) |
| 731 | } else if dr.fe() { | 723 | } else if dr.fe() { |
| 732 | Err(nb::Error::Other(Error::Framing)) | 724 | Err(nb::Error::Other(Error::Framing)) |
| 733 | } else { | 725 | } else { |
| 734 | Ok(dr.data()) | 726 | Ok(dr.data()) |
| 735 | } | ||
| 736 | } | 727 | } |
| 737 | } | 728 | } |
| 729 | } | ||
| 738 | 730 | ||
| 739 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Write<u8> for UartTx<'d, T, M> { | 731 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Write<u8> for UartTx<'d, T, M> { |
| 740 | type Error = Error; | 732 | type Error = Error; |
| 741 | |||
| 742 | fn write(&mut self, word: u8) -> Result<(), nb::Error<Self::Error>> { | ||
| 743 | let r = T::regs(); | ||
| 744 | if r.uartfr().read().txff() { | ||
| 745 | return Err(nb::Error::WouldBlock); | ||
| 746 | } | ||
| 747 | 733 | ||
| 748 | r.uartdr().write(|w| w.set_data(word)); | 734 | fn write(&mut self, word: u8) -> Result<(), nb::Error<Self::Error>> { |
| 749 | Ok(()) | 735 | let r = T::regs(); |
| 736 | if r.uartfr().read().txff() { | ||
| 737 | return Err(nb::Error::WouldBlock); | ||
| 750 | } | 738 | } |
| 751 | 739 | ||
| 752 | fn flush(&mut self) -> Result<(), nb::Error<Self::Error>> { | 740 | r.uartdr().write(|w| w.set_data(word)); |
| 753 | let r = T::regs(); | 741 | Ok(()) |
| 754 | if !r.uartfr().read().txfe() { | ||
| 755 | return Err(nb::Error::WouldBlock); | ||
| 756 | } | ||
| 757 | Ok(()) | ||
| 758 | } | ||
| 759 | } | 742 | } |
| 760 | 743 | ||
| 761 | impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::serial::Write<u8> for UartTx<'d, T, M> { | 744 | fn flush(&mut self) -> Result<(), nb::Error<Self::Error>> { |
| 762 | type Error = Error; | 745 | let r = T::regs(); |
| 763 | 746 | if !r.uartfr().read().txfe() { | |
| 764 | fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> { | 747 | return Err(nb::Error::WouldBlock); |
| 765 | self.blocking_write(buffer) | ||
| 766 | } | ||
| 767 | |||
| 768 | fn bflush(&mut self) -> Result<(), Self::Error> { | ||
| 769 | self.blocking_flush() | ||
| 770 | } | 748 | } |
| 749 | Ok(()) | ||
| 771 | } | 750 | } |
| 751 | } | ||
| 772 | 752 | ||
| 773 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Read<u8> for Uart<'d, T, M> { | 753 | impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::serial::Write<u8> for UartTx<'d, T, M> { |
| 774 | type Error = Error; | 754 | type Error = Error; |
| 775 | 755 | ||
| 776 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | 756 | fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> { |
| 777 | embedded_hal_02::serial::Read::read(&mut self.rx) | 757 | self.blocking_write(buffer) |
| 778 | } | ||
| 779 | } | 758 | } |
| 780 | 759 | ||
| 781 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Write<u8> for Uart<'d, T, M> { | 760 | fn bflush(&mut self) -> Result<(), Self::Error> { |
| 782 | type Error = Error; | 761 | self.blocking_flush() |
| 762 | } | ||
| 763 | } | ||
| 783 | 764 | ||
| 784 | fn write(&mut self, word: u8) -> Result<(), nb::Error<Self::Error>> { | 765 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Read<u8> for Uart<'d, T, M> { |
| 785 | embedded_hal_02::serial::Write::write(&mut self.tx, word) | 766 | type Error = Error; |
| 786 | } | ||
| 787 | 767 | ||
| 788 | fn flush(&mut self) -> Result<(), nb::Error<Self::Error>> { | 768 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { |
| 789 | embedded_hal_02::serial::Write::flush(&mut self.tx) | 769 | embedded_hal_02::serial::Read::read(&mut self.rx) |
| 790 | } | ||
| 791 | } | 770 | } |
| 771 | } | ||
| 792 | 772 | ||
| 793 | impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::serial::Write<u8> for Uart<'d, T, M> { | 773 | impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Write<u8> for Uart<'d, T, M> { |
| 794 | type Error = Error; | 774 | type Error = Error; |
| 795 | 775 | ||
| 796 | fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> { | 776 | fn write(&mut self, word: u8) -> Result<(), nb::Error<Self::Error>> { |
| 797 | self.blocking_write(buffer) | 777 | embedded_hal_02::serial::Write::write(&mut self.tx, word) |
| 798 | } | 778 | } |
| 799 | 779 | ||
| 800 | fn bflush(&mut self) -> Result<(), Self::Error> { | 780 | fn flush(&mut self) -> Result<(), nb::Error<Self::Error>> { |
| 801 | self.blocking_flush() | 781 | embedded_hal_02::serial::Write::flush(&mut self.tx) |
| 802 | } | ||
| 803 | } | 782 | } |
| 804 | } | 783 | } |
| 805 | 784 | ||
| 806 | #[cfg(feature = "unstable-traits")] | 785 | impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::serial::Write<u8> for Uart<'d, T, M> { |
| 807 | mod eh1 { | 786 | type Error = Error; |
| 808 | use super::*; | ||
| 809 | 787 | ||
| 810 | impl embedded_hal_nb::serial::Error for Error { | 788 | fn bwrite_all(&mut self, buffer: &[u8]) -> Result<(), Self::Error> { |
| 811 | fn kind(&self) -> embedded_hal_nb::serial::ErrorKind { | 789 | self.blocking_write(buffer) |
| 812 | match *self { | ||
| 813 | Self::Framing => embedded_hal_nb::serial::ErrorKind::FrameFormat, | ||
| 814 | Self::Break => embedded_hal_nb::serial::ErrorKind::Other, | ||
| 815 | Self::Overrun => embedded_hal_nb::serial::ErrorKind::Overrun, | ||
| 816 | Self::Parity => embedded_hal_nb::serial::ErrorKind::Parity, | ||
| 817 | } | ||
| 818 | } | ||
| 819 | } | 790 | } |
| 820 | 791 | ||
| 821 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::ErrorType for UartRx<'d, T, M> { | 792 | fn bflush(&mut self) -> Result<(), Self::Error> { |
| 822 | type Error = Error; | 793 | self.blocking_flush() |
| 823 | } | 794 | } |
| 795 | } | ||
| 824 | 796 | ||
| 825 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::ErrorType for UartTx<'d, T, M> { | 797 | impl embedded_hal_nb::serial::Error for Error { |
| 826 | type Error = Error; | 798 | fn kind(&self) -> embedded_hal_nb::serial::ErrorKind { |
| 799 | match *self { | ||
| 800 | Self::Framing => embedded_hal_nb::serial::ErrorKind::FrameFormat, | ||
| 801 | Self::Break => embedded_hal_nb::serial::ErrorKind::Other, | ||
| 802 | Self::Overrun => embedded_hal_nb::serial::ErrorKind::Overrun, | ||
| 803 | Self::Parity => embedded_hal_nb::serial::ErrorKind::Parity, | ||
| 804 | } | ||
| 827 | } | 805 | } |
| 806 | } | ||
| 828 | 807 | ||
| 829 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::ErrorType for Uart<'d, T, M> { | 808 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::ErrorType for UartRx<'d, T, M> { |
| 830 | type Error = Error; | 809 | type Error = Error; |
| 831 | } | 810 | } |
| 832 | 811 | ||
| 833 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Read for UartRx<'d, T, M> { | 812 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::ErrorType for UartTx<'d, T, M> { |
| 834 | fn read(&mut self) -> nb::Result<u8, Self::Error> { | 813 | type Error = Error; |
| 835 | let r = T::regs(); | 814 | } |
| 836 | let dr = r.uartdr().read(); | ||
| 837 | 815 | ||
| 838 | if dr.oe() { | 816 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::ErrorType for Uart<'d, T, M> { |
| 839 | Err(nb::Error::Other(Error::Overrun)) | 817 | type Error = Error; |
| 840 | } else if dr.be() { | 818 | } |
| 841 | Err(nb::Error::Other(Error::Break)) | 819 | |
| 842 | } else if dr.pe() { | 820 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Read for UartRx<'d, T, M> { |
| 843 | Err(nb::Error::Other(Error::Parity)) | 821 | fn read(&mut self) -> nb::Result<u8, Self::Error> { |
| 844 | } else if dr.fe() { | 822 | let r = T::regs(); |
| 845 | Err(nb::Error::Other(Error::Framing)) | 823 | let dr = r.uartdr().read(); |
| 846 | } else if dr.fe() { | 824 | |
| 847 | Ok(dr.data()) | 825 | if dr.oe() { |
| 848 | } else { | 826 | Err(nb::Error::Other(Error::Overrun)) |
| 849 | Err(nb::Error::WouldBlock) | 827 | } else if dr.be() { |
| 850 | } | 828 | Err(nb::Error::Other(Error::Break)) |
| 829 | } else if dr.pe() { | ||
| 830 | Err(nb::Error::Other(Error::Parity)) | ||
| 831 | } else if dr.fe() { | ||
| 832 | Err(nb::Error::Other(Error::Framing)) | ||
| 833 | } else if dr.fe() { | ||
| 834 | Ok(dr.data()) | ||
| 835 | } else { | ||
| 836 | Err(nb::Error::WouldBlock) | ||
| 851 | } | 837 | } |
| 852 | } | 838 | } |
| 839 | } | ||
| 853 | 840 | ||
| 854 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Write for UartTx<'d, T, M> { | 841 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Write for UartTx<'d, T, M> { |
| 855 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { | 842 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { |
| 856 | self.blocking_write(&[char]).map_err(nb::Error::Other) | 843 | self.blocking_write(&[char]).map_err(nb::Error::Other) |
| 857 | } | 844 | } |
| 858 | 845 | ||
| 859 | fn flush(&mut self) -> nb::Result<(), Self::Error> { | 846 | fn flush(&mut self) -> nb::Result<(), Self::Error> { |
| 860 | self.blocking_flush().map_err(nb::Error::Other) | 847 | self.blocking_flush().map_err(nb::Error::Other) |
| 861 | } | ||
| 862 | } | 848 | } |
| 849 | } | ||
| 863 | 850 | ||
| 864 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Read for Uart<'d, T, M> { | 851 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Read for Uart<'d, T, M> { |
| 865 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { | 852 | fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { |
| 866 | embedded_hal_02::serial::Read::read(&mut self.rx) | 853 | embedded_hal_02::serial::Read::read(&mut self.rx) |
| 867 | } | ||
| 868 | } | 854 | } |
| 855 | } | ||
| 869 | 856 | ||
| 870 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Write for Uart<'d, T, M> { | 857 | impl<'d, T: Instance, M: Mode> embedded_hal_nb::serial::Write for Uart<'d, T, M> { |
| 871 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { | 858 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { |
| 872 | self.blocking_write(&[char]).map_err(nb::Error::Other) | 859 | self.blocking_write(&[char]).map_err(nb::Error::Other) |
| 873 | } | 860 | } |
| 874 | 861 | ||
| 875 | fn flush(&mut self) -> nb::Result<(), Self::Error> { | 862 | fn flush(&mut self) -> nb::Result<(), Self::Error> { |
| 876 | self.blocking_flush().map_err(nb::Error::Other) | 863 | self.blocking_flush().map_err(nb::Error::Other) |
| 877 | } | ||
| 878 | } | 864 | } |
| 879 | } | 865 | } |
| 880 | 866 | ||
| @@ -891,7 +877,6 @@ mod sealed { | |||
| 891 | 877 | ||
| 892 | fn regs() -> pac::uart::Uart; | 878 | fn regs() -> pac::uart::Uart; |
| 893 | 879 | ||
| 894 | #[cfg(feature = "nightly")] | ||
| 895 | fn buffered_state() -> &'static buffered::State; | 880 | fn buffered_state() -> &'static buffered::State; |
| 896 | 881 | ||
| 897 | fn dma_state() -> &'static DmaState; | 882 | fn dma_state() -> &'static DmaState; |
| @@ -931,7 +916,6 @@ macro_rules! impl_instance { | |||
| 931 | pac::$inst | 916 | pac::$inst |
| 932 | } | 917 | } |
| 933 | 918 | ||
| 934 | #[cfg(feature = "nightly")] | ||
| 935 | fn buffered_state() -> &'static buffered::State { | 919 | fn buffered_state() -> &'static buffered::State { |
| 936 | static STATE: buffered::State = buffered::State::new(); | 920 | static STATE: buffered::State = buffered::State::new(); |
| 937 | &STATE | 921 | &STATE |
