mirror of https://github.com/ArduPilot/ardupilot
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
|
||||
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) {
|
||||
// Error codes that lead to critical action battery monitor failsafe
|
||||
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
|
||||
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) {
|
||||
// Error codes that lead to critical action battery monitor failsafe
|
||||
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::PRESSURE_LOW:
|
||||
case ErrorCode::SPM_LOST:
|
||||
case ErrorCode::REDUCED_POWER:
|
||||
return true;
|
||||
|
||||
default:
|
||||
|
@ -399,7 +410,7 @@ bool AP_Generator_IE_2400::check_for_err_code(char* msg_txt, uint8_t msg_len) co
|
|||
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);
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
// log generator status to the onboard log
|
||||
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
|
||||
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
|
||||
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;
|
||||
}
|
||||
|
||||
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_sub_err_code = _sub_err_code;
|
||||
return true;
|
||||
|
|
|
@ -105,6 +105,9 @@ protected:
|
|||
// Check error codes and populate message with error code
|
||||
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
|
||||
bool check_for_err_code_if_changed(char* msg_txt, uint8_t msg_len);
|
||||
|
||||
|
|
Loading…
Reference in New Issue