diff options
Diffstat (limited to 'embassy-net-adin1110/src/mdio.rs')
| -rw-r--r-- | embassy-net-adin1110/src/mdio.rs | 173 |
1 files changed, 87 insertions, 86 deletions
diff --git a/embassy-net-adin1110/src/mdio.rs b/embassy-net-adin1110/src/mdio.rs index 60abbe16a..1ae5f0043 100644 --- a/embassy-net-adin1110/src/mdio.rs +++ b/embassy-net-adin1110/src/mdio.rs | |||
| @@ -32,6 +32,7 @@ enum Reg13Op { | |||
| 32 | PostReadIncAddr = 0b10 << 14, | 32 | PostReadIncAddr = 0b10 << 14, |
| 33 | Read = 0b11 << 14, | 33 | Read = 0b11 << 14, |
| 34 | } | 34 | } |
| 35 | |||
| 35 | /// `MdioBus` trait | 36 | /// `MdioBus` trait |
| 36 | /// Driver needs to implement the Clause 22 | 37 | /// Driver needs to implement the Clause 22 |
| 37 | /// Optional Clause 45 is the device supports this. | 38 | /// Optional Clause 45 is the device supports this. |
| @@ -87,89 +88,89 @@ pub trait MdioBus { | |||
| 87 | } | 88 | } |
| 88 | } | 89 | } |
| 89 | 90 | ||
| 90 | // #[cfg(test)] | 91 | #[cfg(test)] |
| 91 | // mod tests { | 92 | mod tests { |
| 92 | // use core::convert::Infallible; | 93 | use core::convert::Infallible; |
| 93 | 94 | ||
| 94 | // use super::{MdioBus, PhyAddr, RegC22, RegVal}; | 95 | use super::{MdioBus, PhyAddr, RegC22, RegVal}; |
| 95 | 96 | ||
| 96 | // #[derive(Debug, PartialEq, Eq)] | 97 | #[derive(Debug, PartialEq, Eq)] |
| 97 | // enum A { | 98 | enum A { |
| 98 | // Read(PhyAddr, RegC22), | 99 | Read(PhyAddr, RegC22), |
| 99 | // Write(PhyAddr, RegC22, RegVal), | 100 | Write(PhyAddr, RegC22, RegVal), |
| 100 | // } | 101 | } |
| 101 | 102 | ||
| 102 | // struct MockMdioBus(Vec<A>); | 103 | struct MockMdioBus(Vec<A>); |
| 103 | 104 | ||
| 104 | // impl MockMdioBus { | 105 | impl MockMdioBus { |
| 105 | // pub fn clear(&mut self) { | 106 | pub fn clear(&mut self) { |
| 106 | // self.0.clear(); | 107 | self.0.clear(); |
| 107 | // } | 108 | } |
| 108 | // } | 109 | } |
| 109 | 110 | ||
| 110 | // impl MdioBus for MockMdioBus { | 111 | impl MdioBus for MockMdioBus { |
| 111 | // type Error = Infallible; | 112 | type Error = Infallible; |
| 112 | 113 | ||
| 113 | // fn write_cl22( | 114 | async fn write_cl22( |
| 114 | // &mut self, | 115 | &mut self, |
| 115 | // phy_id: super::PhyAddr, | 116 | phy_id: super::PhyAddr, |
| 116 | // reg: super::RegC22, | 117 | reg: super::RegC22, |
| 117 | // reg_val: super::RegVal, | 118 | reg_val: super::RegVal, |
| 118 | // ) -> Result<(), Self::Error> { | 119 | ) -> Result<(), Self::Error> { |
| 119 | // self.0.push(A::Write(phy_id, reg, reg_val)); | 120 | self.0.push(A::Write(phy_id, reg, reg_val)); |
| 120 | // Ok(()) | 121 | Ok(()) |
| 121 | // } | 122 | } |
| 122 | 123 | ||
| 123 | // fn read_cl22( | 124 | async fn read_cl22( |
| 124 | // &mut self, | 125 | &mut self, |
| 125 | // phy_id: super::PhyAddr, | 126 | phy_id: super::PhyAddr, |
| 126 | // reg: super::RegC22, | 127 | reg: super::RegC22, |
| 127 | // ) -> Result<super::RegVal, Self::Error> { | 128 | ) -> Result<super::RegVal, Self::Error> { |
| 128 | // self.0.push(A::Read(phy_id, reg)); | 129 | self.0.push(A::Read(phy_id, reg)); |
| 129 | // Ok(0) | 130 | Ok(0) |
| 130 | // } | 131 | } |
| 131 | // } | 132 | } |
| 132 | 133 | ||
| 133 | // #[test] | 134 | #[futures_test::test] |
| 134 | // fn read_test() { | 135 | async fn read_test() { |
| 135 | // let mut mdiobus = MockMdioBus(Vec::with_capacity(20)); | 136 | let mut mdiobus = MockMdioBus(Vec::with_capacity(20)); |
| 136 | 137 | ||
| 137 | // mdiobus.clear(); | 138 | mdiobus.clear(); |
| 138 | // mdiobus.read_cl22(0x01, 0x00).unwrap(); | 139 | mdiobus.read_cl22(0x01, 0x00).await.unwrap(); |
| 139 | // assert_eq!(mdiobus.0, vec![A::Read(0x01, 0x00)]); | 140 | assert_eq!(mdiobus.0, vec![A::Read(0x01, 0x00)]); |
| 140 | 141 | ||
| 141 | // mdiobus.clear(); | 142 | mdiobus.clear(); |
| 142 | // mdiobus.read_cl45(0x01, (0xBB, 0x1234)).unwrap(); | 143 | mdiobus.read_cl45(0x01, (0xBB, 0x1234)).await.unwrap(); |
| 143 | // assert_eq!( | 144 | assert_eq!( |
| 144 | // mdiobus.0, | 145 | mdiobus.0, |
| 145 | // vec![ | 146 | vec![ |
| 146 | // #[allow(clippy::identity_op)] | 147 | #[allow(clippy::identity_op)] |
| 147 | // A::Write(0x01, 13, (0b00 << 14) | 27), | 148 | A::Write(0x01, 13, (0b00 << 14) | 27), |
| 148 | // A::Write(0x01, 14, 0x1234), | 149 | A::Write(0x01, 14, 0x1234), |
| 149 | // A::Write(0x01, 13, (0b11 << 14) | 27), | 150 | A::Write(0x01, 13, (0b11 << 14) | 27), |
| 150 | // A::Read(0x01, 14) | 151 | A::Read(0x01, 14) |
| 151 | // ] | 152 | ] |
| 152 | // ); | 153 | ); |
| 153 | // } | 154 | } |
| 154 | 155 | ||
| 155 | // #[test] | 156 | #[futures_test::test] |
| 156 | // fn write_test() { | 157 | async fn write_test() { |
| 157 | // let mut mdiobus = MockMdioBus(Vec::with_capacity(20)); | 158 | let mut mdiobus = MockMdioBus(Vec::with_capacity(20)); |
| 158 | 159 | ||
| 159 | // mdiobus.clear(); | 160 | mdiobus.clear(); |
| 160 | // mdiobus.write_cl22(0x01, 0x00, 0xABCD).unwrap(); | 161 | mdiobus.write_cl22(0x01, 0x00, 0xABCD).await.unwrap(); |
| 161 | // assert_eq!(mdiobus.0, vec![A::Write(0x01, 0x00, 0xABCD)]); | 162 | assert_eq!(mdiobus.0, vec![A::Write(0x01, 0x00, 0xABCD)]); |
| 162 | 163 | ||
| 163 | // mdiobus.clear(); | 164 | mdiobus.clear(); |
| 164 | // mdiobus.write_cl45(0x01, (0xBB, 0x1234), 0xABCD).unwrap(); | 165 | mdiobus.write_cl45(0x01, (0xBB, 0x1234), 0xABCD).await.unwrap(); |
| 165 | // assert_eq!( | 166 | assert_eq!( |
| 166 | // mdiobus.0, | 167 | mdiobus.0, |
| 167 | // vec![ | 168 | vec![ |
| 168 | // A::Write(0x01, 13, 27), | 169 | A::Write(0x01, 13, 27), |
| 169 | // A::Write(0x01, 14, 0x1234), | 170 | A::Write(0x01, 14, 0x1234), |
| 170 | // A::Write(0x01, 13, (0b01 << 14) | 27), | 171 | A::Write(0x01, 13, (0b01 << 14) | 27), |
| 171 | // A::Write(0x01, 14, 0xABCD) | 172 | A::Write(0x01, 14, 0xABCD) |
| 172 | // ] | 173 | ] |
| 173 | // ); | 174 | ); |
| 174 | // } | 175 | } |
| 175 | // } | 176 | } |
