mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
C2: Add AppError support
This commit is contained in:
committed by
Kyle Schwarz
parent
3d99898598
commit
d86e3164af
@@ -7,6 +7,7 @@
|
|||||||
#include "icsneo/communication/message/message.h"
|
#include "icsneo/communication/message/message.h"
|
||||||
#include "icsneo/communication/message/canmessage.h"
|
#include "icsneo/communication/message/canmessage.h"
|
||||||
#include "icsneo/communication/message/canerrormessage.h"
|
#include "icsneo/communication/message/canerrormessage.h"
|
||||||
|
#include "icsneo/communication/message/apperrormessage.h"
|
||||||
#include "icsneo/communication/message/linmessage.h"
|
#include "icsneo/communication/message/linmessage.h"
|
||||||
#include "icsneo/communication/message/ethernetmessage.h"
|
#include "icsneo/communication/message/ethernetmessage.h"
|
||||||
#include "icsneo/communication/packet/canpacket.h"
|
#include "icsneo/communication/packet/canpacket.h"
|
||||||
@@ -316,6 +317,44 @@ icsneoc2_error_t icsneoc2_message_can_error_props_get(
|
|||||||
return icsneoc2_error_success;
|
return icsneoc2_error_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
icsneoc2_error_t icsneoc2_message_is_app_error(icsneoc2_message_t* message, bool* is_app_error) {
|
||||||
|
if(!message || !is_app_error) {
|
||||||
|
return icsneoc2_error_invalid_parameters;
|
||||||
|
}
|
||||||
|
*is_app_error = std::dynamic_pointer_cast<AppErrorMessage>(message->message) != nullptr;
|
||||||
|
return icsneoc2_error_success;
|
||||||
|
}
|
||||||
|
|
||||||
|
icsneoc2_error_t icsneoc2_message_app_error_props_get(icsneoc2_message_t* message,
|
||||||
|
icsneoc2_app_error_type_t* error_type, icsneoc2_netid_t* error_netid) {
|
||||||
|
if(!message) {
|
||||||
|
return icsneoc2_error_invalid_parameters;
|
||||||
|
}
|
||||||
|
auto app_err = std::dynamic_pointer_cast<AppErrorMessage>(message->message);
|
||||||
|
if(!app_err) {
|
||||||
|
return icsneoc2_error_invalid_type;
|
||||||
|
}
|
||||||
|
if(error_type) {
|
||||||
|
*error_type = static_cast<icsneoc2_app_error_type_t>(app_err->getAppErrorType());
|
||||||
|
}
|
||||||
|
if(error_netid) {
|
||||||
|
*error_netid = static_cast<icsneoc2_netid_t>(app_err->errorNetID);
|
||||||
|
}
|
||||||
|
return icsneoc2_error_success;
|
||||||
|
}
|
||||||
|
|
||||||
|
icsneoc2_error_t icsneoc2_message_app_error_string_get(icsneoc2_message_t* message,
|
||||||
|
char* value, size_t* value_length) {
|
||||||
|
if(!message || !value_length) {
|
||||||
|
return icsneoc2_error_invalid_parameters;
|
||||||
|
}
|
||||||
|
auto app_err = std::dynamic_pointer_cast<AppErrorMessage>(message->message);
|
||||||
|
if(!app_err) {
|
||||||
|
return icsneoc2_error_invalid_type;
|
||||||
|
}
|
||||||
|
return safe_str_copy(value, value_length, app_err->getAppErrorString()) ? icsneoc2_error_success : icsneoc2_error_string_copy_failed;
|
||||||
|
}
|
||||||
|
|
||||||
icsneoc2_error_t icsneoc2_message_is_lin(icsneoc2_message_t* message, bool* is_lin) {
|
icsneoc2_error_t icsneoc2_message_is_lin(icsneoc2_message_t* message, bool* is_lin) {
|
||||||
if(!message || !is_lin) {
|
if(!message || !is_lin) {
|
||||||
return icsneoc2_error_invalid_parameters;
|
return icsneoc2_error_invalid_parameters;
|
||||||
|
|||||||
@@ -359,6 +359,7 @@ int process_messages(icsneoc2_message_t** messages, size_t messages_count) {
|
|||||||
// Print the type and bus type of each message
|
// Print the type and bus type of each message
|
||||||
size_t tx_count = 0;
|
size_t tx_count = 0;
|
||||||
size_t can_error_count = 0;
|
size_t can_error_count = 0;
|
||||||
|
size_t app_error_count = 0;
|
||||||
for(size_t i = 0; i < messages_count; i++) {
|
for(size_t i = 0; i < messages_count; i++) {
|
||||||
icsneoc2_message_t* message = messages[i];
|
icsneoc2_message_t* message = messages[i];
|
||||||
|
|
||||||
@@ -392,6 +393,27 @@ int process_messages(icsneoc2_message_t** messages, size_t messages_count) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for application error messages
|
||||||
|
bool is_app_error = false;
|
||||||
|
res = icsneoc2_message_is_app_error(message, &is_app_error);
|
||||||
|
if(res != icsneoc2_error_success) {
|
||||||
|
return print_error_code("\tFailed to check if message is an app error", res);
|
||||||
|
}
|
||||||
|
if(is_app_error) {
|
||||||
|
icsneoc2_app_error_type_t error_type = icsneoc2_app_error_type_no_error;
|
||||||
|
icsneoc2_netid_t error_netid = 0;
|
||||||
|
char description[256] = {0};
|
||||||
|
size_t description_length = sizeof(description);
|
||||||
|
res = icsneoc2_message_app_error_props_get(message, &error_type, &error_netid);
|
||||||
|
res += icsneoc2_message_app_error_string_get(message, description, &description_length);
|
||||||
|
if(res != icsneoc2_error_success) {
|
||||||
|
return print_error_code("\tFailed to get app error properties", res);
|
||||||
|
}
|
||||||
|
printf("\t%zd) App Error (type %u) on netid 0x%x: %s\n", i, error_type, error_netid, description);
|
||||||
|
app_error_count++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
bool is_frame = false;
|
bool is_frame = false;
|
||||||
res = icsneoc2_message_is_frame(message, &is_frame);
|
res = icsneoc2_message_is_frame(message, &is_frame);
|
||||||
if(res != icsneoc2_error_success) {
|
if(res != icsneoc2_error_success) {
|
||||||
@@ -472,7 +494,7 @@ int process_messages(icsneoc2_message_t** messages, size_t messages_count) {
|
|||||||
printf(" ]\n");
|
printf(" ]\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("\tReceived %zu messages total, %zu were TX messages, %zu were CAN errors\n", messages_count, tx_count, can_error_count);
|
printf("\tReceived %zu messages total, %zu were TX messages, %zu were CAN errors, %zu were app errors\n", messages_count, tx_count, can_error_count, app_error_count);
|
||||||
|
|
||||||
return icsneoc2_error_success;
|
return icsneoc2_error_success;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
#include "icsneo/communication/message/message.h"
|
#include "icsneo/communication/message/message.h"
|
||||||
|
#include "icsneo/icsneoc2types.h"
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "icsneo/api/eventmanager.h"
|
#include "icsneo/api/eventmanager.h"
|
||||||
@@ -11,57 +12,57 @@
|
|||||||
|
|
||||||
namespace icsneo {
|
namespace icsneo {
|
||||||
|
|
||||||
enum class AppErrorType : uint16_t {
|
enum class AppErrorType : icsneoc2_app_error_type_t {
|
||||||
AppErrorRxMessagesFull = 0,
|
AppErrorRxMessagesFull = icsneoc2_app_error_type_rx_messages_full,
|
||||||
AppErrorTxMessagesFull = 1,
|
AppErrorTxMessagesFull = icsneoc2_app_error_type_tx_messages_full,
|
||||||
AppErrorTxReportMessagesFull = 2,
|
AppErrorTxReportMessagesFull = icsneoc2_app_error_type_tx_report_messages_full,
|
||||||
AppErrorBadCommWithDspIC = 3,
|
AppErrorBadCommWithDspIC = icsneoc2_app_error_type_bad_comm_with_dsp_ic,
|
||||||
AppErrorDriverOverflow = 4,
|
AppErrorDriverOverflow = icsneoc2_app_error_type_driver_overflow,
|
||||||
AppErrorPCBuffOverflow = 5,
|
AppErrorPCBuffOverflow = icsneoc2_app_error_type_pc_buff_overflow,
|
||||||
AppErrorPCChksumError = 6,
|
AppErrorPCChksumError = icsneoc2_app_error_type_pc_chksum_error,
|
||||||
AppErrorPCMissedByte = 7,
|
AppErrorPCMissedByte = icsneoc2_app_error_type_pc_missed_byte,
|
||||||
AppErrorPCOverrunError = 8,
|
AppErrorPCOverrunError = icsneoc2_app_error_type_pc_overrun_error,
|
||||||
AppErrorSettingFailure = 9,
|
AppErrorSettingFailure = icsneoc2_app_error_type_setting_failure,
|
||||||
AppErrorTooManySelectedNetworks = 10,
|
AppErrorTooManySelectedNetworks = icsneoc2_app_error_type_too_many_selected_networks,
|
||||||
AppErrorNetworkNotEnabled = 11,
|
AppErrorNetworkNotEnabled = icsneoc2_app_error_type_network_not_enabled,
|
||||||
AppErrorRtcNotCorrect = 12,
|
AppErrorRtcNotCorrect = icsneoc2_app_error_type_rtc_not_correct,
|
||||||
AppErrorLoadedDefaultSettings = 13,
|
AppErrorLoadedDefaultSettings = icsneoc2_app_error_type_loaded_default_settings,
|
||||||
AppErrorFeatureNotUnlocked = 14,
|
AppErrorFeatureNotUnlocked = icsneoc2_app_error_type_feature_not_unlocked,
|
||||||
AppErrorFeatureRtcCmdDropped = 15,
|
AppErrorFeatureRtcCmdDropped = icsneoc2_app_error_type_feature_rtc_cmd_dropped,
|
||||||
AppErrorTxMessagesFlushed = 16,
|
AppErrorTxMessagesFlushed = icsneoc2_app_error_type_tx_messages_flushed,
|
||||||
AppErrorTxMessagesHalfFull = 17,
|
AppErrorTxMessagesHalfFull = icsneoc2_app_error_type_tx_messages_half_full,
|
||||||
AppErrorNetworkNotValid = 18,
|
AppErrorNetworkNotValid = icsneoc2_app_error_type_network_not_valid,
|
||||||
AppErrorTxInterfaceNotImplemented = 19,
|
AppErrorTxInterfaceNotImplemented = icsneoc2_app_error_type_tx_interface_not_implemented,
|
||||||
AppErrorTxMessagesCommEnableIsOff = 20,
|
AppErrorTxMessagesCommEnableIsOff = icsneoc2_app_error_type_tx_messages_comm_enable_is_off,
|
||||||
AppErrorRxFilterMatchCountExceeded = 21,
|
AppErrorRxFilterMatchCountExceeded = icsneoc2_app_error_type_rx_filter_match_count_exceeded,
|
||||||
AppErrorEthPreemptionNotEnabled = 22,
|
AppErrorEthPreemptionNotEnabled = icsneoc2_app_error_type_eth_preemption_not_enabled,
|
||||||
AppErrorTxNotSupportedInMode = 23,
|
AppErrorTxNotSupportedInMode = icsneoc2_app_error_type_tx_not_supported_in_mode,
|
||||||
AppErrorJumboFramesNotSupported = 24,
|
AppErrorJumboFramesNotSupported = icsneoc2_app_error_type_jumbo_frames_not_supported,
|
||||||
AppErrorEthernetIpFragment = 25,
|
AppErrorEthernetIpFragment = icsneoc2_app_error_type_ethernet_ip_fragment,
|
||||||
AppErrorTxMessagesUnderrun = 26,
|
AppErrorTxMessagesUnderrun = icsneoc2_app_error_type_tx_messages_underrun,
|
||||||
AppErrorDeviceFanFailure = 27,
|
AppErrorDeviceFanFailure = icsneoc2_app_error_type_device_fan_failure,
|
||||||
AppErrorDeviceOvertemperature = 28,
|
AppErrorDeviceOvertemperature = icsneoc2_app_error_type_device_overtemperature,
|
||||||
AppErrorTxMessageIndexOutOfRange = 29,
|
AppErrorTxMessageIndexOutOfRange = icsneoc2_app_error_type_tx_message_index_out_of_range,
|
||||||
AppErrorUndersizedFrameDropped = 30,
|
AppErrorUndersizedFrameDropped = icsneoc2_app_error_type_undersized_frame_dropped,
|
||||||
AppErrorOversizedFrameDropped = 31,
|
AppErrorOversizedFrameDropped = icsneoc2_app_error_type_oversized_frame_dropped,
|
||||||
AppErrorWatchdogEvent = 32,
|
AppErrorWatchdogEvent = icsneoc2_app_error_type_watchdog_event,
|
||||||
AppErrorSystemClockFailure = 33,
|
AppErrorSystemClockFailure = icsneoc2_app_error_type_system_clock_failure,
|
||||||
AppErrorSystemClockRecovered = 34,
|
AppErrorSystemClockRecovered = icsneoc2_app_error_type_system_clock_recovered,
|
||||||
AppErrorSystemPeripheralReset = 35,
|
AppErrorSystemPeripheralReset = icsneoc2_app_error_type_system_peripheral_reset,
|
||||||
AppErrorSystemCommunicationFailure = 36,
|
AppErrorSystemCommunicationFailure = icsneoc2_app_error_type_system_communication_failure,
|
||||||
AppErrorTxMessagesUnsupportedSourceOrPacketId = 37,
|
AppErrorTxMessagesUnsupportedSourceOrPacketId = icsneoc2_app_error_type_tx_messages_unsupported_source_or_packet_id,
|
||||||
AppErrorWbmsManagerConnectFailed = 38,
|
AppErrorWbmsManagerConnectFailed = icsneoc2_app_error_type_wbms_manager_connect_failed,
|
||||||
AppErrorWbmsManagerConnectBadState = 39,
|
AppErrorWbmsManagerConnectBadState = icsneoc2_app_error_type_wbms_manager_connect_bad_state,
|
||||||
AppErrorWbmsManagerConnectTimeout = 40,
|
AppErrorWbmsManagerConnectTimeout = icsneoc2_app_error_type_wbms_manager_connect_timeout,
|
||||||
AppErrorFailedToInitializeLoggerDisk = 41,
|
AppErrorFailedToInitializeLoggerDisk = icsneoc2_app_error_type_failed_to_initialize_logger_disk,
|
||||||
AppErrorInvalidSetting = 42,
|
AppErrorInvalidSetting = icsneoc2_app_error_type_invalid_setting,
|
||||||
AppErrorSystemFailureRequestedReset = 43,
|
AppErrorSystemFailureRequestedReset = icsneoc2_app_error_type_system_failure_requested_reset,
|
||||||
AppErrorPortKeyMistmatch = 45,
|
AppErrorPortKeyMistmatch = icsneoc2_app_error_type_port_key_mistmatch,
|
||||||
AppErrorBusFailure = 46,
|
AppErrorBusFailure = icsneoc2_app_error_type_bus_failure,
|
||||||
AppErrorTapOverflow = 47,
|
AppErrorTapOverflow = icsneoc2_app_error_type_tap_overflow,
|
||||||
AppErrorEthTxNoLink = 48,
|
AppErrorEthTxNoLink = icsneoc2_app_error_type_eth_tx_no_link,
|
||||||
AppErrorErrorBufferOverflow = 254,
|
AppErrorErrorBufferOverflow = icsneoc2_app_error_type_error_buffer_overflow,
|
||||||
AppNoError = 255
|
AppNoError = icsneoc2_app_error_type_no_error
|
||||||
};
|
};
|
||||||
|
|
||||||
class AppErrorMessage : public RawMessage {
|
class AppErrorMessage : public RawMessage {
|
||||||
|
|||||||
@@ -516,6 +516,42 @@ icsneoc2_error_t icsneoc2_message_can_error_props_get(
|
|||||||
icsneoc2_can_error_code_t *data_error_code,
|
icsneoc2_can_error_code_t *data_error_code,
|
||||||
icsneoc2_message_can_error_flags_t *flags);
|
icsneoc2_message_can_error_flags_t *flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a message is an application error message
|
||||||
|
*
|
||||||
|
* @param[in] message The message to check.
|
||||||
|
* @param[out] is_app_error Pointer to a bool to copy the app error status of the message into.
|
||||||
|
*
|
||||||
|
* @return icsneoc2_error_t icsneoc2_error_success if successful, icsneoc2_error_invalid_parameters otherwise.
|
||||||
|
*/
|
||||||
|
icsneoc2_error_t icsneoc2_message_is_app_error(icsneoc2_message_t* message, bool* is_app_error);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the application error specific properties of a message
|
||||||
|
*
|
||||||
|
* @param[in] message The message to check.
|
||||||
|
* @param[out] error_type Pointer to a icsneoc2_app_error_type_t to copy the error type into. If NULL, it's ignored.
|
||||||
|
* @param[out] error_netid Pointer to a icsneoc2_netid_t to copy the associated network ID into. If NULL, it's ignored.
|
||||||
|
*
|
||||||
|
* @return icsneoc2_error_t icsneoc2_error_success if successful, icsneoc2_error_invalid_parameters or icsneoc2_error_invalid_type otherwise.
|
||||||
|
*
|
||||||
|
* @see icsneoc2_app_error_type_t, icsneoc2_message_app_error_string_get
|
||||||
|
*/
|
||||||
|
icsneoc2_error_t icsneoc2_message_app_error_props_get(icsneoc2_message_t* message,
|
||||||
|
icsneoc2_app_error_type_t* error_type, icsneoc2_netid_t* error_netid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a human-readable description string for an application error message
|
||||||
|
*
|
||||||
|
* @param[in] message The message to check.
|
||||||
|
* @param[out] value Pointer to a char buffer to copy the description into.
|
||||||
|
* @param[in,out] value_length On input, the size of the value buffer; on output, the length of the copied string.
|
||||||
|
*
|
||||||
|
* @return icsneoc2_error_t icsneoc2_error_success if successful, icsneoc2_error_invalid_parameters, icsneoc2_error_invalid_type, or icsneoc2_error_string_copy_failed otherwise.
|
||||||
|
*/
|
||||||
|
icsneoc2_error_t icsneoc2_message_app_error_string_get(icsneoc2_message_t* message,
|
||||||
|
char* value, size_t* value_length);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -465,6 +465,61 @@ typedef uint8_t icsneoc2_can_error_code_t;
|
|||||||
#define ICSNEOC2_MESSAGE_CAN_ERROR_FLAGS_ERROR_PASSIVE 0x02 // Error passive state
|
#define ICSNEOC2_MESSAGE_CAN_ERROR_FLAGS_ERROR_PASSIVE 0x02 // Error passive state
|
||||||
#define ICSNEOC2_MESSAGE_CAN_ERROR_FLAGS_ERROR_WARN 0x04 // Error warning state
|
#define ICSNEOC2_MESSAGE_CAN_ERROR_FLAGS_ERROR_WARN 0x04 // Error warning state
|
||||||
|
|
||||||
|
typedef enum _icsneoc2_app_error_type_t {
|
||||||
|
icsneoc2_app_error_type_rx_messages_full = 0,
|
||||||
|
icsneoc2_app_error_type_tx_messages_full = 1,
|
||||||
|
icsneoc2_app_error_type_tx_report_messages_full = 2,
|
||||||
|
icsneoc2_app_error_type_bad_comm_with_dsp_ic = 3,
|
||||||
|
icsneoc2_app_error_type_driver_overflow = 4,
|
||||||
|
icsneoc2_app_error_type_pc_buff_overflow = 5,
|
||||||
|
icsneoc2_app_error_type_pc_chksum_error = 6,
|
||||||
|
icsneoc2_app_error_type_pc_missed_byte = 7,
|
||||||
|
icsneoc2_app_error_type_pc_overrun_error = 8,
|
||||||
|
icsneoc2_app_error_type_setting_failure = 9,
|
||||||
|
icsneoc2_app_error_type_too_many_selected_networks = 10,
|
||||||
|
icsneoc2_app_error_type_network_not_enabled = 11,
|
||||||
|
icsneoc2_app_error_type_rtc_not_correct = 12,
|
||||||
|
icsneoc2_app_error_type_loaded_default_settings = 13,
|
||||||
|
icsneoc2_app_error_type_feature_not_unlocked = 14,
|
||||||
|
icsneoc2_app_error_type_feature_rtc_cmd_dropped = 15,
|
||||||
|
icsneoc2_app_error_type_tx_messages_flushed = 16,
|
||||||
|
icsneoc2_app_error_type_tx_messages_half_full = 17,
|
||||||
|
icsneoc2_app_error_type_network_not_valid = 18,
|
||||||
|
icsneoc2_app_error_type_tx_interface_not_implemented = 19,
|
||||||
|
icsneoc2_app_error_type_tx_messages_comm_enable_is_off = 20,
|
||||||
|
icsneoc2_app_error_type_rx_filter_match_count_exceeded = 21,
|
||||||
|
icsneoc2_app_error_type_eth_preemption_not_enabled = 22,
|
||||||
|
icsneoc2_app_error_type_tx_not_supported_in_mode = 23,
|
||||||
|
icsneoc2_app_error_type_jumbo_frames_not_supported = 24,
|
||||||
|
icsneoc2_app_error_type_ethernet_ip_fragment = 25,
|
||||||
|
icsneoc2_app_error_type_tx_messages_underrun = 26,
|
||||||
|
icsneoc2_app_error_type_device_fan_failure = 27,
|
||||||
|
icsneoc2_app_error_type_device_overtemperature = 28,
|
||||||
|
icsneoc2_app_error_type_tx_message_index_out_of_range = 29,
|
||||||
|
icsneoc2_app_error_type_undersized_frame_dropped = 30,
|
||||||
|
icsneoc2_app_error_type_oversized_frame_dropped = 31,
|
||||||
|
icsneoc2_app_error_type_watchdog_event = 32,
|
||||||
|
icsneoc2_app_error_type_system_clock_failure = 33,
|
||||||
|
icsneoc2_app_error_type_system_clock_recovered = 34,
|
||||||
|
icsneoc2_app_error_type_system_peripheral_reset = 35,
|
||||||
|
icsneoc2_app_error_type_system_communication_failure = 36,
|
||||||
|
icsneoc2_app_error_type_tx_messages_unsupported_source_or_packet_id = 37,
|
||||||
|
icsneoc2_app_error_type_wbms_manager_connect_failed = 38,
|
||||||
|
icsneoc2_app_error_type_wbms_manager_connect_bad_state = 39,
|
||||||
|
icsneoc2_app_error_type_wbms_manager_connect_timeout = 40,
|
||||||
|
icsneoc2_app_error_type_failed_to_initialize_logger_disk = 41,
|
||||||
|
icsneoc2_app_error_type_invalid_setting = 42,
|
||||||
|
icsneoc2_app_error_type_system_failure_requested_reset = 43,
|
||||||
|
icsneoc2_app_error_type_port_key_mistmatch = 45,
|
||||||
|
icsneoc2_app_error_type_bus_failure = 46,
|
||||||
|
icsneoc2_app_error_type_tap_overflow = 47,
|
||||||
|
icsneoc2_app_error_type_eth_tx_no_link = 48,
|
||||||
|
icsneoc2_app_error_type_error_buffer_overflow = 254,
|
||||||
|
icsneoc2_app_error_type_no_error = 255
|
||||||
|
} _icsneoc2_app_error_type_t;
|
||||||
|
|
||||||
|
typedef uint16_t icsneoc2_app_error_type_t;
|
||||||
|
|
||||||
typedef uint64_t icsneoc2_message_can_error_flags_t;
|
typedef uint64_t icsneoc2_message_can_error_flags_t;
|
||||||
|
|
||||||
typedef enum _icsneoc2_tc10_wake_status_t {
|
typedef enum _icsneoc2_tc10_wake_status_t {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <icsneo/communication/message/linmessage.h>
|
#include <icsneo/communication/message/linmessage.h>
|
||||||
#include <icsneo/communication/message/canmessage.h>
|
#include <icsneo/communication/message/canmessage.h>
|
||||||
#include <icsneo/communication/message/canerrormessage.h>
|
#include <icsneo/communication/message/canerrormessage.h>
|
||||||
|
#include <icsneo/communication/message/apperrormessage.h>
|
||||||
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -174,6 +175,9 @@ TEST(icsneoc2, test_icsneoc2_error_invalid_parameters_and_invalid_device)
|
|||||||
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_valid(NULL, NULL));
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_valid(NULL, NULL));
|
||||||
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_can_error(NULL, NULL));
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_can_error(NULL, NULL));
|
||||||
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_can_error_props_get(NULL, NULL, NULL, NULL, NULL, NULL));
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_can_error_props_get(NULL, NULL, NULL, NULL, NULL, NULL));
|
||||||
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_app_error(NULL, NULL));
|
||||||
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_app_error_props_get(NULL, NULL, NULL));
|
||||||
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_app_error_string_get(NULL, NULL, NULL));
|
||||||
|
|
||||||
// LIN message NULL parameter checks
|
// LIN message NULL parameter checks
|
||||||
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_lin(NULL, NULL));
|
ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_is_lin(NULL, NULL));
|
||||||
@@ -1223,6 +1227,51 @@ TEST(icsneoc2, test_icsneoc2_message_can_error_props_get_invalid_type_for_can_me
|
|||||||
icsneoc2_message_can_error_props_get(&message, &tx_err_count, &rx_err_count, &error_code, &data_error_code, &flags));
|
icsneoc2_message_can_error_props_get(&message, &tx_err_count, &rx_err_count, &error_code, &data_error_code, &flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(icsneoc2, test_icsneoc2_message_app_error_props_get_invalid_type_for_can_message)
|
||||||
|
{
|
||||||
|
icsneoc2_message_t message;
|
||||||
|
message.message = std::make_shared<CANMessage>();
|
||||||
|
|
||||||
|
bool is_app_error = true;
|
||||||
|
ASSERT_EQ(icsneoc2_error_success, icsneoc2_message_is_app_error(&message, &is_app_error));
|
||||||
|
ASSERT_FALSE(is_app_error);
|
||||||
|
|
||||||
|
icsneoc2_app_error_type_t error_type = icsneoc2_app_error_type_no_error;
|
||||||
|
icsneoc2_netid_t error_netid = 0;
|
||||||
|
ASSERT_EQ(icsneoc2_error_invalid_type,
|
||||||
|
icsneoc2_message_app_error_props_get(&message, &error_type, &error_netid));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(icsneoc2, test_icsneoc2_message_app_error_props_get)
|
||||||
|
{
|
||||||
|
auto app_err = std::make_shared<icsneo::AppErrorMessage>();
|
||||||
|
app_err->errorType = icsneoc2_app_error_type_pc_buff_overflow;
|
||||||
|
app_err->errorNetID = icsneo::Network::NetID::DWCAN_01;
|
||||||
|
|
||||||
|
icsneoc2_message_t message;
|
||||||
|
message.message = app_err;
|
||||||
|
|
||||||
|
bool is_app_error = false;
|
||||||
|
ASSERT_EQ(icsneoc2_error_success, icsneoc2_message_is_app_error(&message, &is_app_error));
|
||||||
|
ASSERT_TRUE(is_app_error);
|
||||||
|
|
||||||
|
icsneoc2_app_error_type_t error_type = icsneoc2_app_error_type_no_error;
|
||||||
|
icsneoc2_netid_t error_netid = 0;
|
||||||
|
ASSERT_EQ(icsneoc2_error_success, icsneoc2_message_app_error_props_get(&message, &error_type, &error_netid));
|
||||||
|
ASSERT_EQ(error_type, icsneoc2_app_error_type_pc_buff_overflow);
|
||||||
|
ASSERT_EQ(error_netid, static_cast<icsneoc2_netid_t>(icsneo::Network::NetID::DWCAN_01));
|
||||||
|
|
||||||
|
// NULL out-params are ignored
|
||||||
|
ASSERT_EQ(icsneoc2_error_success, icsneoc2_message_app_error_props_get(&message, NULL, NULL));
|
||||||
|
|
||||||
|
// String getter returns the human-readable description
|
||||||
|
char buf[128] = {0};
|
||||||
|
size_t buf_len = sizeof(buf);
|
||||||
|
ASSERT_EQ(icsneoc2_error_success, icsneoc2_message_app_error_string_get(&message, buf, &buf_len));
|
||||||
|
ASSERT_STREQ(buf, "PC buffer overflow");
|
||||||
|
ASSERT_EQ(buf_len, sizeof("PC buffer overflow") - 1);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(icsneoc2, test_icsneoc2_disk_format_enums)
|
TEST(icsneoc2, test_icsneoc2_disk_format_enums)
|
||||||
{
|
{
|
||||||
// Disk layout enum values
|
// Disk layout enum values
|
||||||
@@ -1301,6 +1350,114 @@ TEST(icsneoc2, test_icsneoc2_can_error_code_t)
|
|||||||
ASSERT_EQ(sizeof(icsneoc2_message_can_error_flags_t), sizeof(uint64_t));
|
ASSERT_EQ(sizeof(icsneoc2_message_can_error_flags_t), sizeof(uint64_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(icsneoc2, test_icsneoc2_app_error_type_t)
|
||||||
|
{
|
||||||
|
ASSERT_EQ(sizeof(icsneoc2_app_error_type_t), sizeof(uint16_t));
|
||||||
|
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_rx_messages_full, 0);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_messages_full, 1);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_report_messages_full, 2);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_bad_comm_with_dsp_ic, 3);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_driver_overflow, 4);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_pc_buff_overflow, 5);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_pc_chksum_error, 6);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_pc_missed_byte, 7);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_pc_overrun_error, 8);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_setting_failure, 9);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_too_many_selected_networks, 10);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_network_not_enabled, 11);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_rtc_not_correct, 12);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_loaded_default_settings, 13);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_feature_not_unlocked, 14);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_feature_rtc_cmd_dropped, 15);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_messages_flushed, 16);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_messages_half_full, 17);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_network_not_valid, 18);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_interface_not_implemented, 19);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_messages_comm_enable_is_off, 20);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_rx_filter_match_count_exceeded, 21);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_eth_preemption_not_enabled, 22);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_not_supported_in_mode, 23);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_jumbo_frames_not_supported, 24);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_ethernet_ip_fragment, 25);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_messages_underrun, 26);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_device_fan_failure, 27);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_device_overtemperature, 28);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_message_index_out_of_range, 29);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_undersized_frame_dropped, 30);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_oversized_frame_dropped, 31);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_watchdog_event, 32);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_system_clock_failure, 33);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_system_clock_recovered, 34);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_system_peripheral_reset, 35);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_system_communication_failure, 36);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tx_messages_unsupported_source_or_packet_id, 37);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_wbms_manager_connect_failed, 38);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_wbms_manager_connect_bad_state, 39);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_wbms_manager_connect_timeout, 40);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_failed_to_initialize_logger_disk, 41);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_invalid_setting, 42);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_system_failure_requested_reset, 43);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_port_key_mistmatch, 45);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_bus_failure, 46);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_tap_overflow, 47);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_eth_tx_no_link, 48);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_error_buffer_overflow, 254);
|
||||||
|
ASSERT_EQ(icsneoc2_app_error_type_no_error, 255);
|
||||||
|
|
||||||
|
using _T = icsneo::AppErrorType;
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorRxMessagesFull), icsneoc2_app_error_type_rx_messages_full);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessagesFull), icsneoc2_app_error_type_tx_messages_full);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxReportMessagesFull), icsneoc2_app_error_type_tx_report_messages_full);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorBadCommWithDspIC), icsneoc2_app_error_type_bad_comm_with_dsp_ic);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorDriverOverflow), icsneoc2_app_error_type_driver_overflow);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorPCBuffOverflow), icsneoc2_app_error_type_pc_buff_overflow);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorPCChksumError), icsneoc2_app_error_type_pc_chksum_error);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorPCMissedByte), icsneoc2_app_error_type_pc_missed_byte);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorPCOverrunError), icsneoc2_app_error_type_pc_overrun_error);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorSettingFailure), icsneoc2_app_error_type_setting_failure);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTooManySelectedNetworks), icsneoc2_app_error_type_too_many_selected_networks);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorNetworkNotEnabled), icsneoc2_app_error_type_network_not_enabled);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorRtcNotCorrect), icsneoc2_app_error_type_rtc_not_correct);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorLoadedDefaultSettings), icsneoc2_app_error_type_loaded_default_settings);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorFeatureNotUnlocked), icsneoc2_app_error_type_feature_not_unlocked);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorFeatureRtcCmdDropped), icsneoc2_app_error_type_feature_rtc_cmd_dropped);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessagesFlushed), icsneoc2_app_error_type_tx_messages_flushed);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessagesHalfFull), icsneoc2_app_error_type_tx_messages_half_full);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorNetworkNotValid), icsneoc2_app_error_type_network_not_valid);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxInterfaceNotImplemented), icsneoc2_app_error_type_tx_interface_not_implemented);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessagesCommEnableIsOff), icsneoc2_app_error_type_tx_messages_comm_enable_is_off);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorRxFilterMatchCountExceeded), icsneoc2_app_error_type_rx_filter_match_count_exceeded);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorEthPreemptionNotEnabled), icsneoc2_app_error_type_eth_preemption_not_enabled);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxNotSupportedInMode), icsneoc2_app_error_type_tx_not_supported_in_mode);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorJumboFramesNotSupported), icsneoc2_app_error_type_jumbo_frames_not_supported);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorEthernetIpFragment), icsneoc2_app_error_type_ethernet_ip_fragment);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessagesUnderrun), icsneoc2_app_error_type_tx_messages_underrun);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorDeviceFanFailure), icsneoc2_app_error_type_device_fan_failure);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorDeviceOvertemperature), icsneoc2_app_error_type_device_overtemperature);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessageIndexOutOfRange), icsneoc2_app_error_type_tx_message_index_out_of_range);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorUndersizedFrameDropped), icsneoc2_app_error_type_undersized_frame_dropped);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorOversizedFrameDropped), icsneoc2_app_error_type_oversized_frame_dropped);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorWatchdogEvent), icsneoc2_app_error_type_watchdog_event);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorSystemClockFailure), icsneoc2_app_error_type_system_clock_failure);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorSystemClockRecovered), icsneoc2_app_error_type_system_clock_recovered);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorSystemPeripheralReset), icsneoc2_app_error_type_system_peripheral_reset);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorSystemCommunicationFailure), icsneoc2_app_error_type_system_communication_failure);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTxMessagesUnsupportedSourceOrPacketId), icsneoc2_app_error_type_tx_messages_unsupported_source_or_packet_id);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorWbmsManagerConnectFailed), icsneoc2_app_error_type_wbms_manager_connect_failed);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorWbmsManagerConnectBadState), icsneoc2_app_error_type_wbms_manager_connect_bad_state);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorWbmsManagerConnectTimeout), icsneoc2_app_error_type_wbms_manager_connect_timeout);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorFailedToInitializeLoggerDisk), icsneoc2_app_error_type_failed_to_initialize_logger_disk);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorInvalidSetting), icsneoc2_app_error_type_invalid_setting);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorSystemFailureRequestedReset), icsneoc2_app_error_type_system_failure_requested_reset);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorPortKeyMistmatch), icsneoc2_app_error_type_port_key_mistmatch);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorBusFailure), icsneoc2_app_error_type_bus_failure);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorTapOverflow), icsneoc2_app_error_type_tap_overflow);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorEthTxNoLink), icsneoc2_app_error_type_eth_tx_no_link);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppErrorErrorBufferOverflow), icsneoc2_app_error_type_error_buffer_overflow);
|
||||||
|
ASSERT_EQ(static_cast<icsneoc2_app_error_type_t>(_T::AppNoError), icsneoc2_app_error_type_no_error);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(icsneoc2, test_icsneoc2_message_can_flags_t)
|
TEST(icsneoc2, test_icsneoc2_message_can_flags_t)
|
||||||
{
|
{
|
||||||
ASSERT_EQ(ICSNEOC2_MESSAGE_CAN_FLAGS_RTR, 0x01);
|
ASSERT_EQ(ICSNEOC2_MESSAGE_CAN_FLAGS_RTR, 0x01);
|
||||||
|
|||||||
Reference in New Issue
Block a user