Skip to content

Commit c6bb567

Browse files
committed
Enum for states and modes
1 parent 56464b8 commit c6bb567

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+174
-148
lines changed

.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
language: python
22
python: 2.7
3-
install: pip install -qq flake8 pytest pytest-cov tox
3+
install:
4+
- pip install -qq flake8 pytest pytest-cov tox
5+
- python setup.py install
46
script:
57
- flake8 --version
68
- flake8 --ignore=E501 pingo

README.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ Once you have a board instance, it's possible to access its pins through the ``b
4646
.. code-block:: python
4747
4848
import pingo
49+
from pingo import State, Mode
4950
from time import sleep
5051
5152
board = pingo.detect.get_board()
5253
led_pin = board.pins[13]
53-
led_pin.mode = pingo.OUT
54+
led_pin.mode = Mode.OUT
5455
5556
while True:
5657
led_pin.hi()

pingo/__init__.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
from __future__ import absolute_import
22

33
# api
4-
from .board import ANALOG # noqa
5-
from .board import IN # noqa
6-
from .board import OUT # noqa
7-
from .board import PWM # noqa
8-
from .board import HIGH # noqa
9-
from .board import LOW # noqa
4+
from .board import State # noqa
5+
from .board import Mode # noqa
106
from .board import ModeNotSuported # noqa
117
from .board import WrongPinMode # noqa
128
from .board import PwmOutputCapable # noqa
@@ -18,7 +14,8 @@
1814
from .board import GroundPin # noqa
1915
from .board import Pin # noqa
2016
from .board import VccPin # noqa
21-
import pingo.parts #import * # noqa
17+
import pingo.parts # import * # noqa
18+
2219

2320
# boards
2421
import pingo.rpi # noqa
@@ -29,6 +26,7 @@
2926
import pingo.arduino # noqa
3027
import pingo.bbb # noqa
3128

29+
3230
# resources
3331
import pingo.detect # noqa
3432
import pingo.test # noqa

pingo/arduino/firmata.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import pingo
1111
from pingo.board import Board, DigitalPin, AnalogPin, PwmPin
12+
from pingo.board import State, Mode
1213
from pingo.board import AnalogInputCapable, PwmOutputCapable
1314
from pingo.detect import detect
1415
from .util_firmata import pin_list_to_board_dict
@@ -20,14 +21,14 @@
2021
True: 1,
2122
0: 0,
2223
1: 1,
23-
pingo.LOW: 0,
24-
pingo.HIGH: 1,
24+
State.LOW: 0,
25+
State.HIGH: 1,
2526
}
2627

2728
# TODO: PyMata suports Input, Output, PWM, Servo, Encoder and Tone
2829
PIN_MODES = {
29-
pingo.IN: 0,
30-
pingo.OUT: 1,
30+
Mode.IN: 0,
31+
Mode.OUT: 1,
3132
}
3233

3334
VERBOSE = False

pingo/arduino/test_util_firmata.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,8 @@ def test_capability_response(self):
4343
0x7F, # END_SYSEX (Pin delimiter)
4444
]
4545

46-
data_arduino = list(
47-
# [0x6C] # CAPABILITY_RESPONSE
48-
unavailible_pin
49-
+ digital_pin
50-
+ analog_pin
51-
)
46+
data_arduino = list(unavailible_pin + digital_pin + analog_pin)
47+
# [0x6C] # CAPABILITY_RESPONSE
5248

5349
pinmap = pin_list_to_board_dict(data_arduino)
5450
for key in test_layout.keys():

pingo/board.py

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@
55
from abc import ABCMeta, abstractmethod
66

77
from .util import StrKeyDict
8+
from enum import Enum
89

9-
HIGH = 'HIGH'
10-
LOW = 'LOW'
10+
State = Enum('State', 'LOW HIGH')
1111

