Option Strict On Option Explicit On Imports System.Runtime.InteropServices Imports System.Runtime.InteropServices.LayoutKind Imports System Module bas_neoVI '//hardware constants Public Const NEODEVICE_BLUE As Int32 = 1 Public Const NEODEVICE_DW_VCAN As Int32 = 4 Public Const NEODEVICE_FIRE As Int32 = 8 Public Const NEODEVICE_VCAN3 As Int32 = 16 Public Const NEODEVICE_YELLOW As Int32 = 32 Public Const NEODEVICE_RED As Int32 = 64 Public Const NEODEVICE_ECU As Int32 = 128 Public Const NEODEVICE_IEVB As Int32 = 256 Public Const NEODEVICE_PENDANT As Int32 = 512 Public Const NEODEVICE_ALL As Int32 = &HFFFFFFFF '// Configuration Array constants '// high speed CAN neoVI / valuecan baud rate constants Public Const NEO_CFG_MPIC_HS_CAN_CNF1 As Int16 = 512 + 10 Public Const NEO_CFG_MPIC_HS_CAN_CNF2 As Int16 = 512 + 9 Public Const NEO_CFG_MPIC_HS_CAN_CNF3 As Int16 = 512 + 8 Public Const NEO_CFG_MPIC_HS_CAN_MODE As Int16 = 512 + 54 '// med speed CAN Public Const NEO_CFG_MPIC_MS_CAN_CNF1 As Int16 = 512 + 22 Public Const NEO_CFG_MPIC_MS_CAN_CNF2 As Int16 = 512 + 21 Public Const NEO_CFG_MPIC_MS_CAN_CNF3 As Int16 = 512 + 20 Public Const NEO_CFG_MPIC_SW_CAN_CNF1 As Int16 = 512 + 34 Public Const NEO_CFG_MPIC_SW_CAN_CNF2 As Int16 = 512 + 33 Public Const NEO_CFG_MPIC_SW_CAN_CNF3 As Int16 = 512 + 32 Public Const NEO_CFG_MPIC_LSFT_CAN_CNF1 As Int16 = 512 + 46 Public Const NEO_CFG_MPIC_LSFT_CAN_CNF2 As Int16 = 512 + 45 Public Const NEO_CFG_MPIC_LSFT_CAN_CNF3 As Int16 = 512 + 44 '// Protocols Public Const SPY_PROTOCOL_CUSTOM As Int16 = 0 Public Const SPY_PROTOCOL_CAN As Int16 = 1 Public Const SPY_PROTOCOL_GMLAN As Int16 = 2 Public Const SPY_PROTOCOL_J1850VPW As Int16 = 3 Public Const SPY_PROTOCOL_J1850PWM As Int16 = 4 Public Const SPY_PROTOCOL_ISO9141 As Int16 = 5 Public Const SPY_PROTOCOL_Keyword2000 As Int16 = 6 Public Const SPY_PROTOCOL_GM_ALDL_UART As Int16 = 7 Public Const SPY_PROTOCOL_CHRYSLER_CCD As Int16 = 8 Public Const SPY_PROTOCOL_CHRYSLER_SCI As Int16 = 9 Public Const SPY_PROTOCOL_FORD_UBP As Int16 = 10 Public Const SPY_PROTOCOL_BEAN As Int16 = 11 Public Const SPY_PROTOCOL_LIN As Int16 = 12 Public Const SPY_PROTOCOL_J1708 As Int16 = 13 Public Const SPY_PROTOCOL_CHRYSLER_JVPW As Int16 = 14 Public Const SPY_PROTOCOL_J1939 As Int16 = 15 '//device ID's Public Const NETID_DEVICE As Int32 = 0 Public Const NETID_HSCAN As Int32 = 1 Public Const NETID_MSCAN As Int32 = 2 Public Const NETID_SWCAN As Int32 = 3 Public Const NETID_LSFTCAN As Int32 = 4 Public Const NETID_FORDSCP As Int32 = 5 Public Const NETID_J1708 As Int32 = 6 Public Const NETID_AUX As Int32 = 7 Public Const NETID_JVPW As Int32 = 8 Public Const NETID_ISO As Int32 = 9 Public Const NETID_ISOPIC As Int32 = 10 Public Const NETID_ISO2 As Int32 = 14 Public Const NETID_ISO14230 As Int32 = 15 Public Const NETID_LIN As Int32 = 16 Public Const NETID_ISO3 As Int32 = 41 Public Const NETID_HSCAN2 As Int32 = 42 Public Const NETID_HSCAN3 As Int32 = 44 Public Const NETID_ISO4 As Int32 = 47 Public Const NETID_LIN2 As Int32 = 48 Public Const NETID_LIN3 As Int32 = 49 Public Const NETID_LIN4 As Int32 = 50 Public Const NETID_CGI As Int32 = 53 Public Const NETID_I2C1 As Int32 = 71 Public Const NETID_SPI1 As Int32 = 72 Public Const NETID_FLEXRAY1 As Int32 = 80 Public Const NETID_RS232 As Int32 = 63 Public Const NETID_UART As Int32 = 64 Public Const NETID_UART2 As Int32 = 65 Public Const NETID_UART3 As Int32 = 66 Public Const NETID_UART4 As Int32 = 67 '// Constants used to calculate the timestamp Public Const NEOVI_TIMESTAMP_2 As Double = 0.1048576 Public Const NEOVI_TIMESTAMP_1 As Double = 0.0000016 Public Const NEOVIPRO_VCAN_TIMESTAMP_2 As Double = 0.065536 Public Const NEOVIPRO_VCAN_TIMESTAMP_1 As Double = 0.000001 Public Const NEOVI6_VCAN_TIMESTAMP_2 As Double = 0.065536 Public Const NEOVI6_VCAN_TIMESTAMP_1 As Double = 0.000001 Public Const NEOVI_RED_TIMESTAMP_2_25NS As Double = 107.3741824 Public Const NEOVI_RED_TIMESTAMP_1_25NS As Double = 0.000000025 Public Const SCRIPT_STATUS_STOPPED As Int32 = 0 Public Const SCRIPT_STATUS_RUNNING As Int32 = 1 Public Const SCRIPT_LOCATION_FLASH_MEM As Int32 = 0 '//(Valid only on a neoVI Fire or neoVI Red) Public Const SCRIPT_LOCATION_SDCARD As Int32 = 1 '//(Valid only on a neoVI Fire or neoVI Red) Public Const SCRIPT_LOCATION_VCAN3_MEM As Int32 = 4 '//(Valid only on a ValueCAN 3 device) Public Enum icsSpyDataStatusBitfield icsSpyStatusGlobalError = &H1 icsSpyStatusTx = &H2 icsSpyStatusXtdFrame = &H4 icsSpyStatusRemoteFrame = &H8 icsSpyStatusErrCRCError = &H10 icsSpyStatusCANErrorPassive = &H20 icsSpyStatusErrIncompleteFrame = &H40 icsSpyStatusErrLostArbitration = &H80 icsSpyStatusErrUndefined = &H100 icsSpyStatusErrCANBusOff = &H200 icsSpyStatusErrCANErrorWarning = &H400 icsSpyStatusBusShortedPlus = &H800 icsSpyStatusBusShortedGnd = &H1000 icsSpyStatusCheckSumError = &H2000 icsSpyStatusErrBadMessageBitTimeError = &H4000 icsSpyStatusIFRData = &H8000 icsSpyStatusHardwareCommError = &H10000 icsSpyStatusExpectedLengthError = &H20000 icsSpyStatusIncomingNoMatch = &H40000 icsSpyStatusBreak = &H80000 icsSpyStatusAVT_VSIRecOverflow = &H100000 icsSpyStatusTestTrigger = &H200000 icsSpyStatusAudioCommentType = &H400000 icsSpyStatusGPSDataValue = &H800000 icsSpyStatusAnalogDigitalInputValue = &H1000000 icsSpyStatusTextCommentType = &H2000000 icsSpyStatusNetworkMessageType = &H4000000 icsSpyStatusVSI_TxUnderRun = &H8000000 icsSpyStatusVSI_IFR_CRCBit = &H10000000 icsSpyStatusInitMessage = &H20000000 icsSpyStatusHighSpeed = &H40000000 End Enum Public Enum icsSpyDataStatusBitfield2 icsSpyStatusHasValue = 1 icsSpyStatusValueIsBoolean = 2 icsSpyStatusHighVoltage = 4 icsSpyStatusLongMessage = 8 End Enum Public Structure icsSpyMessage Dim StatusBitField As Int32 '4 Dim StatusBitField2 As Int32 'new '4 Dim TimeHardware As UInt32 ' 4 Dim TimeHardware2 As UInt32 'new ' 4 Dim TimeSystem As UInt32 ' 4 Dim TimeSystem2 As UInt32 Dim TimeStampHardwareID As Byte 'new ' 1 Dim TimeStampSystemID As Byte Dim NetworkID As Byte 'new ' 1 Dim NodeID As Byte Dim Protocol As Byte Dim MessagePieceID As Byte ' 1 Dim ColorID As Byte '1 Dim NumberBytesHeader As Byte ' 1 Dim NumberBytesData As Byte ' 1 Dim DescriptionID As Int16 ' 2 Dim ArbIDOrHeader As Int32 '// Holds (up to 3 byte 1850 header or 29 bit CAN header) '4 Dim Data1 As Byte '8 Dim Data2 As Byte Dim Data3 As Byte Dim Data4 As Byte Dim Data5 As Byte Dim Data6 As Byte Dim Data7 As Byte Dim Data8 As Byte Dim AckBytes1 As Byte 'new '8 Dim AckBytes2 As Byte Dim AckBytes3 As Byte Dim AckBytes4 As Byte Dim AckBytes5 As Byte Dim AckBytes6 As Byte Dim AckBytes7 As Byte Dim AckBytes8 As Byte Dim Value As Single ' 4 Dim MiscData As Byte End Structure Public Structure icsSpyMessageJ1850 Dim StatusBitField As Int32 '4 Dim StatusBitField2 As Int32 'new '4 Dim TimeHardware As UInt32 '4 Dim TimeHardware2 As UInt32 'new ' 4 Dim TimeSystem As UInt32 '4 Dim TimeSystem2 As UInt32 Dim TimeStampHardwareID As Byte 'new ' 1 Dim TimeStampSystemID As Byte Dim NetworkID As Byte 'new ' 1 Dim NodeID As Byte Dim Protocol As Byte Dim MessagePieceID As Byte ' 1 new Dim ColorID As Byte ' 1 Dim NumberBytesHeader As Byte '1 Dim NumberBytesData As Byte '1 Dim DescriptionID As Int16 '2 Dim Header1 As Byte '4 '// Holds (up to 3 byte 1850 header or 29 bit CAN header) Dim Header2 As Byte Dim Header3 As Byte Dim Header4 As Byte Dim Data1 As Byte '8 Dim Data2 As Byte Dim Data3 As Byte Dim Data4 As Byte Dim Data5 As Byte Dim Data6 As Byte Dim Data7 As Byte Dim Data8 As Byte Dim AckBytes1 As Byte Dim AckBytes2 As Byte Dim AckBytes3 As Byte Dim AckBytes4 As Byte Dim AckBytes5 As Byte Dim AckBytes6 As Byte Dim AckBytes7 As Byte Dim AckBytes8 As Byte Dim Value As Single '4 Dim MiscData As Byte End Structure '//Structure for neoVI device types Public Structure NeoDevice Dim DeviceType As Int32 Dim Handle As Int32 Dim NumberOfClients As Int32 Dim SerialNumber As Int32 Dim MaxAllowedClients As Int32 End Structure Public Structure CAN_SETTINGS Dim Mode As Byte Dim SetBaudrate As Byte Dim Baudrate As Byte Dim Transceiver_Mode As Byte Dim TqSeg1 As Byte Dim TqSeg2 As Byte Dim TqProp As Byte Dim TqSync As Byte Dim BRP As Int16 Dim auto_baud As Byte Dim innerFrameDelay25us As Byte End Structure Public Structure SWCAN_SETTINGS Dim Mode As Byte Dim SetBaudrate As Byte Dim Baudrate As Byte Dim NetworkType As Byte Dim TqSeg1 As Byte Dim TqSeg2 As Byte Dim TqProp As Byte Dim TqSync As Byte Dim BRP As Int16 Dim high_speed_auto_switch As UInt16 Dim auto_baud As UInt16 End Structure Public Structure SVCAN3Settings Dim Can1 As CAN_SETTINGS Dim Can2 As CAN_SETTINGS Dim Network_enables As Int16 Dim Network_enabled_on_boot As Int16 Dim Iso15765_separation_time_offset As Int16 Dim Perf_en As Int16 Dim Misc_io_initial_ddr As Int16 Dim Misc_io_initial_latch As Int16 Dim Misc_io_report_period As Int16 Dim Misc_io_on_report_events As Int16 End Structure Public Structure LIN_SETTINGS Dim Baudrate As UInt32 Dim spbrg As UInt16 Dim brgh As Byte Dim NumBitsDelay As Byte Dim MasterResistor As Byte Dim Mode As Byte End Structure '// --- UART Settings Public Structure UART_SETTINGS Dim Baudrate As UInt16 Dim spbrg As UInt16 Dim brgh As UInt16 Dim parity As UInt16 Dim stop_bits As UInt16 Dim flow_control As Byte '// 0- off, 1 - Simple CTS RTS, Dim reserved_1 As Byte Dim bOptions As UInt32 '//AND to combind these values invert_tx = 1 invert_rx = 2 half_duplex = 4 End Structure Public Structure STextAPISettings Dim can1_tx_id As UInt32 Dim can1_rx_id As UInt32 Dim can1_options As UInt32 '// Set to 1 for Extended, 0 for standard Dim can2_tx_id As UInt32 Dim can2_rx_id As UInt32 Dim can2_options As UInt32 '// Set to 1 for Extended, 0 for standard Dim network_enables As UInt32 Dim can3_tx_id3 As UInt32 Dim can3_rx_id3 As UInt32 Dim can3_options As UInt32 '// Set to 1 for Extended, 0 for standard Dim can4_tx_id4 As UInt32 Dim can4_rx_id4 As UInt32 Dim can4_options As UInt32 '// Set to 1 for Extended, 0 for standard Dim Reserved0 As Int32 Dim Reserved1 As Int32 Dim Reserved2 As Int32 Dim Reserved3 As Int32 Dim Reserved4 As Int32 End Structure Public Structure ISO9141_KEYWORD2000_SETTINGS Dim Baudrate As UInt32 Dim spbrg As UInt16 Dim brgh As UInt16 Dim Init_Step_0 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_1 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_2 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_3 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_4 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_5 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_6 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_7 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_8 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_9 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_10 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_11 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_12 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_13 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_14 As ISO9141_KEYWORD2000__INIT_STEP Dim Init_Step_15 As ISO9141_KEYWORD2000__INIT_STEP Dim init_step_count As Byte Dim p2_500us As UInt16 Dim p3_500us As UInt16 Dim p4_500us As UInt16 Dim chksum_enabled As UInt16 End Structure Public Structure ISO9141_KEYWORD2000__INIT_STEP Dim time_500us As UInt16 Dim k As UInt16 Dim l As UInt16 End Structure Public Structure SFireSettings Dim can1 As CAN_SETTINGS Dim can2 As CAN_SETTINGS Dim can3 As CAN_SETTINGS Dim can4 As CAN_SETTINGS Dim swcan As SWCAN_SETTINGS Dim lsftcan As CAN_SETTINGS Dim lin1 As LIN_SETTINGS Dim lin2 As LIN_SETTINGS Dim lin3 As LIN_SETTINGS Dim lin4 As LIN_SETTINGS Dim cgi_enable_reserved As UInt16 Dim cgi_baud As UInt16 Dim cgi_tx_ifs_bit_times As UInt16 Dim cgi_rx_ifs_bit_times As UInt16 Dim cgi_chksum_enable As UInt16 Dim network_enables As UInt16 Dim network_enabled_on_boot As UInt16 Dim pwm_man_timeout As UInt32 Dim pwr_man_enable As UInt16 Dim misc_io_initial_ddr As UInt16 Dim misc_io_initial_latch As UInt16 Dim misc_io_analog_enable As UInt16 Dim misc_io_report_period As UInt16 Dim misc_io_on_report_events As UInt16 Dim ain_sample_period As UInt16 Dim ain_threshold As UInt16 '//ISO 15765-2 Transport Layer Dim iso15765_separation_time_offset As UInt16 '//ISO9141 - KEYWORD 2000 Dim iso9141_kwp_enable_reserved As UInt16 Dim iso9141_kwp_settings As ISO9141_KEYWORD2000_SETTINGS '//Performance Test Dim perf_en As UInt16 '//ISO9141 - Parity Dim iso_parity As UInt16 '// 0 - no parity, 1 - event, 2 - odd Dim iso_msg_termination As UInt16 '// 0 - use inner frame time, 1 - GME CIM-SCL Dim iso_tester_pullup_enable As UInt16 '//Additional network enables Dim network_enables_2 As UInt16 Dim iso9141_kwp_settings_2 As ISO9141_KEYWORD2000_SETTINGS Dim iso_parity_2 As UInt16 '// 0 - no parity, 1 - event, 2 - odd Dim iso_msg_termination_2 As UInt16 '// 0 - use inner frame time, 1 - GME CIM-SCL Dim iso9141_kwp_settings_3 As ISO9141_KEYWORD2000_SETTINGS Dim iso_parity_3 As UInt16 '// 0 - no parity, 1 - event, 2 - odd Dim iso_msg_termination_3 As UInt16 '// 0 - use inner frame time, 1 - GME CIM-SCL Dim iso9141_kwp_settings_4 As ISO9141_KEYWORD2000_SETTINGS Dim iso_parity_4 As UInt16 '// 0 - no parity, 1 - event, 2 - odd Dim iso_msg_termination_4 As UInt16 '// 0 - use inner frame time, 1 - GME CIM-SCL Dim fast_init_network_enables_1 As UInt16 Dim fast_init_network_enables_2 As UInt16 Dim uart As UART_SETTINGS Dim uart2 As UART_SETTINGS Dim text_api As STextAPISettings End Structure Public Structure stCM_ISO157652_TxMessage '//transmit message Dim vs_netid As UInt16 '///< The netid of the message (determines which network to transmit on), not supported Dim padding As Byte '///< The padding byte to use to fill the unused portion of '/// transmitted CAN frames (single frame, first frame, consecutive frame). Dim reserved2 As Byte Dim id As UInt32 '///< arbId of transmitted frames (CAN id to transmit to). Dim fc_id As UInt32 '///< flow control arb id filter value (response id from receiver). Dim fc_id_mask As UInt32 '///< The flow control arb filter mask (response id from receiver). Dim stMin As Byte '///< Overrides the stMin that the receiver reports, see overrideSTmin. Set to J2534's STMIN_TX if <= 0xFF. Dim blockSize As Byte '///< Overrides the block size that the receiver reports, see overrideBlockSize. Set to J2534's BS_TX if <= 0xFF. Dim flowControlExtendedAddress As Byte '///< Expected Extended Address byte of response from receiver. see fc_ext_address_enable, not supported. Dim extendedAddress As Byte '///< Extended Address byte of transmitter. see ext_address_enable, not supported. '//flow control timeouts Dim fs_timeout As UInt16 '///< max timeout (ms) for waiting on flow control respons. Set this to N_BS_MAX's value if J2534. Dim fs_wait As UInt16 '///< max timeout (ms) for waiting on flow control response after receiving flow control '///with flow status set to WAIT. Set this to N_BS_MAX's value if J2534. '//****************************************************************************************************************** Dim data() As Byte '//Before you use this structure '// call: stCM_ISO157652_TxMessage.data = new byte(4096){} '//****************************************************************************************************************** Dim num_bytes As UInt32 '///< Number of data bytes '//option bits Dim flags As UInt16 '//To set the flags, AND the parameter you want from the stCM_ISO157652_TxMessage_Flags Enum End Structure Enum stCM_ISO157652_TxMessage_Flags id_29_bit_enable = 1 '///< Enables 29 bit arbId for transmitted frames. Set to 1 so transmitted frames use 29 bit ids, not supported. fc_id_29_bit_enable = 2 '///< Enables 29 bit arbId for Flow Control filter. Set to 1 if receiver response uses 29 bit ids, not supported. ext_address_enable = 4 '///< Enables Extended Addressing, Set to 1 if transmitted frames should have extended addres byte, not supported. fc_ext_address_enable = 8 '///< Enables Extended Addressing for Flow Control filter. Set to 1 if receiver responds with extended address byte, not supported. overrideSTmin = 16 '///< Uses member stMin and not receiver's flow control's stMin. overrideBlockSize = 32 '///< Uses member BlockSize and not receiver's flow control's BlockSize. paddingEnable = 64 '///< Enable's padding End Enum Public Structure stCM_ISO157652_RxMessage '//transmit message Dim vs_netid As UInt16 '///< The netid of the message (determines which network to decode receives), not supported Dim padding As Byte '///< The padding byte to use to fill the unused portion of '/// transmitted CAN frames (flow control), see paddingEnable. Dim id As UInt32 '///< ArbId filter value for frames from transmitter (from ECU to neoVI). Dim id_mask As UInt32 '///< ArbId filter mask for frames from transmitter (from ECU to neoVI). Dim fc_id As UInt32 '///< flow control arbId to transmit in flow control (from neoVI to ECU). Dim flowControlExtendedAddress As Byte '///< Extended Address byte used in flow control (from neoVI to ECU). see fc_ext_address_enable. Dim extendedAddress As Byte '///< Expected Extended Address byte of frames sent by transmitter (from ECU to neoVI). see ext_address_enable. Dim blockSize As Byte '///< Block Size to report in flow control response. Dim stMin As Byte '///< Minimum seperation time (between consecutive frames) to report in flow control response. '//flow control timeouts Dim cf_timeout As UInt16 '///< max timeout (ms) for waiting on consecutive frame. Set this to N_CR_MAX's value in J2534. '//option bits Dim flags As UInt32 '//To set the flags, AND the parameter you want from the stCM_ISO157652_RxMessage_Flags Enum Dim reserved0 As Int32 Dim reserved1 As Int32 Dim reserved2 As Int32 Dim reserved3 As Int32 End Structure Enum stCM_ISO157652_RxMessage_Flags id_29_bit_enable = 1 '///< Enables 29 bit arbId filter for frames (from ECU to neoVI). fc_id_29_bit_enable = 2 '///< Enables 29 bit arbId for Flow Control (from neoVI to ECU). ext_address_enable = 4 '///< Enables Extended Addressing (from ECU to neoVI). fc_ext_address_enable = 8 '///< Enables Extended Addressing (from neoVI to ECU). enableFlowControlTransmission = 16 '///< Enables Flow Control frame transmission (from neoVI to ECU). paddingEnable = 32 '///< Enable's padding End Enum Public Declare Function icsneoFindNeoDevices Lib "icsneo40.dll" (ByVal DeviceTypes As UInt32, ByRef pNeoDevice As NeoDevice, ByRef pNumDevices As Int32) As Int32 Public Declare Function icsneoOpenNeoDevice Lib "icsneo40.dll" (ByRef pNeoDevice As NeoDevice, ByRef hObject As Int32, ByRef bNetworkIDs As Byte, ByVal bConfigRead As Int32, ByVal bSyncToPC As Int32) As Int32 Public Declare Function icsneoClosePort Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pNumberOfErrors As Int32) As Int32 Public Declare Sub icsneoFreeObject Lib "icsneo40.dll" (ByVal hObject As Int32) Public Declare Function icsneoOpenPortEx Lib "icsneo40.dll" (ByVal lPortNumber As Int32, ByVal lPortType As Int32, ByVal lDriverType As Int32, ByVal lIPAddressMSB As Int32, ByVal lIPAddressLSBOrBaudRate As Int32, ByVal bConfigRead As Int32, ByRef bNetworkID As Byte, ByRef hObject As Int32) As Int32 Public Declare Function icsneoGetMessages Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pMsg As icsSpyMessage, ByRef pNumberOfMessages As Int32, ByRef pNumberOfErrors As Int32) As Int32 Public Declare Function icsneoTxMessages Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pMsg As icsSpyMessage, ByVal lNetworkID As Int32, ByVal lNumMessages As Int32) As Int32 Public Declare Function icsneoWaitForRxMessagesWithTimeOut Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iTimeOut As UInt32) As Int32 Public Declare Function icsneoEnableNetworkRXQueue Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iEnable As Int32) As Int32 Public Declare Function icsneoGetTimeStampForMsg Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pMsg As icsSpyMessage, ByRef pTimeStamp As Double) As Int32 Public Declare Sub icsneoGetISO15765Status Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal lNetwork As Int32, ByVal lClearTxStatus As Int32, ByVal lClearRxStatus As Int32, ByRef lTxStatus As Int32, ByRef lRxStatus As Int32) '//Public Declare Function icsneoSetISO15765RxParameters(byval hObject as Int32, byval lNetwork as Int32, byval lEnable as Int32, ByRef pFF_CFMsgFilter as spyFilterLong, ByRef pTxMsg as icsSpyMessage, byval lCFTimeOutMs as Int32, byval lFlowCBlockSize as Int32,byval lUsesExtendedAddressing as Int32, byval lUseHardwareIfPresent as Int32) As void Public Declare Function icsneoGetConfiguration Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pData As Byte, ByRef lNumBytes As Int32) As Int32 Public Declare Function icsneoSendConfiguration Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pData As Byte, ByVal lNumBytes As Int32) As Int32 Public Declare Function icsneoGetFireSettings Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pSettings As SFireSettings, ByVal iNumBytes As Int32) As Int32 Public Declare Function icsneoSetFireSettings Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pSettings As SFireSettings, ByVal iNumBytes As Int32, ByVal bSaveToEEPROM As Int32) As Int32 Public Declare Function icsneoGetVCAN3Settings Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pSettings As SVCAN3Settings, ByVal iNumBytes As Int32) As Int32 Public Declare Function icsneoSetVCAN3Settings Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pSettings As SVCAN3Settings, ByVal iNumBytes As Int32, ByVal bSaveToEEPROM As Int32) As Int32 Public Declare Function icsneoSetBitRate Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal BitRate As Int32, ByVal NetworkID As Int32) As Int32 Public Declare Function icsneoGetDeviceParameters Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pParameter As Char, ByRef pValues As Char, ByVal ValuesLength As Int16) As Int32 Public Declare Function icsneoSetDeviceParameters Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pParmValue As Char, ByRef pErrorIndex As Int32, ByVal bSaveToEEPROM As Int32) As Int32 Public Declare Function icsneoGetLastAPIError Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pErrorNumber As UInt32) As Int32 Public Declare Function icsneoGetErrorMessages Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef pErrorMsgs As Int32, ByRef pNumberOfErrors As Int32) As Int32 Public Declare Function icsneoGetErrorInfo Lib "icsneo40.dll" (ByVal lErrorNumber As Int32, ByVal sErrorDescriptionShort As String, ByVal sErrorDescriptionLong As String, ByRef lMaxLengthShort As Int32, ByRef lMaxLengthLong As Int32, ByRef lErrorSeverity As Int32, ByRef lRestartNeeded As Int32) As Int32 Public Declare Function icsneoValidateHObject Lib "icsneo40.dll" (ByVal hObject As Int32) As Int32 Public Declare Function icsneoGetDLLVersion Lib "icsneo40.dll" () As Int32 Public Declare Function icsneoStartSockServer Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iPort As Int32) As Int32 Public Declare Function icsneoStopSockServer Lib "icsneo40.dll" (ByVal hObject As Int32) As Int32 Public Declare Function icsneoScriptStart Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iLocation As Int32) As Int32 Public Declare Function icsneoScriptStop Lib "icsneo40.dll" (ByVal hObject As Int32) As Int32 Public Declare Function icsneoScriptLoad Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef bin As Byte, ByVal Len_Bytes As UInt32, ByVal iLocation As Int32) As Int32 Public Declare Function icsneoScriptClear Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iLocation As Int32) As Int32 Public Declare Function icsneoScriptStartFBlock Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal fb_index As UInt32) As Int32 Public Declare Function icsneoScriptGetFBlockStatus Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal fb_index As UInt32, ByRef piRunStatus As Int32) As Int32 Public Declare Function icsneoScriptStopFBlock Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal fb_index As UInt32) As Int32 Public Declare Function icsneoScriptGetScriptStatus Lib "icsneo40.dll" (ByVal hObject As Int32, ByRef piStatus As Int32) As Int32 Public Declare Function icsneoScriptReadAppSignal Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iIndex As UInt32, ByRef dValue As Double) As Int32 Public Declare Function icsneoScriptWriteAppSignal Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iIndex As UInt32, ByVal dValue As Double) As Int32 Public Declare Function icsneoScriptReadRxMessage Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iIndex As UInt32, ByRef pRxMessageMask As icsSpyMessage, ByRef pRxMessageValue As icsSpyMessage) As Int32 Public Declare Function icsneoScriptReadTxMessage Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iIndex As UInt32, ByRef pTxMessage As icsSpyMessage) As Int32 Public Declare Function icsneoScriptWriteRxMessage Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iIndex As UInt32, ByRef pRxMessageMask As icsSpyMessage, ByRef pRxMessageValue As icsSpyMessage) As Int32 Public Declare Function icsneoScriptWriteTxMessage Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal iIndex As UInt32, ByRef pTxMessage As icsSpyMessage) As Int32 '//Public Declare Function icsneoScriptReadISO15765_2_TxMessage(byval hObject as Int32,byval iIndex as UInt32, stCM_ISO157652_ref TxMessage pTxMessage) As Int32 '//Public Declare Function icsneoScriptWriteISO15765_2_TxMessage(Int32 hObject, UInt32 iIndex, stCM_ISO157652_ref TxMessage pTxMessage) As Int32 Public Declare Function icsneoOpenPort Lib "icsneo40.dll" (ByVal lPortNumber As Int32, ByVal lPortType As Int32, ByVal lDriverType As Int32, ByRef bNetworkID As Byte, ByRef bSCPIDs As Byte, ByRef hObject As Int32) As Int32 Public Declare Function icsneoEnableNetworkCom Lib "icsneo40.dll" (ByVal hObject As Int32, ByVal Enable As Int32) As Int32 Public Declare Function icsneoFindAllCOMDevices Lib "icsneo40.dll" (ByVal lDriverType As Int32, ByVal lGetSerialNumbers As Int32, ByVal lStopAtFirst As Int32, ByVal lUSBCommOnly As Int32, ByRef lDeviceTypes As UInt32, ByRef p_lComPorts As UInt32, ByRef p_lSerialNumbers As UInt32, ByRef lNumDevices As UInt32) As Int32 Public Function icsneoGetDLLErrorInfo(ByVal lErrorNum As Int32, ByRef sErrorShort As String, ByRef sErrorLong As String, ByRef lSeverity As Int32, ByRef bRestart As Int32) As Boolean Dim lErrorLongLength As Int32 Dim lErrorShortLength As Int32 Dim lRestart As Int32 Dim lResult As Int32 sErrorLong = New String(Chr(0), 255) sErrorShort = New String(Chr(0), 255) lErrorLongLength = 255 lErrorShortLength = 255 lResult = icsneoGetErrorInfo(lErrorNum, sErrorShort, sErrorLong, lErrorShortLength, lErrorLongLength, lSeverity, lRestart) sErrorShort = Left(sErrorShort, lErrorShortLength) sErrorLong = Left(sErrorLong, lErrorLongLength) bRestart = (lRestart) icsneoGetDLLErrorInfo = CBool(lResult) End Function ''// this function returns a text description for a network ID Public Function GetStringForNetworkID(ByVal lNetworkID As Int64) As String GetStringForNetworkID = "N/A" Select Case lNetworkID Case NETID_HSCAN GetStringForNetworkID = "HSCAN" Case NETID_MSCAN GetStringForNetworkID = "MSCAN" Case NETID_SWCAN GetStringForNetworkID = "SWCAN" Case NETID_LSFTCAN GetStringForNetworkID = "LSFTCAN" Case NETID_FORDSCP GetStringForNetworkID = "FORD SCP" Case NETID_J1708 GetStringForNetworkID = "J1708" Case NETID_AUX GetStringForNetworkID = "AUX" Case NETID_JVPW GetStringForNetworkID = "J1850 VPW" Case NETID_ISO GetStringForNetworkID = "ISO/UART" End Select End Function Public Function ConvertFromHex(ByVal sValue As String) As Double ConvertFromHex = Val("&H" & sValue) End Function Public Sub ConvertCANtoJ1850Message(ByRef icsCANStruct As icsSpyMessage, ByRef icsJ1850Struct As icsSpyMessageJ1850) '//Becuse LSet now has a different function in .NET the elements of the structs need to be copied one at a time. icsCANStruct.StatusBitField = icsJ1850Struct.StatusBitField icsCANStruct.StatusBitField2 = icsJ1850Struct.StatusBitField2 icsCANStruct.TimeHardware = icsJ1850Struct.TimeHardware icsCANStruct.TimeHardware2 = icsJ1850Struct.TimeHardware2 icsCANStruct.TimeSystem = icsJ1850Struct.TimeSystem icsCANStruct.TimeSystem2 = icsJ1850Struct.TimeSystem2 icsCANStruct.TimeStampHardwareID = icsJ1850Struct.TimeStampHardwareID icsCANStruct.TimeStampSystemID = icsJ1850Struct.TimeStampSystemID icsCANStruct.NetworkID = icsJ1850Struct.NetworkID icsCANStruct.NodeID = icsJ1850Struct.NodeID icsCANStruct.Protocol = icsJ1850Struct.Protocol icsCANStruct.MessagePieceID = icsJ1850Struct.MessagePieceID icsCANStruct.ColorID = icsJ1850Struct.ColorID icsCANStruct.NumberBytesHeader = icsJ1850Struct.NumberBytesHeader icsCANStruct.NumberBytesData = icsJ1850Struct.NumberBytesData icsCANStruct.DescriptionID = icsJ1850Struct.DescriptionID icsCANStruct.ArbIDOrHeader = (icsJ1850Struct.Header3 * 65536) + (icsJ1850Struct.Header2 * 256) + icsJ1850Struct.Header1 icsCANStruct.Data1 = icsJ1850Struct.Data1 icsCANStruct.Data2 = icsJ1850Struct.Data2 icsCANStruct.Data3 = icsJ1850Struct.Data3 icsCANStruct.Data4 = icsJ1850Struct.Data4 icsCANStruct.Data5 = icsJ1850Struct.Data5 icsCANStruct.Data6 = icsJ1850Struct.Data6 icsCANStruct.Data7 = icsJ1850Struct.Data7 icsCANStruct.Data8 = icsJ1850Struct.Data8 icsCANStruct.AckBytes1 = icsJ1850Struct.AckBytes1 icsCANStruct.AckBytes2 = icsJ1850Struct.AckBytes2 icsCANStruct.AckBytes3 = icsJ1850Struct.AckBytes3 icsCANStruct.AckBytes4 = icsJ1850Struct.AckBytes4 icsCANStruct.AckBytes5 = icsJ1850Struct.AckBytes5 icsCANStruct.AckBytes6 = icsJ1850Struct.AckBytes6 icsCANStruct.AckBytes7 = icsJ1850Struct.AckBytes7 icsCANStruct.AckBytes8 = icsJ1850Struct.AckBytes8 icsCANStruct.Value = icsJ1850Struct.Value icsCANStruct.MiscData = icsJ1850Struct.MiscData End Sub Public Sub ConvertJ1850toCAN(ByRef icsCANStruct As icsSpyMessage, ByRef icsJ1850Struct As icsSpyMessageJ1850) '//Becuse LSet now has a different function in .NET the elements of the structs need to be copied one at a time. icsJ1850Struct.StatusBitField = icsCANStruct.StatusBitField icsJ1850Struct.StatusBitField2 = icsCANStruct.StatusBitField2 icsJ1850Struct.TimeHardware = icsCANStruct.TimeHardware icsJ1850Struct.TimeHardware2 = icsCANStruct.TimeHardware2 icsJ1850Struct.TimeSystem = icsCANStruct.TimeSystem icsJ1850Struct.TimeSystem2 = icsCANStruct.TimeSystem2 icsJ1850Struct.TimeStampHardwareID = icsCANStruct.TimeStampHardwareID icsJ1850Struct.TimeStampSystemID = icsCANStruct.TimeStampSystemID icsJ1850Struct.NetworkID = icsCANStruct.NetworkID icsJ1850Struct.NodeID = icsCANStruct.NodeID icsJ1850Struct.Protocol = icsCANStruct.Protocol icsJ1850Struct.MessagePieceID = icsCANStruct.MessagePieceID icsJ1850Struct.ColorID = icsCANStruct.ColorID icsJ1850Struct.NumberBytesHeader = icsCANStruct.NumberBytesHeader icsJ1850Struct.NumberBytesData = icsCANStruct.NumberBytesData icsJ1850Struct.DescriptionID = icsCANStruct.DescriptionID icsJ1850Struct.Header1 = Convert.ToByte(&HFF And icsCANStruct.ArbIDOrHeader) icsJ1850Struct.Header2 = Convert.ToByte((&HFF00 And icsCANStruct.ArbIDOrHeader) / 256) icsJ1850Struct.Header3 = Convert.ToByte((&HFF0000 And icsCANStruct.ArbIDOrHeader) / 65536) icsJ1850Struct.Data1 = icsCANStruct.Data1 icsJ1850Struct.Data2 = icsCANStruct.Data2 icsJ1850Struct.Data3 = icsCANStruct.Data3 icsJ1850Struct.Data4 = icsCANStruct.Data4 icsJ1850Struct.Data5 = icsCANStruct.Data5 icsJ1850Struct.Data6 = icsCANStruct.Data6 icsJ1850Struct.Data7 = icsCANStruct.Data7 icsJ1850Struct.Data8 = icsCANStruct.Data8 icsJ1850Struct.AckBytes1 = icsCANStruct.AckBytes1 icsJ1850Struct.AckBytes2 = icsCANStruct.AckBytes2 icsJ1850Struct.AckBytes3 = icsCANStruct.AckBytes3 icsJ1850Struct.AckBytes4 = icsCANStruct.AckBytes4 icsJ1850Struct.AckBytes5 = icsCANStruct.AckBytes5 icsJ1850Struct.AckBytes6 = icsCANStruct.AckBytes6 icsJ1850Struct.AckBytes7 = icsCANStruct.AckBytes7 icsJ1850Struct.AckBytes8 = icsCANStruct.AckBytes8 icsJ1850Struct.Value = icsCANStruct.Value icsJ1850Struct.MiscData = icsCANStruct.MiscData End Sub End Module