Format python

This commit is contained in:
Dario Nieuwenhuis 2021-05-06 02:37:31 +02:00
parent cfc4e2167e
commit d2a4cd6aca
3 changed files with 76 additions and 24 deletions

2
.pep8 Normal file
View File

@ -0,0 +1,2 @@
[pep8]
max_line_length = 255

16
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,16 @@
{
"rust-analyzer.assist.importMergeBehavior": "last",
"editor.formatOnSave": true,
"rust-analyzer.cargo.allFeatures": false,
"rust-analyzer.checkOnSave.allFeatures": false,
"rust-analyzer.checkOnSave.allTargets": false,
"rust-analyzer.cargo.target": "thumbv7em-none-eabihf",
"rust-analyzer.checkOnSave.target": "thumbv7em-none-eabihf",
"rust-analyzer.procMacro.enable": true,
"rust-analyzer.cargo.loadOutDirsFromCheck": true,
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/target/**": true
}
}

View File

@ -6,6 +6,7 @@ import os
from collections import OrderedDict
from glob import glob
def represent_ordereddict(dumper, data):
value = []
@ -16,14 +17,21 @@ def represent_ordereddict(dumper, data):
value.append((node_key, node_value))
return yaml.nodes.MappingNode(u'tag:yaml.org,2002:map', value)
yaml.add_representer(OrderedDict, represent_ordereddict)
def hexint_presenter(dumper, data):
if data > 0x10000:
return dumper.represent_int(hex(data))
else:
return dumper.represent_int(data)
yaml.add_representer(int, hexint_presenter)
def children(x, key):
r = x.get(key)
if r is None:
@ -32,6 +40,7 @@ def children(x, key):
return r
return [r]
headers_parsed = {}
header_map = {}
with open('header_map.yaml', 'r') as f:
@ -40,6 +49,7 @@ with open('header_map.yaml', 'r') as f:
for chip in chips.split(','):
header_map[chip.strip().lower()] = header.lower()
def find_header(model):
# for a, b in header_map:
# model = re.sub(a, b, model, flags=re.IGNORECASE)
@ -60,18 +70,25 @@ def find_header(model):
assert len(res) == 1
return res[0]
def paren_ok(val):
n = 0
for c in val:
if c == '(': n += 1
if c == ')': n -= 1
if n < 0: return False
if c == '(':
n += 1
if c == ')':
n -= 1
if n < 0:
return False
return n == 0
# warning: horrible abomination ahead
def parse_value(val, defines):
val = val.strip()
if val == '': return 0
if val == '':
return 0
if m := re.match('((0x[0-9a-fA-F]+|\\d+))(|u|ul|U|UL)$', val):
return int(m.group(1), 0)
if m := re.match('([0-9A-Za-z_]+)$', val):
@ -99,6 +116,7 @@ def parse_value(val, defines):
return parse_value(m.group(1), defines) - parse_value(m.group(2), defines)
raise Exception("can't parse: " + val)
def parse_header(f):
irqs = {}
defines = {}
@ -121,7 +139,8 @@ def parse_header(f):
name = m.group(1)
val = m.group(2)
name = name.strip()
if name == 'FLASH_SIZE': continue
if name == 'FLASH_SIZE':
continue
val = val.split('/*')[0].strip()
val = parse_value(val, defines)
defines[name] = val
@ -133,7 +152,8 @@ def parse_header(f):
def expand_name(name):
if '(' not in name: return [name]
if '(' not in name:
return [name]
prefix, suffix = name.split('(')
letters, suffix = suffix.split(')')
return [prefix + x + suffix for x in letters.split('-')]
@ -199,12 +219,14 @@ perimap = [
('STM32L4.*:SYS:.*', 'syscfg_l4/SYSCFG'),
]
def match_peri(peri):
for r, block in perimap:
if re.match(r, peri):
return block
return None
def parse_headers():
os.makedirs('sources/headers_parsed', exist_ok=True)
print('loading headers...')
@ -224,6 +246,7 @@ def parse_headers():
headers_parsed[ff] = res
def chip_name_from_package_name(x):
name_map = [
('(STM32L1....).x([AX])', '\\1-\\2'),
@ -244,13 +267,15 @@ def chip_name_from_package_name(x):
return r
raise Exception("bad name: {}".format(x))
def parse_chips():
os.makedirs('data/chips', exist_ok=True)
chips = {}
for f in sorted(glob('sources/cubedb/mcu/STM32*.xml')):
if 'STM32MP' in f: continue
if 'STM32MP' in f:
continue
print(f)
r = xmltodict.parse(open(f, 'rb'))['Mcu']
@ -258,8 +283,10 @@ def parse_chips():
package_names = expand_name(r['@RefName'])
package_rams = r['Ram']
package_flashs = r['Flash']
if type(package_rams) != list: package_rams = [package_rams]*len(package_names)
if type(package_flashs) != list: package_flashs = [package_flashs]*len(package_names)
if type(package_rams) != list:
package_rams = [package_rams]*len(package_names)
if type(package_flashs) != list:
package_flashs = [package_flashs]*len(package_names)
for package_i, package_name in enumerate(package_names):
chip_name = chip_name_from_package_name(package_name)
flash = int(package_flashs[package_i])
@ -294,8 +321,10 @@ def parse_chips():
pkind = ip['@Name']+':'+ip['@Version']
pkind = pkind.removesuffix('_Cube')
if pname == 'SYS': pname = 'SYSCFG'
if pname in FAKE_PERIPHERALS: continue
if pname == 'SYS':
pname = 'SYSCFG'
if pname in FAKE_PERIPHERALS:
continue
peris[pname] = pkind
for chip_name, chip in chips.items():
@ -309,7 +338,8 @@ def parse_chips():
peris = {}
for pname, pkind in chip['peripherals'].items():
addr = h['defines'].get(pname)
if addr is None: continue
if addr is None:
continue
p = OrderedDict({
'address': addr,
@ -346,10 +376,12 @@ def parse_chips():
with open('data/chips/'+chip_name+'.yaml', 'w') as f:
f.write(yaml.dump(chip))
def parse_gpio_af():
os.makedirs('data/gpio_af', exist_ok=True)
for f in glob('sources/cubedb/mcu/IP/GPIO-*_gpio_v1_0_Modes.xml'):
if 'STM32F1' in f: continue
if 'STM32F1' in f:
continue
ff = f.removeprefix('sources/cubedb/mcu/IP/GPIO-')
ff = ff.removesuffix('_gpio_v1_0_Modes.xml')
@ -362,7 +394,8 @@ def parse_gpio_af():
pin_name = pin['@Name']
# Blacklist non-pins
if pin_name == 'PDR_ON': continue
if pin_name == 'PDR_ON':
continue
# Cleanup pin name
pin_name = pin_name.split('/')[0]
@ -385,6 +418,7 @@ def parse_gpio_af():
with open('data/gpio_af/'+ff+'.yaml', 'w') as f:
f.write(yaml.dump(pins))
parse_gpio_af()
parse_headers()
parse_chips()