diff --git a/src/boards/Groundstation/Automated/Hub.cpp b/src/boards/Groundstation/Automated/Hub.cpp
index 2f1ade0af87438b7777f60f7eb79ec2e3787137a..d1b3d9845b82ac537d09bf514bd22d968b062e65 100644
--- a/src/boards/Groundstation/Automated/Hub.cpp
+++ b/src/boards/Groundstation/Automated/Hub.cpp
@@ -30,6 +30,7 @@
#include <Groundstation/Common/Config/GeneralConfig.h>
#include <Groundstation/Common/Ports/Serial.h>
#include <algorithms/NAS/NASState.h>
+#include <common/Events.h>
#include <common/Mavlink.h>
#include <logger/Logger.h>
#include <sensors/SensorData.h>
@@ -37,6 +38,7 @@
#include <iostream>
using namespace Antennas;
+using namespace Common;
using namespace Boardcore;
using namespace Groundstation;
using namespace miosix;
@@ -52,6 +54,39 @@ void Hub::dispatchOutgoingMsg(const mavlink_message_t& msg)
switch (msg.msgid)
{
+ case MAVLINK_MSG_ID_ARP_COMMAND_TC:
+ {
+ // Create the map between the commands and the corresponding events
+ static const std::map<MavArpCommandList, Events> commandToEvent{
+ {MAV_ARP_CMD_FORCE_INIT, TMTC_ARP_FORCE_INIT},
+ {MAV_ARP_CMD_RESET_ALGORITHM, TMTC_ARP_RESET_ALGORITHM},
+ {MAV_ARP_CMD_RESET_BOARD, TMTC_ARP_RESET_BOARD},
+ {MAV_ARP_CMD_FORCE_NO_FEEDBACK, TMTC_ARP_FORCE_NO_FEEDBACK},
+ {MAV_ARP_CMD_ARM, TMTC_ARP_ARM},
+ {MAV_ARP_CMD_DISARM, TMTC_ARP_DISARM},
+ {MAV_ARP_CMD_CALIBRATE, TMTC_ARP_CALIBRATE},
+ {MAV_ARP_CMD_ENTER_TEST_MODE, TMTC_ARP_ENTER_TEST_MODE},
+ {MAV_ARP_CMD_EXIT_TEST_MODE, TMTC_ARP_EXIT_TEST_MODE},
+ };
+
+ MavArpCommandList commandId = static_cast<MavArpCommandList>(
+ mavlink_msg_arp_command_tc_get_command_id(&msg));
+
+ auto it = commandToEvent.find(commandId);
+
+ if (it != commandToEvent.end())
+ {
+ EventBroker::getInstance().post(it->second, TOPIC_TMTC);
+ }
+ else
+ {
+ return sendNack(msg);
+ }
+
+ // Acknowledge the message
+ sendAck(msg);
+ break;
+ }
case MAVLINK_MSG_ID_SET_STEPPER_ANGLE_TC:
{
StepperList stepperId = static_cast<StepperList>(