1# Print a nice list of pins, their current settings, and available afs.
2# Requires pins_af.py from ports/stm32/build-PYBV10/ directory.
3
4import pyb
5import pins_af
6
7
8def af():
9    max_name_width = 0
10    max_af_width = 0
11    for pin_entry in pins_af.PINS_AF:
12        max_name_width = max(max_name_width, len(pin_entry[0]))
13        for af_entry in pin_entry[1:]:
14            max_af_width = max(max_af_width, len(af_entry[1]))
15    for pin_entry in pins_af.PINS_AF:
16        pin_name = pin_entry[0]
17        print("%-*s " % (max_name_width, pin_name), end="")
18        for af_entry in pin_entry[1:]:
19            print("%2d: %-*s " % (af_entry[0], max_af_width, af_entry[1]), end="")
20        print("")
21
22
23def pins():
24    mode_str = {
25        pyb.Pin.IN: "IN",
26        pyb.Pin.OUT_PP: "OUT_PP",
27        pyb.Pin.OUT_OD: "OUT_OD",
28        pyb.Pin.AF_PP: "AF_PP",
29        pyb.Pin.AF_OD: "AF_OD",
30        pyb.Pin.ANALOG: "ANALOG",
31    }
32    pull_str = {pyb.Pin.PULL_NONE: "", pyb.Pin.PULL_UP: "PULL_UP", pyb.Pin.PULL_DOWN: "PULL_DOWN"}
33    width = [0, 0, 0, 0]
34    rows = []
35    for pin_entry in pins_af.PINS_AF:
36        row = []
37        pin_name = pin_entry[0]
38        pin = pyb.Pin(pin_name)
39        pin_mode = pin.mode()
40        row.append(pin_name)
41        row.append(mode_str[pin_mode])
42        row.append(pull_str[pin.pull()])
43        if pin_mode == pyb.Pin.AF_PP or pin_mode == pyb.Pin.AF_OD:
44            pin_af = pin.af()
45            for af_entry in pin_entry[1:]:
46                if pin_af == af_entry[0]:
47                    af_str = "%d: %s" % (pin_af, af_entry[1])
48                    break
49            else:
50                af_str = "%d" % pin_af
51        else:
52            af_str = ""
53        row.append(af_str)
54        for col in range(len(width)):
55            width[col] = max(width[col], len(row[col]))
56        rows.append(row)
57    for row in rows:
58        for col in range(len(width)):
59            print("%-*s " % (width[col], row[col]), end="")
60        print("")
61