mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-12-08 20:39:01 +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):
|
class PinInvalidEdges(PinError, ValueError):
|
||||||
"Error raised when attempting to assign an invalid edge detection to a pin"
|
"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):
|
class PinSetInput(PinError, AttributeError):
|
||||||
"Error raised when attempting to set a read-only pin"
|
"Error raised when attempting to set a read-only pin"
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from ..exc import (
|
|||||||
PinSetInput,
|
PinSetInput,
|
||||||
PinFixedPull,
|
PinFixedPull,
|
||||||
PinInvalidPull,
|
PinInvalidPull,
|
||||||
|
PinInvalidBounce,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -216,6 +217,8 @@ class PiGPIOPin(Pin):
|
|||||||
def _set_bounce(self, value):
|
def _set_bounce(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
value = 0
|
value = 0
|
||||||
|
elif value < 0:
|
||||||
|
raise PinInvalidBounce('bounce must be 0 or greater')
|
||||||
self._connection.set_glitch_filter(self._number, int(value * 1000000))
|
self._connection.set_glitch_filter(self._number, int(value * 1000000))
|
||||||
|
|
||||||
def _get_edges(self):
|
def _get_edges(self):
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ from ..exc import (
|
|||||||
PinFixedPull,
|
PinFixedPull,
|
||||||
PinInvalidPull,
|
PinInvalidPull,
|
||||||
PinInvalidState,
|
PinInvalidState,
|
||||||
|
PinInvalidBounce,
|
||||||
PinPWMFixedValue,
|
PinPWMFixedValue,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -186,10 +187,12 @@ class RPiGPIOPin(Pin):
|
|||||||
return None if self._bounce == -666 else (self._bounce / 1000)
|
return None if self._bounce == -666 else (self._bounce / 1000)
|
||||||
|
|
||||||
def _set_bounce(self, value):
|
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
|
f = self.when_changed
|
||||||
self.when_changed = None
|
self.when_changed = None
|
||||||
try:
|
try:
|
||||||
self._bounce = -666 if value is None else (value * 1000)
|
self._bounce = -666 if value is None else int(value * 1000)
|
||||||
finally:
|
finally:
|
||||||
self.when_changed = f
|
self.when_changed = f
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ from ..exc import (
|
|||||||
PinSetInput,
|
PinSetInput,
|
||||||
PinFixedPull,
|
PinFixedPull,
|
||||||
PinInvalidPull,
|
PinInvalidPull,
|
||||||
|
PinInvalidBounce,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -177,10 +178,12 @@ class RPIOPin(Pin):
|
|||||||
return None if self._bounce is None else (self._bounce / 1000)
|
return None if self._bounce is None else (self._bounce / 1000)
|
||||||
|
|
||||||
def _set_bounce(self, value):
|
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
|
f = self.when_changed
|
||||||
self.when_changed = None
|
self.when_changed = None
|
||||||
try:
|
try:
|
||||||
self._bounce = None if value is None else (value * 1000)
|
self._bounce = None if value is None else int(value * 1000)
|
||||||
finally:
|
finally:
|
||||||
self.when_changed = f
|
self.when_changed = f
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user