////////////////////////////////////////////////////////////////////////////////////
// neovi.h
// 4/23/2001
// Header file for using the neoVI API in C/C++
// Copyright Intrepid Control Systems, Inc. 2000-2003
// www.intrepidcs.com
// Converted to Delphi by Robert Marquardt (rom)  2 Jan 2004
////////////////////////////////////////////////////////////////////////////////////

unit icsn40;

interface

uses
  // include the standard message data structures
  icsSpyData;

const
  // OpenPort "OpenType" Argument Constants
  NEOVI_COMMTYPE_RS232            = 0;
  NEOVI_COMMTYPE_USB_BULK         = 1;
  NEOVI_COMMTYPE_USB_ISO_DONT_USE = 2;
  NEOVI_COMMTYPE_TCPIP            = 3;

  // Driver Type Constants
  INTREPIDCS_DRIVER_STANDARD = 0;
  INTREPIDCS_DRIVER_TEST     = 1;

  // device Type IDs
  INTREPIDCS_DEVICE_NEO4    = 0;
  INTREPIDCS_DEVICE_VCAN    = 1;
  INTREPIDCS_DEVICE_NEO6    = 2;
  INTREPIDCS_DEVICE_UNKNOWN = 3;

  // neoVI Subsystem ID's
  NETID_DEVICE  = 0;
  NETID_HSCAN   = 1;
  NETID_MSCAN   = 2;
  NETID_SWCAN   = 3;
  NETID_LSFTCAN = 4;
  NETID_FORDSCP = 5;
  NETID_J1708   = 6;
  NETID_AUX     = 7;
  NETID_JVPW    = 8;
  NETID_ISO     = 9;
  NETID_ISOPIC  = 10;
  NETID_MAIN51  = 11;
  NETID_HOST    = 12;

  // ISO15765 Status Flags
  INTREPIDCS_15765_RX_ERR_GLOBAL       = $0001;
  INTREPIDCS_15765_RX_ERR_CFRX_EXP_FF  = $0002;
  INTREPIDCS_15765_RX_ERR_FCRX_EXP_FF  = $0004;
  INTREPIDCS_15765_RX_ERR_SFRX_EXP_CF  = $0008;
  INTREPIDCS_15765_RX_ERR_FFRX_EXP_CF  = $0010;
  INTREPIDCS_15765_RX_ERR_FCRX_EXP_CF  = $0020;
  INTREPIDCS_15765_RX_ERR_CF_TIME_OUT  = $0040;
  INTREPIDCS_15765_RX_COMPLETE         = $0080;
  INTREPIDCS_15765_RX_IN_PROGRESS      = $0100;
  INTREPIDCS_15765_RX_ERR_SEQ_ERR_CF   = $0200;

  // Configuration Array addresses

  // HSCAN neoVI or ValueCAN
  NEO_CFG_MPIC_HS_CAN_CNF1 = 512 + 10;
  NEO_CFG_MPIC_HS_CAN_CNF2 = 512 + 9;
  NEO_CFG_MPIC_HS_CAN_CNF3 = 512 + 8;
  NEO_CFG_MPIC_HS_CAN_MODE = 512 + 54;

  // med speed neoVI CAN
  NEO_CFG_MPIC_MS_CAN_CNF1 = 512 + 22;
  NEO_CFG_MPIC_MS_CAN_CNF2 = 512 + 21;
  NEO_CFG_MPIC_MS_CAN_CNF3 = 512 + 20;

  // med speed neoVI CAN
  NEO_CFG_MPIC_SW_CAN_CNF1 = 512 + 34;
  NEO_CFG_MPIC_SW_CAN_CNF2 = 512 + 33;
  NEO_CFG_MPIC_SW_CAN_CNF3 = 512 + 32;

  // med speed neoVI CAN
  NEO_CFG_MPIC_LSFT_CAN_CNF1 = 512 + 46;
  NEO_CFG_MPIC_LSFT_CAN_CNF2 = 512 + 45;
  NEO_CFG_MPIC_LSFT_CAN_CNF3 = 512 + 44;

  // neoVI Error Constants ///////////////////////////////////////////////////////////
  NEOVI_ERROR_DLL_TX_BUFFER_OVERFLOW                      = 0;
  NEOVI_ERROR_DLL_ERROR_BUFFER_OVERFLOW                   = 1;
  NEOVI_ERROR_DLL_USB_SEND_DATA_ERROR                     = 2;
  NEOVI_ERROR_DLL_ISO_DATA_BUFFER_ALLOC                   = 3;
  NEOVI_ERROR_DLL_ISO_DATA_READ_BUFFER                    = 4;
  NEOVI_ERROR_DLL_ISO_DATA_ZERO_PACKETS                   = 5;
  NEOVI_ERROR_DLL_RX_MSG_BUFFER_OVERFLOW                  = 6;
  NEOVI_ERROR_DLL_STOP_ISO_STREAM                         = 7;
  NEOVI_ERROR_DLL_INVALID_NETID                           = 8;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_RX_THREAD              = 9;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_TX_THREAD              = 10;
  NEOVI_ERROR_DLL_MAIN_PIC_BUFFER_OVERFLOW                = 11;
  NEOVI_ERROR_DLL_INVALID_DEVICE_RESPONSE                 = 12;
  NEOVI_ERROR_DLL_ISOTX_DATA_BUFFER_ALLOC                 = 13;
  NEOVI_ERROR_DLL_RX_CMD_BUFFER_OVERFLOW                  = 14;
  NEOVI_ERROR_DLL_RS232_RX_BUFFER_OVERFLOW                = 15;
  NEOVI_ERROR_DLL_RS232_ERR_READCOMERR                    = 16;
  NEOVI_ERROR_DLL_RS232_ERR_READ                          = 17;
  NEOVI_ERROR_DLL_RS232_BUFFER_ALLOC                      = 18;
  NEOVI_ERROR_DLL_RS232_TX_BUFFER_OVERFLOW                = 19;
  NEOVI_ERROR_DLL_RS232_MISC_ERROR                        = 20;
  NEOVI_ERROR_DLL_RS232_FIND_WRITE                        = 21;
  NEOVI_ERROR_DLL_RS232_FIND_BUFFER_ALLOC                 = 22;
  NEOVI_ERROR_DLL_RS232_FIND_CLEARCOMM                    = 23;
  NEOVI_ERROR_DLL_RS232_FIND_READCOMM                     = 24;
  NEOVI_ERROR_DLL_RS232_FIND_TIMEOUT                      = 25;
  NEOVI_ERROR_DLL_RS232_ERR_BREAK                         = 26;
  NEOVI_ERROR_DLL_RS232_ERR_FRAME                         = 27;
  NEOVI_ERROR_DLL_RS232_ERR_IOE                           = 28;
  NEOVI_ERROR_DLL_RS232_ERR_OVERRUN                       = 29;
  NEOVI_ERROR_DLL_RS232_ERR_PARITY                        = 30;
  NEOVI_ERROR_DLL_RS232_TXBUFFER_ALLOC                    = 31;
  NEOVI_ERROR_DLL_USB_TX_RS232_ERROR                      = 32;
  NEOVI_ERROR_DLL_RS232_CREATE_FILE                       = 33;
  NEOVI_ERROR_DLL_RS232_GET_COMM_STATE                    = 34;
  NEOVI_ERROR_DLL_RS232_SET_COMM_STATE                    = 35;
  NEOVI_ERROR_DLL_RS232_START_COMM_RX_THREAD              = 36;
  NEOVI_ERROR_DLL_RS232_START_COMM_TX_THREAD              = 37;
  NEOVI_ERROR_DLL_SYNC_COUNT_ERR                          = 38;
  NEOVI_ERROR_DLL_RX_MSG_FRAME_ERR                        = 39;
  NEOVI_ERROR_DLL_RX_MSG_FIFO_OVER                        = 40;
  NEOVI_ERROR_DLL_RX_MSG_CHK_SUM_ERR                      = 41;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_BULKIN_THREAD          = 42;
  NEOVI_ERROR_DLL_BULKIN_ERR_READ                         = 43;
  NEOVI_ERROR_DLL_MAIN51_RX_FIFO_OVERFLOW                 = 44;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW                 = 45;
  NEOVI_ERROR_DLL_MAIN51_DEV_FIFO_OVERFLOW                = 46;
  NEOVI_ERROR_DLL_RESET_STATUS_CHANGED                    = 47;
  NEOVI_ERROR_DLL_ISO_LONG_CACHE_OVERFLOW                 = 48;
  NEOVI_ERROR_DLL_ISORX_LONG_BUFFER_ALLOC                 = 49;
  NEOVI_ERROR_DLL_J1708_LONG_CACHE_OVERFLOW               = 50;
  NEOVI_ERROR_DLL_J1708_LONG_BUFFER_ALLOC                 = 51;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_DEVICE          = 52;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_HSCAN           = 53;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_MSCAN           = 54;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_SWCAN           = 55;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_LSFTCAN         = 56;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_FORDSCP         = 57;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_J1708           = 58;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_AUX             = 59;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_JVPW            = 60;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_ISO             = 61;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_ISOPIC          = 62;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_MAIN51          = 63;
  NEOVI_ERROR_DLL_MAIN51_TX_FIFO_OVERFLOW_HOST            = 64;
  NEOVI_ERROR_DLL_READ_ENTIRE_DEEPROM_ERROR               = 65;
  NEOVI_ERROR_DLL_WRITE_ENTIRE_DEEPROM_ERROR              = 66;
  NEOVI_ERROR_DLL_USB_PORT_ALREADY_OPEN                   = 67;
  NEOVI_ERROR_DLL_JVPW_TX_REPORT_FIFO_ERR_IN              = 68;
  NEOVI_ERROR_DLL_ISOJ_TX_REPORT_FIFO_ERR_IN              = 69;
  NEOVI_ERROR_DLL_JVPW_TX_REPORT_FIFO_ERR_OUT             = 70;
  NEOVI_ERROR_DLL_ISOJ_TX_REPORT_FIFO_ERR_OUT             = 71;
  NEOVI_ERROR_DLL_MAIN51_TX_IN_FROM_HOST_FIFO             = 72;
  NEOVI_ERROR_DLL_MAIN51_TX_HOST_CHKSUM                   = 73;
  NEOVI_ERROR_DLL_ISOJ_TX_HOST_MISSED_BYTE                = 74;
  NEOVI_ERROR_DLL_NEOVI_NO_RESPONSE                       = 75;
  NEOVI_ERROR_DLL_RX_SOCKET_FIFO_OVER                     = 76;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_TXSOCKET_THREAD        = 77;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_RXSOCKET_THREAD        = 78;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_TXSOCKET_CLIENT_THREAD = 78;
  NEOVI_ERROR_DLL_PROBLEM_STOPPING_RXSOCKET_CLIENT_THREAD = 79;
  NEOVI_ERROR_DLL_TCP_CLIENT_TX                           = 80;
  NEOVI_ERROR_DLL_TCP_CLIENT_RX                           = 81;
  NEOVI_ERROR_DLL_TCP_CLIENT_RX_SOCK                      = 82;
  NEOVI_ERROR_DLL_UNABLE_CONNECT_TO_SRVR                  = 83;
  NEOVI_ERROR_DLL_UNABLE_CREATE_CLIENT_SOCK               = 84;
  NEOVI_ERROR_DLL_UNABLE_WSASTARTUP                       = 85;
  NEOVI_ERROR_DLL_SOCK_CL_RD_BUFFER_ALLOC                 = 86;
  NEOVI_ERROR_DLL_SOCK_CL_TX_BUFFER_ALLOC                 = 87;
  NEOVI_ERROR_DLL_SOCK_SRVR_RX_BUFFER_ALLOC               = 88;
  NEOVI_ERROR_DLL_SOCK_SRVR_TX_BUFFER_ALLOC               = 89;
  NEOVI_ERROR_DLL_ILLEGAL_TX_NETWORK                      = 90;
  NEOVI_ERROR_DLL_MAIN51_TX_HOST_OVERRUN                  = 91;
  NEOVI_ERROR_DLL_OPEN_GET_COMM_TIMEOUT                   = 92;
  NEOVI_ERROR_DLL_OPEN_SET_COMM_TIMEOUT                   = 93;
  NEOVI_ERROR_DLL_OPEN_READ_DEVICE_TYPE                   = 94;
  NEOVI_ERROR_DLL_OPEN_READ_DEVICE_TYPE_TOUT              = 95;
  NEOVI_ERROR_DLL_CLOSE_PURGE_COMM                        = 96;
  NEOVI_ERROR_DLL_TX_COM_FIFO_OVERFLOW                    = 97;
  NEOVI_ERROR_DLL_GET_USBSERIAL_DEVICES                   = 98;

  // Constants for describing error severity
  icsspyErrCritical    = $10;
  icsspyErrExclamation = $30;
  icsspyErrInformation = $40;
  icsspyErrQuestion    = $20;

  // Constants used to calculate the timestamp
  NEOVI_TIMESTAMP_2 = 0.1048576;
  NEOVI_TIMESTAMP_1 = 0.0000016;

  // Constants used to calculate the timestamp
  NEOVI6_VCAN_TIMESTAMP_2 = 0.065536;
  NEOVI6_VCAN_TIMESTAMP_1 = 0.000001;

