Skip to content

Commit d9ec625

Browse files
committed
Merge pull request adafruit#454 from dhylands/make-pins-multiple-named-pins
Fix make-pins.py to support having multiple names for a pin.
2 parents 2ee7304 + 3bbceea commit d9ec625

1 file changed

Lines changed: 47 additions & 28 deletions

File tree

stmhal/boards/make-pins.py

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,23 @@ def __init__(self, port, pin):
9292
self.port = port
9393
self.pin = pin
9494
self.alt_fn = []
95-
self.board_name = None
9695
self.alt_fn_count = 0
9796
self.adc_num = 0
9897
self.adc_channel = 0
98+
self.board_pin = False
9999

100100
def port_letter(self):
101101
return chr(self.port + ord('A'))
102102

103-
def pin_name(self):
103+
def cpu_pin_name(self):
104104
return '{:s}{:d}'.format(self.port_letter(), self.pin)
105105

106+
def is_board_pin(self):
107+
return self.board_pin
108+
109+
def set_is_board_pin(self):
110+
self.board_pin = True
111+
106112
def parse_adc(self, adc_str):
107113
if (adc_str[:3] != 'ADC'):
108114
return
@@ -127,7 +133,7 @@ def parse_af(self, af_idx, af_strs_in):
127133
def alt_fn_name(self, null_if_0=False):
128134
if null_if_0 and self.alt_fn_count == 0:
129135
return 'NULL'
130-
return 'pin_{:s}_af'.format(self.pin_name())
136+
return 'pin_{:s}_af'.format(self.cpu_pin_name())
131137

132138
def adc_num_str(self):
133139
str = ''
@@ -152,27 +158,40 @@ def print(self):
152158
print('};')
153159
print('')
154160
print('const pin_obj_t pin_{:s} = PIN({:s}, {:d}, {:d}, {:s}, {:s}, {:d});'.format(
155-
self.pin_name(), self.port_letter(), self.pin,
161+
self.cpu_pin_name(), self.port_letter(), self.pin,
156162
self.alt_fn_count, self.alt_fn_name(null_if_0=True),
157163
self.adc_num_str(), self.adc_channel))
158164
print('')
159165

160166
def print_header(self, hdr_file):
161167
hdr_file.write('extern const pin_obj_t pin_{:s};\n'.
162-
format(self.pin_name()))
168+
format(self.cpu_pin_name()))
163169
if self.alt_fn_count > 0:
164170
hdr_file.write('extern const pin_af_obj_t pin_{:s}_af[];\n'.
165-
format(self.pin_name()))
171+
format(self.cpu_pin_name()))
172+
173+
class NamedPin(object):
174+
175+
def __init__(self, name, pin):
176+
self._name = name
177+
self._pin = pin
178+
179+
def pin(self):
180+
return self._pin
181+
182+
def name(self):
183+
return self._name
166184

167185

168186
class Pins(object):
169187

170188
def __init__(self):
171-
self.pins = []
172-
self.board_pins = []
189+
self.cpu_pins = [] # list of NamedPin objects
190+
self.board_pins = [] # list of NamedPin objects
173191

174192
def find_pin(self, port_num, pin_num):
175-
for pin in self.pins:
193+
for named_pin in self.cpu_pins:
194+
pin = named_pin.pin()
176195
if pin.port == port_num and pin.pin == pin_num:
177196
return pin
178197

@@ -190,7 +209,7 @@ def parse_af_file(self, filename, pinname_col, af_col):
190209
pin.parse_af(af_idx - af_col, row[af_idx])
191210
elif af_idx == af_col + 16:
192211
pin.parse_adc(row[af_idx])
193-
self.pins.append(pin)
212+
self.cpu_pins.append(NamedPin(pin.cpu_pin_name(), pin))
194213

195214
def parse_board_file(self, filename):
196215
with open(filename, 'r') as csvfile:
@@ -202,26 +221,24 @@ def parse_board_file(self, filename):
202221
continue
203222
pin = self.find_pin(port_num, pin_num)
204223
if pin:
205-
pin.board_name = row[0]
206-
self.board_pins.append(pin)
224+
pin.set_is_board_pin()
225+
self.board_pins.append(NamedPin(row[0], pin))
207226

208-
def print_named(self, label, pins):
227+
def print_named(self, label, named_pins):
209228
print('const pin_named_pin_t pin_{:s}_pins[] = {{'.format(label))
210-
for pin in pins:
211-
if pin.board_name:
212-
if label == 'board':
213-
pin_name = pin.board_name
214-
else:
215-
pin_name = pin.pin_name()
216-
print(' {{ "{:s}", &pin_{:s} }},'.format(pin_name, pin.pin_name()))
229+
for named_pin in named_pins:
230+
pin = named_pin.pin()
231+
if pin.is_board_pin():
232+
print(' {{ "{:s}", &pin_{:s} }},'.format(named_pin.name(), pin.cpu_pin_name()))
217233
print(' { NULL, NULL }')
218234
print('};')
219235

220236
def print(self):
221-
for pin in self.pins:
222-
if pin.board_name:
237+
for named_pin in self.cpu_pins:
238+
pin = named_pin.pin()
239+
if pin.is_board_pin():
223240
pin.print()
224-
self.print_named('cpu', self.pins)
241+
self.print_named('cpu', self.cpu_pins)
225242
print('')
226243
self.print_named('board', self.board_pins)
227244

@@ -230,10 +247,11 @@ def print_adc(self, adc_num):
230247
print('const pin_obj_t * const pin_adc{:d}[] = {{'.format(adc_num))
231248
for channel in range(16):
232249
adc_found = False
233-
for pin in self.pins:
234-
if (pin.board_name and
250+
for named_pin in self.cpu_pins:
251+
pin = named_pin.pin()
252+
if (pin.is_board_pin() and
235253
(pin.adc_num & (1 << (adc_num - 1))) and (pin.adc_channel == channel)):
236-
print(' &pin_{:s}, // {:d}'.format(pin.pin_name(), channel))
254+
print(' &pin_{:s}, // {:d}'.format(pin.cpu_pin_name(), channel))
237255
adc_found = True
238256
break
239257
if not adc_found:
@@ -243,8 +261,9 @@ def print_adc(self, adc_num):
243261

244262
def print_header(self, hdr_filename):
245263
with open(hdr_filename, 'wt') as hdr_file:
246-
for pin in self.pins:
247-
if pin.board_name:
264+
for named_pin in self.cpu_pins:
265+
pin = named_pin.pin()
266+
if pin.is_board_pin():
248267
pin.print_header(hdr_file)
249268
hdr_file.write('extern const pin_obj_t * const pin_adc1[];\n')
250269
hdr_file.write('extern const pin_obj_t * const pin_adc2[];\n')

0 commit comments

Comments
 (0)