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);
}
}
OpenTestSystem::Otx::DiagManager::SystemApi
Namespace containing all commands that are not standardized in OTX and are generally required,...
Definition: Util.h:20
OpenTestSystem::Otx::DiagManager::NoneOtxDiagApi::NoneOtxDiagFactory
Factory class for creating the NoneOtxDiagApi
Definition: NoneOtxDiagFactory.h:26
OpenTestSystem::Otx::DiagManager::OtxDiagApi
Namespace covering all actions and terms of all diagnostic related OTX extension by an identical meho...
Definition: DiagConnectionState.h:9
OpenTestSystem::Otx::DiagManager::OtxDiagApi::DataTypes::DiagRuntimeException
Identical to a datatype in the OTX standard ISO 13209. A detailed specification can be found there.
Definition: DiagRuntimeException.h:15
OpenTestSystem::Otx::DiagManager::OtxDiagApi::OtxDiagFactory
Factory class for creating the DiagOtxApi
Definition: OtxDiagFactory.h:37
OpenTestSystem::Otx::DiagManager::OtxDiagApi::IOtxDiag
DiagManager, which contains methods to get access to the supported OTX extension classes
Definition: IOtxDiag.h:32
OpenTestSystem::Otx::DiagManager::OtxDiagApi::IComInterface
The class is identical to an extension in OTX standard ISO 13209. A detailed specification can be fou...
Definition: IComInterface.h:21
OpenTestSystem::Otx
Namespace containing all objects which are standardized according to ISO 13209 (OTX)
OpenTestSystem::Otx::DiagManager
Namespace containing all objects for the communication to various, interchangeable diagnostic runtime...
Definition: DiagConnectionState.h:9
OpenTestSystem::Otx::DiagManager::NoneOtxDiagApi
Namespace containing all methods that are not standardized in OTX but are available in a diagnostic r...
Definition: INoneOtxDiag.h:9
OpenTestSystem::Otx::DiagManager::SystemApi::Util
Class for general utils
Definition: Util.h:25
OpenTestSystem::Otx::DiagManager::OtxDiagApi::IDiagCom
The class is identical to an extension in OTX standard ISO 13209. A detailed specification can be fou...
Definition: IDiagCom.h:23
OpenTestSystem
Namespace containing all objects related to testing inside automotive industry
OpenTestSystem::Otx::DiagManager::OtxDiagApi::OtxDiagFactory::CreateSocketOtxDiag
API_EXPORTS std::shared_ptr< IOtxDiag > CreateSocketOtxDiag(unsigned short port)
Creates a DiagManager instance inside a separate process with inter process communication via Sockets
OpenTestSystem::Otx::DiagManager::SystemApi::Util::SetLicenseKey
static void SetLicenseKey(unsigned short port, const std::string &licenseKey)
Sets a valid license key to active DiagManagerServer
OpenTestSystem::Otx::DiagManager::NoneOtxDiagApi::NoneOtxDiagFactory::CreateSocketNoneOtxDiag
std::shared_ptr< INoneOtxDiag > CreateSocketNoneOtxDiag(unsigned short port)
Creates a DiagManager instance inside a separate process with inter process communication via Sockets
OpenTestSystem::Otx::DiagManager::NoneOtxDiagApi::INoneOtxDiag
Contains methods which are not covered by the OTX standard
Definition: INoneOtxDiag.h:14
OpenTestSystem::Otx::DiagManager::OtxDiagApi::DataTypes
Namespace containing all OTX data types
Definition: AllClasses.h:8
OpenTestSystem::Otx::DiagManager::OtxDiagApi::DataTypes::IComInterface
Identical to a datatype in the OTX standard ISO 13209. A detailed specification can be found there.
Definition: DataTypes/IComInterface.h:13