12-
# TODO: 4 states implementation: IN, OUT, ANALOG, PWM
13-
IN = 'IN'
14-
OUT = 'OUT'
15-
ANALOG = 'ANALOG'
16-
PWM = 'PWM'
12+
Mode = Enum('Mode', 'IN OUT ANALOG PWM')
1713

1814

1915
class WrongPinMode(Exception):
@@ -249,20 +245,20 @@ def __repr__(self):
249245

250246
@property
251247
def mode(self):
252-
"""[property] Get/set pin mode to ``pingo.IN``, ``pingo.OUT``
253-
``pingo.ANALOG`` or ``pingo.PWM``"""
248+
"""[property] Get/set pin mode to ``Mode.IN``, ``Mode.OUT``
249+
``Mode.ANALOG`` or ``Mode.PWM``"""
254250
return self._mode
255251

256252
@mode.setter
257253
def mode(self, value):
258254
if value not in self.suported_modes:
259255
raise ModeNotSuported()
260256

261-
if value in [IN, OUT]:
257+
if value in [Mode.IN, Mode.OUT]:
262258
self.board._set_digital_mode(self, value)
263-
elif value == ANALOG:
259+
elif value == Mode.ANALOG:
264260
self.board._set_analog_mode(self, value)
265-
elif value == PWM:
261+
elif value == Mode.PWM:
266262
self.board._set_pwm_mode(self, value)
267263

268264
self._mode = value
@@ -283,60 +279,60 @@ class DigitalPin(Pin):
283279
because pins delegate all board-dependent behavior to the board.
284280
"""
285281

286-
suported_modes = [IN, OUT]
282+
suported_modes = [Mode.IN, Mode.OUT]
287283

288284
def __init__(self, board, location, gpio_id=None):
289285
Pin.__init__(self, board, location, gpio_id)
290286
self._state = None
291287

292288
@property
293289
def state(self):
294-
"""[property] Get/set pin state to ``pingo.HIGH`` or ``pingo.LOW``"""
295-
if self.mode not in [IN, OUT]:
290+
"""[property] Get/set pin state to ``State.HIGH`` or ``State.LOW``"""
291+
if self.mode not in [Mode.IN, Mode.OUT]:
296292
raise WrongPinMode()
297293

298-
if self.mode == IN:
294+
if self.mode == Mode.IN:
299295
self._state = self.board._get_pin_state(self)
300296

301297
return self._state
302298

303299
@state.setter
304300
def state(self, value):
305-
if self.mode != OUT:
301+
if self.mode != Mode.OUT:
306302
raise WrongPinMode()
307303

308304
self.board._set_pin_state(self, value)
309305
self._state = value
310306

311307
def low(self):
312-
"""Set voltage of pin to ``pingo.LOW`` (GND)."""
313-
self.state = LOW
308+
"""Set voltage of pin to ``State.LOW`` (GND)."""
309+
self.state = State.LOW
314310

315311
lo = low # shortcut for interactive use
316312

317313
def high(self):
318314
"""Set state of the pin to ``pingo.HIGH`` (Vcc)."""
319-
self.state = HIGH
315+
self.state = State.HIGH
320316

321317
hi = high # shortcut for interactive use
322318

323319
def toggle(self):
324320
"""Change state of the pin."""
325-
self.state = HIGH if self.state == LOW else LOW
321+
self.state = State.HIGH if self.state == State.LOW else State.LOW
326322

327323
def pulse(self):
328324
"""Generate a pulse in state of the pin."""
329-
if self.state == LOW:
330-
self.state = HIGH
331-
self.state = LOW
325+
if self.state == State.LOW:
326+
self.state = State.HIGH
327+
self.state = State.LOW
332328
else:
333-
self.state = LOW
334-
self.state = HIGH
329+
self.state = State.LOW
330+
self.state = State.HIGH
335331

336332

337333
class PwmPin(DigitalPin):
338334

339-
suported_modes = [IN, OUT, PWM]
335+
suported_modes = [Mode.IN, Mode.OUT, Mode.PWM]
340336

341337
def __init__(self, board, location, gpio_id=None, frequency=None):
342338
DigitalPin.__init__(self, board, location, gpio_id)
@@ -348,13 +344,13 @@ def __init__(self, board, location, gpio_id=None, frequency=None):
348344

349345
@property
350346
def value(self):
351-
if self.mode != PWM:
347+
if self.mode != Mode.PWM:
352348
raise WrongPinMode()
353349
return self.board._get_pwm_duty_cycle(self)
354350

355351
@value.setter
356352
def value(self, value):
357-
if self.mode != PWM:
353+
if self.mode != Mode.PWM:
358354
raise WrongPinMode()
359355
if not 0.0 <= value <= 100.0:
360356
raise ArgumentOutOfRange()
@@ -363,13 +359,13 @@ def value(self, value):
363359

364360
@property
365361
def frequency(self):
366-
if self.mode != PWM:
362+
if self.mode != Mode.PWM:
367363
raise WrongPinMode()
368364
return self.board._get_pwm_frequency(self)
369365

370366
@frequency.setter
371367
def frequency(self, new_frequency):
372-
if self.mode != PWM:
368+
if self.mode != Mode.PWM:
373369
raise WrongPinMode()
374370
if new_frequency <= 0.0:
375371
raise ArgumentOutOfRange()
@@ -386,7 +382,7 @@ class AnalogPin(Pin):
386382
This pin type supports read operations only.
387383
"""
388384

