diff --git a/scripts/eventgen/EventFunctions.cpp.template b/scripts/eventgen/EventFunctions.cpp.template
new file mode 100644
index 0000000000000000000000000000000000000000..1611abafb11180cdadeafae5294f45acc4f85f78
--- /dev/null
+++ b/scripts/eventgen/EventFunctions.cpp.template
@@ -0,0 +1,53 @@
+/* Copyright (c) 2018-2020 Skyward Experimental Rocketry
+ * Authors: Luca Erbetta, Alvise de' Faveri Tron
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/*
+ ******************************************************************************
+ * THIS FILE IS AUTOGENERATED. DO NOT EDIT. *
+ ******************************************************************************
+ */
+
+// Autogen date: {date}
+
+
+#include "Events.h"
+#include "Topics.h"
+
+#include <map>
+
+string getEventString(uint8_t event)
+{{
+ static const map<uint8_t, string> event_string_map {{
+{event_map_data}
+ }};
+ auto it = event_string_map.find(event);
+ return it == event_string_map.end() ? "EV_UNKNOWN" : it->second;
+}}
+
+string getTopicString(uint8_t topic)
+{{
+ static const map<uint8_t, string> topic_string_map{{
+{topic_map_data}
+ }};
+ auto it = topic_string_map.find(topic);
+ return it == topic_string_map.end() ? "TOPIC_UNKNOWN" : it->second;
+}}
\ No newline at end of file
diff --git a/scripts/eventgen/Events.h.template b/scripts/eventgen/Events.h.template
new file mode 100644
index 0000000000000000000000000000000000000000..bd9cc25367ec63690cfc588a877778f110f09791
--- /dev/null
+++ b/scripts/eventgen/Events.h.template
@@ -0,0 +1,57 @@
+/* Copyright (c) 2018-2020 Skyward Experimental Rocketry
+ * Authors: Luca Erbetta, Alvise de' Faveri Tron
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/*
+ ******************************************************************************
+ * THIS FILE IS AUTOGENERATED. DO NOT EDIT. *
+ ******************************************************************************
+ */
+
+// Autogen date: {date}
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+
+#include "events/Event.h"
+#include "events/EventBroker.h"
+#include "EventClasses.h"
+#include "Topics.h"
+
+using std::string;
+using std::map;
+
+/**
+ * Definition of all events signals.
+enum Events : uint8_t
+{{
+{enum_data}
+}};
+
+/**
+ * @brief Returns the name of the provided event
+ *
+ * @param event
+ * @return string
+ */
+string getEventString(uint8_t event);
\ No newline at end of file
diff --git a/scripts/eventgen/README.md b/scripts/eventgen/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7bfb1c9b0625ffdfc86794475246b92e6251e586
--- /dev/null
+++ b/scripts/eventgen/README.md
@@ -0,0 +1,10 @@
+# Events Generator Script
+
+This script generates Events.h, Topics.h and EventFunctions.cpp from a list of
+SCXML files representing the state machines of a project.
+
+To execute the script:
+
+`./eventgen.py <LIST_OF_SCXML_FILES>`
+
+The files will be generated in the generated/ folder.
\ No newline at end of file
diff --git a/scripts/eventgen/Topics.h.template b/scripts/eventgen/Topics.h.template
new file mode 100644
index 0000000000000000000000000000000000000000..2ce2c2c536a6ba099b7c72ab2df987ccf9449fd3
--- /dev/null
+++ b/scripts/eventgen/Topics.h.template
@@ -0,0 +1,54 @@
+/* Copyright (c) 2018-2020 Skyward Experimental Rocketry
+ * Authors: Luca Erbetta, Alvise de' Faveri Tron
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/*
+ ******************************************************************************
+ * THIS FILE IS AUTOGENERATED. DO NOT EDIT. *
+ ******************************************************************************
+ */
+
+// Autogen date: {date}
+
+#pragma once
+
+#include <stdint.h>
+#include <string>
+
+using std::map;
+using std::string;
+
+/**
+ * Definition of various event topics to use in the EventBroker
+ */
+enum Topics : uint8_t
+{{
+{enum_data}
+}};
+
+/**
+ * @brief Returns the name of the provided event
+ *
+ * @param event
+ * @return string
+ */
+string getTopicString(uint8_t topic);
+
diff --git a/scripts/eventgen/eventgen.py b/scripts/eventgen/eventgen.py
new file mode 100755
index 0000000000000000000000000000000000000000..9c36223a3266a22a65961776074efcfc0bd14656
--- /dev/null
+++ b/scripts/eventgen/eventgen.py
@@ -0,0 +1,200 @@
+#!/usr/bin/python3
+
+# Copyright (c) 2018-2020 Skyward Experimental Rocketry
+# Authors: Luca Erbetta, Alvise de' Faveri Tron
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+import re
+import datetime
+from os.path import join
+import os
+
+import xml.etree.ElementTree as ET
+import sys
+from collections import OrderedDict
+
+OUTPUT_FOLDER = "generated"
+
+#
+# ASCII art banner
+#
+def printBanner():
+ print("+--------------------------------------------------------+")
+ print("| ____ _ _ |")
+ print("| / ___|| | ___ ___ ____ _ _ __ __| | |")
+ print("| \\___ \\| |/ / | | \\ \\ /\\ / / _` | '__/ _` | |")
+ print("| ___) | <| |_| |\\ V V / (_| | | | (_| | |")
+ print("| |____/|_|\\_\\\\__, | \\_/\\_/ \\__,_|_| \\__,_| |")
+ print("| _____|___/ _ |")
+ print("| | ____|_ _____ _ __ | |_ __ _ ___ _ __ |")
+ print("| | _| \\ \\ / / _ \\ '_ \\| __/ _` |/ _ \\ '_ \\ |")
+ print("| | |___ \\ V / __/ | | | || (_| | __/ | | | |")
+ print("| |_____| \\_/ \\___|_| |_|\\__\\__, |\\___|_| |_| |")
+ print("| |___/ |")
+ print("+--------------------------------------------------------+")
+
+#
+# Parse SCXML file(s)
+#
+def parse_scxml(files):
+ events = []
+ topics = []
+
+ for file in files:
+ print("parsing " + str(file))
+ tree = ET.parse(str(file))
+ root = tree.getroot()
+
+ # find all transitions and related events
+ first = 0
+ for child in root:
+ for tran in child.iter('{http://www.w3.org/2005/07/scxml}transition'):
+ if(tran.attrib['target'] != 'final'):
+ ev = tran.attrib['event']
+
+ try:
+ topics.append("TOPIC_" + ev.split('.')[0])
+ events.append(ev.split('.')[1])
+
+ except:
+ print("Cannot parse the event name... Forgot the topic?")
+ print(tran.tag, tran.attrib)
+
+ # remove duplicates
+ events = list(OrderedDict.fromkeys(events))
+ topics = list(OrderedDict.fromkeys(topics))
+ events.sort()
+ topics.sort()
+
+ print("{} events loaded.".format(len(events)))
+ print("{} topics loaded.".format(len(topics)))
+
+ return events, topics
+
+#
+# Generate Events.h
+#
+def generate_events(events, date):
+ enum_str = ""
+ event_map_str = ""
+
+ # generate string
+ for e in events:
+ endl = ",\n" if e != events[-1] else ""
+ enum_str += " " + e + \
+ (" = EV_FIRST_SIGNAL" if e == events[0] else "") + endl
+ event_map_str += " {{ {event}, {string} }}{endl}".format(
+ event=e, string='"' + e + '"', endl=endl)
+
+ # read template
+ with open('Events.h.template', 'r') as template_file:
+ template = template_file.read()
+
+ # write template
+ template = template.format(date=date, enum_data=enum_str)
+
+ with open(join(OUTPUT_FOLDER, 'Events.h'), 'w') as header_file:
+ header_file.write(template)
+
+ return event_map_str
+
+#
+# Generate Topics.h
+#
+def generate_topics(topics, date):
+ enum_str = ""
+ topic_map_str = ""
+
+ for t in topics:
+ endl = ",\n" if t != topics[-1] else ""
+ enum_str += " " + t + endl
+ topic_map_str += " {{ {topics}, {string} }}{endl}".format(
+ topics=t, string='"' + t + '"', endl=endl)
+
+ with open('Topics.h.template', 'r') as template_file:
+ template = template_file.read()
+
+ template = template.format(date=date, enum_data=enum_str)
+
+ with open(join(OUTPUT_FOLDER, 'Topics.h'), 'w') as header_file:
+ header_file.write(template)
+
+ return topic_map_str
+
+#
+# Generate EventFunctions.cpp
+#
+def generate_functions(event_map_str, topic_map_str, date):
+ with open('EventFunctions.cpp.template', 'r') as cpp_template_file:
+ cpp = cpp_template_file.read()
+
+ cpp = cpp.format(date=date, event_map_data=event_map_str, topic_map_data=topic_map_str)
+
+ with open(join(OUTPUT_FOLDER, 'EventFunctions.cpp'), 'w') as cpp_file:
+ cpp_file.write(cpp)
+
+#
+# Main
+#
+printBanner()
+print()
+print("Skyward SCXML event generator")
+print()
+
+if(len(sys.argv) < 2):
+ print("Error: no SCXML files provided.\nUsage: eventgen.py <SCXML_FILES>")
+ sys.exit(-1)
+
+if not os.path.exists(OUTPUT_FOLDER):
+ os.mkdir(OUTPUT_FOLDER)
+
+date = datetime.datetime.now()
+
+print("-"*30)
+print("Parsing SCXML files...")
+events, topics = parse_scxml(sys.argv[1:])
+
+print("-"*30)
+print("Generating Events.h...")
+event_map_str = generate_events(events, date)
+print("OK\n")
+
+print("-"*30)
+print("Generating Topics.h...")
+topic_map_str = generate_topics(topics, date)
+print("OK\n")
+
+print("-"*30)
+print("Generating EventFunctions.cpp...")
+generate_functions(event_map_str, topic_map_str, date)
+print("OK\n")
+
+
+# print
+print("-"*30)
+print("Events:\n")
+for e in events:
+ print(e)
+print("\n\nTopics:\n")
+for t in topics:
+ print(t)
+
+print("-"*30)
+print("... Done.")
diff --git a/scripts/eventgen/generated/EventFunctions.cpp b/scripts/eventgen/generated/EventFunctions.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..02d008a49c6ce8d7e107f62ec2b9604004dcf216
--- /dev/null
+++ b/scripts/eventgen/generated/EventFunctions.cpp
@@ -0,0 +1,97 @@
+/* Copyright (c) 2018-2020 Skyward Experimental Rocketry
+ * Authors: Luca Erbetta, Alvise de' Faveri Tron
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/*
+ ******************************************************************************
+ * THIS FILE IS AUTOGENERATED. DO NOT EDIT. *
+ ******************************************************************************
+ */
+
+// Autogen date: 2020-03-10 02:43:07.380770
+
+
+#include "Events.h"
+#include "Topics.h"
+
+#include <map>
+
+string getEventString(uint8_t event)
+{
+ static const map<uint8_t, string> event_string_map {
+ { EV_ADA_APOGEE_DETECTED, "EV_ADA_APOGEE_DETECTED" },
+ { EV_ADA_READY, "EV_ADA_READY" },
+ { EV_APOGEE, "EV_APOGEE" },
+ { EV_ARMED, "EV_ARMED" },
+ { EV_CALIBRATE_ADA, "EV_CALIBRATE_ADA" },
+ { EV_DISARMED, "EV_DISARMED" },
+ { EV_IMU_READY, "EV_IMU_READY" },
+ { EV_INIT_ERROR, "EV_INIT_ERROR" },
+ { EV_INIT_OK, "EV_INIT_OK" },
+ { EV_LIFTOFF, "EV_LIFTOFF" },
+ { EV_NC_BACKUP, "EV_NC_BACKUP" },
+ { EV_NC_DETACHED, "EV_NC_DETACHED" },
+ { EV_NC_OPEN, "EV_NC_OPEN" },
+ { EV_NC_TEST, "EV_NC_TEST" },
+ { EV_RESET_SERVO, "EV_RESET_SERVO" },
+ { EV_SEND_HR_TM, "EV_SEND_HR_TM" },
+ { EV_SEND_LR_TM, "EV_SEND_LR_TM" },
+ { EV_SEND_TEST_TM, "EV_SEND_TEST_TM" },
+ { EV_STATS_TIMEOUT, "EV_STATS_TIMEOUT" },
+ { EV_TC_ARM, "EV_TC_ARM" },
+ { EV_TC_CALIBRATE_ADA, "EV_TC_CALIBRATE_ADA" },
+ { EV_TC_CALIBRATE_IMU, "EV_TC_CALIBRATE_IMU" },
+ { EV_TC_CLOSE_LOG, "EV_TC_CLOSE_LOG" },
+ { EV_TC_DISARM, "EV_TC_DISARM" },
+ { EV_TC_END_MISSION, "EV_TC_END_MISSION" },
+ { EV_TC_FORCE_INIT, "EV_TC_FORCE_INIT" },
+ { EV_TC_FORCE_LAUNCH, "EV_TC_FORCE_LAUNCH" },
+ { EV_TC_NC_BACKUP, "EV_TC_NC_BACKUP" },
+ { EV_TC_NC_OPEN, "EV_TC_NC_OPEN" },
+ { EV_TC_RESET, "EV_TC_RESET" },
+ { EV_TC_RESET_SERVO, "EV_TC_RESET_SERVO" },
+ { EV_TC_TEST_MODE, "EV_TC_TEST_MODE" },
+ { EV_TC_WIGGLE_SERVO, "EV_TC_WIGGLE_SERVO" },
+ { EV_TIMEOUT_BACKUP, "EV_TIMEOUT_BACKUP" },
+ { EV_TIMEOUT_END_MISSION, "EV_TIMEOUT_END_MISSION" },
+ { EV_TIMEOUT_NC_OPEN, "EV_TIMEOUT_NC_OPEN" },
+ { EV_TIMEOUT_SHADOW_MODE, "EV_TIMEOUT_SHADOW_MODE" },
+ { EV_UMBILICAL_DETACHED, "EV_UMBILICAL_DETACHED" },
+ { EV_WIGGLE_SERVO, "EV_WIGGLE_SERVO" }
+ };
+ auto it = event_string_map.find(event);
+ return it == event_string_map.end() ? "EV_UNKNOWN" : it->second;
+}
+
+string getTopicString(uint8_t topic)
+{
+ static const map<uint8_t, string> topic_string_map{
+ { TOPIC_ADA, "TOPIC_ADA" },
+ { TOPIC_DPL, "TOPIC_DPL" },
+ { TOPIC_FLIGHT, "TOPIC_FLIGHT" },
+ { TOPIC_FMM, "TOPIC_FMM" },
+ { TOPIC_PINS, "TOPIC_PINS" },
+ { TOPIC_STATS, "TOPIC_STATS" },
+ { TOPIC_TMTC, "TOPIC_TMTC" }
+ };
+ auto it = topic_string_map.find(topic);
+ return it == topic_string_map.end() ? "TOPIC_UNKNOWN" : it->second;
+}
\ No newline at end of file
diff --git a/scripts/eventgen/generated/Events.h b/scripts/eventgen/generated/Events.h
new file mode 100644
index 0000000000000000000000000000000000000000..702a385b310b413438209e5f781eeb0e3fc78b5b
--- /dev/null
+++ b/scripts/eventgen/generated/Events.h
@@ -0,0 +1,97 @@
+/* Copyright (c) 2018-2020 Skyward Experimental Rocketry
+ * Authors: Luca Erbetta, Alvise de' Faveri Tron
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/*
+ ******************************************************************************
+ * THIS FILE IS AUTOGENERATED. DO NOT EDIT. *
+ ******************************************************************************
+ */
+
+// Autogen date: 2020-03-10 02:43:07.380770
+
+#pragma once
+
+#include <cstdint>
+#include <string>
+
+#include "events/Event.h"
+#include "events/EventBroker.h"
+#include "EventClasses.h"
+#include "Topics.h"
+
+using std::string;
+using std::map;
+
+/**
+ * Definition of all events in the Homeone Board software
+ * Refer to section 5.1.1 of the Software Design Document.
+ */
+enum Events : uint8_t
+{
+ EV_ADA_APOGEE_DETECTED = EV_FIRST_SIGNAL,
+ EV_ADA_READY,
+ EV_APOGEE,
+ EV_ARMED,
+ EV_CALIBRATE_ADA,
+ EV_DISARMED,
+ EV_IMU_READY,
+ EV_INIT_ERROR,
+ EV_INIT_OK,
+ EV_LIFTOFF,
+ EV_NC_BACKUP,
+ EV_NC_DETACHED,
+ EV_NC_OPEN,
+ EV_NC_TEST,
+ EV_RESET_SERVO,
+ EV_SEND_HR_TM,
+ EV_SEND_LR_TM,
+ EV_SEND_TEST_TM,
+ EV_STATS_TIMEOUT,
+ EV_TC_ARM,
+ EV_TC_CALIBRATE_ADA,
+ EV_TC_CALIBRATE_IMU,
+ EV_TC_CLOSE_LOG,
+ EV_TC_DISARM,
+ EV_TC_END_MISSION,
+ EV_TC_FORCE_INIT,
+ EV_TC_FORCE_LAUNCH,
+ EV_TC_NC_BACKUP,
+ EV_TC_NC_OPEN,
+ EV_TC_RESET,
+ EV_TC_RESET_SERVO,
+ EV_TC_TEST_MODE,
+ EV_TC_WIGGLE_SERVO,
+ EV_TIMEOUT_BACKUP,
+ EV_TIMEOUT_END_MISSION,
+ EV_TIMEOUT_NC_OPEN,
+ EV_TIMEOUT_SHADOW_MODE,
+ EV_UMBILICAL_DETACHED,
+ EV_WIGGLE_SERVO
+};
+
+/**
+ * @brief Returns the name of the provided event
+ *
+ * @param event
+ * @return string
+ */
+string getEventString(uint8_t event);
\ No newline at end of file
diff --git a/scripts/eventgen/generated/Topics.h b/scripts/eventgen/generated/Topics.h
new file mode 100644
index 0000000000000000000000000000000000000000..7d27de00dd459eb8315718d3a8cc5fc89c131bd9
--- /dev/null
+++ b/scripts/eventgen/generated/Topics.h
@@ -0,0 +1,60 @@
+/* Copyright (c) 2018-2020 Skyward Experimental Rocketry
+ * Authors: Luca Erbetta, Alvise de' Faveri Tron
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/*
+ ******************************************************************************
+ * THIS FILE IS AUTOGENERATED. DO NOT EDIT. *
+ ******************************************************************************
+ */
+
+// Autogen date: 2020-03-10 02:43:07.380770
+
+#pragma once
+
+#include <stdint.h>
+#include <string>
+
+using std::map;
+using std::string;
+
+/**
+ * Definition of various event topics to use in the EventBroker
+ */
+enum Topics : uint8_t
+{
+ TOPIC_ADA,
+ TOPIC_DPL,
+ TOPIC_FLIGHT,
+ TOPIC_FMM,
+ TOPIC_PINS,
+ TOPIC_STATS,
+ TOPIC_TMTC
+};
+
+/**
+ * @brief Returns the name of the provided event
+ *
+ * @param event
+ * @return string
+ */
+string getTopicString(uint8_t topic);
+