Skip to content

Commit

Permalink
:ports/psoc6: Remove csv file generation.
Browse files Browse the repository at this point in the history
Signed-off-by: IFX-Anusha <Anusha.TR@infineon.com>
  • Loading branch information
IFX-Anusha committed Aug 26, 2024
1 parent b47785a commit 074629f
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 75 deletions.
4 changes: 1 addition & 3 deletions ports/psoc6/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,13 @@ GEN_PINS_SRC := $(BUILD)/pins_$(BOARD).c
HEADER_BUILD := $(BUILD)/genhdr
GEN_PINS_HDR := $(BUILD)/genhdr/pins.h
GEN_PINS_QSTR := $(BUILD)/pins_qstr.h
BOARD_PINS := pins.csv
BOARD_AF_PINS := pins_details.csv

GENERATED_PINS = $(GEN_PINS_SRC) $(GEN_PINS_HDR) $(GEN_PINS_QSTR)

$(GENERATED_PINS):
@echo "Generating $@"
$(MKDIR) -p $(BUILD)/genhdr
$(PYTHON) boards/make-pins.py --gen-pin-for $(PIN_PACKAGE_FILE) --save-pins-csv-at $(BOARD_PINS) --save-pins-details-csv-at $(BOARD_AF_PINS) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) > $(GEN_PINS_SRC)
$(PYTHON) boards/make-pins.py --gen-pin-for $(PIN_PACKAGE_FILE) --hdr $(GEN_PINS_HDR) --qstr $(GEN_PINS_QSTR) > $(GEN_PINS_SRC)
rm -rf $(BOARD_PINS) $(BOARD_AF_PINS)

# Flags for optional C++ source code
Expand Down
126 changes: 54 additions & 72 deletions ports/psoc6/boards/make-pins.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,28 @@ def name(self):
return self._name


class PinsTable(object):
def __init__(self):
self.pins = []

def add_pin(self, pin_name, pin_addr):
self.pins.append([pin_name, pin_addr])

def get_pins(self):
return self.pins


class PinsDetailsTable(object):
def __init__(self):
self.pins_details = []

def add_pin_details(self, pin_name, pin_addr, pin_exp):
self.pins_details.append([pin_name, pin_addr, pin_exp])

def get_pins_details(self):
return self.pins_details


class Pin(object):
def __init__(self, name, pin_addr, pin_exp):
self._name = name
Expand Down Expand Up @@ -90,33 +112,22 @@ def print_const_table(self):
pin.print_const_table_entry()
print("};")

def parse_pin_details_file(self):
with open("./pins_details.csv", "r") as csvfile:
rows = csv.reader(csvfile)
for row in rows:
try:
pin_name = row[0]
pin_addr = row[1]
pin_exp = row[2].strip('"')
except:
continue
pin = Pin(pin_name, pin_addr, pin_exp)
self.cpu_pins.append(NamedPin(pin_name, pin))

def parse_board_file(self):
# Assuming the same path has required board files
with open("./pins.csv", "r") as csvfile:
rows = csv.reader(csvfile)
for row in rows:
try:
board_pin_name = row[0]
cpu_pin_name = row[1]
except:
continue
pin = self.find_pin(cpu_pin_name)
if pin:
pin.set_is_board_pin()
self.board_pins.append(NamedPin(board_pin_name, pin))
def parse_pin_details_file(self, pins_details_table):
for pin in pins_details_table.get_pins_details():
pin_name = pin[0]
pin_addr = pin[1]
pin_exp = pin[2].strip('"')
pin = Pin(pin_name, pin_addr, pin_exp)
self.cpu_pins.append(NamedPin(pin_name, pin))

def parse_board_file(self, pins_table):
for pin in pins_table.get_pins():
board_pin_name = pin[0]
cpu_pin_name = pin[1]
pin = self.find_pin(cpu_pin_name)
if pin:
pin.set_is_board_pin()
self.board_pins.append(NamedPin(board_pin_name, pin))

