131 lines
4.0 KiB
Python
131 lines
4.0 KiB
Python
#! /usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""Part of the MIB export tools for the EIVE project by.
|
|
Returnvalue exporter.
|
|
"""
|
|
from pathlib import Path
|
|
|
|
from fsfwgen.logging import get_console_logger
|
|
from fsfwgen.utility.file_management import copy_file
|
|
from fsfwgen.parserbase.file_list_parser import FileListParser
|
|
from fsfwgen.returnvalues.returnvalues_parser import (
|
|
InterfaceParser,
|
|
ReturnValueParser,
|
|
RetvalDictT,
|
|
)
|
|
from fsfwgen.utility.sql_writer import SqlWriter
|
|
from fsfwgen.utility.printer import PrettyPrinter
|
|
|
|
from definitions import BspType, DATABASE_NAME, ROOT_DIR, OBSW_ROOT_DIR
|
|
|
|
LOGGER = get_console_logger()
|
|
EXPORT_TO_FILE = True
|
|
COPY_CSV_FILE = True
|
|
EXPORT_TO_SQL = True
|
|
PRINT_TABLES = True
|
|
|
|
|
|
FILE_SEPARATOR = ";"
|
|
MAX_STRING_LENGTH = 32
|
|
|
|
BSP_SELECT = BspType.BSP_Q7S
|
|
BSP_DIR_NAME = BSP_SELECT.value
|
|
CSV_RETVAL_FILENAME = Path(f"{ROOT_DIR}/{BSP_SELECT.value}_returnvalues.csv")
|
|
CSV_COPY_DEST = Path(f"{OBSW_ROOT_DIR}/tmtc/config/returnvalues.csv")
|
|
ADD_LINUX_FOLDER = False
|
|
|
|
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
|
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
|
|
ADD_LINUX_FOLDER = True
|
|
else:
|
|
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig"
|
|
BSP_PATH = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}"
|
|
|
|
INTERFACE_DEFINITION_FILES = [
|
|
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/returnvalues/FwClassIds.h",
|
|
f"{OBSW_ROOT_DIR}/common/config/eive/resultClassIds.h",
|
|
f"{FSFW_CONFIG_ROOT}/returnvalues/classIds.h",
|
|
]
|
|
RETURNVALUE_SOURCES = [
|
|
f"{OBSW_ROOT_DIR}/mission/",
|
|
f"{OBSW_ROOT_DIR}/fsfw/",
|
|
f"{BSP_PATH}",
|
|
]
|
|
RETVAL_SRCS_AS_PATH = [Path(x) for x in RETURNVALUE_SOURCES]
|
|
|
|
if ADD_LINUX_FOLDER:
|
|
RETURNVALUE_SOURCES.append(f"{OBSW_ROOT_DIR}/linux")
|
|
|
|
SQL_DELETE_RETURNVALUES_CMD = """
|
|
DROP TABLE IF EXISTS Returnvalues
|
|
"""
|
|
|
|
SQL_CREATE_RETURNVALUES_CMD = """
|
|
CREATE TABLE IF NOT EXISTS Returnvalues (
|
|
id INTEGER PRIMARY KEY,
|
|
code TEXT,
|
|
name TEXT,
|
|
interface TEXT,
|
|
file TEXT,
|
|
description TEXT
|
|
)
|
|
"""
|
|
|
|
SQL_INSERT_RETURNVALUES_CMD = """
|
|
INSERT INTO Returnvalues(code,name,interface,file,description)
|
|
VALUES(?,?,?,?,?)
|
|
"""
|
|
|
|
|
|
def parse_returnvalues():
|
|
returnvalue_table = generate_returnvalue_table()
|
|
if EXPORT_TO_FILE:
|
|
ReturnValueParser.export_to_csv(
|
|
CSV_RETVAL_FILENAME, returnvalue_table, FILE_SEPARATOR
|
|
)
|
|
if COPY_CSV_FILE:
|
|
copy_file(
|
|
filename=CSV_RETVAL_FILENAME,
|
|
destination=CSV_COPY_DEST,
|
|
delete_existing_file=True,
|
|
)
|
|
if EXPORT_TO_SQL:
|
|
LOGGER.info("ReturnvalueParser: Exporting to SQL")
|
|
sql_retval_exporter(
|
|
returnvalue_table, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}"
|
|
)
|
|
|
|
|
|
def generate_returnvalue_table():
|
|
"""Core function to parse for the return values"""
|
|
interface_parser = InterfaceParser(
|
|
file_list=INTERFACE_DEFINITION_FILES, print_table=PRINT_TABLES
|
|
)
|
|
interfaces = interface_parser.parse_files()
|
|
header_parser = FileListParser(RETVAL_SRCS_AS_PATH)
|
|
header_list = header_parser.parse_header_files(True, "Parsing header file list: ")
|
|
returnvalue_parser = ReturnValueParser(interfaces, header_list, PRINT_TABLES)
|
|
returnvalue_parser.obsw_root_path = OBSW_ROOT_DIR
|
|
returnvalue_parser.set_moving_window_mode(moving_window_size=7)
|
|
returnvalue_table = returnvalue_parser.parse_files(True)
|
|
LOGGER.info(f"ReturnvalueParser: Found {len(returnvalue_table)} returnvalues")
|
|
return returnvalue_table
|
|
|
|
|
|
def sql_retval_exporter(returnvalue_table: RetvalDictT, db_filename: str):
|
|
sql_writer = SqlWriter(db_filename=db_filename)
|
|
sql_writer.open(SQL_CREATE_RETURNVALUES_CMD)
|
|
for entry in returnvalue_table.items():
|
|
sql_writer.write_entries(
|
|
SQL_INSERT_RETURNVALUES_CMD,
|
|
(
|
|
entry[0],
|
|
entry[1].name,
|
|
entry[1].description,
|
|
entry[1].unique_id,
|
|
entry[1].subsystem_name,
|
|
),
|
|
)
|
|
sql_writer.commit()
|
|
sql_writer.close()
|