aboutsummaryrefslogtreecommitdiff
path: root/embassy-rp/src/uart
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-11-29 17:23:48 +0100
committerDario Nieuwenhuis <[email protected]>2023-11-29 17:26:33 +0100
commitc6989dfbca51787146f50270c671af9db434f577 (patch)
tree5974a8ec41c108d5208e4f68027b918d424a2046 /embassy-rp/src/uart
parent384bad7bfaa1f2415baf2cd3b69ebf36dc0a02d7 (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.rs165
-rw-r--r--embassy-rp/src/uart/mod.rs244
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
671mod eh02 { 671impl<'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> { 696impl<'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> { 715impl<'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> { 723impl<'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")] 742impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartRx<'d, T> {
747mod 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> { 746impl<'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> { 750impl<'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> { 754impl<'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> { 760impl<'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> { 770impl<'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> { 776impl<'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};
17use crate::pac::io::vals::{Inover, Outover}; 17use crate::pac::io::vals::{Inover, Outover};
18use crate::{interrupt, pac, peripherals, Peripheral, RegExt}; 18use crate::{interrupt, pac, peripherals, Peripheral, RegExt};
19 19
20#[cfg(feature = "nightly")]
21mod buffered; 20mod buffered;
22#[cfg(feature = "nightly")]
23pub use buffered::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx}; 21pub 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
195impl<'d, T: Instance> UartTx<'d, T, Blocking> { 193impl<'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
712mod eh02 { 707impl<'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> { 731impl<'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> { 753impl<'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>> { 765impl<'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> { 773impl<'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")] 785impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::serial::Write<u8> for Uart<'d, T, M> {
807mod 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> { 797impl 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> { 808impl<'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> { 812impl<'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() { 816impl<'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() { 820impl<'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> { 841impl<'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> { 851impl<'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> { 857impl<'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