From d9f749e1349cf57a821cf247015e0d68403652ae Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 28 May 2021 18:13:18 +0200 Subject: [PATCH] object translation for hosted builds --- .../fsfwconfig/objects/translateObjects.cpp | 127 +++++++++ .../fsfwconfig/objects/translateObjects.h | 8 + .../fsfwconfig/objects/translateObjects.cpp | 127 +++++++++ .../fsfwconfig/objects/translateObjects.h | 8 + generators/archive/MIB_CppWriter.py | 0 generators/archive/mib_events_old.py | 215 -------------- generators/archive/mib_returnvalues_old.py | 269 ------------------ generators/definitions.py | 2 + generators/mod_exporter.py | 2 +- generators/modgen | 2 +- generators/objects/mib_objects.py | 150 ---------- generators/objects/objects.py | 109 +++++++ generators/objects/translateObjects.cpp | 199 +++++++------ generators/objects/translateObjects.h | 8 + 14 files changed, 496 insertions(+), 730 deletions(-) create mode 100644 bsp_hosted/fsfwconfig/objects/translateObjects.cpp create mode 100644 bsp_hosted/fsfwconfig/objects/translateObjects.h create mode 100644 bsp_linux/fsfwconfig/objects/translateObjects.cpp create mode 100644 bsp_linux/fsfwconfig/objects/translateObjects.h delete mode 100644 generators/archive/MIB_CppWriter.py delete mode 100644 generators/archive/mib_events_old.py delete mode 100644 generators/archive/mib_returnvalues_old.py delete mode 100644 generators/objects/mib_objects.py create mode 100644 generators/objects/objects.py create mode 100644 generators/objects/translateObjects.h diff --git a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp new file mode 100644 index 0000000..d9c242e --- /dev/null +++ b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp @@ -0,0 +1,127 @@ +/** + * @brief Auto-generated object translation file. + * @details + * Contains 37 translations. + * Generated on: 2021-05-28 18:12:56 + */ +#include "translateObjects.h" + +const char *TEST_ASSEMBLY_STRING = "TEST_ASSEMBLY"; +const char *TEST_CONTROLLER_STRING = "TEST_CONTROLLER"; +const char *TEST_DEVICE_HANDLER_0_STRING = "TEST_DEVICE_HANDLER_0"; +const char *TEST_DEVICE_HANDLER_1_STRING = "TEST_DEVICE_HANDLER_1"; +const char *TEST_ECHO_COM_IF_STRING = "TEST_ECHO_COM_IF"; +const char *FSFW_OBJECTS_START_STRING = "FSFW_OBJECTS_START"; +const char *PUS_SERVICE_1_VERIFICATION_STRING = "PUS_SERVICE_1_VERIFICATION"; +const char *PUS_SERVICE_2_DEVICE_ACCESS_STRING = "PUS_SERVICE_2_DEVICE_ACCESS"; +const char *PUS_SERVICE_3_HOUSEKEEPING_STRING = "PUS_SERVICE_3_HOUSEKEEPING"; +const char *PUS_SERVICE_5_EVENT_REPORTING_STRING = "PUS_SERVICE_5_EVENT_REPORTING"; +const char *PUS_SERVICE_8_FUNCTION_MGMT_STRING = "PUS_SERVICE_8_FUNCTION_MGMT"; +const char *PUS_SERVICE_9_TIME_MGMT_STRING = "PUS_SERVICE_9_TIME_MGMT"; +const char *PUS_SERVICE_17_TEST_STRING = "PUS_SERVICE_17_TEST"; +const char *PUS_SERVICE_20_PARAMETERS_STRING = "PUS_SERVICE_20_PARAMETERS"; +const char *PUS_SERVICE_200_MODE_MGMT_STRING = "PUS_SERVICE_200_MODE_MGMT"; +const char *PUS_SERVICE_201_HEALTH_STRING = "PUS_SERVICE_201_HEALTH"; +const char *HEALTH_TABLE_STRING = "HEALTH_TABLE"; +const char *MODE_STORE_STRING = "MODE_STORE"; +const char *EVENT_MANAGER_STRING = "EVENT_MANAGER"; +const char *INTERNAL_ERROR_REPORTER_STRING = "INTERNAL_ERROR_REPORTER"; +const char *TC_STORE_STRING = "TC_STORE"; +const char *TM_STORE_STRING = "TM_STORE"; +const char *IPC_STORE_STRING = "IPC_STORE"; +const char *TIME_STAMPER_STRING = "TIME_STAMPER"; +const char *FSFW_OBJECTS_END_STRING = "FSFW_OBJECTS_END"; +const char *UDP_BRIDGE_STRING = "UDP_BRIDGE"; +const char *UDP_POLLING_TASK_STRING = "UDP_POLLING_TASK"; +const char *CCSDS_DISTRIBUTOR_STRING = "CCSDS_DISTRIBUTOR"; +const char *PUS_DISTRIBUTOR_STRING = "PUS_DISTRIBUTOR"; +const char *TM_FUNNEL_STRING = "TM_FUNNEL"; +const char *TEST_DUMMY_1_STRING = "TEST_DUMMY_1"; +const char *TEST_DUMMY_2_STRING = "TEST_DUMMY_2"; +const char *TEST_DUMMY_3_STRING = "TEST_DUMMY_3"; +const char *TEST_DUMMY_4_STRING = "TEST_DUMMY_4"; +const char *TEST_DUMMY_5_STRING = "TEST_DUMMY_5"; +const char *TEST_TASK_STRING = "TEST_TASK"; +const char *NO_OBJECT_STRING = "NO_OBJECT"; + +const char* translateObject(object_id_t object) { + switch( (object & 0xFFFFFFFF) ) { + case 0x4100CAFE: + return TEST_ASSEMBLY_STRING; + case 0x4301CAFE: + return TEST_CONTROLLER_STRING; + case 0x4401AFFE: + return TEST_DEVICE_HANDLER_0_STRING; + case 0x4402AFFE: + return TEST_DEVICE_HANDLER_1_STRING; + case 0x4900AFFE: + return TEST_ECHO_COM_IF_STRING; + case 0x53000000: + return FSFW_OBJECTS_START_STRING; + case 0x53000001: + return PUS_SERVICE_1_VERIFICATION_STRING; + case 0x53000002: + return PUS_SERVICE_2_DEVICE_ACCESS_STRING; + case 0x53000003: + return PUS_SERVICE_3_HOUSEKEEPING_STRING; + case 0x53000005: + return PUS_SERVICE_5_EVENT_REPORTING_STRING; + case 0x53000008: + return PUS_SERVICE_8_FUNCTION_MGMT_STRING; + case 0x53000009: + return PUS_SERVICE_9_TIME_MGMT_STRING; + case 0x53000017: + return PUS_SERVICE_17_TEST_STRING; + case 0x53000020: + return PUS_SERVICE_20_PARAMETERS_STRING; + case 0x53000200: + return PUS_SERVICE_200_MODE_MGMT_STRING; + case 0x53000201: + return PUS_SERVICE_201_HEALTH_STRING; + case 0x53010000: + return HEALTH_TABLE_STRING; + case 0x53010100: + return MODE_STORE_STRING; + case 0x53030000: + return EVENT_MANAGER_STRING; + case 0x53040000: + return INTERNAL_ERROR_REPORTER_STRING; + case 0x534f0100: + return TC_STORE_STRING; + case 0x534f0200: + return TM_STORE_STRING; + case 0x534f0300: + return IPC_STORE_STRING; + case 0x53500010: + return TIME_STAMPER_STRING; + case 0x53ffffff: + return FSFW_OBJECTS_END_STRING; + case 0x62000300: + return UDP_BRIDGE_STRING; + case 0x62000400: + return UDP_POLLING_TASK_STRING; + case 0x63000000: + return CCSDS_DISTRIBUTOR_STRING; + case 0x63000001: + return PUS_DISTRIBUTOR_STRING; + case 0x63000002: + return TM_FUNNEL_STRING; + case 0x74000001: + return TEST_DUMMY_1_STRING; + case 0x74000002: + return TEST_DUMMY_2_STRING; + case 0x74000003: + return TEST_DUMMY_3_STRING; + case 0x74000004: + return TEST_DUMMY_4_STRING; + case 0x74000005: + return TEST_DUMMY_5_STRING; + case 0x7400CAFE: + return TEST_TASK_STRING; + case 0xFFFFFFFF: + return NO_OBJECT_STRING; + default: + return "UNKNOWN_OBJECT"; + } + return 0; +} diff --git a/bsp_hosted/fsfwconfig/objects/translateObjects.h b/bsp_hosted/fsfwconfig/objects/translateObjects.h new file mode 100644 index 0000000..dbf5b46 --- /dev/null +++ b/bsp_hosted/fsfwconfig/objects/translateObjects.h @@ -0,0 +1,8 @@ +#ifndef FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ +#define FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ + +#include + +const char* translateObject(object_id_t object); + +#endif /* FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ */ diff --git a/bsp_linux/fsfwconfig/objects/translateObjects.cpp b/bsp_linux/fsfwconfig/objects/translateObjects.cpp new file mode 100644 index 0000000..734e67a --- /dev/null +++ b/bsp_linux/fsfwconfig/objects/translateObjects.cpp @@ -0,0 +1,127 @@ +/** + * @brief Auto-generated object translation file. + * @details + * Contains 37 translations. + * Generated on: 2021-05-28 18:12:48 + */ +#include "translateObjects.h" + +const char *TEST_ASSEMBLY_STRING = "TEST_ASSEMBLY"; +const char *TEST_CONTROLLER_STRING = "TEST_CONTROLLER"; +const char *TEST_DEVICE_HANDLER_0_STRING = "TEST_DEVICE_HANDLER_0"; +const char *TEST_DEVICE_HANDLER_1_STRING = "TEST_DEVICE_HANDLER_1"; +const char *TEST_ECHO_COM_IF_STRING = "TEST_ECHO_COM_IF"; +const char *FSFW_OBJECTS_START_STRING = "FSFW_OBJECTS_START"; +const char *PUS_SERVICE_1_VERIFICATION_STRING = "PUS_SERVICE_1_VERIFICATION"; +const char *PUS_SERVICE_2_DEVICE_ACCESS_STRING = "PUS_SERVICE_2_DEVICE_ACCESS"; +const char *PUS_SERVICE_3_HOUSEKEEPING_STRING = "PUS_SERVICE_3_HOUSEKEEPING"; +const char *PUS_SERVICE_5_EVENT_REPORTING_STRING = "PUS_SERVICE_5_EVENT_REPORTING"; +const char *PUS_SERVICE_8_FUNCTION_MGMT_STRING = "PUS_SERVICE_8_FUNCTION_MGMT"; +const char *PUS_SERVICE_9_TIME_MGMT_STRING = "PUS_SERVICE_9_TIME_MGMT"; +const char *PUS_SERVICE_17_TEST_STRING = "PUS_SERVICE_17_TEST"; +const char *PUS_SERVICE_20_PARAMETERS_STRING = "PUS_SERVICE_20_PARAMETERS"; +const char *PUS_SERVICE_200_MODE_MGMT_STRING = "PUS_SERVICE_200_MODE_MGMT"; +const char *PUS_SERVICE_201_HEALTH_STRING = "PUS_SERVICE_201_HEALTH"; +const char *HEALTH_TABLE_STRING = "HEALTH_TABLE"; +const char *MODE_STORE_STRING = "MODE_STORE"; +const char *EVENT_MANAGER_STRING = "EVENT_MANAGER"; +const char *INTERNAL_ERROR_REPORTER_STRING = "INTERNAL_ERROR_REPORTER"; +const char *TC_STORE_STRING = "TC_STORE"; +const char *TM_STORE_STRING = "TM_STORE"; +const char *IPC_STORE_STRING = "IPC_STORE"; +const char *TIME_STAMPER_STRING = "TIME_STAMPER"; +const char *FSFW_OBJECTS_END_STRING = "FSFW_OBJECTS_END"; +const char *UDP_BRIDGE_STRING = "UDP_BRIDGE"; +const char *UDP_POLLING_TASK_STRING = "UDP_POLLING_TASK"; +const char *CCSDS_DISTRIBUTOR_STRING = "CCSDS_DISTRIBUTOR"; +const char *PUS_DISTRIBUTOR_STRING = "PUS_DISTRIBUTOR"; +const char *TM_FUNNEL_STRING = "TM_FUNNEL"; +const char *TEST_DUMMY_1_STRING = "TEST_DUMMY_1"; +const char *TEST_DUMMY_2_STRING = "TEST_DUMMY_2"; +const char *TEST_DUMMY_3_STRING = "TEST_DUMMY_3"; +const char *TEST_DUMMY_4_STRING = "TEST_DUMMY_4"; +const char *TEST_DUMMY_5_STRING = "TEST_DUMMY_5"; +const char *TEST_TASK_STRING = "TEST_TASK"; +const char *NO_OBJECT_STRING = "NO_OBJECT"; + +const char* translateObject(object_id_t object) { + switch( (object & 0xFFFFFFFF) ) { + case 0x4100CAFE: + return TEST_ASSEMBLY_STRING; + case 0x4301CAFE: + return TEST_CONTROLLER_STRING; + case 0x4401AFFE: + return TEST_DEVICE_HANDLER_0_STRING; + case 0x4402AFFE: + return TEST_DEVICE_HANDLER_1_STRING; + case 0x4900AFFE: + return TEST_ECHO_COM_IF_STRING; + case 0x53000000: + return FSFW_OBJECTS_START_STRING; + case 0x53000001: + return PUS_SERVICE_1_VERIFICATION_STRING; + case 0x53000002: + return PUS_SERVICE_2_DEVICE_ACCESS_STRING; + case 0x53000003: + return PUS_SERVICE_3_HOUSEKEEPING_STRING; + case 0x53000005: + return PUS_SERVICE_5_EVENT_REPORTING_STRING; + case 0x53000008: + return PUS_SERVICE_8_FUNCTION_MGMT_STRING; + case 0x53000009: + return PUS_SERVICE_9_TIME_MGMT_STRING; + case 0x53000017: + return PUS_SERVICE_17_TEST_STRING; + case 0x53000020: + return PUS_SERVICE_20_PARAMETERS_STRING; + case 0x53000200: + return PUS_SERVICE_200_MODE_MGMT_STRING; + case 0x53000201: + return PUS_SERVICE_201_HEALTH_STRING; + case 0x53010000: + return HEALTH_TABLE_STRING; + case 0x53010100: + return MODE_STORE_STRING; + case 0x53030000: + return EVENT_MANAGER_STRING; + case 0x53040000: + return INTERNAL_ERROR_REPORTER_STRING; + case 0x534f0100: + return TC_STORE_STRING; + case 0x534f0200: + return TM_STORE_STRING; + case 0x534f0300: + return IPC_STORE_STRING; + case 0x53500010: + return TIME_STAMPER_STRING; + case 0x53ffffff: + return FSFW_OBJECTS_END_STRING; + case 0x62000300: + return UDP_BRIDGE_STRING; + case 0x62000400: + return UDP_POLLING_TASK_STRING; + case 0x63000000: + return CCSDS_DISTRIBUTOR_STRING; + case 0x63000001: + return PUS_DISTRIBUTOR_STRING; + case 0x63000002: + return TM_FUNNEL_STRING; + case 0x74000001: + return TEST_DUMMY_1_STRING; + case 0x74000002: + return TEST_DUMMY_2_STRING; + case 0x74000003: + return TEST_DUMMY_3_STRING; + case 0x74000004: + return TEST_DUMMY_4_STRING; + case 0x74000005: + return TEST_DUMMY_5_STRING; + case 0x7400CAFE: + return TEST_TASK_STRING; + case 0xFFFFFFFF: + return NO_OBJECT_STRING; + default: + return "UNKNOWN_OBJECT"; + } + return 0; +} diff --git a/bsp_linux/fsfwconfig/objects/translateObjects.h b/bsp_linux/fsfwconfig/objects/translateObjects.h new file mode 100644 index 0000000..dbf5b46 --- /dev/null +++ b/bsp_linux/fsfwconfig/objects/translateObjects.h @@ -0,0 +1,8 @@ +#ifndef FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ +#define FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ + +#include + +const char* translateObject(object_id_t object); + +#endif /* FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ */ diff --git a/generators/archive/MIB_CppWriter.py b/generators/archive/MIB_CppWriter.py deleted file mode 100644 index e69de29..0000000 diff --git a/generators/archive/mib_events_old.py b/generators/archive/mib_events_old.py deleted file mode 100644 index f1e09e5..0000000 --- a/generators/archive/mib_events_old.py +++ /dev/null @@ -1,215 +0,0 @@ -#! /usr/bin/python3.7 -""" -@file - mib_objects.py -@brief - Part of the Mission Information Base Exporter for the SOURCE project by KSat. -@details - Event exporter. - - To use MySQLdb, run pip install mysqlclient or install in IDE. - On Windows, Build Tools installation might be necessary -@data - 21.11.2019 -""" -import re -import os -import shutil -import pprint -from utility.mib_csv_writer import CsvWriter - -generateCpp = True -generateCsv = True -copyCppFile = True -moveCsvFile = True -cppFilename = "translateEvents.cpp" -csvFilename = "MIB_Events.csv" -cppCopyDestination = "../../config/objects/" -csvMoveDestination = "../" -fileSeparator = ";" - -pp = pprint.PrettyPrinter(indent=0, width=250) - - -def main(): - print("Parsing events: ") - listItems = parseOBSW() - handleFileExport(listItems) - print("") - - -def parseOBSW(): - idSubsystemDefinitions = parseSubsystemDefinitionFile("../../config/tmtc/subsystemIdRanges.h") - tempList = parseSubsystemDefinitionFile("../../fsfw/events/fwSubsystemIdRanges.h") - idSubsystemDefinitions.update(tempList) - print(len(idSubsystemDefinitions)) - # print ("Dictionary size is " + str(len(idInterfaceDefinitions)) ) - # for entry in idSubsystemDefinitions: - # print(entry) - myHeaderList = getHeaderFileList("../../mission/") - myHeaderList = myHeaderList + getHeaderFileList("../../fsfw/") - myEventList = parseHeaderFiles(idSubsystemDefinitions, myHeaderList) - listItems = sorted(myEventList.items()) - - print("Found " + str(len(listItems)) + " entries:") - pp.pprint(listItems) - print(len(listItems)) - return listItems - - -def handleFileExport(listItems): - csvWriter = CsvWriter(csvFilename) - if generateCpp: - print("Generating translation cpp file.") - writeTranslationFile(cppFilename, listItems) - if generateCpp and copyCppFile: - dst = shutil.copy2("../events/translateEvents.cpp", "../../config/events/") - print("CPP file was copied to " + dst) - if generateCsv: - print("Generating text export.") - exportToFile(csvFilename, listItems) - if generateCsv and moveCsvFile: - csvWriter.move_csv(csvMoveDestination) - - -# The output files are generated by putting the name of the output CPP file as first argument and the name of the -# csv or txt output as second argument in the Run Configuration. -# Config Parameters: translateEvents.cpp translateEvents.csv -def parseSubsystemDefinitionFile(filename): - file = open(filename, "r") - interfaces = dict() - for line in file.readlines(): - match = re.search('([A-Z0-9_]*) = ([0-9]{1,2})', line) - if match: - interfaces.update({match.group(1): [match.group(2)]}) - return interfaces - - -def returnNumberFromString(aString): - if aString.startswith('0x'): - return int(aString, 16) - elif aString.isdigit(): - return int(aString) - else: - print('Error: Illegal number representation: ' + aString) - return 0 - - -def convert(name): - singleStrings = name.split('_') - newString = '' - for oneString in singleStrings: - oneString = oneString.lower() - oneString = oneString.capitalize() - newString = newString + oneString - return newString - - -def buildCheckedString(firstPart, secondPart): - myStr = firstPart + convert(secondPart) - if len(myStr) > 16: - print("Error: Entry: " + myStr + " too long. Will truncate.") - myStr = myStr[0:14] - # else: - # print( "Entry: " + myStr + " is all right.") - return myStr - - -def cleanUpDescription(description): - description = description.lstrip('//!<>') - description = description.lstrip() - if description == '': - description = ' ' - return description - - -def parseHeaderFiles(interfaceList, fileList): - dictionnary = dict() - totalCount = 0 - count = 0 - # noinspection PyUnusedLocal - currentId = 0 - for fileName in fileList: - file = open(fileName, "r") - oldline = file.readline() - myId = 0 - # print(file_name) - while True: - newline = file.readline() - if not newline: - break # EOF - if not oldline == '\n': - twolines = oldline + ' ' + newline.strip() - else: - twolines = '' - match1 = re.search('SUBSYSTEM_ID[\s]*=[\s]*SUBSYSTEM_ID::([A-Z_0-9]*);', twolines) - if match1: - currentId = interfaceList[match1.group(1)][0] - # print( "Current ID: " + str(currentId) ) - myId = returnNumberFromString(currentId) - match = re.search('(//)?[\t ]*static const Event[\s]*([A-Z_0-9]*)[\s]*=[\s]*MAKE_EVENT\(([0-9]{1,2}),' - '[\s]*SEVERITY::([A-Z]*)\);[\t ]*(//!<)?([^\n]*)', twolines) - if match: - if match.group(1): - oldline = newline - continue - description = " " - if match.group(6): - description = cleanUpDescription(match.group(6)) - stringToAdd = match.group(2) - fullId = (myId * 100) + returnNumberFromString(match.group(3)) - severity = match.group(4) - if fullId in dictionnary: - print('duplicate Event ' + hex(fullId) + ' from ' + fileName + ' was already in ' + - dictionnary[fullId][3]) - dictionnary.update({fullId: (stringToAdd, severity, description, fileName)}) - count = count + 1 - oldline = newline - if count > 0: - print("File " + fileName + " contained " + str(count) + " events.") - totalCount += count - count = 0 - print("Total events: " + str(totalCount)) - return dictionnary - - -def getHeaderFileList(base): - # print("getHeaderFileList called with" + base) - baseList = os.listdir(base) - fileList = [] - for entry in baseList: - # Remove all hidden files: - if os.path.isdir(base + entry) and (entry[0] != ".") and (entry[0] != "_"): - fileList = fileList + getHeaderFileList(base + entry + "/") - if re.match("[^.]*\.h", entry) and os.path.isfile(base + entry): - fileList.append(base + entry) - return fileList - - -def exportToFile(filename, listOfEntries): - print('Exporting to file: ' + filename) - file = open(filename, "w") - for entry in listOfEntries: - file.write(str(entry[0]) + fileSeparator + entry[1][0] + fileSeparator + entry[1][1] - + fileSeparator + entry[1][2] + fileSeparator + entry[1][3] + '\n') - file.close() - return - - -def writeTranslationFile(filename, listOfEntries): - outputfile = open(filename, "w") - definitions = "" - function = "const char * translateEvents(Event event){\n\tswitch((event&0xFFFF)){\n" - for entry in listOfEntries: - definitions += "const char *" + entry[1][0] + "_STRING = \"" + entry[1][0] + "\";\n" - function += "\t\tcase " + str(entry[0]) + ":\n\t\t\treturn " + entry[1][0] + "_STRING;\n" - function += '\t\tdefault:\n\t\t\treturn "UNKNOWN_EVENT";\n' - outputfile.write("/* Auto-generated event translation file. Contains " - + str(len(listOfEntries)) + " translations. */\n") - outputfile.write("#include \"translateEvents.h\"\n\n") - outputfile.write(definitions + "\n" + function + "\t}\n\treturn 0;\n}\n") - outputfile.close() - - -if __name__ == "__main__": - main() diff --git a/generators/archive/mib_returnvalues_old.py b/generators/archive/mib_returnvalues_old.py deleted file mode 100644 index 236279b..0000000 --- a/generators/archive/mib_returnvalues_old.py +++ /dev/null @@ -1,269 +0,0 @@ -#! /usr/bin/python3.7 -""" -@file - MIB_Returnvalues.py -@brief - Part of the Mission Information Base Exporter for the SOURCE project by KSat. - TODO: Integrate into Parser Structure instead of calling this file (no cpp file generated yet) -@details - Returnvalue exporter. - - To use MySQLdb, run pip install mysqlclient or install in IDE. - On Windows, Build Tools installation might be necessary. - -@data - 21.11.2019 -""" -import pprint -import re -import os -import getpass -# import MySQLdb -from utility.mib_csv_writer import CsvWriter - -doExportToFile = True -moveCsvFile = True -csvFilename = "MIB_Returnvalues.csv" -csvMoveDestination = "../" -fileSeparator = ';' -maxStringLength = 25 -pp = pprint.PrettyPrinter(indent=0, width=250) - - -def main(): - print("Parsing Returnvalues: ") - parseOBSW() - handleFileExport() - print("") - - -def parseOBSW(): - idInterfaceDefinitions = \ - parseInterfaceDefinitionFile("../../fsfw/returnvalues/FwClassIds.h", - "../../config/returnvalues/classIds.h") - print("Found interface definitions: ") - pp.pprint(idInterfaceDefinitions) - - myHeaderList = getHeaderFileList("../../mission/") - myHeaderList = myHeaderList + getHeaderFileList("../../fsfw/") - myHeaderList = myHeaderList + getHeaderFileList("../../config/") - myHeaderList = myHeaderList + getHeaderFileList("../../sam9g20/") - mySecondList = parseHeaderFiles(idInterfaceDefinitions, myHeaderList) - print(len(myHeaderList)) - print(len(mySecondList)) - # print(mySecondList[14081]) - # print (mySecondList.items()[0][1]) - # print( "Found entries:" ) - counter = 0 - # for entry in sorted(mySecondList): - # print(entry) - # noinspection PyUnusedLocal - for entry in mySecondList.items(): - counter = counter + 1 - # print( entry[0], entry[1][0], entry[1][1] ) - print("Count: ", counter) - if doExportToFile: - exportToFile(csvFilename, mySecondList) - else: - print('No export to file requested.') - # writeEntriesToOtherDB( mySecondList ) - # writeEntriesToDB( mySecondList ) - - -def handleFileExport(): - csvWriter = CsvWriter(csvFilename) - if moveCsvFile: - csvWriter.move_csv(csvMoveDestination) - - -def parseInterfaceDefinitionFile(fwFilename, missionFilename): - file = open(fwFilename, "r") - interfaces = dict() - allLines = file.readlines() - count = 0 - countMatched = False - # Parses first entry, which has explicit value 1 - for line in allLines: - if not countMatched: - match = re.search('[\s]*([A-Z_0-9]*) = ([0-9]*),[\s]*//([A-Z]{1,3})', line) - else: - match = re.search('[\s]*([A-Z_0-9]*),[\s]*//([A-Z]{1,3})', line) - if match and not countMatched: - count = int(match.group(2)) - interfaces.update({match.group(1): [1, match.group(3)]}) - count += 1 - countMatched = True - elif match: - interfaces.update({match.group(1): [count, match.group(2)]}) - count += 1 - - file = open(missionFilename, "r") - allLines = file.readlines() - for line in allLines: - match = re.search('[\s]*([A-Z_0-9]*) = FW_CLASS_ID_COUNT,[\s]*(//([A-Z]{1,3}))?', line) - if match: - interfaces.update({match.group(1): [count, match.group(2)]}) - count += 1 - for line in allLines: - match = re.search('^[\s]*([A-Z_0-9]*)[,]*[\s]*//[!<]*[\s]*([^\n]*)', line) - if match: - interfaces.update({match.group(1): [count, match.group(2)]}) - count += 1 - - print("Found interfaces : " + str(count - 1)) - return interfaces - - -def returnNumberFromString(aString): - if aString.startswith('0x'): - return int(aString, 16) - elif aString.isdigit(): - return int(aString) - else: - print('Error: Illegeal number representation: ' + aString) - return 0 - - -def convert(name): - singleStrings = name.split('_') - newString = '' - for oneString in singleStrings: - oneString = oneString.lower() - oneString = oneString.capitalize() - newString = newString + oneString - return newString - - -def buildCheckedString(firstPart, secondPart): - myStr = firstPart + convert(secondPart) - if len(myStr) > maxStringLength: - print("Error: Entry: " + myStr + " too long. Will truncate.") - myStr = myStr[0:maxStringLength] - else: - # print("Entry: " + myStr + " is all right.") - pass - return myStr - - -def cleanUpDescription(descrString): - description = descrString.lstrip('!<- ') - if description == '': - description = ' ' - return description - - -def parseHeaderFiles(interfaceList, fileList): - dictionnary = dict() - count = 0 - currentName = "" - myId = 0 - dictionnary.update({0: ('OK', 'System-wide code for ok.', 'RETURN_OK', 'HasReturnvaluesIF.h', - 'HasReturnvaluesIF')}) - dictionnary.update({1: ('Failed', 'Unspecified system-wide code for failed.', - 'RETURN_FAILED', 'HasReturnvaluesIF.h', 'HasReturnvaluesIF')}) - print('') - print("Parsing files: ") - for fileName in fileList: - # print("Parsing file " + fileName + ": ") - file = open(fileName, "r") - oldline = file.readline() - while True: - currentFullName = "" - newline = file.readline() - if not newline: - break # EOF - if not oldline == '\n': - twoLines = oldline + ' ' + newline.strip() - else: - twoLines = '' - match1 = re.search('INTERFACE_ID[\s]*=[\s]*CLASS_ID::([a-zA-Z_0-9]*)', twoLines) - if match1: - # print("Interface ID" + str(match1.group(1)) + "found in " + fileName) - currentId = interfaceList[match1.group(1)][0] - currentName = interfaceList[match1.group(1)][1] - currentFullName = match1.group(1) - # print( "Current ID: " + str(currentId) ) - myId = currentId - match = re.search('^[\s]*static const ReturnValue_t[\s]*([a-zA-Z_0-9]*)[\s]*=[\s]*' - 'MAKE_RETURN_CODE[\s]*\([\s]*([x0-9a-fA-F]{1,4})[\s]*\);[\t ]*(//)?([^\n]*)', - twoLines) - if match: - # valueTable.append([]) - description = cleanUpDescription(match.group(4)) - stringToAdd = buildCheckedString(currentName, match.group(1)) - fullId = (myId << 8) + returnNumberFromString(match.group(2)) - if fullId in dictionnary: - print('duplicate returncode ' + hex(fullId) + ' from ' + fileName + ' was already in ' + - dictionnary[fullId][3]) - dictionnary.update({fullId: (stringToAdd, description, match.group(1), fileName, currentFullName)}) - # valueTable[count].append(fullId) - # valueTable[count].append(stringToAdd) - count = count + 1 - else: - pass - oldline = newline - # valueTable.pop() - return dictionnary - - -def getHeaderFileList(base): - # print ( "getHeaderFileList called with" + base ) - baseList = os.listdir(base) - fileList = [] - for entry in baseList: - # Remove all hidden files: - if os.path.isdir(base + entry) and (entry[0] != ".") and (entry[0] != "_"): - fileList = fileList + getHeaderFileList(base + entry + "/") - if re.match("[^.]*\.h", entry) and os.path.isfile(base + entry): - fileList.append(base + entry) - return fileList - - -def writeEntriesToDB(listOfEntries): - print("Connecting to database...") - user = getpass.getpass("User: ") - passwd = getpass.getpass() - conn = MySQLdb.connect(host="127.0.0.1", user=user, passwd=passwd, db="flpmib") - written = conn.cursor() - print("done.") - # delete old entries - print("Kill old entries.") - written.execute("DELETE FROM txp WHERE TXP_NUMBR = 'DSX00000'") - print("Insert new ones:") - for entry in listOfEntries.items(): - written.execute("INSERT INTO txp (txp_numbr, txp_from, txp_to, txp_altxt) VALUES ('DSX00000', %s, %s, %s)", - [entry[0], entry[0], entry[1][0]]) - conn.commit() - print("Done. That was easy.") - - -def writeEntriesToOtherDB(listOfEntries): - print("Connecting to other database...") - conn = MySQLdb.connect(host="buggy.irs.uni-stuttgart.de", - user='returncode', passwd='returncode', db="returncode") - written = conn.cursor() - print("connected.") - # delete old entries - print("Kill old entries.") - written.execute("DELETE FROM returncodes WHERE true") - print("Insert new ones:") - for entry in listOfEntries.items(): - written.execute("INSERT INTO returncodes (code,name,interface,file,description) VALUES (%s, %s, %s, %s, %s)", - [entry[0], entry[1][2], entry[1][4], entry[1][3], entry[1][1]]) - conn.commit() - print("Done. That was hard.") - - -def exportToFile(filename_, listOfEntries): - print('Exporting to file: ' + csvFilename) - file = open(filename_, "w") - for entry in listOfEntries.items(): - file.write(hex(entry[0]) + fileSeparator + entry[1][0] + fileSeparator + entry[1][1] + - fileSeparator + entry[1][2] + fileSeparator - + entry[1][3] + fileSeparator + entry[1][4] + '\n') - file.close() - return - - -if __name__ == "__main__": - main() diff --git a/generators/definitions.py b/generators/definitions.py index 02e728d..fe16513 100644 --- a/generators/definitions.py +++ b/generators/definitions.py @@ -1,5 +1,7 @@ import enum +DATABASE_NAME = "fsfw_mod.db" + class BspSelect(enum.Enum): BSP_HOSTED = enum.auto() diff --git a/generators/mod_exporter.py b/generators/mod_exporter.py index f4d144b..7abb1fc 100644 --- a/generators/mod_exporter.py +++ b/generators/mod_exporter.py @@ -77,7 +77,7 @@ from returnvalues.mib_returnvalues import ( sql_retval_exporter, CSV_RETVAL_FILENAME ) -from objects.mib_objects import ( +from objects.objects import ( ObjectDefinitionParser, OBJECTS_DEFINITIONS, export_object_file, diff --git a/generators/modgen b/generators/modgen index d9beb68..935e7de 160000 --- a/generators/modgen +++ b/generators/modgen @@ -1 +1 @@ -Subproject commit d9beb68bd9d1a1e6015e4979d547a762d199bff7 +Subproject commit 935e7dee3a6865c3135cb8ed53824d7e7f7d176b diff --git a/generators/objects/mib_objects.py b/generators/objects/mib_objects.py deleted file mode 100644 index 29e82bb..0000000 --- a/generators/objects/mib_objects.py +++ /dev/null @@ -1,150 +0,0 @@ -#! /usr/bin/python3.8 -""" -@file mib_objects.py -@brief Part of the Mission Information Base Exporter for the SOURCE project by KSat. -@details -Object exporter. -To use MySQLdb, run pip install mysqlclient or install in IDE. -On Windows, Build Tools installation might be necessary -@data 21.11.2019 -""" -import re -import datetime -from utility.mib_csv_writer import CsvWriter -from utility.mib_printer import PrettyPrinter -from utility.mib_file_management import copy_file -from parserbase.mib_parser import FileParser -from utility.mib_sql_writer import SqlWriter, SQL_DATABASE_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 - -EXPORT_TO_SQL = True - -CPP_COPY_DESTINATION = "../../config/objects/" -CSV_MOVE_DESTINATION = "../" -CPP_FILENAME = "translateObjects.cpp" -CSV_OBJECT_FILENAME = "mib_objects.csv" -FILE_SEPARATOR = ";" - -SUBSYSTEM_DEFINITION_DESTINATION = "../../config/objects/systemObjectList.h" -FRAMEWORK_SUBSYSTEM_DEFINITION_DESTINATION = "../../fsfw/objectmanager/frameworkObjects.h" -OBJECTS_DEFINITIONS = [SUBSYSTEM_DEFINITION_DESTINATION, FRAMEWORK_SUBSYSTEM_DEFINITION_DESTINATION] - -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 main(): - print("Parsing objects: ") - list_items = parse_objects() - handle_file_export(list_items) - if EXPORT_TO_SQL: - print("ObjectParser: Exporting to SQL") - sql_object_exporter(list_items, "../" + SQL_DATABASE_NAME) - - -def parse_objects(): - # fetch objects - object_parser = ObjectDefinitionParser(OBJECTS_DEFINITIONS) - subsystem_definitions = object_parser.parse_files() - # id_subsystem_definitions.update(framework_subsystem_definitions) - list_items = sorted(subsystem_definitions.items()) - PrettyPrinter.pprint(list_items) - print("ObjectParser: Number of objects: ", len(list_items)) - return list_items - - -def handle_file_export(list_items): - csv_writer = CsvWriter(CSV_OBJECT_FILENAME) - if GENERATE_CPP: - print("ObjectParser: Generating translation C++ file.") - write_translation_file(CPP_FILENAME, list_items) - if COPY_CPP: - print("ObjectParser: Copying object file to " + CPP_COPY_DESTINATION) - copy_file(CPP_FILENAME, CPP_COPY_DESTINATION) - if GENERATE_CSV: - print("ObjectParser: Generating text export.") - export_object_file(CSV_OBJECT_FILENAME, list_items) - if MOVE_CSV: - csv_writer.move_csv(CSV_MOVE_DESTINATION) - - -class ObjectDefinitionParser(FileParser): - def __init__(self, file_list: list): - super().__init__(file_list) - - def _handle_file_parsing(self, file_name: str, *args, **kwargs): - file = open(file_name, "r", encoding="utf-8") - for line in file.readlines(): - match = re.search('([\w]*)[\s]*=[\s]*(0[xX][0-9a-fA-F]+)', line) - if match: - self.mib_table.update({match.group(2): [match.group(1)]}) - - def _post_parsing_operation(self): - pass - - -def export_object_file(filename, object_list): - file = open(filename, "w") - for entry in object_list: - file.write(str(entry[0]) + FILE_SEPARATOR + entry[1][0] + '\n') - file.close() - - -def write_translation_file(filename, list_of_entries): - outputfile = open(filename, "w") - print('ObjectParser: Writing translation file ' + filename) - definitions = "" - function = "const char* translateObject(object_id_t object){\n\tswitch((object&0xFFFFFFFF)){\n" - for entry in list_of_entries: - # first part of translate file - definitions += "const char *" + entry[1][0] + "_STRING = \"" + entry[1][0] + "\";\n" - # second part of translate file. entry[i] contains 32 bit hexadecimal numbers - function += "\t\tcase " + str(entry[0]) + ":\n\t\t\treturn " + entry[1][0] + "_STRING;\n" - function += '\t\tdefault:\n\t\t\treturn "UNKNOWN_OBJECT";\n' - outputfile.write("/** \n * @brief\tAuto-generated object translation file. Contains " - + str(len(list_of_entries)) + " translations. \n" - " * Generated on: " + DATE_STRING_FULL + "\n **/ \n") - outputfile.write("#include \"translateObjects.h\"\n\n") - outputfile.write(definitions + "\n" + function + "\t}\n\treturn 0;\n}\n") - outputfile.close() - - -def sql_object_exporter(object_table: list, sql_table: str = SQL_DATABASE_NAME): - sql_writer = SqlWriter(sql_table) - sql_writer.delete(SQL_DELETE_OBJECTS_CMD) - sql_writer.open(SQL_CREATE_OBJECTS_CMD) - for entry in object_table: - sql_writer.write_entries( - SQL_INSERT_INTO_OBJECTS_CMD, (entry[0], entry[1][0])) - sql_writer.commit() - sql_writer.close() - - -if __name__ == "__main__": - main() - - - - - diff --git a/generators/objects/objects.py b/generators/objects/objects.py new file mode 100644 index 0000000..27c7833 --- /dev/null +++ b/generators/objects/objects.py @@ -0,0 +1,109 @@ +#! /usr/bin/env python3 +""" +@file objects.py +@brief Part of the Mission Information Base Exporter for the SOURCE project by KSat. +@details +Object exporter. +To use MySQLdb, run pip install mysqlclient or install in IDE. +On Windows, Build Tools installation might be necessary +@data 21.11.2019 +""" +import datetime + +from modgen.objects.objects import ObjectDefinitionParser, sql_object_exporter, write_translation_file, \ + export_object_file, write_translation_header_file +from modgen.utility.printer import PrettyPrinter +from modgen.utility.file_management import copy_file, move_file +from definitions import DATABASE_NAME, BspSelect, BspFolderDict + +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 + +PARSE_HOST_BSP = False + +EXPORT_TO_SQL = True + +BSP_SELECT = BspSelect.BSP_HOSTED.value +BSP_FOLDER = BspFolderDict[BSP_SELECT] + +CPP_COPY_DESTINATION = f"../../{BSP_FOLDER}/fsfwconfig/objects/" +CSV_MOVE_DESTINATION = "../" +CPP_FILENAME = "translateObjects.cpp" +CPP_H_FILENAME = "translateObjects.h" +CSV_OBJECT_FILENAME = f"{BSP_FOLDER}_objects.csv" +FILE_SEPARATOR = ";" + + +OBJECTS_PATH = f"../../{BSP_FOLDER}/fsfwconfig/objects/systemObjectList.h" +FRAMEWORK_OBJECTS_PATH = "../../fsfw/objectmanager/frameworkObjects.h" +COMMON_OBJECTS_PATH = "../../common/config/commonSystemObjects.h" +OBJECTS_DEFINITIONS = [OBJECTS_PATH, FRAMEWORK_OBJECTS_PATH, COMMON_OBJECTS_PATH] + +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 main(): + print("Parsing objects: ") + list_items = parse_objects() + handle_file_export(list_items) + if EXPORT_TO_SQL: + print("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"../{DATABASE_NAME}" + ) + + +def parse_objects(): + # fetch objects + object_parser = ObjectDefinitionParser(OBJECTS_DEFINITIONS) + subsystem_definitions = object_parser.parse_files() + # id_subsystem_definitions.update(framework_subsystem_definitions) + list_items = sorted(subsystem_definitions.items()) + PrettyPrinter.pprint(list_items) + print("ObjectParser: Number of objects: ", len(list_items)) + return list_items + + +def handle_file_export(list_items): + if GENERATE_CPP: + print("ObjectParser: Generating translation C++ file.") + write_translation_file(filename=CPP_FILENAME, list_of_entries=list_items, date_string_full=DATE_STRING_FULL) + if COPY_CPP: + print("ObjectParser: Copying object file to " + CPP_COPY_DESTINATION) + copy_file(CPP_FILENAME, CPP_COPY_DESTINATION) + if GENERATE_HEADER: + write_translation_header_file(filename=CPP_H_FILENAME) + copy_file(filename=CPP_H_FILENAME, destination=CPP_COPY_DESTINATION) + if GENERATE_CSV: + print("ObjectParser: Generating text export.") + export_object_file(filename=CSV_OBJECT_FILENAME, object_list=list_items, file_separator=FILE_SEPARATOR) + if MOVE_CSV: + move_file(file_name=CSV_OBJECT_FILENAME, destination=CSV_MOVE_DESTINATION) + + +if __name__ == "__main__": + main() diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index 76ec470..d9c242e 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -1,33 +1,27 @@ -/** - * @brief Auto-generated object translation file. Contains 34 translations. - * Generated on: 2020-09-30 15:21:42 - **/ +/** + * @brief Auto-generated object translation file. + * @details + * Contains 37 translations. + * Generated on: 2021-05-28 18:12:56 + */ #include "translateObjects.h" -const char *DUMMY1_STRING = "DUMMY1"; -const char *DUMMY2_STRING = "DUMMY2"; -const char *DUMMY3_STRING = "DUMMY3"; -const char *DUMMY4_STRING = "DUMMY4"; -const char *DUMMY5_STRING = "DUMMY5"; -const char *DUMMY6_STRING = "DUMMY6"; -const char *DUMMY7_STRING = "DUMMY7"; -const char *DUMMY8_STRING = "DUMMY8"; -const char *TIME_STAMPER_STRING = "TIME_STAMPER"; -const char *SOFTWARE_STRING = "SOFTWARE"; -const char *CCSDS_DISTRIBUTOR_STRING = "CCSDS_DISTRIBUTOR"; -const char *PUS_DISTRIBUTOR_STRING = "PUS_DISTRIBUTOR"; -const char *TEST_DEVICE_HANDLER_STRING = "TEST_DEVICE_HANDLER"; +const char *TEST_ASSEMBLY_STRING = "TEST_ASSEMBLY"; +const char *TEST_CONTROLLER_STRING = "TEST_CONTROLLER"; +const char *TEST_DEVICE_HANDLER_0_STRING = "TEST_DEVICE_HANDLER_0"; +const char *TEST_DEVICE_HANDLER_1_STRING = "TEST_DEVICE_HANDLER_1"; const char *TEST_ECHO_COM_IF_STRING = "TEST_ECHO_COM_IF"; -const char *UDP_BRIDGE_STRING = "UDP_BRIDGE"; -const char *UDP_POLLING_TASK_STRING = "UDP_POLLING_TASK"; -const char *TM_FUNNEL_STRING = "TM_FUNNEL"; +const char *FSFW_OBJECTS_START_STRING = "FSFW_OBJECTS_START"; const char *PUS_SERVICE_1_VERIFICATION_STRING = "PUS_SERVICE_1_VERIFICATION"; const char *PUS_SERVICE_2_DEVICE_ACCESS_STRING = "PUS_SERVICE_2_DEVICE_ACCESS"; +const char *PUS_SERVICE_3_HOUSEKEEPING_STRING = "PUS_SERVICE_3_HOUSEKEEPING"; const char *PUS_SERVICE_5_EVENT_REPORTING_STRING = "PUS_SERVICE_5_EVENT_REPORTING"; const char *PUS_SERVICE_8_FUNCTION_MGMT_STRING = "PUS_SERVICE_8_FUNCTION_MGMT"; const char *PUS_SERVICE_9_TIME_MGMT_STRING = "PUS_SERVICE_9_TIME_MGMT"; const char *PUS_SERVICE_17_TEST_STRING = "PUS_SERVICE_17_TEST"; +const char *PUS_SERVICE_20_PARAMETERS_STRING = "PUS_SERVICE_20_PARAMETERS"; const char *PUS_SERVICE_200_MODE_MGMT_STRING = "PUS_SERVICE_200_MODE_MGMT"; +const char *PUS_SERVICE_201_HEALTH_STRING = "PUS_SERVICE_201_HEALTH"; const char *HEALTH_TABLE_STRING = "HEALTH_TABLE"; const char *MODE_STORE_STRING = "MODE_STORE"; const char *EVENT_MANAGER_STRING = "EVENT_MANAGER"; @@ -35,82 +29,99 @@ const char *INTERNAL_ERROR_REPORTER_STRING = "INTERNAL_ERROR_REPORTER"; const char *TC_STORE_STRING = "TC_STORE"; const char *TM_STORE_STRING = "TM_STORE"; const char *IPC_STORE_STRING = "IPC_STORE"; -const char *DUMMY_CONTROLLER_STRING = "DUMMY_CONTROLLER"; -const char *DUMMY_ASS_STRING = "DUMMY_ASS"; +const char *TIME_STAMPER_STRING = "TIME_STAMPER"; +const char *FSFW_OBJECTS_END_STRING = "FSFW_OBJECTS_END"; +const char *UDP_BRIDGE_STRING = "UDP_BRIDGE"; +const char *UDP_POLLING_TASK_STRING = "UDP_POLLING_TASK"; +const char *CCSDS_DISTRIBUTOR_STRING = "CCSDS_DISTRIBUTOR"; +const char *PUS_DISTRIBUTOR_STRING = "PUS_DISTRIBUTOR"; +const char *TM_FUNNEL_STRING = "TM_FUNNEL"; +const char *TEST_DUMMY_1_STRING = "TEST_DUMMY_1"; +const char *TEST_DUMMY_2_STRING = "TEST_DUMMY_2"; +const char *TEST_DUMMY_3_STRING = "TEST_DUMMY_3"; +const char *TEST_DUMMY_4_STRING = "TEST_DUMMY_4"; +const char *TEST_DUMMY_5_STRING = "TEST_DUMMY_5"; +const char *TEST_TASK_STRING = "TEST_TASK"; const char *NO_OBJECT_STRING = "NO_OBJECT"; -const char* translateObject(object_id_t object){ - switch((object&0xFFFFFFFF)){ - case 0x01: - return DUMMY1_STRING; - case 0x02: - return DUMMY2_STRING; - case 0x03: - return DUMMY3_STRING; - case 0x04: - return DUMMY4_STRING; - case 0x05: - return DUMMY5_STRING; - case 0x06: - return DUMMY6_STRING; - case 0x07: - return DUMMY7_STRING; - case 0x08: - return DUMMY8_STRING; - case 0x09: - return TIME_STAMPER_STRING; - case 0x1: - return SOFTWARE_STRING; - case 0x10: - return CCSDS_DISTRIBUTOR_STRING; - case 0x11: - return PUS_DISTRIBUTOR_STRING; - case 0x4400AFFE: - return TEST_DEVICE_HANDLER_STRING; - case 0x4900AFFE: - return TEST_ECHO_COM_IF_STRING; - case 0x50000300: - return UDP_BRIDGE_STRING; - case 0x50000400: - return UDP_POLLING_TASK_STRING; - case 0x50000500: - return TM_FUNNEL_STRING; - case 0x53000001: - return PUS_SERVICE_1_VERIFICATION_STRING; - case 0x53000002: - return PUS_SERVICE_2_DEVICE_ACCESS_STRING; - case 0x53000005: - return PUS_SERVICE_5_EVENT_REPORTING_STRING; - case 0x53000008: - return PUS_SERVICE_8_FUNCTION_MGMT_STRING; - case 0x53000009: - return PUS_SERVICE_9_TIME_MGMT_STRING; - case 0x53000017: - return PUS_SERVICE_17_TEST_STRING; - case 0x53000200: - return PUS_SERVICE_200_MODE_MGMT_STRING; - case 0x53010000: - return HEALTH_TABLE_STRING; - case 0x53010100: - return MODE_STORE_STRING; - case 0x53030000: - return EVENT_MANAGER_STRING; - case 0x53040000: - return INTERNAL_ERROR_REPORTER_STRING; - case 0x534f0100: - return TC_STORE_STRING; - case 0x534f0200: - return TM_STORE_STRING; - case 0x534f0300: - return IPC_STORE_STRING; - case 0xCAFEAFFE: - return DUMMY_CONTROLLER_STRING; - case 0xCAFECAFE: - return DUMMY_ASS_STRING; - case 0xFFFFFFFF: - return NO_OBJECT_STRING; - default: - return "UNKNOWN_OBJECT"; +const char* translateObject(object_id_t object) { + switch( (object & 0xFFFFFFFF) ) { + case 0x4100CAFE: + return TEST_ASSEMBLY_STRING; + case 0x4301CAFE: + return TEST_CONTROLLER_STRING; + case 0x4401AFFE: + return TEST_DEVICE_HANDLER_0_STRING; + case 0x4402AFFE: + return TEST_DEVICE_HANDLER_1_STRING; + case 0x4900AFFE: + return TEST_ECHO_COM_IF_STRING; + case 0x53000000: + return FSFW_OBJECTS_START_STRING; + case 0x53000001: + return PUS_SERVICE_1_VERIFICATION_STRING; + case 0x53000002: + return PUS_SERVICE_2_DEVICE_ACCESS_STRING; + case 0x53000003: + return PUS_SERVICE_3_HOUSEKEEPING_STRING; + case 0x53000005: + return PUS_SERVICE_5_EVENT_REPORTING_STRING; + case 0x53000008: + return PUS_SERVICE_8_FUNCTION_MGMT_STRING; + case 0x53000009: + return PUS_SERVICE_9_TIME_MGMT_STRING; + case 0x53000017: + return PUS_SERVICE_17_TEST_STRING; + case 0x53000020: + return PUS_SERVICE_20_PARAMETERS_STRING; + case 0x53000200: + return PUS_SERVICE_200_MODE_MGMT_STRING; + case 0x53000201: + return PUS_SERVICE_201_HEALTH_STRING; + case 0x53010000: + return HEALTH_TABLE_STRING; + case 0x53010100: + return MODE_STORE_STRING; + case 0x53030000: + return EVENT_MANAGER_STRING; + case 0x53040000: + return INTERNAL_ERROR_REPORTER_STRING; + case 0x534f0100: + return TC_STORE_STRING; + case 0x534f0200: + return TM_STORE_STRING; + case 0x534f0300: + return IPC_STORE_STRING; + case 0x53500010: + return TIME_STAMPER_STRING; + case 0x53ffffff: + return FSFW_OBJECTS_END_STRING; + case 0x62000300: + return UDP_BRIDGE_STRING; + case 0x62000400: + return UDP_POLLING_TASK_STRING; + case 0x63000000: + return CCSDS_DISTRIBUTOR_STRING; + case 0x63000001: + return PUS_DISTRIBUTOR_STRING; + case 0x63000002: + return TM_FUNNEL_STRING; + case 0x74000001: + return TEST_DUMMY_1_STRING; + case 0x74000002: + return TEST_DUMMY_2_STRING; + case 0x74000003: + return TEST_DUMMY_3_STRING; + case 0x74000004: + return TEST_DUMMY_4_STRING; + case 0x74000005: + return TEST_DUMMY_5_STRING; + case 0x7400CAFE: + return TEST_TASK_STRING; + case 0xFFFFFFFF: + return NO_OBJECT_STRING; + default: + return "UNKNOWN_OBJECT"; } return 0; } diff --git a/generators/objects/translateObjects.h b/generators/objects/translateObjects.h new file mode 100644 index 0000000..dbf5b46 --- /dev/null +++ b/generators/objects/translateObjects.h @@ -0,0 +1,8 @@ +#ifndef FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ +#define FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ + +#include + +const char* translateObject(object_id_t object); + +#endif /* FSFWCONFIG_OBJECTS_TRANSLATEOBJECTS_H_ */