summaryrefslogtreecommitdiffstats
path: root/python/fake/_webiopi/GPIO.py
blob: 18ba633df56801fd26f7d7afa6a5366ea2e3c747 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
GPIO_COUNT = 54

IN   = 0
OUT  = 1
ALT5 = 2
ALT4 = 3
ALT0 = 4
ALT1 = 5
ALT2 = 6
ALT3 = 7
PWM  = 8

LOW  = 0
HIGH = 1

PUD_OFF  = 0
PUD_DOWN = 1
PUD_UP   = 2

RATIO = 1
ANGLE = 2

FUNCTIONS = [ "IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3", "PWM" ]
PWM_MODES = [ "none", "ratio", "angle" ]

_functions = {}
_states = {}
for i in range(0, GPIO_COUNT):
  _functions[i] = IN
  _states[i] = False

def setFunction(channel, direction, pull_up_down=PUD_OFF):
  if channel < 0 or channel > GPIO_COUNT:
    raise InvalidChannelException("The GPIO channel is invalid")
  _functions[channel] = direction
  return None

def getFunction(channel):
  if channel < 0 or channel > GPIO_COUNT:
    raise InvalidChannelException("The GPIO channel is invalid")
  return _functions[channel]

def getFunctionString(channel):
  if channel < 0 or channel > GPIO_COUNT:
    raise InvalidChannelException("The GPIO channel is invalid")
  return FUNCTIONS[getFunction(channel)]

def digitalWrite(channel, value):
  return output(channel, value)
def output(channel, value):
  if channel < 0 or channel > GPIO_COUNT:
    raise InvalidChannelException("The GPIO channel is invalid")
  _states[channel] = value
  return None

def digitalRead(channel):
  return input(channel)
def input(channel):
  if channel < 0 or channel > GPIO_COUNT:
    raise InvalidChannelException("The GPIO channel is invalid")
  return _states[channel]

class SetupException(Exception):
  pass
class InvalidDirectionException(Exception):
  pass
class InvalidChannelException(Exception):
  pass
class InvalidPullException(Exception):
  pass