OTX-Runtime for C++  
Diagnostics over IP (DoIP)

The DiagManager supports the diagnostic communication over Internet Protocol (DoIP), see ISO 13400-2. The following section describes how a DoIP communication can be established.

Basic Sequence

The OTX ComInterface extensions provides all actions and terms to establish a DoIP communication. The following diagram shows the basic sequence.

Note: For DoIP communication the Extended Mode is necessary, see Communication Modes. The DiagManager can switch implicit to the right mode.

Basic sequence to establish a DoIP communication

Pseudo Code Example

The basic proceeding how to establish a DoIP communication is described in the following pseudo code example.

// Pseudo-Code example to establish a DoIP communication
// =====================================================
// Please note that the exact syntax of C++, DotNet and Java is different!
void main()
{
// Sets a valid license key to active the DiagManager Server
OpenTestSystem.Otx.DiagManager.SystemApi.Util.SetLicenseKey(8888, Constants.LICENSE_KEY);
// Creates the OtxDiagApi of the DiagManager client, DiagManager has being started
// Creates the NoneOtxDiagApi of the DiagManager client
// Gets the ComInterface (OTX Extension) from DiagManager
OpenTestSystem.Otx.DiagManager.OtxDiagApi.IComInterface comInterface = otxDiag.ComInterface;
// Gets the DiagCom (OTX Extension) from DiagManager
OpenTestSystem.Otx.DiagManager.OtxDiagApi.IDiagCom diagCom = otxDiag.DiagCom;
// Gets all available ComInterfaces (MCDInterface) as a list of String
List<String> comInterfaceNames = comInterface.GetComInterfaceNameList();
// Gets the ComInterface from the given name, whose Long-Name contains "connectiontype". Assume in this example, otxComInterface.LongName contains "connectiontype"
OpenTestSystem.Otx.DiagManager.OtxDiagApi.DataTypes.IComInterface otxComInterface = comInterface.GetComInterface(comInterfaceNames[0]);
try
{
// Connect to the selected ComInterface
comInterface.ConnectComInterface(otxComInterface);
// Activate the activation line
comInterface.ActivateEthernet(otxComInterface);
// Wait to give the controller time to start. The waiting time depends on machine and environment variables.
// It is also possible to poll until GetComInterfaceNameListFromEthernet gets the DoIP interface
Thread.Sleep(8000);
// Gets all available ComInterfaces (MCDInterface), including the ComInterface from Ethernet, as a list of String
List<String> comInterfaceNamesFromEthernet = comInterface.GetComInterfaceNameListFromEthernet(null, "PDU_IOCTL='PDU_IOCTL_VEHICLE_ID_REQUEST' PreselectionMode='None' PreselectionValue='' CombinationMode='DoIP-Entity' VehicleDiscoveryTime='1000' DestinationAddressCount='1' DA1='255.255.255.255'");
// Gets the ComInterface from the given Name, whose Long-Name contains "doip". Assume in this example, otxComInterfaceFromEthernet.LongName contains "doip"
OpenTestSystem.Otx.DiagManager.OtxDiagApi.DataTypes.IComInterface otxComInterfaceFromEthernet = comInterface.GetComInterface(comInterfaceNamesFromEthernet[1]);
// Connect to the selected ComInterface
comInterface.ConnectComInterface(otxComInterfaceFromEthernet);
// Sets the interface for DoIP in normal mode
noneOtxDiag.SetPreferedInterface(otxComInterfaceFromEthernet.ShortName);
// Gets the ComChannel
OpenTestSystem.Otx.DiagManager.OtxDiagApi.IComChannel comChannel = comInterface.GetComChannel("LL_Gateway", "", true);
// Gets the ComChannel - Alternative for extended mode - NoneOtxDiagApi.SetPreferedInterface is not necessary here
// OpenTestSystem.Otx.DiagManager.OtxDiagApi.IComChannel comChannel = comInterface.GetComChannelFromComInterface(otxComInterface, "LL_Gateway", "", true);
// Creates a DiagService
OpenTestSystem.Otx.DiagManager.OtxDiagApi.IDiagService diagService = diagCom.CreateDiagServiceByName(comChannel, "ReadSparePartNumber");
// Execute the DiagService
diagCom.ExecuteDiagService(diagService);
// Close the ComChannel and release all resources
diagCom.CloseComChannel(comChannel);
}
{
throw e;
}
finally
{
// Release the activation line
comInterface.DeactivateEthernet(otxComInterface);
// Close ComInterface
comInterface.CloseComInterface(otxComInterface);
}
}
Contains methods which are not covered by the OTX standard
Definition: INoneOtxDiag.h:14
Factory class for creating the NoneOtxDiagApi
Definition: NoneOtxDiagFactory.h:26
std::shared_ptr< INoneOtxDiag > CreateSocketNoneOtxDiag(unsigned short port)
Creates a DiagManager instance inside a separate process with inter process communication via Sockets
Identical to a datatype in the OTX standard ISO 13209. A detailed specification can be found there.
Definition: DiagRuntimeException.h:15
Identical to a datatype in the OTX standard ISO 13209. A detailed specification can be found there.
Definition: DataTypes/IComInterface.h:13
The class is identical to an extension in OTX standard ISO 13209. A detailed specification can be fou...
Definition: IComInterface.h:21
The class is identical to an extension in OTX standard ISO 13209. A detailed specification can be fou...
Definition: IDiagCom.h:23
DiagManager, which contains methods to get access to the supported OTX extension classes
Definition: IOtxDiag.h:32
Factory class for creating the DiagOtxApi
Definition: OtxDiagFactory.h:37
API_EXPORTS std::shared_ptr< IOtxDiag > CreateSocketOtxDiag(unsigned short port)
Creates a DiagManager instance inside a separate process with inter process communication via Sockets
Class for general utils
Definition: Util.h:25
static void SetLicenseKey(unsigned short port, const std::string &licenseKey)
Sets a valid license key to active DiagManagerServer
Namespace containing all methods that are not standardized in OTX but are available in a diagnostic r...
Namespace containing all OTX data types
Namespace covering all actions and terms of all diagnostic related OTX extension by an identical meho...
Namespace containing all commands that are not standardized in OTX and are generally required,...
Namespace containing all objects for the communication to various, interchangeable diagnostic runtime...
Namespace containing all objects which are standardized according to ISO 13209 (OTX)
Namespace containing all objects related to testing inside automotive industry