// Win32 DLL prototypes

type
  ICSNEOHANDLE = Integer; // (rom) addition
  PLongBool = ^LongBool; // (rom) for icsneoFindAllUSBDevices

function icsneoOpenPort(lPortNumber: Integer;
                        lPortType: Integer;
                        lDriverType: Integer;
                        bNetworkID: PByte;
                        bSCPIDs: PByte;
                        var hObject: ICSNEOHANDLE): LongBool; stdcall;
function icsneoOpenPortEx(lPortSerialNumber: Integer;
                          lPortType: Integer;
                          lDriverType: Integer;
                          lIPAddressMSB: Integer;
                          lIPAddressLSBOrBaudRate: Integer;
                          bConfigRead: Integer;
                          bNetworkID: PByte;
                          var hObject: ICSNEOHANDLE): LongBool; stdcall;
function icsneoClosePort(hObject: ICSNEOHANDLE;
                         var NumberOfErrors: Integer): LongBool; stdcall;
procedure icsneoFreeObject(hObject: ICSNEOHANDLE); stdcall;
function icsneoGetMessages(hObject: ICSNEOHANDLE;
                           Msg: PicsSpyMessage;
                           var NumberOfMessages: Integer;
                           var NumberOfErrors: Integer): LongBool; stdcall;
