#include "string.h" #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4201) // nameless struct/union #endif #if defined(_MSC_VER) #define ALIGNED_(x) __declspec(align(x)) #else #if defined(__GNUC__) #define ALIGNED_(x) __attribute__ ((aligned(x))) #endif #endif // OpenPort "OpenType" Argument Constants #define NEOVI_COMMTYPE_RS232 0 #define NEOVI_COMMTYPE_USB_BULK 1 #define NEOVI_COMMTYPE_USB_ISO_DONT_USE 2 #define NEOVI_COMMTYPE_TCPIP 3 // Hardware constants #define NEODEVICE_UNKNOWN 0 #define NEODEVICE_BLUE 1 #define NEODEVICE_SW_VCAN 2 #define NEODEVICE_DW_VCAN 4 #define NEODEVICE_FIRE 8 #define NEODEVICE_VCAN3 16 #define NEODEVICE_YELLOW 32 // Deprecated #define NEODEVICE_RED 64 #define NEODEVICE_ECU 128 #define NEODEVICE_IEVB 256 #define NEODEVICE_PENDANT 512 #define NEODEVICE_VIRTUAL_NEOVI 1024 #define NEODEVICE_ECUCHIP_UART 2048 #define NEODEVICE_PLASMA_1_11 0x1000 #define NEODEVICE_PLASMA_1_12 0x10000 #define NEODEVICE_PLASMA_1_13 0x20000 #define NEODEVICE_ANY_PLASMA 0x31000 #define NEODEVICE_FIRE_VNET 0x2000 #define NEODEVICE_NEOANALOG 0x4000 #define NEODEVICE_ION_2 0x40000 #define NEODEVICE_ION_3 0x100000 #define NEODEVICE_ANY_ION 0x140000 #define NEODEVICE_RADSTAR 0x80000 #define NEODEVICE_VCANFD 0x200000 #define NEODEVICE_VCAN412 0x400000 #define NEODEVICE_ECU25 0x800000 #define NEODEVICE_EEVB 0x1000000 #define NEODEVICE_VCANRF 0x2000000 #define NEODEVICE_FIRE2 0x4000000 #define NEODEVICE_FLEX 0x8000000 #define NEODEVICE_RADGALAXY 0x10000000 #define NEODEVICE_RADSTAR2 0x20000000 #define NEODEVICE_VIVIDCAN 0x40000000 #define NEODEVICE_OBD2_SIM 0x80000000 #define NEODEVICE_ALL 0xFFFFBFFF // Device ID's const int NETID_DEVICE = 0; const int NETID_HSCAN = 1; const int NETID_MSCAN = 2; const int NETID_SWCAN = 3; const int NETID_LSFTCAN = 4; const int NETID_FORDSCP = 5; const int NETID_J1708 = 6; const int NETID_JVPW = 8; const int NETID_ISO = 9; const int NETID_ISO2 = 14; const int NETID_ISO14230 = 15; const int NETID_LIN = 16; const int NETID_ISO3 = 41; const int NETID_HSCAN2 = 42; const int NETID_HSCAN3 = 44; const int NETID_ISO4 = 47; const int NETID_LIN2 = 48; const int NETID_LIN3 = 49; const int NETID_LIN4 = 50; const int NETID_LIN5 = 84; const int NETID_MOST = 51; const int NETID_CGI = 53; const int NETID_HSCAN4 = 61; const int NETID_HSCAN5 = 62; const int NETID_UART = 64; const int NETID_UART2 = 65; const int NETID_UART3 = 66; const int NETID_UART4 = 67; const int NETID_SWCAN2 = 68; //changed from ANALOG const int NETID_ETHERNET_DAQ = 69; //NETID_WIZNET - plasma/ ion daq port ethernet const int NETID_TEXTAPI_TO_HOST = 71; const int NETID_FLEXRAY1A = 80; const int NETID_FLEXRAY1B = 81; const int NETID_FLEXRAY2A = 82; const int NETID_FLEXRAY2B = 83; const int NETID_FLEXRAY = 85; const int NETID_MOST25 = 90; const int NETID_MOST50 = 91; const int NETID_MOST150 = 92; const int NETID_ETHERNET = 93; const int NETID_GMFSA = 94; const int NETID_TCP = 95; const int NETID_HSCAN6 = 96; const int NETID_HSCAN7 = 97; const int NETID_LIN6 = 98; const int NETID_LSFTCAN2 = 99; const int NETID_OP_ETHERNET1 = 17; const int NETID_OP_ETHERNET2 = 18; const int NETID_OP_ETHERNET3 = 19; const int NETID_OP_ETHERNET4 = 45; const int NETID_OP_ETHERNET5 = 46; const int NETID_OP_ETHERNET6 = 73; const int NETID_OP_ETHERNET7 = 75; const int NETID_OP_ETHERNET8 = 76; const int NETID_OP_ETHERNET9 = 77; const int NETID_OP_ETHERNET10 = 78; const int NETID_OP_ETHERNET11 = 79; const int NETID_OP_ETHERNET12 = 87; // Constants used to calculate the timestamp const double NEOVI_TIMESTAMP_2 = 0.1048576; const double NEOVI_TIMESTAMP_1 = 0.0000016; const double NEOVIPRO_VCAN_TIMESTAMP_2 = 0.065536; const double NEOVIPRO_VCAN_TIMESTAMP_1 = 0.000001; const double NEOVI6_VCAN_TIMESTAMP_2 = 0.065536; const double NEOVI6_VCAN_TIMESTAMP_1 = 0.000001; const double NEOVI_RED_TIMESTAMP_2_25NS = 107.3741824; const double NEOVI_RED_TIMESTAMP_1_25NS = 0.000000025; const double NEOVI_RED_TIMESTAMP_2_10NS = 429.4967296; const double NEOVI_RED_TIMESTAMP_1_10NS = 0.00000001; // Status Bitfield 1 const long SPY_STATUS_GLOBAL_ERR = 0x01; const long SPY_STATUS_TX_MSG = 0x02; const long SPY_STATUS_XTD_FRAME = 0x04; const long SPY_STATUS_REMOTE_FRAME = 0x08; const long SPY_STATUS_CRC_ERROR = 0x10; const long SPY_STATUS_CAN_ERROR_PASSIVE = 0x20; const long SPY_STATUS_INCOMPLETE_FRAME = 0x40; const long SPY_STATUS_LOST_ARBITRATION = 0x80; const long SPY_STATUS_UNDEFINED_ERROR = 0x100; const long SPY_STATUS_CAN_BUS_OFF = 0x200; const long SPY_STATUS_CAN_ERROR_WARNING = 0x400; const long SPY_STATUS_BUS_SHORTED_PLUS = 0x800; const long SPY_STATUS_BUS_SHORTED_GND = 0x1000; const long SPY_STATUS_CHECKSUM_ERROR = 0x2000; const long SPY_STATUS_BAD_MESSAGE_BIT_TIME_ERROR = 0x4000; const long SPY_STATUS_IFR_DATA = 0x8000; const long SPY_STATUS_COMM_IN_OVERFLOW = 0x10000; const long SPY_STATUS_COMM_OUT_OVERFLOW = 0x20000; const long SPY_STATUS_COMM_MISC_ERROR = 0x40000; const long SPY_STATUS_BREAK = 0x80000; const long SPY_STATUS_AVSI_REC_OVERFLOW = 0x100000; const long SPY_STATUS_TEST_TRIGGER = 0x200000; const long SPY_STATUS_AUDIO_COMMENT = 0x400000; const long SPY_STATUS_GPS_DATA = 0x800000; const long SPY_STATUS_ANALOG_DIGITAL_INPUT = 0x1000000; const long SPY_STATUS_TEXT_COMMENT = 0x2000000; const long SPY_STATUS_NETWORK_MESSAGE_TYPE = 0x4000000; const long SPY_STATUS_VSI_TX_UNDERRUN = 0x8000000; const long SPY_STATUS_VSI_IFR_CRC_BIT = 0x10000000; const long SPY_STATUS_INIT_MESSAGE = 0x20000000; const long SPY_STATUS_HIGH_SPEED = 0x40000000; const long SPY_STATUS_FLEXRAY_SECOND_STARTUP_FRAME = 0x40000000; const long SPY_STATUS_EXTENDED = 0x80000000; // if this bit is set than decode status bitfield3 in the ackbytes // Configuration Array constants // high speed CAN neoVI / valuecan baud rate constants const long NEO_CFG_MPIC_HS_CAN_CNF1 = 512 + 10; const long NEO_CFG_MPIC_HS_CAN_CNF2 = 512 + 9; const long NEO_CFG_MPIC_HS_CAN_CNF3 = 512 + 8; const long NEO_CFG_MPIC_HS_CAN_MODE = 512 + 54; // Med speed CAN const long NEO_CFG_MPIC_MS_CAN_CNF1 = 512 + 22; const long NEO_CFG_MPIC_MS_CAN_CNF2 = 512 + 21; const long NEO_CFG_MPIC_MS_CAN_CNF3 = 512 + 20; // SW CAN const long NEO_CFG_MPIC_SW_CAN_CNF1 = 512 + 34; const long NEO_CFG_MPIC_SW_CAN_CNF2 = 512 + 33; const long NEO_CFG_MPIC_SW_CAN_CNF3 = 512 + 32; // LSFT CAN const long NEO_CFG_MPIC_LSFT_CAN_CNF1 = 512 + 46; const long NEO_CFG_MPIC_LSFT_CAN_CNF2 = 512 + 45; const long NEO_CFG_MPIC_LSFT_CAN_CNF3 = 512 + 44; // The second status bitfield const long SPY_STATUS2_HAS_VALUE = 1; const long SPY_STATUS2_VALUE_IS_BOOLEAN = 2; const long SPY_STATUS2_HIGH_VOLTAGE = 4; const long SPY_STATUS2_LONG_MESSAGE = 8; const long SPY_STATUS2_GLOBAL_CHANGE = 0x10000; const long SPY_STATUS2_ERROR_FRAME = 0x20000; const long SPY_STATUS2_END_OF_LONG_MESSAGE = 0x100000; // for ISO and J1708 // LIN/ISO Specific - check protocol before handling const long SPY_STATUS2_LIN_ERR_RX_BREAK_NOT_0 = 0x200000; const long SPY_STATUS2_LIN_ERR_RX_BREAK_TOO_SHORT = 0x400000; const long SPY_STATUS2_LIN_ERR_RX_SYNC_NOT_55 = 0x800000; const long SPY_STATUS2_LIN_ERR_RX_DATA_GREATER_8 = 0x1000000; const long SPY_STATUS2_LIN_ERR_TX_RX_MISMATCH = 0x2000000; const long SPY_STATUS2_LIN_ERR_MSG_ID_PARITY = 0x4000000; const long SPY_STATUS2_ISO_FRAME_ERROR = 0x8000000; const long SPY_STATUS2_LIN_SYNC_FRAME_ERROR = 0x8000000; const long SPY_STATUS2_ISO_OVERFLOW_ERROR = 0x10000000; const long SPY_STATUS2_LIN_ID_FRAME_ERROR = 0x10000000; const long SPY_STATUS2_ISO_PARITY_ERROR = 0x20000000; const long SPY_STATUS2_LIN_SLAVE_BYTE_ERROR = 0x20000000; const long SPY_STATUS2_RX_TIMEOUT_ERROR = 0x40000000; const long SPY_STATUS2_LIN_NO_SLAVE_DATA = 0x80000000; // MOST Specific - check protocol before handling const long SPY_STATUS2_MOST_PACKET_DATA = 0x200000; const long SPY_STATUS2_MOST_STATUS = 0x400000; // Reflects changes in light/lock/MPR/SBC/etc. const long PY_STATUS2_MOST_LOW_LEVEL = 0x800000; // MOST low level message, allocs, deallocs, remote requests. const long SPY_STATUS2_MOST_CONTROL_DATA = 0x1000000; const long SPY_STATUS2_MOST_MHP_USER_DATA = 0x2000000; // MOST HIGH User Data Frame const long SPY_STATUS2_MOST_MHP_CONTROL_DATA = 0x4000000; // MOST HIGH Control Data const long SPY_STATUS2_MOST_I2S_DUMP = 0x8000000; const long SPY_STATUS2_MOST_TOO_SHORT = 0x10000000; const long SPY_STATUS2_MOST_MOST50 = 0x20000000; // Absence of MOST50 and MOST150 implies it's MOST25 const long SPY_STATUS2_MOST_MOST150 = 0x40000000; const long SPY_STATUS2_MOST_CHANGED_PAR = 0x80000000; //First byte in ack reflects what changed // Ethernet Specific - check protocol before handling const long SPY_STATUS2_ETHERNET_CRC_ERROR = 0x200000; const long SPY_STATUS2_ETHERNET_FRAME_TOO_SHORT = 0x400000; const long SPY_STATUS2_ETHERNET_FCS_AVAILABLE = 0x800000; // This frame contains FCS (4 bytes) obtained from ICS Ethernet hardware (ex. RAD-STAR) // Spy Status Bitfield 3 constants const long SPY_STATUS3_LIN_JUST_BREAK_SYNC = 1; const long SPY_STATUS3_LIN_SLAVE_DATA_TOO_SHORT = 2; const long SPY_STATUS3_LIN_ONLY_UPDATE_SLAVE_TABLE_ONCE = 4; // Protocols const int SPY_PROTOCOL_CUSTOM = 0; const int SPY_PROTOCOL_CAN = 1; const int SPY_PROTOCOL_GMLAN = 2; const int SPY_PROTOCOL_J1850VPW = 3; const int SPY_PROTOCOL_J1850PWM = 4; const int SPY_PROTOCOL_ISO9141 = 5; const int SPY_PROTOCOL_Keyword2000 = 6; const int SPY_PROTOCOL_GM_ALDL_UART = 7; const int SPY_PROTOCOL_CHRYSLER_CCD = 8; const int SPY_PROTOCOL_CHRYSLER_SCI = 9; const int SPY_PROTOCOL_FORD_UBP = 10; const int SPY_PROTOCOL_BEAN = 11; const int SPY_PROTOCOL_LIN = 12; const int SPY_PROTOCOL_J1708 = 13; const int SPY_PROTOCOL_CHRYSLER_JVPW = 14; const int SPY_PROTOCOL_J1939 = 15; const int SPY_PROTOCOL_FLEXRAY = 16; const int SPY_PROTOCOL_MOST = 17; const int SPY_PROTOCOL_CGI = 18; const int SPY_PROTOCOL_GME_CIM_SCL_KLINE = 19; const int SPY_PROTOCOL_SPI = 20; const int SPY_PROTOCOL_I2C = 21; const int SPY_PROTOCOL_GENERIC_UART = 22; const int SPY_PROTOCOL_JTAG = 23; const int SPY_PROTOCOL_UNIO = 24; const int SPY_PROTOCOL_DALLAS_1WIRE = 25; const int SPY_PROTOCOL_GENERIC_MANCHSESTER = 26; const int SPY_PROTOCOL_SENT_PROTOCOL = 27; const int SPY_PROTOCOL_UART = 28; const int SPY_PROTOCOL_ETHERNET = 29; const int SPY_PROTOCOL_CANFD = 30; const int SPY_PROTOCOL_GMFSA = 31; const int SPY_PROTOCOL_TCP = 32; // These are used in status2 for Vehicle Spy 3 const long icsspystatusChangeLength = 0x10; const long icsspystatusChangeBitH1 = 0x20; const long icsspystatusChangeBitH2 = 0x40; const long icsspystatusChangeBitH3 = 0x80; const long icsspystatusChangeBitB1 = 0x100; const long icsspystatusChangeBitB2 = 0x200; const long icsspystatusChangeBitB3 = 0x400; const long icsspystatusChangeBitB4 = 0x800; const long icsspystatusChangeBitB5 = 0x1000; const long icsspystatusChangeBitB6 = 0x2000; const long icsspystatusChangeBitB7 = 0x4000; const long icsspystatusChangeBitB8 = 32768; const long icsspystatusChangedGlobal = 65536; const long SCRIPT_STATUS_STOPPED = 0; const long SCRIPT_STATUS_RUNNING = 1; const long SCRIPT_LOCATION_FLASH_MEM = 0; // (Valid only on a neoVI Fire or neoVI Red) const long SCRIPT_LOCATION_SDCARD = 1; // (Valid only on a neoVI Fire or neoVI Red) const long SCRIPT_LOCATION_VCAN3_MEM = 2; // (Valid only on a ValueCAN 3 device) // ISO15765 constants const int ISO15765_2_NETWORK_HSCAN = 0x1; const int ISO15765_2_NETWORK_MSCAN = 0x2; const int ISO15765_2_NETWORK_HSCAN2 = 0x4; const int ISO15765_2_NETWORK_HSCAN3 = 0x8; const int ISO15765_2_NETWORK_SWCAN = 0x10; const int ISO15765_2_NETWORK_HSCAN4 = 0x14; const int ISO15765_2_NETWORK_HSCAN5 = 0x18; const int ISO15765_2_NETWORK_HSCAN6 = 0x1C; const int ISO15765_2_NETWORK_HSCAN7 = 0x20; const int ISO15765_2_NETWORK_SWCAN2 = 0x24; // Structure for neoVI device types #pragma pack(push) #pragma pack(1) // One byte aligned typedef struct ALIGNED_(1) { int iType; // 1,2,3 for Generation of HW // Date and Time type 1 and 2 int iMainFirmDateDay; int iMainFirmDateMonth; int iMainFirmDateYear; int iMainFirmDateHour; int iMainFirmDateMin; int iMainFirmDateSecond; int iMainFirmChkSum; // Version data (only valid for type 3) unsigned char iAppMajor; unsigned char iAppMinor; unsigned char iManufactureDay; unsigned char iManufactureMonth; unsigned char iManufactureYear; unsigned char iBoardRevMajor; unsigned char iBoardRevMinor; unsigned char iBootLoaderVersionMajor; unsigned char iBootLoaderVersionMinor; unsigned char iMainVnetHWrevMajor; unsigned char iMainVnetHWrevMinor; unsigned char iMainVnetSRAMSize; } stAPIFirmwareInfo; #pragma pack(pop) #pragma pack(push) #pragma pack(2) // Two byte aligned typedef struct ALIGNED_(2) { unsigned char Mode; unsigned char SetBaudrate; unsigned char Baudrate; unsigned char Transceiver_Mode; unsigned char TqSeg1; unsigned char TqSeg2; unsigned char TqProp; unsigned char TqSync; unsigned short BRP; unsigned char auto_baud; unsigned char innerFrameDelay25us; } CAN_SETTINGS; typedef struct ALIGNED_(2) { unsigned char FDMode; // Mode, secondary baudrate for canfd unsigned char FDBaudrate; unsigned char FDTqSeg1; unsigned char FDTqSeg2; unsigned char FDTqProp; unsigned char FDTqSync; unsigned short FDBRP; unsigned char FDTDC; unsigned char reserved; } CANFD_SETTINGS; typedef struct ALIGNED_(2) { unsigned char Mode; unsigned char SetBaudrate; unsigned char Baudrate; unsigned char Transceiver_Mode; unsigned char TqSeg1; unsigned char TqSeg2; unsigned char TqProp; unsigned char TqSync; unsigned short BRP; unsigned short high_speed_auto_switch; unsigned char auto_baud; unsigned char Reserved; // Leave as 0 } SWCAN_SETTINGS; typedef struct ALIGNED_(2) { unsigned int Baudrate; unsigned short spbrg; unsigned char brgh; unsigned char NumBitsDelay; unsigned char MasterResistor; unsigned char Mode; } LIN_SETTINGS; typedef struct ALIGNED_(2) { uint16_t monkey; unsigned char duplex; // 0 = half, 1 = full unsigned char link_speed; unsigned char auto_neg; unsigned char led_mode; unsigned char rsvd[4]; } ETHERNET_SETTINGS; typedef struct ALIGNED_(2) { // CAN unsigned int can1_tx_id; unsigned int can1_rx_id; union { struct { unsigned bExtended : 1; unsigned : 15; }; unsigned int DWord; } can1_options; unsigned int can2_tx_id; unsigned int can2_rx_id; union { struct { unsigned bExtended : 1; unsigned : 15; }; unsigned int DWord; } can2_options; unsigned int network_enables; unsigned int can3_tx_id; unsigned int can3_rx_id; union { struct { unsigned bExtended : 1; unsigned : 15; }; unsigned int DWord; } can3_options; unsigned int can4_tx_id; unsigned int can4_rx_id; union { struct { unsigned bExtended : 1; unsigned : 15; }; unsigned int DWord; } can4_options; unsigned int reserved[5]; } STextAPISettings; typedef struct ALIGNED_(2) { unsigned short time_500us; unsigned short k; unsigned short l; } ISO9141_KEYWORD2000__INIT_STEP; typedef struct ALIGNED_(2) { unsigned int Baudrate; unsigned short spbrg; unsigned short brgh; ISO9141_KEYWORD2000__INIT_STEP init_steps[16]; // See the ISO9141_KW2000__INIT_STEP structure unsigned char init_step_count; unsigned short p2_500us; unsigned short p3_500us; unsigned short p4_500us; unsigned short chksum_enabled; } ISO9141_KEYWORD2000_SETTINGS; typedef struct ALIGNED_(2) { uint8_t ucInterfaceType; uint8_t reserved0; uint8_t reserved1; uint8_t reserved2; uint8_t reserved3; uint16_t tapPair0; uint16_t tapPair1; uint16_t tapPair2; uint16_t tapPair3; uint16_t tapPair4; uint16_t tapPair5; uint32_t uFlags; }OP_ETH_GENERAL_SETTINGS; typedef struct ALIGNED_(2) { uint8_t ucConfigMode; uint8_t preemption_en; uint8_t reserved0[14]; }OP_ETH_SETTINGS; typedef struct ALIGNED_(2) { uint32_t ecu_id; CAN_SETTINGS can1; SWCAN_SETTINGS swcan1; CAN_SETTINGS lsftcan1; uint16_t network_enables; uint16_t network_enabled_on_boot; uint16_t iso15765_separation_time_offset; uint16_t perf_en; uint32_t pwr_man_timeout; uint16_t pwr_man_enable; uint16_t can_switch_mode; uint16_t rsvd; } SVividCANSettings; typedef struct ALIGNED_(2) { CAN_SETTINGS can1; CAN_SETTINGS can2; CANFD_SETTINGS canfd1; CANFD_SETTINGS canfd2; uint64_t network_enables; uint16_t network_enabled_on_boot; int16_t iso15765_separation_time_offset; uint16_t perf_en; uint16_t misc_io_initial_ddr; uint16_t misc_io_initial_latch; uint16_t misc_io_report_period; uint16_t misc_io_on_report_events; uint16_t misc_io_analog_enable; uint16_t ain_sample_period; uint16_t ain_threshold; struct { uint32_t : 1; uint32_t enableLatencyTest : 1; uint32_t reserved : 30; } flags; STextAPISettings text_api; } SOBD2SimSettings; typedef struct ALIGNED_(2) { unsigned short perf_en; // CAN CAN_SETTINGS can1; CAN_SETTINGS can2; CANFD_SETTINGS canfd2; CAN_SETTINGS can3; CANFD_SETTINGS canfd3; CAN_SETTINGS can4; CAN_SETTINGS can5; CAN_SETTINGS can6; CAN_SETTINGS can7; CAN_SETTINGS can8; // Native CAN are either LS1/LS2 or SW1/SW2 SWCAN_SETTINGS swcan1; unsigned short network_enables; SWCAN_SETTINGS swcan2; unsigned short network_enables_2; LIN_SETTINGS lin1; unsigned short misc_io_initial_ddr; unsigned short misc_io_initial_latch; unsigned short misc_io_report_period; unsigned short misc_io_on_report_events; unsigned short misc_io_analog_enable; unsigned short ain_sample_period; unsigned short ain_threshold; unsigned int pwr_man_timeout; unsigned short pwr_man_enable; unsigned short network_enabled_on_boot; // ISO15765-2 Transport Layer unsigned short iso15765_separation_time_offset; // ISO9141 - Keyword unsigned short iso_9141_kwp_enable_reserved; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_1; unsigned short iso_parity_1; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_2; unsigned short iso_parity_2; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_3; unsigned short iso_parity_3; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_4; unsigned short iso_parity_4; unsigned short iso_msg_termination_1; unsigned short iso_msg_termination_2; unsigned short iso_msg_termination_3; unsigned short iso_msg_termination_4; unsigned short idle_wakeup_network_enables_1; unsigned short idle_wakeup_network_enables_2; // Reserved for HSCAN6/7, LSFT2, etc.. unsigned short network_enables_3; unsigned short idle_wakeup_network_enables_3; unsigned short can_switch_mode; STextAPISettings text_api; } SRADGalaxySettings; typedef struct ALIGNED_(2) { // Performance Test uint16_t perf_en; CAN_SETTINGS can1; CANFD_SETTINGS canfd1; CAN_SETTINGS can2; CANFD_SETTINGS canfd2; uint64_t network_enables; uint64_t termination_enables; uint32_t pwr_man_timeout; uint16_t pwr_man_enable; uint16_t network_enabled_on_boot; // ISO15765-2 Transport Layer int16_t iso15765_separation_time_offset; STextAPISettings text_api; struct { uint32_t disableUsbCheckOnBoot : 1; uint32_t enableLatencyTest : 1; uint32_t reserved : 30; } flags; } SVCAN412Settings; typedef struct ALIGNED_(2) { uint16_t perf_en; OP_ETH_GENERAL_SETTINGS opEthGen; OP_ETH_SETTINGS opEth1; OP_ETH_SETTINGS opEth2; CAN_SETTINGS can1; CANFD_SETTINGS canfd1; CAN_SETTINGS can2; CANFD_SETTINGS canfd2; uint16_t network_enables; uint16_t network_enables_2; LIN_SETTINGS lin1; uint16_t misc_io_initial_ddr; uint16_t misc_io_initial_latch; uint16_t misc_io_report_period; uint16_t misc_io_on_report_events; uint16_t misc_io_analog_enable; uint16_t ain_sample_period; uint16_t ain_threshold; uint32_t pwr_man_timeout; uint16_t pwr_man_enable; uint16_t network_enabled_on_boot; uint16_t iso15765_separation_time_offset; uint16_t iso_9141_kwp_enable_reserved; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_1; uint16_t iso_parity_1; uint16_t iso_msg_termination_1; uint16_t idle_wakeup_network_enables_1; uint16_t idle_wakeup_network_enables_2; uint16_t network_enables_3; uint16_t idle_wakeup_network_enables_3; uint16_t can_switch_mode; STextAPISettings text_api; } SRADStar2Settings; typedef struct ALIGNED_(2) { unsigned char mpic_maj; unsigned char mpic_min; unsigned char upic_maj; unsigned char upic_min; unsigned char lpic_maj; unsigned char lpic_min; unsigned char jpic_maj; unsigned char jpic_min; } fire_versions; typedef struct ALIGNED_(2) { unsigned char mpic_maj; unsigned char mpic_min; unsigned char core_maj; unsigned char core_min; unsigned char lpic_maj; unsigned char lpic_min; unsigned char hid_maj; unsigned char hid_min; } plasma_fire_vnet; typedef struct ALIGNED_(2) { unsigned char mpic_maj; unsigned char mpic_min; unsigned int Reserve; unsigned short Reserve2; } vcan3_versions; typedef struct ALIGNED_(2) { CAN_SETTINGS can1; CAN_SETTINGS can2; CAN_SETTINGS can3; CAN_SETTINGS can4; LIN_SETTINGS lin1; LIN_SETTINGS lin2; unsigned short network_enables; unsigned short network_enabled_on_boot; unsigned int pwr_man_timeout; unsigned short pwr_man_enable; // 0 - off, 1 - sleep enabled, 2- idle enabled (fast wakeup) unsigned short misc_io_initial_ddr; unsigned short misc_io_initial_latch; unsigned short misc_io_analog_enable; unsigned short misc_io_report_period; unsigned short misc_io_on_report_events; // ISO 15765-2 Transport Layer short iso15765_separation_time_offset; // ISO9141 - KEYWORD 2000 1 short iso9141_kwp_enable_reserved; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings; // Performance Test unsigned short perf_en; // ISO9141 - Parity unsigned short iso_parity; // 0 - no parity, 1 - event, 2 - odd unsigned short iso_msg_termination; // 0 - use inner frame time, 1 - GME CIM-SCL unsigned short iso_tester_pullup_enable; // Additional network enables unsigned short network_enables_2; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_2; unsigned short iso_parity_2; // 0 - no parity, 1 - event, 2 - odd unsigned short iso_msg_termination_2; // 0 - use inner frame time, 1 - GME CIM-SCL unsigned short idle_wakeup_network_enables_1; unsigned short idle_wakeup_network_enables_2; unsigned short reservedZero; } SVCANRFSettings; typedef struct ALIGNED_(2) { unsigned int ecu_id; CAN_SETTINGS can1; unsigned short network_enables; unsigned short network_enabled_on_boot; // ISO 15765-2 Transport layer unsigned short iso15765_separation_time_offset; // Performance test unsigned short perf_en; // Analog input unsigned short ain_sample_period; unsigned short ain_threshold; unsigned int rsvd; } SEEVBSettings; // J1708 Settings typedef struct ALIGNED_(2) { unsigned short enable_convert_mode; } J1708_SETTINGS; // UART Settings typedef struct ALIGNED_(2) { unsigned short Baudrate; unsigned short spbrg; unsigned short brgh; unsigned short parity; unsigned short stop_bits; unsigned char flow_control; // 0 - off, 1 - Simple CTS RTS unsigned char reserved_1; union { unsigned int bOptions; struct { unsigned invert_tx : 1; unsigned invert_rx : 1; unsigned half_duplex : 1; unsigned reserved_bits : 13; unsigned reserved_bits2 : 16; }; }; } UART_SETTINGS; typedef struct ALIGNED_(2) { unsigned short netId; // NetID of CAN network to use. unsigned char zero0; unsigned char Config; // Bit 0: enable bit to enalbe most // Bit 1-3: index of which miscio to use for timestamp sync. 0 => MISC1 // Bit 4: Echo to CAN enable // Bit 5-7: Reserve } SNeoMostGatewaySettings; typedef struct ALIGNED_(2) { CAN_SETTINGS can1; CAN_SETTINGS can2; CAN_SETTINGS can3; CAN_SETTINGS can4; SWCAN_SETTINGS swcan; CAN_SETTINGS lsftcan; LIN_SETTINGS lin1; LIN_SETTINGS lin2; LIN_SETTINGS lin3; LIN_SETTINGS lin4; unsigned short cgi_enable_reserved; unsigned short cgi_baud; unsigned short cgi_tx_ifs_bit_times; unsigned short cgi_rx_ifs_bit_times; unsigned short cgi_chksum_enable; unsigned short network_enables; unsigned short network_enabled_on_boot; unsigned int pwm_man_timeout; unsigned short pwr_man_enable; unsigned short misc_io_initial_ddr; unsigned short misc_io_initial_latch; unsigned short misc_io_analog_enable; unsigned short misc_io_report_period; unsigned short misc_io_on_report_events; unsigned short ain_sample_period; unsigned short ain_threshold; // ISO 15765-2 Transport Layer short iso15765_separation_time_offset; // ISO9141 - KEYWORD 2000 short iso9141_kwp_enable_reserved; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings; // Performance Test unsigned short perf_en; // ISO9141 - Parity unsigned short iso_parity; // 0 - no parity, 1 - event, 2 - odd unsigned short iso_msg_termination; // 0 - use inner frame time, 1 - GME CIM-SCL unsigned short iso_tester_pullup_enable; //Additional network enables unsigned short network_enables_2; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_2; unsigned short iso_parity_2; // 0 - no parity, 1 - event, 2 - odd unsigned short iso_msg_termination_2; // 0 - use inner frame time, 1 - GME CIM-SCL ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_3; unsigned short iso_parity_3; // 0 - no parity, 1 - event, 2 - odd unsigned short iso_msg_termination_3; // 0 - use inner frame time, 1 - GME CIM-SCL ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_4; unsigned short iso_parity_4; // 0 - no parity, 1 - event, 2 - odd unsigned short iso_msg_termination_4; // 0 - use inner frame time, 1 - GME CIM-SCL unsigned short fast_init_network_enables_1; unsigned short fast_init_network_enables_2; UART_SETTINGS uart; UART_SETTINGS uart2; STextAPISettings text_api; SNeoMostGatewaySettings neoMostGateway; unsigned short vnetBits; // First bit enables Android Messages } SFireSettings; typedef struct ALIGNED_(2) { uint16_t perf_en; CAN_SETTINGS can1; CANFD_SETTINGS canfd1; CAN_SETTINGS can2; CANFD_SETTINGS canfd2; CAN_SETTINGS can3; CANFD_SETTINGS canfd3; CAN_SETTINGS can4; CANFD_SETTINGS canfd4; CAN_SETTINGS can5; CANFD_SETTINGS canfd5; CAN_SETTINGS can6; CANFD_SETTINGS canfd6; CAN_SETTINGS can7; CANFD_SETTINGS canfd7; CAN_SETTINGS can8; CANFD_SETTINGS canfd8; SWCAN_SETTINGS swcan1; uint16_t network_enables; SWCAN_SETTINGS swcan2; uint16_t network_enables_2; CAN_SETTINGS lsftcan1; CAN_SETTINGS lsftcan2; LIN_SETTINGS lin1; uint16_t misc_io_initial_ddr; LIN_SETTINGS lin2; uint16_t misc_io_initial_latch; LIN_SETTINGS lin3; uint16_t misc_io_report_period; LIN_SETTINGS lin4; uint16_t misc_io_on_report_events; LIN_SETTINGS lin5; uint16_t misc_io_analog_enable; uint16_t ain_sample_period; uint16_t ain_threshold; uint32_t pwr_man_timeout; uint16_t pwr_man_enable; uint16_t network_enabled_on_boot; uint16_t iso15765_separation_time_offset; uint16_t iso_9141_kwp_enable_reserved; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_1; uint16_t iso_parity_1; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_2; uint16_t iso_parity_2; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_3; uint16_t iso_parity_3; ISO9141_KEYWORD2000_SETTINGS iso9141_kwp_settings_4; uint16_t iso_parity_4; uint16_t iso_msg_termination_1; uint16_t iso_msg_termination_2; uint16_t iso_msg_termination_3; uint16_t iso_msg_termination_4; uint16_t idle_wakeup_network_enables_1; uint16_t idle_wakeup_network_enables_2; uint16_t network_enables_3; uint16_t idle_wakeup_network_enables_3; uint16_t can_switch_mode; STextAPISettings text_api; uint64_t termination_enables; LIN_SETTINGS lin6; ETHERNET_SETTINGS ethernet; uint16_t slaveVnetA; uint16_t slaveVnetB; uint32_t flags; uint16_t digitalIoThresholdTicks; uint16_t digitalIoThresholdEnable; } SFire2Settings; typedef struct ALIGNED_(2) { CAN_SETTINGS can1; CAN_SETTINGS can2; unsigned short network_enables; unsigned short network_enabled_on_boot; short iso15765_separation_time_offset; unsigned short perf_en; unsigned short misc_io_initial_ddr; unsigned short misc_io_initial_latch; unsigned short misc_io_report_period; unsigned short misc_io_on_report_events; } SVCAN3Settings; typedef struct ALIGNED_(2) _stCM_ISO157652_TxMessage { // Transmit message unsigned short vs_netid; ///< The netid of the message (determines which network to transmit on), not supported unsigned char padding; ///< The padding byte to use to fill the unused portion of /// transmitted CAN frames (single frame, first frame, consecutive frame), /// not supported as it is always 0xAA. unsigned char reserved2; unsigned int id; ///< arbId of transmitted frames (CAN id to transmit to). unsigned int fc_id; ///< flow control arb id filter value (response id from receiver). unsigned int fc_id_mask; ///< The flow control arb filter mask (response id from receiver). unsigned char stMin; ///< Overrides the stMin that the receiver reports, see overrideSTmin. Set to J2534's STMIN_TX if <= 0xFF unsigned char blockSize; ///< Overrides the block size that the receiver reports, see overrideBlockSize. Set to J2534's BS_TX if <= 0xFF. unsigned char flowControlExtendedAddress; ///< Expected Extended Address byte of response from receiver. see fc_ext_address_enable, not supported. unsigned char extendedAddress; ///< Extended Address byte of transmitter. see ext_address_enable, not supported. //flow control timeouts unsigned short fs_timeout; ///< max timeout (ms) for waiting on flow control respons, not supported. unsigned short fs_wait; ///< max timeout (ms) for waiting on flow control response that does not have flow status set to WAIT, not supported. unsigned char data[4*1024]; ///< The data unsigned int num_bytes; ///< Number of data bytes //option bits union { struct { unsigned id_29_bit_enable:1; ///< Enables 29 bit arbId for transmitted frames. Set to 1 so transmitted frames use 29 bit ids, not supported. unsigned fc_id_29_bit_enable:1; ///< Enables 29 bit arbId for Flow Control filter. Set to 1 if receiver response uses 29 bit ids, not supported. unsigned ext_address_enable:1; ///< Enables Extended Addressing, Set to 1 if transmitted frames should have extended addres byte, not supported. unsigned fc_ext_address_enable:1; ///< Enables Extended Addressing for Flow Control filter. Set to 1 if receiver responds with extended address byte, not supported. unsigned overrideSTmin:1; ///< Uses member stMin and not receiver's flow control's stMin. unsigned overrideBlockSize:1; ///< Uses member BlockSize and not receiver's flow control's BlockSize. unsigned paddingEnable:1; ///< Enable's padding unsigned iscanFD : 1; //Enables CANFD unsigned isBRSEnabled : 1; //Enables bitrate switch unsigned Padding: 15; unsigned tx_dl : 8; }; unsigned int flags; }; } stCM_ISO157652_TxMessage; #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4324) // nameless struct/union #endif typedef struct ALIGNED_(2) { //transmit message unsigned short vs_netid; ///< The netid of the message (determines which network to decode receives), not supported unsigned char padding; ///< The padding byte to use to fill the unused portion of transmitted CAN frames (flow control), see paddingEnable. unsigned int id; ///< ArbId filter value for frames from transmitter (from ECU to neoVI). unsigned int id_mask; ///< ArbId filter mask for frames from transmitter (from ECU to neoVI). unsigned int fc_id; ///< flow control arbId to transmit in flow control (from neoVI to ECU). unsigned char flowControlExtendedAddress; ///< Extended Address byte used in flow control (from neoVI to ECU). see fc_ext_address_enable. unsigned char extendedAddress; ///< Expected Extended Address byte of frames sent by transmitter (from ECU to neoVI). see ext_address_enable. unsigned char blockSize; ///< Block Size to report in flow control response. unsigned char stMin; ///< Minimum seperation time (between consecutive frames) to report in flow control response. //flow control timeouts unsigned short cf_timeout; ///< max timeout (ms) for waiting on consecutive frame. Set this to N_CR_MAX's value in J2534. //option bits union { struct { unsigned id_29_bit_enable:1; ///< Enables 29 bit arbId filter for frames (from ECU to neoVI). unsigned fc_id_29_bit_enable:1; ///< Enables 29 bit arbId for Flow Control (from neoVI to ECU). unsigned ext_address_enable:1; ///< Enables Extended Addressing (from ECU to neoVI). unsigned fc_ext_address_enable:1; ///< Enables Extended Addressing (from neoVI to ECU). unsigned enableFlowControlTransmission:1; ///< Enables Flow Control frame transmission (from neoVI to ECU). unsigned paddingEnable:1; ///< Enable's padding unsigned iscanFD : 1; //