389-
suported_modes = [IN, ANALOG]
385+
suported_modes = [Mode.IN, Mode.ANALOG]
390386

391387
def __init__(self, board, location, resolution, gpio_id=None):
392388
"""

pingo/compat.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
PY2 = sys.version_info[0] == 2
44
PY3 = (sys.version_info[0] >= 3)
55

6+
67
def iteritems(obj, **kwargs):
78
"""replacement for six's iteritems for Python2/3 compat
89
uses 'iteritems' if available and otherwise uses 'items'.
@@ -13,13 +14,15 @@ def iteritems(obj, **kwargs):
1314
func = obj.items
1415
return func(**kwargs)
1516

17+
1618
def iterkeys(obj, **kwargs):
1719
func = getattr(obj, "iterkeys", None)
1820
if not func:
1921
func = obj.keys
2022
return func(**kwargs)
2123

24+
2225
if PY2:
23-
from UserDict import UserDict
26+
from UserDict import UserDict # noqa
2427
else:
25-
from collections import UserDict
28+
from collections import UserDict # noqa

pingo/detect/detect.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ def _find_arduino_dev(system):
3636
return os.path.join(os.path.sep, 'dev', devices[0])
3737

3838
elif system == 'Darwin':
39-
devices = (glob.glob('/dev/tty.usbmodem*')
40-
+ glob.glob('/dev/tty.usbserial*'))
39+
devices = (glob.glob('/dev/tty.usbmodem*') + glob.glob('/dev/tty.usbserial*'))
4140
if len(devices) == 1:
4241
return os.path.join(os.path.sep, 'dev', devices[0])
4342
return False

pingo/detect/test_detect.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import platform
33

44
import pingo
5-
import pingo.detect
65

76

87
class DetectBasics(unittest.TestCase):
@@ -13,7 +12,7 @@ def test_board(self):
1312

1413
@unittest.skipIf(not platform.system() == 'Linux', 'Not Linux')
1514
def test_read_cpu_info(self):
16-
info = detect._read_cpu_info()
15+
info = pingo.detect.detect._read_cpu_info()
1716
assert isinstance(info, dict)
1817

1918
if __name__ == '__main__':

pingo/examples/analog_bars.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import pingo
2+
from pingo import Mode
23
import time
34

45
board = pingo.detect.get_board()
56
# board = pingo.arduino.get_arduino()
67

78
pot = board.pins['A0']
8-
pot.mode = pingo.ANALOG
9+
pot.mode = Mode.ANALOG
910

1011

1112
def bar(pin):

0 commit comments

Comments
 (0)