function icsneoTxMessages(hObject: ICSNEOHANDLE;
                          Msg: PicsSpyMessage;
                          lNetworkID: Integer;
                          lNumMessages: Integer): LongBool; stdcall;
function icsneoGetErrorMessages(hObject: ICSNEOHANDLE;
                                pErrorMsgs: PInteger;
                                var NumberOfErrors: Integer): LongBool; stdcall;
function icsneoGetErrorInfo(lErrorNumber: Integer;
                            szErrorDescriptionShort: PChar;
                            szErrorDescriptionLong: PChar;
                            var lMaxLengthShort: Integer;
                            var lMaxLengthLong: Integer;
                            var lErrorSeverity: Integer;
                            var lRestartNeeded: LongBool): LongBool; stdcall;
function icsneoSendConfiguration(hObject: ICSNEOHANDLE;
                                 pData: PByte;
                                 lNumBytes: Integer): LongBool; stdcall;
function icsneoFindAllUSBDevices(lDriverType: Integer;
                                 iGetSerialNumbers: LongBool;
                                 iDevices: PCardinal;
                                 iSerialNumbers: PCardinal;
                                 iOpenedStates: PLongBool;
                                 var iNumDevices: Cardinal): LongBool; stdcall;
function icsneoFindAllCOMDevices(lDriverType: Integer;
                                 lGetSerialNumbers: LongBool;
                                 lStopAtFirst: LongBool;
                                 lUSBCommOnly: LongBool;
                                 p_lDeviceTypes: PInteger;
                                 p_lComPorts: PInteger;
                                 p_lSerialNumbers: PInteger;
                                 var lNumDevices: Integer): LongBool; stdcall;
