RMUL2025/lib/cmsis_svd/data/STMicro/fill_contents.py

45 lines
1.4 KiB
Python

import sqlite3
import re
import os
from collections import OrderedDict
svd_path = os.path.dirname(__file__)
# Put database file in the same folder and provide name here
db_path = svd_path + "/cube-finder-db.db"
# Table containing part numbers
pn_table = "cpn"
# Column containing part numbers
pn_column = "cpn"
def regexp(expr, item):
reg = re.compile(expr)
return reg.search(item) is not None
files = os.listdir(svd_path)
regexes = OrderedDict()
for file in files:
if file[-4:] == ".svd":
name=file[0:-4]
if (name.find("_") != -1):
name = name[0:name.find("_")]
# exclude DISCOVERY since otherwise some part numbers match with regular expression
regexes[file] = "^(?=^" + name.replace("x","[A-Z0-9]") + "[A-Z0-9]*$)(?=^((?!DISCOVERY).)*$).*$"
regexes = OrderedDict(sorted(regexes.items(), key=lambda item: item[1]))
con = sqlite3.connect(db_path)
con.create_function("REGEXP", 2, regexp)
cursor = con.cursor()
contents = [];
for file, regex in regexes.items():
res = str(cursor.execute("SELECT GROUP_CONCAT(mcus,', ') FROM (SELECT DISTINCT SUBSTRING(cpn, 1, 11) as mcus FROM (SELECT " + pn_column + " FROM " + pn_table + " WHERE " + pn_column + " REGEXP '" + regex + "'))").fetchone())
if res == "(None,)":
contents.append(file)
else:
contents.append(res[2:-3] + ", " + file)
with open(svd_path + '/Contents.txt', 'w') as f:
for line in contents:
f.write(f"{line}\n")
con.close()