]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/tegra/pin.py
added i2c
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / tegra / pin.py
1 import sys
2 import Jetson.GPIO as GPIO
3 sys.path.append("/opt/nvidia/jetson-gpio/lib/python")
4 sys.path.append("/opt/nvidia/jetson-gpio/lib/python/Jetson/GPIO")
5 GPIO.setmode(GPIO.BCM)
6 GPIO.setwarnings(False)   # shh!
7
8 # Each Jetson model uses different I2C busses
9 JETSON_I2C_BUS_DEFS = {
10     "JETSON_TX1": [0, 1],
11     "JETSON_TX2": [1, 0],
12     "JETSON_XAVIER": [8, 1],
13     "JETSON_TXX": [1, 0]
14 }
15
16 model = GPIO.get_model()
17 I2C_BUS = JETSON_I2C_BUS_DEFS[model][0]
18 I2C_BUS_1 = JETSON_I2C_BUS_DEFS[model][1]
19
20 # Pins dont exist in CPython so...lets make our own!
21 class Pin:
22     IN = 0
23     OUT = 1
24     LOW = 0
25     HIGH = 1
26     PULL_NONE = 0
27     PULL_UP = 1
28     PULL_DOWN = 2
29
30     id = None
31     _value = LOW
32     _mode = IN
33
34     def __init__(self, bcm_number):
35         self.id = bcm_number
36
37     def __repr__(self):
38         return str(self.id)
39
40     def __eq__(self, other):
41         return self.id == other
42
43     def init(self, mode=IN, pull=None):
44         if mode != None:
45             if mode == self.IN:
46                 self._mode = self.IN
47                 GPIO.setup(self.id, GPIO.IN)
48             elif mode == self.OUT:
49                 self._mode = self.OUT
50                 GPIO.setup(self.id, GPIO.OUT)
51             else:
52                 raise RuntimeError("Invalid mode for pin: %s" % self.id)
53         if pull != None:
54             if self._mode != self.IN:
55                 raise RuntimeError("Cannot set pull resistor on output")
56             if pull == self.PULL_UP:
57                 GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_UP)
58             elif pull == self.PULL_DOWN:
59                 GPIO.setup(self.id, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
60             else:
61                 raise RuntimeError("Invalid pull for pin: %s" % self.id)
62
63     def value(self, val=None):
64         if val != None:
65             if val == self.LOW:
66                 self._value = val
67                 GPIO.output(self.id, val)
68             elif val == self.HIGH:
69                 self._value = val
70                 GPIO.output(self.id, val)
71             else:
72                 raise RuntimeError("Invalid value for pin")
73         else:
74             return GPIO.input(self.id)
75
76     def cleanup(self, channel=None):
77         if channel is None:
78             GPIO.cleanup()
79         elif channel == self:
80             GPIO.cleanup(self.id)
81         else:
82             raise RuntimeError("Invalid pin to cleanup")
83
84 D1 = Pin(1)
85 D2 = Pin(2)
86 D3 = Pin(3)
87 SDA = Pin(3)
88 D4 = Pin(4)
89 D5 = Pin(5)
90 SCL = Pin(5)
91 D6 = Pin(6)
92 D7 = Pin(7)
93 D8 = Pin(8)
94 D9 = Pin(9)
95 D10 = Pin(10)
96 D11 = Pin(11)
97 D12 = Pin(12)
98 D13 = Pin(13)
99 D14 = Pin(14)
100 D15 = Pin(15)
101 D16 = Pin(16)
102 D17 = Pin(17)
103 D18 = Pin(18)
104 D19 = Pin(19)
105 D20 = Pin(20)
106 D21 = Pin(21)
107 D22 = Pin(22)
108 D23 = Pin(23)
109 D24 = Pin(24)
110 D25 = Pin(25)
111 D26 = Pin(26)
112 D27 = Pin(27)
113 SDA_1 = Pin(27)
114 D28 = Pin(28)
115 SCL_1 = Pin(28)
116 D29 = Pin(29)
117 D30 = Pin(30)
118 D31 = Pin(31)
119 D32 = Pin(32)
120 D33 = Pin(33)
121 D34 = Pin(34)
122 D35 = Pin(35)
123 D36 = Pin(36)
124 D37 = Pin(37)
125 D38 = Pin(38)
126 D39 = Pin(39)
127 D40 = Pin(40)
128
129 i2cPorts = (
130     (I2C_BUS, SCL, SDA), (I2C_BUS_1, SCL_1, SDA_1),
131 )
132