function icsneoStartSockServer(hObject: ICSNEOHANDLE;
                               iPort: Integer): LongBool; stdcall;
function icsneoStopSockServer(hObject: ICSNEOHANDLE): LongBool; stdcall;
function icsneoGetDLLVersion: Integer; stdcall;
procedure icsneoSetISO15765RxParameters(hObject: ICSNEOHANDLE;
                                        lNetwork: Integer;
                                        lEnable: LongBool;
                                        const FF_CFMsgFilter: spyFilterLong;
                                        const FlowCTxMsg: icsSpyMessage;
                                        lCFTimeOutMs: Integer;
                                        lFlowCBlockSize: Integer;
                                        lUsesExtendedAddressing: LongBool;
                                        lUseHardwareIfPresent: LongBool); stdcall;
procedure icsneoGetISO15765Status(hObject: ICSNEOHANDLE;
                                  lNetwork: Integer;
                                  lClearTxStatus: LongBool;
                                  lClearRxStatus: LongBool;
                                  var lTxStatus: Integer;
                                  var lRxStatus: Integer); stdcall;
function icsneoGetConfiguration(hObject: ICSNEOHANDLE;
                                pData: PByte;
                                var lNumBytes: Integer): LongBool; stdcall;

implementation

const
  icsneoDllName = 'ICSNEO40.DLL';

