1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/env python
- '''
- create alternate function tables
- This assumes a csv file extracted from the datasheet using tablula:
- https://github.com/tabulapdf/tabula
- '''
- import sys, csv, os
- def is_pin(str):
- '''see if a string is a valid pin name'''
- if len(str) < 3:
- return False
- if str[0] != 'P':
- return False
- if str[1] not in "ABCDEFGHIJK":
- return False
- try:
- p = int(str[2:])
- if p < 0 or p > 15:
- return False
- return True
- except ValueError:
- return False
- def pin_compare(p1, p2):
- '''control pin sort order'''
- (p1,f1) = p1.split(':')
- (p2,f2) = p2.split(':')
- port1 = p1[:2]
- port2 = p2[:2]
- pin1 = int(p1[2:])
- pin2 = int(p2[2:])
- #print(port1, pin1, port2, pin2)
- if port1 == port2:
- if pin1 == pin2:
- if f1 < f2:
- return -1
- return 1
- if pin1 < pin2:
- return -1
- return 1
- if port1 < port2:
- return -1
- return 1
- def parse_af_table(fname, table):
- csvt = csv.reader(open(fname,'rb'))
- i = 0
- aflist = []
- for row in csvt:
- if len(row) > 2 and row[1] == 'AF0':
- # it is a AF list
- aflist = []
- for s in row[1:]:
- if s:
- aflist.append(int(s[2:]))
- if not is_pin(row[0]):
- if len(row) < 2 or not is_pin(row[1]):
- continue
- row = row[1:]
- pin = row[0]
- for i in range(len(aflist)):
- af = aflist[i]
- s = row[i+1]
- s = s.replace('_\r', '_')
- s = s.replace('\r_', '_')
- s = s.replace('\r', '')
- s = s.replace(' ', '')
- if s == '-' or len(s) == 0:
- continue
- functions = s.split('/')
- for f in functions:
- table[pin+':'+f.upper()] = af
- table = {}
- if len(sys.argv) != 2:
- print("Error: expected 1 CSV file")
- sys.exit(1)
- parse_af_table(sys.argv[1], table)
- sys.stdout.write("AltFunction_map = {\n");
- sys.stdout.write('\t# format is PIN:FUNCTION : AFNUM\n')
- sys.stdout.write('\t# extracted from %s\n' % os.path.basename(sys.argv[1]))
- for k in sorted(table.keys(), cmp=pin_compare):
- s = '"' + k + '"'
- sys.stdout.write('\t%-20s\t:\t%s,\n' % (s, table[k]))
- sys.stdout.write("}\n");
|