#include #include #include #include TEST(icsneoc2, test_icsneoc2_device_find_all) { const auto MAX_DEV_SIZE = 255; icsneoc2_device_t* devices[MAX_DEV_SIZE] = {0}; uint32_t devices_count = MAX_DEV_SIZE; ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_find_all(NULL, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_find_all(devices, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_find_all(NULL, &devices_count, NULL)); ASSERT_EQ(icsneoc2_error_success, icsneoc2_device_find_all(devices, &devices_count, NULL)); for (uint32_t i=0; i < MAX_DEV_SIZE; ++i) { if (i < devices_count) { ASSERT_EQ(icsneoc2_error_success, icsneoc2_device_is_valid(devices[i])); } else { ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_is_valid(devices[i])); } } } TEST(icsneoc2, test_icsneoc2_is_device) { icsneoc2_device_t* invalid_device = static_cast((void*)0x1234); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_is_valid(NULL)); ASSERT_EQ(icsneoc2_error_invalid_device, icsneoc2_device_is_valid(invalid_device)); } TEST(icsneoc2, test_icsneoc2_error_invalid_parameters_and_invalid_device) { bool placeholderBool = false; uint32_t placeholderInteger32 = 0; uint64_t placeholderInteger64 = 0; const char placeholderStr[255] = {0}; icsneoc2_event_t* eventPlaceHolder = nullptr; // All of these don't have a device parameter ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_find_all(NULL, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_bus_type_name_get(0, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_event_description_get(eventPlaceHolder, placeholderStr, &placeholderInteger32)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_events_get(NULL, &placeholderInteger32)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_device_type_name_get(0, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_error_code_get(0, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_message_type_name_get(0, NULL, NULL)); ASSERT_EQ(icsneoc2_error_invalid_parameters, icsneoc2_netid_name_get(0, NULL, NULL)); // Test everything with a device and with a device with a bad pointer std::vector> testPatterns = { { icsneoc2_error_invalid_parameters, NULL}, { icsneoc2_error_invalid_device, static_cast((void*)0x1234)}, }; for (const auto& testPattern : testPatterns) { const auto& errorCode = std::get<0>(testPattern); const auto& device = std::get<1>(testPattern); ASSERT_EQ(errorCode, icsneoc2_device_baudrate_get(device, 0, &placeholderInteger64)); ASSERT_EQ(errorCode, icsneoc2_device_baudrate_set(device, 0, 0, placeholderInteger64)); ASSERT_EQ(errorCode, icsneoc2_device_canfd_baudrate_get(device, 0, &placeholderInteger64)); ASSERT_EQ(errorCode, icsneoc2_device_canfd_baudrate_set(device, 0, 0, placeholderInteger64)); ASSERT_EQ(errorCode, icsneoc2_device_close(device)); ASSERT_EQ(errorCode, icsneoc2_device_description_get(device, placeholderStr, &placeholderInteger32)); ASSERT_EQ(errorCode, icsneoc2_device_go_online(device, false)); ASSERT_EQ(errorCode, icsneoc2_device_is_online(device, &placeholderBool)); ASSERT_EQ(errorCode, icsneoc2_device_is_online_supported(device, &placeholderBool)); ASSERT_EQ(errorCode, icsneoc2_device_is_valid(device)); ASSERT_EQ(errorCode, icsneoc2_device_is_open(device, &placeholderBool)); ASSERT_EQ(errorCode, icsneoc2_device_is_disconnected(device, &placeholderBool)); ASSERT_EQ(errorCode, icsneoc2_device_load_default_settings(device, false)); ASSERT_EQ(errorCode, icsneoc2_device_open(device)); ASSERT_EQ(errorCode, icsneoc2_device_open_options_get(device, &placeholderInteger32)); ASSERT_EQ(errorCode, icsneoc2_device_open_options_set(device, 0)); ASSERT_EQ(errorCode, icsneoc2_device_rtc_get(device, (int64_t*)&placeholderInteger64)); ASSERT_EQ(errorCode, icsneoc2_device_rtc_set(device, 0)); ASSERT_EQ(errorCode, icsneoc2_device_serial_get(device, placeholderStr, &placeholderInteger32)); ASSERT_EQ(errorCode, icsneoc2_device_supports_tc10(device, &placeholderBool)); ASSERT_EQ(errorCode, icsneoc2_device_timestamp_resolution_get(device, &placeholderInteger32)); ASSERT_EQ(errorCode, icsneoc2_device_type_get(device, NULL)); ASSERT_EQ(errorCode, icsneoc2_device_message_count_get(device, &placeholderInteger32)); ASSERT_EQ(errorCode, icsneoc2_device_message_polling_get(device, &placeholderBool)); ASSERT_EQ(errorCode, icsneoc2_device_message_polling_limit_get(device, &placeholderInteger32)); ASSERT_EQ(errorCode, icsneoc2_device_message_polling_set(device, false)); ASSERT_EQ(errorCode, icsneoc2_device_message_polling_set_limit(device, 0)); ASSERT_EQ(errorCode, icsneoc2_device_messages_get(device, NULL, NULL, 0)); ASSERT_EQ(errorCode, icsneoc2_device_messages_transmit(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_bus_type_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_arbid_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_arbid_set(device, NULL, 0)); ASSERT_EQ(errorCode, icsneoc2_message_can_baudrate_switch_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_baudrate_switch_set(device, NULL, false)); ASSERT_EQ(errorCode, icsneoc2_message_can_canfd_set(device, NULL, false)); ASSERT_EQ(errorCode, icsneoc2_message_can_create(device, NULL, 0)); ASSERT_EQ(errorCode, icsneoc2_message_can_dlc_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_dlc_set(device, NULL, 0)); ASSERT_EQ(errorCode, icsneoc2_message_can_error_state_indicator_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_extended_set(device, NULL, false)); ASSERT_EQ(errorCode, icsneoc2_message_can_free(device, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_is_canfd(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_is_extended(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_can_is_remote(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_data_get(device, NULL, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_data_set(device, NULL, NULL, 0)); ASSERT_EQ(errorCode, icsneoc2_message_is_transmit(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_is_valid(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_netid_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_message_netid_set(device, NULL, 0)); ASSERT_EQ(errorCode, icsneoc2_message_type_get(device, NULL, NULL)); ASSERT_EQ(errorCode, icsneoc2_device_events_get(device, NULL, NULL)); } } TEST(icsneoc2, test_icsneoc2_devicetype_t) { std::vector<_icsneoc2_devicetype_t> devicetypeValues = { // Unknown device type icsneoc2_devicetype_unknown, // neoVI Blue - Obsolete icsneoc2_devicetype_blue, // neoECU AVB/TSN icsneoc2_devicetype_ecu_avb, // RAD-SuperMoon icsneoc2_devicetype_rad_supermoon, // DualWire ValueCAN - Obsolete icsneoc2_devicetype_dw_vcan, // RAD-Moon 2 icsneoc2_devicetype_rad_moon2, // RAD-Mars icsneoc2_devicetype_rad_mars, // ValueCAN 4-1 icsneoc2_devicetype_vcan41, // neoVI FIRE icsneoc2_devicetype_fire, // RAD-Pluto icsneoc2_devicetype_rad_pluto, // ValueCAN 4-2EL icsneoc2_devicetype_vcan42_el, // RAD-IO CAN-HUB icsneoc2_devicetype_radio_canhub, // neoECU12 icsneoc2_devicetype_neo_ecu12, // neoOBD2-LC Badge icsneoc2_devicetype_obd2_lc_badge, // RAD-Moon Duo icsneoc2_devicetype_rad_moon_duo, // neoVI FIRE3 icsneoc2_devicetype_fire3, // ValueCAN3 icsneoc2_devicetype_vcan3, // RAD-Jupiter icsneoc2_devicetype_rad_jupiter, // ValueCAN4 Industrial icsneoc2_devicetype_vcan4_industrial, // RAD-Gigastar icsneoc2_devicetype_rad_gigastar, // neoVI RED2 icsneoc2_devicetype_red2, // EtherBADGE icsneoc2_devicetype_etherbadge, // RAD-A2B icsneoc2_devicetype_rad_a2b, // RAD-Epsilon icsneoc2_devicetype_rad_epsilon, // RAD-Moon 3 icsneoc2_devicetype_rad_moon3, // RAD-Comet icsneoc2_devicetype_rad_comet, // neoVI FIRE3 FlexRay icsneoc2_devicetype_fire3_flexray, // neoVI CONNECT icsneoc2_devicetype_connect, // RAD-Comet 3 icsneoc2_devicetype_rad_comet3, // RAD-Moon T1S icsneoc2_devicetype_rad_moon_t1s, // RAD-Gigastar 2 icsneoc2_devicetype_rad_gigastar2, // neoVI RED icsneoc2_devicetype_red, // neoECU - Obsolete icsneoc2_devicetype_ecu, // IEVB - Obsolete icsneoc2_devicetype_ievb, // Pendant - Obsolete icsneoc2_devicetype_pendant, // neoOBD2 Pro - Obsolete icsneoc2_devicetype_obd2_pro, // neoECU Chip - Obsolete icsneoc2_devicetype_ecuchip_uart, // neoVI PLASMA icsneoc2_devicetype_plasma, // neoAnalog - Obsolete icsneoc2_devicetype_neo_analog, // Obsolete icsneoc2_devicetype_ct_obd, // neoVI ION icsneoc2_devicetype_ion, // RAD-Star - Obsolete icsneoc2_devicetype_rad_star, // ValueCAN4-4 icsneoc2_devicetype_vcan44, // ValueCAN4-2 icsneoc2_devicetype_vcan42, // CMProbe - Obsolete icsneoc2_devicetype_cm_probe, // Ethernet EVB - Obsolete icsneoc2_devicetype_eevb, // ValueCAN.rf - Obsolete icsneoc2_devicetype_vcan_rf, // neoVI FIRE2 icsneoc2_devicetype_fire2, // neoVI FLEX - Obsolete icsneoc2_devicetype_flex, // RAD-Galaxy icsneoc2_devicetype_rad_galaxy, // RAD-Star 2 icsneoc2_devicetype_rad_star2, // VividCAN icsneoc2_devicetype_vividcan, // neoOBD2 SIM icsneoc2_devicetype_obd2_sim, // RAD-Galaxy 2 icsneoc2_devicetype_rad_galaxy2, // Must be last entry icsneoc2_devicetype_maxsize, }; auto i = 0; for (const auto& devicetypeValue : devicetypeValues) { ASSERT_EQ(devicetypeValue, i++); } ASSERT_EQ(sizeof(icsneoc2_devicetype_t), sizeof(uint32_t)); } TEST(icsneoc2, test_icsneoc2_msg_type_t) { std::vector<_icsneoc2_msg_type_t> msgtypeValues = { icsneoc2_msg_type_device, icsneoc2_msg_type_internal, icsneoc2_msg_type_bus, icsneoc2_msg_type_maxsize, }; auto i = 0; for (const auto& msgtypeValue : msgtypeValues) { ASSERT_EQ(msgtypeValue, i++); } ASSERT_EQ(sizeof(icsneoc2_msg_type_t), sizeof(uint32_t)); } TEST(icsneoc2, test_icsneoc2_msg_bus_type_t) { std::vector<_icsneoc2_msg_bus_type_t> msgbustypeValues = { icsneoc2_msg_bus_type_invalid, icsneoc2_msg_bus_type_internal, // Used for statuses that don't actually need to be transferred to the client application icsneoc2_msg_bus_type_can, icsneoc2_msg_bus_type_lin, icsneoc2_msg_bus_type_flexray, icsneoc2_msg_bus_type_most, icsneoc2_msg_bus_type_ethernet, icsneoc2_msg_bus_type_lsftcan, icsneoc2_msg_bus_type_swcan, icsneoc2_msg_bus_type_iso9141, icsneoc2_msg_bus_type_i2c, icsneoc2_msg_bus_type_a2b, icsneoc2_msg_bus_type_spi, icsneoc2_msg_bus_type_mdio, // Must be last entry icsneoc2_msg_bus_type_maxsize, }; auto i = 0; for (const auto& msgbustypeValue : msgbustypeValues) { ASSERT_EQ(msgbustypeValue, i++); } ASSERT_EQ(sizeof(icsneoc2_msg_bus_type_t), sizeof(uint8_t)); } TEST(icsneoc2, test_icsneoc2_netid_t) { std::vector> netidValues = { { icsneoc2_netid_device, 0 }, { icsneoc2_netid_hscan, 1 }, { icsneoc2_netid_mscan, 2 }, { icsneoc2_netid_swcan, 3 }, { icsneoc2_netid_lsftcan, 4 }, { icsneoc2_netid_fordscp, 5 }, { icsneoc2_netid_j1708, 6 }, { icsneoc2_netid_aux, 7 }, { icsneoc2_netid_j1850vpw, 8 }, { icsneoc2_netid_iso9141, 9 }, { icsneoc2_netid_disk_data, 10 }, { icsneoc2_netid_main51, 11 }, { icsneoc2_netid_red, 12 }, { icsneoc2_netid_sci, 13 }, { icsneoc2_netid_iso9141_2, 14 }, { icsneoc2_netid_iso14230, 15 }, { icsneoc2_netid_lin, 16 }, { icsneoc2_netid_op_ethernet1, 17 }, { icsneoc2_netid_op_ethernet2, 18 }, { icsneoc2_netid_op_ethernet3, 19 }, { icsneoc2_netid_red_ext_memoryread, 20 }, { icsneoc2_netid_red_int_memoryread, 21 }, { icsneoc2_netid_red_dflash_read, 22 }, { icsneoc2_netid_neo_memory_sdread, 23 }, // Response from NeoMemory (MemoryTypeSD) { icsneoc2_netid_can_errbits, 24 }, { icsneoc2_netid_neo_memory_write_done, 25 }, { icsneoc2_netid_red_wave_can1_logical, 26 }, { icsneoc2_netid_red_wave_can2_logical, 27 }, { icsneoc2_netid_red_wave_lin1_logical, 28 }, { icsneoc2_netid_red_wave_lin2_logical, 29 }, { icsneoc2_netid_red_wave_lin1_analog, 30 }, { icsneoc2_netid_red_wave_lin2_analog, 31 }, { icsneoc2_netid_red_wave_misc_analog, 32 }, { icsneoc2_netid_red_wave_miscdio2_logical, 33 }, { icsneoc2_netid_red_network_com_enable_ex, 34 }, { icsneoc2_netid_red_neovi_network, 35 }, { icsneoc2_netid_red_read_baud_settings, 36 }, { icsneoc2_netid_red_oldformat, 37 }, { icsneoc2_netid_red_scope_capture, 38 }, { icsneoc2_netid_red_hardware_excep, 39 }, { icsneoc2_netid_red_get_rtc, 40 }, { icsneoc2_netid_iso9141_3, 41 }, { icsneoc2_netid_hscan2, 42 }, { icsneoc2_netid_hscan3, 44 }, { icsneoc2_netid_op_ethernet4, 45 }, { icsneoc2_netid_op_ethernet5, 46 }, { icsneoc2_netid_iso9141_4, 47 }, { icsneoc2_netid_lin2, 48 }, { icsneoc2_netid_lin3, 49 }, { icsneoc2_netid_lin4, 50 }, { icsneoc2_netid_most_unused, 51 }, // MOST = 51, Old and unused { icsneoc2_netid_red_app_error, 52 }, { icsneoc2_netid_cgi, 53 }, { icsneoc2_netid_reset_status, 54 }, { icsneoc2_netid_fb_status, 55 }, { icsneoc2_netid_app_signal_status, 56 }, { icsneoc2_netid_read_datalink_cm_tx_msg, 57 }, { icsneoc2_netid_read_datalink_cm_rx_msg, 58 }, { icsneoc2_netid_logging_overflow, 59 }, { icsneoc2_netid_read_settings, 60 }, { icsneoc2_netid_hscan4, 61 }, { icsneoc2_netid_hscan5, 62 }, { icsneoc2_netid_rs232, 63 }, { icsneoc2_netid_uart, 64 }, { icsneoc2_netid_uart2, 65 }, { icsneoc2_netid_uart3, 66 }, { icsneoc2_netid_uart4, 67 }, { icsneoc2_netid_swcan2, 68 }, { icsneoc2_netid_ethernet_daq, 69 }, { icsneoc2_netid_data_to_host, 70 }, { icsneoc2_netid_textapi_to_host, 71 }, { icsneoc2_netid_spi1, 72 }, { icsneoc2_netid_op_ethernet6, 73 }, { icsneoc2_netid_red_vbat, 74 }, { icsneoc2_netid_op_ethernet7, 75 }, { icsneoc2_netid_op_ethernet8, 76 }, { icsneoc2_netid_op_ethernet9, 77 }, { icsneoc2_netid_op_ethernet10, 78 }, { icsneoc2_netid_op_ethernet11, 79 }, { icsneoc2_netid_flexray1a, 80 }, { icsneoc2_netid_flexray1b, 81 }, { icsneoc2_netid_flexray2a, 82 }, { icsneoc2_netid_flexray2b, 83 }, { icsneoc2_netid_lin5, 84 }, { icsneoc2_netid_flexray, 85 }, { icsneoc2_netid_flexray2, 86 }, { icsneoc2_netid_op_ethernet12, 87 }, { icsneoc2_netid_i2c, 88 }, { icsneoc2_netid_most25, 90 }, { icsneoc2_netid_most50, 91 }, { icsneoc2_netid_most150, 92 }, { icsneoc2_netid_ethernet, 93 }, { icsneoc2_netid_gmfsa, 94 }, { icsneoc2_netid_tcp, 95 }, { icsneoc2_netid_hscan6, 96 }, { icsneoc2_netid_hscan7, 97 }, { icsneoc2_netid_lin6, 98 }, { icsneoc2_netid_lsftcan2, 99 }, { icsneoc2_netid_logical_disk_info, 187 }, { icsneoc2_netid_wivi_command, 221 }, { icsneoc2_netid_script_status, 224 }, { icsneoc2_netid_eth_phy_control, 239 }, { icsneoc2_netid_extended_command, 240 }, { icsneoc2_netid_extended_data, 242 }, { icsneoc2_netid_flexray_control, 243 }, { icsneoc2_netid_coremini_preload, 244 }, { icsneoc2_netid_hw_com_latency_test, 512 }, { icsneoc2_netid_device_status, 513 }, { icsneoc2_netid_udp, 514 }, { icsneoc2_netid_forwarded_message, 516 }, { icsneoc2_netid_i2c2, 517 }, { icsneoc2_netid_i2c3, 518 }, { icsneoc2_netid_i2c4, 519 }, { icsneoc2_netid_ethernet2, 520 }, { icsneoc2_netid_a2b1, 522 }, { icsneoc2_netid_a2b2, 523 }, { icsneoc2_netid_ethernet3, 524 }, { icsneoc2_netid_wbms, 532 }, { icsneoc2_netid_dwcan9, 534 }, { icsneoc2_netid_dwcan10, 535 }, { icsneoc2_netid_dwcan11, 536 }, { icsneoc2_netid_dwcan12, 537 }, { icsneoc2_netid_dwcan13, 538 }, { icsneoc2_netid_dwcan14, 539 }, { icsneoc2_netid_dwcan15, 540 }, { icsneoc2_netid_dwcan16, 541 }, { icsneoc2_netid_lin7, 542 }, { icsneoc2_netid_lin8, 543 }, { icsneoc2_netid_spi2, 544 }, { icsneoc2_netid_mdio1, 545 }, { icsneoc2_netid_mdio2, 546 }, { icsneoc2_netid_mdio3, 547 }, { icsneoc2_netid_mdio4, 548 }, { icsneoc2_netid_mdio5, 549 }, { icsneoc2_netid_mdio6, 550 }, { icsneoc2_netid_mdio7, 551 }, { icsneoc2_netid_mdio8, 552 }, { icsneoc2_netid_op_ethernet13, 553 }, { icsneoc2_netid_op_ethernet14, 554 }, { icsneoc2_netid_op_ethernet15, 555 }, { icsneoc2_netid_op_ethernet16, 556 }, { icsneoc2_netid_spi3, 557 }, { icsneoc2_netid_spi4, 558 }, { icsneoc2_netid_spi5, 559 }, { icsneoc2_netid_spi6, 560 }, { icsneoc2_netid_spi7, 561 }, { icsneoc2_netid_spi8, 562 }, { icsneoc2_netid_lin9, 563 }, { icsneoc2_netid_lin10, 564 }, { icsneoc2_netid_lin11, 565 }, { icsneoc2_netid_lin12, 566 }, { icsneoc2_netid_lin13, 567 }, { icsneoc2_netid_lin14, 568 }, { icsneoc2_netid_lin15, 569 }, { icsneoc2_netid_lin16, 570 }, { icsneoc2_netid_maxsize, 571 } }; for (const auto& netidValue : netidValues) { const _icsneoc2_netid_t actualValue = std::get<0>(netidValue); const icsneoc2_netid_t expectedValue = std::get<1>(netidValue); ASSERT_EQ(actualValue, expectedValue); } }