def print_named(self, label, named_pins):
print(
Expand Down Expand Up @@ -158,7 +169,6 @@ def print_qstr(self, qstr_filename):
for named_pin in self.board_pins:
qstr_set |= set([named_pin.name()])
for qstr in sorted(qstr_set):
# cond_var = None
print("Q({})".format(qstr), file=qstr_file)

def get_pin_addr_helper(self, pin_def):
Expand All @@ -180,50 +190,36 @@ def get_pin_package_path(self, filename):
return file_path
return None

def generate_pins_csv(
self, pin_package_filename, pins_csv_filename, pins_details_csv_filename
):
file_path = self.get_pin_package_path(pin_package_filename)
def generate_pins_table(self, pin_pacakge_file_name):
file_path = self.get_pin_package_path(pin_pacakge_file_name)

if file_path is None:
sys.exit(1)

# Read the header file
with open(file_path, "r") as file:
content = file.read()

# Find the starting and ending points of the enum declaration
enum_start = content.find("typedef enum {")
enum_end = content.find("}")

if enum_start != -1 and enum_end != -1:
enum_content = content[enum_start:enum_end]

# Extract enum values using regex
enum_values = re.findall(r"\b(\w+)\s*=", enum_content)
pin_name = re.findall(r"\b(?!NC\b)(\w+)\s*=", enum_content)
pin_defs = re.findall(r"=\s*(.*?\))", enum_content)

# Write enum values to a CSV file
with open("./" + pins_csv_filename, "w", newline="") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerows(
[
[value, value]
for value in enum_values
if value.startswith("P") or value.startswith("N")
]
)
pins_table = PinsTable()
pins_details_table = PinsDetailsTable()

with open("./" + pins_details_csv_filename, "w", newline="") as csv_file:
NC_pin = ["NC", 255, "CYHAL_GET_GPIO(CYHAL_PORT_31, 7)"] # non-existent port
csv_writer = csv.writer(csv_file)
csv_writer.writerow(NC_pin)
for pname, pdef in zip(pin_name, pin_defs):
val = self.get_pin_addr_helper(pdef)
csv_writer.writerow([pname, val, pdef.strip('"')])
for value in enum_values:
if value.startswith("P") or value.startswith("N"):
pins_table.add_pin(value, value)

print("// pins.csv and pins_details.csv generated successfully")
pins_details_table.add_pin_details("NC", 255, "CYHAL_GET_GPIO(CYHAL_PORT_31, 7)")
for pname, pdef in zip(pin_name, pin_defs):
val = self.get_pin_addr_helper(pdef)
pins_details_table.add_pin_details(pname, val, pdef.strip('"'))
return pins_table, pins_details_table
else:
print("// Error: pins.csv and pins_details.csv generation failed")

Expand All @@ -242,20 +238,6 @@ def main():
help="Specifies the pin package file from mtb assets to generate pins.csv",
)

parser.add_argument(
"-p",
"--save-pins-csv-at",
dest="pins_csv",
help="Specifies name of generated pins csv file",
)

parser.add_argument(
"-gaf",
"--save-pins-details-csv-at",
dest="pins_details_csv",
help="Specifies name of generated pins details csv file",
)

parser.add_argument(
"-q",
"--qstr",
Expand All @@ -274,15 +256,15 @@ def main():

pins = Pins()

if args.pin_package_filename and args.pins_csv and args.pins_details_csv:
if args.pin_package_filename:
print("// Generating pins csv file")
print("// - --gen-pin-for {:s}".format(args.pin_package_filename))
pins.generate_pins_csv(args.pin_package_filename, args.pins_csv, args.pins_details_csv)
pins_table, pins_details_table = pins.generate_pins_table(args.pin_package_filename)

pins.parse_pin_details_file()
pins.parse_pin_details_file(pins_details_table)

if args.hdr_filename and args.qstr_filename:
pins.parse_board_file()
pins.parse_board_file(pins_table)
pins.update_num_cpu_pins()
pins.print_const_table()
pins.print()
Expand Down

0 comments on commit 074629f

Please sign in to comment.