Merge #1191
1191: stm32 gpio implement degrade to AnyPin r=Dirbaio a=JoshMcguigan This PR implements a `degrade` method on the STM32 GPIO structs `Flex`/`Input`/`Output`/`OutputOpenDrain`. This allows, for example, transforming some `Input<T>` to an `Input<AnyPin>`. Co-authored-by: Josh Mcguigan <joshmcg88@gmail.com>
This commit is contained in:
		
						commit
						662a02a557
					
				@ -28,6 +28,21 @@ impl<'d, T: Pin> Flex<'d, T> {
 | 
				
			|||||||
        Self { pin }
 | 
					        Self { pin }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    pub fn degrade(mut self) -> Flex<'d, AnyPin> {
 | 
				
			||||||
 | 
					        // Safety: We are about to drop the other copy of this pin, so
 | 
				
			||||||
 | 
					        // this clone is safe.
 | 
				
			||||||
 | 
					        let pin = unsafe { self.pin.clone_unchecked() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // We don't want to run the destructor here, because that would
 | 
				
			||||||
 | 
					        // deconfigure the pin.
 | 
				
			||||||
 | 
					        core::mem::forget(self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Flex {
 | 
				
			||||||
 | 
					            pin: pin.map_into::<AnyPin>(),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Put the pin into input mode.
 | 
					    /// Put the pin into input mode.
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    pub fn set_as_input(&mut self, pull: Pull) {
 | 
					    pub fn set_as_input(&mut self, pull: Pull) {
 | 
				
			||||||
@ -286,6 +301,13 @@ impl<'d, T: Pin> Input<'d, T> {
 | 
				
			|||||||
        Self { pin }
 | 
					        Self { pin }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    pub fn degrade(self) -> Input<'d, AnyPin> {
 | 
				
			||||||
 | 
					        Input {
 | 
				
			||||||
 | 
					            pin: self.pin.degrade(),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    pub fn is_high(&self) -> bool {
 | 
					    pub fn is_high(&self) -> bool {
 | 
				
			||||||
        self.pin.is_high()
 | 
					        self.pin.is_high()
 | 
				
			||||||
@ -345,6 +367,13 @@ impl<'d, T: Pin> Output<'d, T> {
 | 
				
			|||||||
        Self { pin }
 | 
					        Self { pin }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    pub fn degrade(self) -> Output<'d, AnyPin> {
 | 
				
			||||||
 | 
					        Output {
 | 
				
			||||||
 | 
					            pin: self.pin.degrade(),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Set the output as high.
 | 
					    /// Set the output as high.
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    pub fn set_high(&mut self) {
 | 
					    pub fn set_high(&mut self) {
 | 
				
			||||||
@ -407,6 +436,13 @@ impl<'d, T: Pin> OutputOpenDrain<'d, T> {
 | 
				
			|||||||
        Self { pin }
 | 
					        Self { pin }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[inline]
 | 
				
			||||||
 | 
					    pub fn degrade(self) -> Output<'d, AnyPin> {
 | 
				
			||||||
 | 
					        Output {
 | 
				
			||||||
 | 
					            pin: self.pin.degrade(),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    pub fn is_high(&self) -> bool {
 | 
					    pub fn is_high(&self) -> bool {
 | 
				
			||||||
        !self.pin.is_low()
 | 
					        !self.pin.is_low()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user