2023-02-09 15:02:52 +01:00
|
|
|
import logging
|
2021-06-08 12:37:10 +02:00
|
|
|
import re
|
2022-06-20 18:02:46 +02:00
|
|
|
from pathlib import Path
|
|
|
|
from typing import List
|
2021-06-08 12:37:10 +02:00
|
|
|
|
2021-06-08 17:10:24 +02:00
|
|
|
from fsfwgen.parserbase.parser import FileParser
|
|
|
|
from fsfwgen.utility.sql_writer import SqlWriter
|
2021-06-08 12:37:10 +02:00
|
|
|
|
|
|
|
|
2023-02-09 15:02:52 +01:00
|
|
|
_LOGGER = logging.getLogger(__name__)
|
2021-07-31 20:49:38 +02:00
|
|
|
|
|
|
|
|
2021-06-08 12:37:10 +02:00
|
|
|
class ObjectDefinitionParser(FileParser):
|
2022-06-20 18:02:46 +02:00
|
|
|
def __init__(self, file_list: List[Path]):
|
2021-06-08 12:37:10 +02:00
|
|
|
super().__init__(file_list)
|
|
|
|
|
2022-06-20 18:02:46 +02:00
|
|
|
def _handle_file_parsing(self, file_name: Path, *args, **kwargs):
|
2021-06-08 12:37:10 +02:00
|
|
|
file = open(file_name, "r", encoding="utf-8")
|
|
|
|
for line in file.readlines():
|
2022-02-26 13:16:09 +01:00
|
|
|
match = re.search(r"([\w]*)[\s]*=[\s]*(0[xX][0-9a-fA-F]+)", line)
|
2021-06-08 12:37:10 +02:00
|
|
|
if match:
|
|
|
|
self.mib_table.update({match.group(2): [match.group(1)]})
|
|
|
|
|
2021-07-29 12:55:05 +02:00
|
|
|
def _handle_file_parsing_moving_window(
|
2022-02-26 13:16:09 +01:00
|
|
|
self,
|
2022-06-20 18:02:46 +02:00
|
|
|
file_name: Path,
|
2022-02-26 13:16:09 +01:00
|
|
|
current_line: int,
|
|
|
|
moving_window_size: int,
|
|
|
|
moving_window: list,
|
|
|
|
*args,
|
|
|
|
**kwargs,
|
2021-07-29 12:55:05 +02:00
|
|
|
):
|
2021-06-08 12:37:10 +02:00
|
|
|
pass
|
|
|
|
|
|
|
|
def _post_parsing_operation(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def export_object_file(filename, object_list, file_separator: str = ","):
|
|
|
|
file = open(filename, "w")
|
|
|
|
for entry in object_list:
|
2022-02-26 13:16:09 +01:00
|
|
|
file.write(str(entry[0]) + file_separator + entry[1][0] + "\n")
|
2021-06-08 12:37:10 +02:00
|
|
|
file.close()
|
|
|
|
|
|
|
|
|
|
|
|
def write_translation_file(filename: str, list_of_entries, date_string_full: str):
|
2022-06-21 00:57:01 +02:00
|
|
|
with open(filename, "w") as out:
|
2023-02-09 15:02:52 +01:00
|
|
|
_LOGGER.info("ObjectParser: Writing translation file " + filename)
|
2022-06-21 00:57:01 +02:00
|
|
|
definitions = ""
|
|
|
|
function = (
|
|
|
|
"const char *translateObject(object_id_t object) "
|
|
|
|
"{\n switch ((object & 0xFFFFFFFF)) {\n"
|
|
|
|
)
|
|
|
|
for entry in list_of_entries:
|
|
|
|
# first part of translate file
|
|
|
|
definitions += f'const char *{entry[1][0]}_STRING = "{entry[1][0]}";\n'
|
|
|
|
# second part of translate file. entry[i] contains 32 bit hexadecimal numbers
|
|
|
|
function += f" case {entry[0]}:\n return {entry[1][0]}_STRING;\n"
|
|
|
|
function += ' default:\n return "UNKNOWN_OBJECT";\n }\n'
|
|
|
|
out.write(
|
|
|
|
f"/**\n * @brief Auto-generated object translation file.\n"
|
|
|
|
f" * @details\n"
|
|
|
|
f" * Contains {len(list_of_entries)} translations.\n"
|
|
|
|
f" * Generated on: {date_string_full}\n */\n"
|
|
|
|
)
|
|
|
|
out.write('#include "translateObjects.h"\n\n')
|
|
|
|
out.write(definitions + "\n" + function + " return 0;\n}\n")
|
2021-06-08 12:37:10 +02:00
|
|
|
|
|
|
|
|
|
|
|
def write_translation_header_file(filename: str = "translateObjects.h"):
|
|
|
|
file = open(filename, "w")
|
|
|
|
file.write(
|
|
|
|
f"#ifndef FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_\n"
|
|
|
|
f"#define FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_\n\n"
|
|
|
|
f"#include <fsfw/objectmanager/SystemObjectIF.h>\n\n"
|
2022-02-26 14:07:14 +01:00
|
|
|
f"const char *translateObject(object_id_t object);\n\n"
|
2021-06-08 12:37:10 +02:00
|
|
|
f"#endif /* FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ */\n"
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def sql_object_exporter(
|
2022-02-26 13:16:09 +01:00
|
|
|
object_table: list,
|
|
|
|
db_filename: str,
|
|
|
|
delete_cmd: str,
|
|
|
|
create_cmd: str,
|
|
|
|
insert_cmd: str,
|
2021-06-08 12:37:10 +02:00
|
|
|
):
|
|
|
|
sql_writer = SqlWriter(db_filename=db_filename)
|
|
|
|
sql_writer.delete(delete_cmd)
|
|
|
|
sql_writer.open(create_cmd)
|
|
|
|
for entry in object_table:
|
2022-02-26 13:16:09 +01:00
|
|
|
sql_writer.write_entries(insert_cmd, (entry[0], entry[1][0]))
|
2021-06-08 12:37:10 +02:00
|
|
|
sql_writer.commit()
|
|
|
|
sql_writer.close()
|