mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	Fix #229
Make sure bounce is always integer when passed to RPi.GPIO and RPIO, and added some checks to make sure a negative bounce isn't specified either
This commit is contained in:
		| @@ -58,6 +58,9 @@ class PinInvalidPull(PinError, ValueError): | ||||
| class PinInvalidEdges(PinError, ValueError): | ||||
|     "Error raised when attempting to assign an invalid edge detection to a pin" | ||||
|  | ||||
| class PinInvalidBounce(PinError, ValueError): | ||||
|     "Error raised when attempting to assign an invalid bounce time to a pin" | ||||
|  | ||||
| class PinSetInput(PinError, AttributeError): | ||||
|     "Error raised when attempting to set a read-only pin" | ||||
|  | ||||
|   | ||||
| @@ -14,6 +14,7 @@ from ..exc import ( | ||||
|     PinSetInput, | ||||
|     PinFixedPull, | ||||
|     PinInvalidPull, | ||||
|     PinInvalidBounce, | ||||
|     ) | ||||
|  | ||||
|  | ||||
| @@ -216,6 +217,8 @@ class PiGPIOPin(Pin): | ||||
|     def _set_bounce(self, value): | ||||
|         if value is None: | ||||
|             value = 0 | ||||
|         elif value < 0: | ||||
|             raise PinInvalidBounce('bounce must be 0 or greater') | ||||
|         self._connection.set_glitch_filter(self._number, int(value * 1000000)) | ||||
|  | ||||
|     def _get_edges(self): | ||||
|   | ||||
| @@ -15,6 +15,7 @@ from ..exc import ( | ||||
|     PinFixedPull, | ||||
|     PinInvalidPull, | ||||
|     PinInvalidState, | ||||
|     PinInvalidBounce, | ||||
|     PinPWMFixedValue, | ||||
|     ) | ||||
|  | ||||
| @@ -186,10 +187,12 @@ class RPiGPIOPin(Pin): | ||||
|         return None if self._bounce == -666 else (self._bounce / 1000) | ||||
|  | ||||
|     def _set_bounce(self, value): | ||||
|         if value is not None and value < 0: | ||||
|             raise PinInvalidBounce('bounce must be 0 or greater') | ||||
|         f = self.when_changed | ||||
|         self.when_changed = None | ||||
|         try: | ||||
|             self._bounce = -666 if value is None else (value * 1000) | ||||
|             self._bounce = -666 if value is None else int(value * 1000) | ||||
|         finally: | ||||
|             self.when_changed = f | ||||
|  | ||||
|   | ||||
| @@ -19,6 +19,7 @@ from ..exc import ( | ||||
|     PinSetInput, | ||||
|     PinFixedPull, | ||||
|     PinInvalidPull, | ||||
|     PinInvalidBounce, | ||||
|     ) | ||||
|  | ||||
|  | ||||
| @@ -177,10 +178,12 @@ class RPIOPin(Pin): | ||||
|         return None if self._bounce is None else (self._bounce / 1000) | ||||
|  | ||||
|     def _set_bounce(self, value): | ||||
|         if value is not None and value < 0: | ||||
|             raise PinInvalidBounce('bounce must be 0 or greater') | ||||
|         f = self.when_changed | ||||
|         self.when_changed = None | ||||
|         try: | ||||
|             self._bounce = None if value is None else (value * 1000) | ||||
|             self._bounce = None if value is None else int(value * 1000) | ||||
|         finally: | ||||
|             self.when_changed = f | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user