eive-obsw/generators/objects/objects.py
Robin Mueller 417969fcec
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
always generate host files now as well
2023-02-09 15:58:41 +01:00

141 lines
4.4 KiB
Python

"""Part of the Mission Information Base Exporter for the SOURCE project by KSat.
Object exporter.
"""
import datetime
import logging
import os
from pathlib import Path
from fsfwgen.objects.objects import (
sql_object_exporter,
ObjectDefinitionParser,
write_translation_file,
export_object_file,
write_translation_header_file,
)
from fsfwgen.utility.printer import PrettyPrinter
from fsfwgen.utility.file_management import copy_file
from definitions import BspType, DATABASE_NAME, OBSW_ROOT_DIR, ROOT_DIR
_LOGGER = logging.getLogger(__name__)
DATE_TODAY = datetime.datetime.now()
DATE_STRING_FULL = DATE_TODAY.strftime("%Y-%m-%d %H:%M:%S")
GENERATE_CSV = True
MOVE_CSV = True
GENERATE_CPP = True
COPY_CPP = True
GENERATE_HEADER = True
PRINT_OBJECTS = False
class BspConfig:
def __init__(self, bsp_select: BspType):
self.bsp_select = bsp_select
self.bsp_dir_name = bsp_select.value
if (
self.bsp_select == BspType.BSP_Q7S
or self.bsp_select == BspType.BSP_LINUX_BOARD
):
self.fsfw_config_root = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
else:
self.fsfw_config_root = f"{OBSW_ROOT_DIR}/{self.bsp_dir_name}/fsfwconfig"
self.cpp_copy_dest = Path(f"{self.fsfw_config_root}/objects/")
self.csv_obj_filename = f"{ROOT_DIR}/{self.bsp_dir_name}_objects.csv"
self.objects_path = Path(f"{self.fsfw_config_root}/objects/systemObjectList.h")
self.objects_defs = [
self.objects_path,
FRAMEWORK_OBJECT_PATH,
COMMON_OBJECTS_PATH,
]
EXPORT_TO_SQL = True
CPP_FILENAME = f"{os.path.dirname(os.path.realpath(__file__))}//translateObjects.cpp"
CPP_H_FILENAME = f"{os.path.dirname(os.path.realpath(__file__))}//translateObjects.h"
CSV_COPY_DEST = f"{OBSW_ROOT_DIR}/tmtc/eive_tmtc/config/objects.csv"
FILE_SEPARATOR = ";"
FRAMEWORK_OBJECT_PATH = Path(
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/objectmanager/frameworkObjects.h"
)
COMMON_OBJECTS_PATH = Path(f"{OBSW_ROOT_DIR}/common/config/eive/objects.h")
SQL_DELETE_OBJECTS_CMD = """
DROP TABLE IF EXISTS Objects
"""
SQL_CREATE_OBJECTS_CMD = """
CREATE TABLE IF NOT EXISTS Objects(
id INTEGER PRIMARY KEY,
objectid TEXT,
name TEXT
)
"""
SQL_INSERT_INTO_OBJECTS_CMD = """
INSERT INTO Objects(objectid, name)
VALUES(?,?)
"""
def parse_objects(bsp_select: BspType, copy_to_eive_tmtc: bool):
cfg = BspConfig(bsp_select)
# fetch objects
object_parser = ObjectDefinitionParser(cfg.objects_defs)
subsystem_definitions = object_parser.parse_files()
# id_subsystem_definitions.update(framework_subsystem_definitions)
list_items = sorted(subsystem_definitions.items())
_LOGGER.info(f"ObjectParser: Number of objects: {len(list_items)}")
if PRINT_OBJECTS:
PrettyPrinter.pprint(list_items)
handle_file_export(cfg, list_items, copy_to_eive_tmtc)
if EXPORT_TO_SQL:
_LOGGER.info("ObjectParser: Exporting to SQL")
sql_object_exporter(
object_table=list_items,
delete_cmd=SQL_DELETE_OBJECTS_CMD,
insert_cmd=SQL_INSERT_INTO_OBJECTS_CMD,
create_cmd=SQL_CREATE_OBJECTS_CMD,
db_filename=f"{ROOT_DIR}/{DATABASE_NAME}",
)
def handle_file_export(cfg: BspConfig, list_items, copy_to_eive_tmtc: bool):
if GENERATE_CPP:
_LOGGER.info("ObjectParser: Generating C++ translation file")
write_translation_file(
filename=CPP_FILENAME,
list_of_entries=list_items,
date_string_full=DATE_STRING_FULL,
)
if COPY_CPP:
_LOGGER.info(
"ObjectParser: Copying object file to " + str(cfg.cpp_copy_dest)
)
copy_file(Path(CPP_FILENAME), cfg.cpp_copy_dest)
if GENERATE_HEADER:
write_translation_header_file(filename=CPP_H_FILENAME)
copy_file(filename=Path(CPP_H_FILENAME), destination=cfg.cpp_copy_dest)
if GENERATE_CSV:
_LOGGER.info("ObjectParser: Generating text export")
export_object_file(
filename=cfg.csv_obj_filename,
object_list=list_items,
file_separator=FILE_SEPARATOR,
)
if copy_to_eive_tmtc:
_LOGGER.info(f"ObjectParser: Copying CSV file to {CSV_COPY_DEST}")
copy_file(
filename=Path(cfg.csv_obj_filename),
destination=Path(CSV_COPY_DEST),
delete_existing_file=True,
)