aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjrmoulton <[email protected]>2024-06-17 21:15:26 -0600
committerjrmoulton <[email protected]>2024-08-13 09:46:16 -0600
commit49357709ed4f619144746dd04e088d78ad7f355f (patch)
tree8381639f6801f2d5d2a4cbbc2368e5efc37eb736
parent967fa1b2a2b551dfac9925e46817c97c7ec711f7 (diff)
Move slave constructor to v2 module
-rw-r--r--embassy-stm32/src/i2c/mod.rs20
-rw-r--r--embassy-stm32/src/i2c/v2.rs21
2 files changed, 21 insertions, 20 deletions
diff --git a/embassy-stm32/src/i2c/mod.rs b/embassy-stm32/src/i2c/mod.rs
index 0457595d2..a5ff61f3d 100644
--- a/embassy-stm32/src/i2c/mod.rs
+++ b/embassy-stm32/src/i2c/mod.rs
@@ -268,26 +268,6 @@ impl<'d, M: Mode, IM: MasterMode> I2c<'d, M, IM> {
268 } 268 }
269 } 269 }
270} 270}
271impl<'d, M: Mode> I2c<'d, M, Master> {
272 /// Configure the I2C driver for slave operations, allowing for the driver to be used as a slave and a master (multimaster)
273 pub fn into_slave_multimaster(mut self, slave_addr_config: SlaveAddrConfig) -> I2c<'d, M, MultiMaster> {
274 let mut slave = I2c {
275 info: self.info,
276 state: self.state,
277 kernel_clock: self.kernel_clock,
278 scl: self.scl.take(),
279 sda: self.sda.take(),
280 tx_dma: self.tx_dma.take(),
281 rx_dma: self.rx_dma.take(),
282 #[cfg(feature = "time")]
283 timeout: self.timeout,
284 _phantom: PhantomData,
285 _phantom2: PhantomData,
286 };
287 slave.init_slave(slave_addr_config);
288 slave
289 }
290}
291 271
292impl<'d, M: Mode, IM: MasterMode> Drop for I2c<'d, M, IM> { 272impl<'d, M: Mode, IM: MasterMode> Drop for I2c<'d, M, IM> {
293 fn drop(&mut self) { 273 fn drop(&mut self) {
diff --git a/embassy-stm32/src/i2c/v2.rs b/embassy-stm32/src/i2c/v2.rs
index c2560d819..acf4b3f12 100644
--- a/embassy-stm32/src/i2c/v2.rs
+++ b/embassy-stm32/src/i2c/v2.rs
@@ -694,6 +694,27 @@ impl<'d, IM: MasterMode> I2c<'d, Async, IM> {
694 } 694 }
695} 695}
696 696
697impl<'d, M: Mode> I2c<'d, M, Master> {
698 /// Configure the I2C driver for slave operations, allowing for the driver to be used as a slave and a master (multimaster)
699 pub fn into_slave_multimaster(mut self, slave_addr_config: SlaveAddrConfig) -> I2c<'d, M, MultiMaster> {
700 let mut slave = I2c {
701 info: self.info,
702 state: self.state,
703 kernel_clock: self.kernel_clock,
704 scl: self.scl.take(),
705 sda: self.sda.take(),
706 tx_dma: self.tx_dma.take(),
707 rx_dma: self.rx_dma.take(),
708 #[cfg(feature = "time")]
709 timeout: self.timeout,
710 _phantom: PhantomData,
711 _phantom2: PhantomData,
712 };
713 slave.init_slave(slave_addr_config);
714 slave
715 }
716}
717
697impl<'d, M: Mode> I2c<'d, M, MultiMaster> { 718impl<'d, M: Mode> I2c<'d, M, MultiMaster> {
698 pub(crate) fn init_slave(&mut self, config: SlaveAddrConfig) { 719 pub(crate) fn init_slave(&mut self, config: SlaveAddrConfig) {
699 self.info.regs.cr1().modify(|reg| { 720 self.info.regs.cr1().modify(|reg| {