diff --git a/src/boards/RIGv2/Radio/Radio.cpp b/src/boards/RIGv2/Radio/Radio.cpp index 7bb15b073c595950099acf740145d8fb21531361..2041adfea67e05236b27a1c6ee247f6df6e593b0 100644 --- a/src/boards/RIGv2/Radio/Radio.cpp +++ b/src/boards/RIGv2/Radio/Radio.cpp @@ -181,7 +181,26 @@ void Radio::handleMessage(const mavlink_message_t& msg) uint8_t tmId = mavlink_msg_system_tm_request_tc_get_tm_id(&msg); mavlink_message_t tm; - if (packSystemTm(tmId, tm)) + if (tmId == MAV_SENSORS_STATE_ID) + { + sendAck(msg); + + auto sensors = modules.get<Sensors>()->getSensorInfos(); + for (auto sensor : sensors) + { + mavlink_sensor_state_tm_t tm2; + + strcpy(tm2.sensor_name, sensor.id.c_str()); + tm2.state = (sensor.isInitialized ? 1 : 0) | + (sensor.isEnabled ? 2 : 0); + + mavlink_msg_sensor_state_tm_encode( + Config::Radio::MAV_SYSTEM_ID, + Config::Radio::MAV_COMPONENT_ID, &tm, &tm2); + enqueuePacket(tm); + } + } + else if (packSystemTm(tmId, tm)) { sendAck(msg); enqueuePacket(tm); @@ -274,7 +293,6 @@ void Radio::handleMessage(const mavlink_message_t& msg) void Radio::handleCommand(const mavlink_message_t& msg) { - ModuleManager& modules = ModuleManager::getInstance(); uint8_t cmd = mavlink_msg_command_tc_get_command_id(&msg); switch (cmd) { diff --git a/src/boards/RIGv2/Sensors/Sensors.cpp b/src/boards/RIGv2/Sensors/Sensors.cpp index 9805efde877018f232cb803d5be20fbccdabb71b..85d607cbf9ba4b1b9d363d4534be8ddfddee5ba2 100644 --- a/src/boards/RIGv2/Sensors/Sensors.cpp +++ b/src/boards/RIGv2/Sensors/Sensors.cpp @@ -162,19 +162,22 @@ LoadCellData Sensors::getTankWeight() return {sample.timestamp, load}; } -CurrentData Sensors::getUmbilicalCurrent() { +CurrentData Sensors::getUmbilicalCurrent() +{ auto sample = getInternalADCLastSample(); return {sample.timestamp, sample.voltage[11]}; } -CurrentData Sensors::getServoCurrent() { +CurrentData Sensors::getServoCurrent() +{ auto sample = getInternalADCLastSample(); return {sample.timestamp, sample.voltage[9]}; } -VoltageData Sensors::getBatteryVoltage() { +VoltageData Sensors::getBatteryVoltage() +{ auto sample = getInternalADCLastSample(); return {sample.timestamp, sample.voltage[14]}; @@ -200,6 +203,15 @@ void Sensors::calibrate() tankLcOffset = tankStats.getStats().mean; } +std::vector<SensorInfo> Sensors::getSensorInfos() +{ + return { + manager->getSensorInfo(internalAdc.get()), + manager->getSensorInfo(adc1.get()), + manager->getSensorInfo(tc1.get()), + }; +} + void Sensors::internalAdcInit(Boardcore::SensorManager::SensorMap_t &map) { internalAdc = std::make_unique<InternalADC>(ADC1); diff --git a/src/boards/RIGv2/Sensors/Sensors.h b/src/boards/RIGv2/Sensors/Sensors.h index 43770888a3dd4648eb04c6f146f8d1eb1b3fdbaa..5dfa2c79eca9ce44662c6a4fdc68f5da466a00e0 100644 --- a/src/boards/RIGv2/Sensors/Sensors.h +++ b/src/boards/RIGv2/Sensors/Sensors.h @@ -29,7 +29,9 @@ #include <sensors/SensorManager.h> #include <atomic> +#include <functional> #include <memory> +#include <vector> #include <utils/ModuleManager/ModuleManager.hpp> namespace RIGv2 @@ -64,6 +66,8 @@ public: void calibrate(); + std::vector<Boardcore::SensorInfo> getSensorInfos(); + private: void internalAdcInit(Boardcore::SensorManager::SensorMap_t &map); void internalAdcCallback();