mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-28 10:46:33 +08:00
feat(navigator): add logging to surface reason for mission invalidity (#27254)
This commit is contained in:
@@ -64,6 +64,8 @@ MissionFeasibilityChecker::checkMissionFeasible(const mission_s &mission)
|
|||||||
|
|
||||||
// trivial case: A mission with length zero cannot be valid
|
// trivial case: A mission with length zero cannot be valid
|
||||||
if ((int)mission.count <= 0) {
|
if ((int)mission.count <= 0) {
|
||||||
|
mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission rejected: empty\t");
|
||||||
|
events::send(events::ID("navigator_mis_empty"), {events::Log::Error, events::LogInternal::Info}, "Mission rejected: empty");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,6 +87,7 @@ MissionFeasibilityChecker::checkMissionFeasible(const mission_s &mission)
|
|||||||
if (!success) {
|
if (!success) {
|
||||||
_navigator->get_mission_result()->warning = true;
|
_navigator->get_mission_result()->warning = true;
|
||||||
/* not supposed to happen unless the datamanager can't access the SD card, etc. */
|
/* not supposed to happen unless the datamanager can't access the SD card, etc. */
|
||||||
|
logDatamanReadFailure(i, mission.mission_dataman_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,6 +128,7 @@ MissionFeasibilityChecker::checkMissionAgainstGeofence(const mission_s &mission,
|
|||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
/* not supposed to happen unless the datamanager can't access the SD card, etc. */
|
/* not supposed to happen unless the datamanager can't access the SD card, etc. */
|
||||||
|
logDatamanReadFailure(i, mission.mission_dataman_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,3 +156,11 @@ MissionFeasibilityChecker::checkMissionAgainstGeofence(const mission_s &mission,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MissionFeasibilityChecker::logDatamanReadFailure(const size_t mission_item, const uint8_t dataman_id)
|
||||||
|
{
|
||||||
|
mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission rejected: dataman read failed at item %zu (dm_id=%u)\t", mission_item,
|
||||||
|
static_cast<unsigned>(dataman_id));
|
||||||
|
events::send<uint16_t, uint8_t>(events::ID("navigator_mis_dm_read_fail"), {events::Log::Error, events::LogInternal::Info},
|
||||||
|
"Mission rejected: dataman read failed at item {1} (dm_id={2})", static_cast<uint16_t>(mission_item), dataman_id);
|
||||||
|
}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ private:
|
|||||||
FeasibilityChecker _feasibility_checker;
|
FeasibilityChecker _feasibility_checker;
|
||||||
|
|
||||||
bool checkMissionAgainstGeofence(const mission_s &mission, float home_alt, bool home_valid);
|
bool checkMissionAgainstGeofence(const mission_s &mission, float home_alt, bool home_valid);
|
||||||
|
void logDatamanReadFailure(const size_t mission_item, const uint8_t dataman_id);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MissionFeasibilityChecker(Navigator *navigator, DatamanClient &dataman_client) :
|
MissionFeasibilityChecker(Navigator *navigator, DatamanClient &dataman_client) :
|
||||||
|
|||||||
Reference in New Issue
Block a user