diff --git a/msg/vehicle_status_flags.msg b/msg/vehicle_status_flags.msg index 782a46e01e..af9ca66099 100644 --- a/msg/vehicle_status_flags.msg +++ b/msg/vehicle_status_flags.msg @@ -34,6 +34,7 @@ bool rc_input_blocked # set if RC input should be bool rc_calibration_valid # set if RC calibration is valid bool vtol_transition_failure # Set to true if vtol transition failed bool usb_connected # status of the USB power supply +bool sd_card_detected_once # set to true if the SD card was detected bool avoidance_system_required # Set to true if avoidance system is enabled via COM_OBS_AVOID parameter bool avoidance_system_valid # Status of the obstacle avoidance system diff --git a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.cpp b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.cpp index 027782b269..830210f6df 100644 --- a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.cpp +++ b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.cpp @@ -64,7 +64,7 @@ bool PreFlightCheck::preflightCheck(orb_advert_t *mavlink_log_pub, vehicle_statu bool failed = false; failed = failed || !airframeCheck(mavlink_log_pub, status); - failed = failed || !sdcardCheck(mavlink_log_pub, report_failures); + failed = failed || !sdcardCheck(mavlink_log_pub, status_flags.sd_card_detected_once, report_failures); /* ---- MAG ---- */ { diff --git a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp index f7df78d659..5fb1b6647f 100644 --- a/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp +++ b/src/modules/commander/Arming/PreFlightCheck/PreFlightCheck.hpp @@ -119,5 +119,5 @@ private: static bool manualControlCheck(orb_advert_t *mavlink_log_pub, const bool report_fail); static bool airframeCheck(orb_advert_t *mavlink_log_pub, const vehicle_status_s &status); static bool cpuResourceCheck(orb_advert_t *mavlink_log_pub, const bool report_fail); - static bool sdcardCheck(orb_advert_t *mavlink_log_pub, const bool report_fail); + static bool sdcardCheck(orb_advert_t *mavlink_log_pub, bool &sd_card_detected_once, const bool report_fail); }; diff --git a/src/modules/commander/Arming/PreFlightCheck/checks/sdcardCheck.cpp b/src/modules/commander/Arming/PreFlightCheck/checks/sdcardCheck.cpp index 14ae7805c9..bfcd4d5d34 100644 --- a/src/modules/commander/Arming/PreFlightCheck/checks/sdcardCheck.cpp +++ b/src/modules/commander/Arming/PreFlightCheck/checks/sdcardCheck.cpp @@ -42,7 +42,8 @@ #include #endif -bool PreFlightCheck::sdcardCheck(orb_advert_t *mavlink_log_pub, const bool report_fail) +bool PreFlightCheck::sdcardCheck(orb_advert_t *mavlink_log_pub, bool &sd_card_detected_once, + const bool report_fail) { bool success = true; @@ -50,15 +51,14 @@ bool PreFlightCheck::sdcardCheck(orb_advert_t *mavlink_log_pub, const bool repor param_get(param_find("COM_ARM_SDCARD"), ¶m_com_arm_sdcard); if (param_com_arm_sdcard > 0) { - bool sdcard_present{false}; struct statfs statfs_buf; - if (statfs(PX4_STORAGEDIR, &statfs_buf) == 0) { + if (!sd_card_detected_once && statfs(PX4_STORAGEDIR, &statfs_buf) == 0) { // on NuttX we get a data block count f_blocks and byte count per block f_bsize if an SD card is inserted - sdcard_present = (statfs_buf.f_blocks > 0) && (statfs_buf.f_bsize > 0); + sd_card_detected_once = (statfs_buf.f_blocks > 0) && (statfs_buf.f_bsize > 0); } - if (!sdcard_present) { + if (!sd_card_detected_once) { if (report_fail) { mavlink_log_critical(mavlink_log_pub, "Warning! Missing FMU SD Card."); }