function icsneoOpenPort; external icsneoDllName name 'icsneoOpenPort';
function icsneoClosePort; external icsneoDllName name 'icsneoClosePort';
procedure icsneoFreeObject; external icsneoDllName name 'icsneoFreeObject';
function icsneoGetMessages; external icsneoDllName name 'icsneoGetMessages';
function icsneoTxMessages; external icsneoDllName name 'icsneoTxMessages';
function icsneoGetErrorMessages; external icsneoDllName name 'icsneoGetErrorMessages';
function icsneoGetErrorInfo; external icsneoDllName name 'icsneoGetErrorInfo';
function icsneoOpenPortEx; external icsneoDllName name 'icsneoOpenPortEx';
function icsneoSendConfiguration; external icsneoDllName name 'icsneoSendConfiguration';
function icsneoFindAllUSBDevices; external icsneoDllName name 'icsneoFindAllUSBDevices';
function icsneoFindAllCOMDevices; external icsneoDllName name 'icsneoFindAllCOMDevices';
function icsneoStartSockServer; external icsneoDllName name 'icsneoStartSockServer';
function icsneoStopSockServer; external icsneoDllName name 'icsneoStopSockServer';
function icsneoGetDLLVersion; external icsneoDllName name 'icsneoGetDLLVersion';
procedure icsneoSetISO15765RxParameters; external icsneoDllName name 'icsneoSetISO15765RxParameters';
procedure icsneoGetISO15765Status; external icsneoDllName name 'icsneoGetISO15765Status';
function icsneoGetConfiguration; external icsneoDllName name 'icsneoGetConfiguration';

end.
