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:
Dave Jones
2016-03-19 17:02:46 +00:00
parent 807bdff2e4
commit 9432046392
4 changed files with 14 additions and 2 deletions

View File

@@ -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"

View File

@@ -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):

View File

@@ -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

View File

@@ -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