mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 06:28:27 -04:00
AP_Generator: IE 2400: fix V2 low and critical errors and add warnings
This commit is contained in:
parent
c91407d662
commit
36dd720e78
@ -359,6 +359,12 @@ AP_BattMonitor::Failsafe AP_Generator_IE_2400::update_failsafes() const
|
|||||||
// Check for error codes that are deemed critical
|
// Check for error codes that are deemed critical
|
||||||
bool AP_Generator_IE_2400::is_critical_error(const uint32_t err_in) const
|
bool AP_Generator_IE_2400::is_critical_error(const uint32_t err_in) const
|
||||||
{
|
{
|
||||||
|
// V2 protocol
|
||||||
|
if (_version == ProtocolVersion::V2) {
|
||||||
|
return err_in > 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
// V1 protocol
|
||||||
switch ((ErrorCode)err_in) {
|
switch ((ErrorCode)err_in) {
|
||||||
// Error codes that lead to critical action battery monitor failsafe
|
// Error codes that lead to critical action battery monitor failsafe
|
||||||
case ErrorCode::BATTERY_CRITICAL:
|
case ErrorCode::BATTERY_CRITICAL:
|
||||||
@ -375,6 +381,12 @@ bool AP_Generator_IE_2400::is_critical_error(const uint32_t err_in) const
|
|||||||
// Check for error codes that are deemed severe and would be cause to trigger a battery monitor low failsafe action
|
// Check for error codes that are deemed severe and would be cause to trigger a battery monitor low failsafe action
|
||||||
bool AP_Generator_IE_2400::is_low_error(const uint32_t err_in) const
|
bool AP_Generator_IE_2400::is_low_error(const uint32_t err_in) const
|
||||||
{
|
{
|
||||||
|
// V2 protocol
|
||||||
|
if (_version == ProtocolVersion::V2) {
|
||||||
|
return (err_in >= 10) && (err_in <= 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
// V1 protocol
|
||||||
switch ((ErrorCode)err_in) {
|
switch ((ErrorCode)err_in) {
|
||||||
// Error codes that lead to critical action battery monitor failsafe
|
// Error codes that lead to critical action battery monitor failsafe
|
||||||
case ErrorCode::START_DENIED:
|
case ErrorCode::START_DENIED:
|
||||||
@ -382,7 +394,6 @@ bool AP_Generator_IE_2400::is_low_error(const uint32_t err_in) const
|
|||||||
case ErrorCode::BATTERY_LOW:
|
case ErrorCode::BATTERY_LOW:
|
||||||
case ErrorCode::PRESSURE_LOW:
|
case ErrorCode::PRESSURE_LOW:
|
||||||
case ErrorCode::SPM_LOST:
|
case ErrorCode::SPM_LOST:
|
||||||
case ErrorCode::REDUCED_POWER:
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -399,7 +410,7 @@ bool AP_Generator_IE_2400::check_for_err_code(char* msg_txt, uint8_t msg_len) co
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_version == ProtocolVersion::V2) && (strlen(_valid_V2.info_str) > 0)) {
|
if (_version == ProtocolVersion::V2) {
|
||||||
hal.util->snprintf(msg_txt, msg_len, "Fuel cell err %u.%u: %s", (unsigned)_err_code, (unsigned)_sub_err_code, _valid_V2.info_str);
|
hal.util->snprintf(msg_txt, msg_len, "Fuel cell err %u.%u: %s", (unsigned)_err_code, (unsigned)_sub_err_code, _valid_V2.info_str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -408,6 +419,38 @@ bool AP_Generator_IE_2400::check_for_err_code(char* msg_txt, uint8_t msg_len) co
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AP_Generator_IE_2400::check_for_warning_code(char* msg_txt, uint8_t msg_len) const
|
||||||
|
{
|
||||||
|
if (_err_code == 0) {
|
||||||
|
// No error nothing to do.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (is_critical_error(_err_code) || is_low_error(_err_code)) {
|
||||||
|
// Critical or low error are already reported
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (_version) {
|
||||||
|
case ProtocolVersion::DETECTING:
|
||||||
|
case ProtocolVersion::UNKNOWN:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ProtocolVersion::LEGACY:
|
||||||
|
if ((ErrorCode)_err_code == ErrorCode::REDUCED_POWER) {
|
||||||
|
hal.util->snprintf(msg_txt, msg_len, "Fuel cell reduced power <%u>", (unsigned)_err_code);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ProtocolVersion::V2:
|
||||||
|
hal.util->snprintf(msg_txt, msg_len, "Fuel cell warning %u.%u: %s", (unsigned)_err_code, (unsigned)_sub_err_code, _valid_V2.info_str);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
hal.util->snprintf(msg_txt, msg_len, "Fuel cell warning code <%u>", (unsigned)_err_code);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#if HAL_LOGGING_ENABLED
|
#if HAL_LOGGING_ENABLED
|
||||||
// log generator status to the onboard log
|
// log generator status to the onboard log
|
||||||
void AP_Generator_IE_2400::log_write()
|
void AP_Generator_IE_2400::log_write()
|
||||||
|
@ -34,6 +34,9 @@ private:
|
|||||||
// Check if we have received an error code and populate message with error code
|
// Check if we have received an error code and populate message with error code
|
||||||
bool check_for_err_code(char* msg_txt, uint8_t msg_len) const override;
|
bool check_for_err_code(char* msg_txt, uint8_t msg_len) const override;
|
||||||
|
|
||||||
|
// Check if we have received an warning code and populate message with warning code
|
||||||
|
bool check_for_warning_code(char* msg_txt, uint8_t msg_len) const override;
|
||||||
|
|
||||||
// Check for error codes that are deemed critical
|
// Check for error codes that are deemed critical
|
||||||
bool is_critical_error(const uint32_t err_in) const;
|
bool is_critical_error(const uint32_t err_in) const;
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ bool AP_Generator_IE_FuelCell::check_for_err_code_if_changed(char* msg_txt, uint
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_for_err_code(msg_txt, msg_len)) {
|
if (check_for_err_code(msg_txt, msg_len) || check_for_warning_code(msg_txt, msg_len)) {
|
||||||
_last_err_code = _err_code;
|
_last_err_code = _err_code;
|
||||||
_last_sub_err_code = _sub_err_code;
|
_last_sub_err_code = _sub_err_code;
|
||||||
return true;
|
return true;
|
||||||
|
@ -105,6 +105,9 @@ protected:
|
|||||||
// Check error codes and populate message with error code
|
// Check error codes and populate message with error code
|
||||||
virtual bool check_for_err_code(char* msg_txt, uint8_t msg_len) const = 0;
|
virtual bool check_for_err_code(char* msg_txt, uint8_t msg_len) const = 0;
|
||||||
|
|
||||||
|
// Check if we have received an warning code and populate message with warning code
|
||||||
|
virtual bool check_for_warning_code(char* msg_txt, uint8_t msg_len) const { return false; }
|
||||||
|
|
||||||
// Only check the error code if it has changed since we last checked
|
// Only check the error code if it has changed since we last checked
|
||||||
bool check_for_err_code_if_changed(char* msg_txt, uint8_t msg_len);
|
bool check_for_err_code_if_changed(char* msg_txt, uint8_t msg_len);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user