// This C++ header file was generated by the TTCN-3 compiler
// of the TTCN-3 Test Executor version CRL 113 200/6 R6A
// for Lénárd Nagy (elnrnag@elx78355y6x) on Thu Oct 24 10:29:40 2019

// Copyright (c) 2000-2019 Ericsson Telecom AB

// Do not edit this file unless you know what you are doing.

#ifndef UnifiedDiagnosticServices__Template_HH
#define UnifiedDiagnosticServices__Template_HH

#ifdef TITAN_RUNTIME_2
#error Generated code does not match with used runtime.\
 Code was generated without -R option but -DTITAN_RUNTIME_2 was used.
#endif

/* Header file includes */

#include <TTCN3.hh>
#include "UnifiedDiagnosticServices.hh"

#if TTCN3_VERSION != 60600
#error Version mismatch detected.\
 Please check the version of the TTCN-3 compiler and the base library.\
 Run make clean and rebuild the project if the version of the compiler changed recently.
#endif

#ifndef LINUX
#error This file should be compiled on LINUX
#endif

namespace UnifiedDiagnosticServices__Template {

/* Function prototypes */

extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__diagnosticSessionControlRequestSID(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::DiagnosticSessionRequestType_template& p__diagnosticSessionType);
extern UnifiedDiagnosticServices::DefaultSessionResponse_template t__DefaultSessionResponse(const OCTETSTRING& p__p2ServerMax, const OCTETSTRING& p__p2StarServerMax);
extern UnifiedDiagnosticServices::ProgrammingSessionResponse_template t__ProgrammingSessionResponse(const OCTETSTRING& p__p2ServerMax, const OCTETSTRING& p__p2StarServerMax);
extern UnifiedDiagnosticServices::ExtendedDiagnosticSessionResponse_template t__ExtendedDiagnosticSessionResponse(const OCTETSTRING& p__p2ServerMax, const OCTETSTRING& p__p2StarServerMax);
extern UnifiedDiagnosticServices::SafetySystemDiagnosticSessionResponse_template t__SafetySystemDiagnosticSessionResponse(const OCTETSTRING& p__p2ServerMax, const OCTETSTRING& p__p2StarServerMax);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__diagnosticSessionControlResponseSID(const UnifiedDiagnosticServices::DiagnosticSessionResponseType_template& p__diagnosticSessionType);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__ecuResetRequestTypeSID(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::ECUResetRequestType_template& p__resetType);
extern UnifiedDiagnosticServices::EnableRapidPowerShutDownResponse_template t__EnableRapidPowerShutDownResponse(const OCTETSTRING& p__powerDownTime);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__ecuResetResponseTypeSID(const UnifiedDiagnosticServices::ECUResetResponseType_template& p__resetType);
extern UnifiedDiagnosticServices::RequestSeedRequest0_template t__requestSeedRequest0(const OCTETSTRING& p__securityAccessDataRecord);
extern UnifiedDiagnosticServices::SendKeyRequest0_template t__sendKeyRequest0(const OCTETSTRING& p__securityKey);
extern UnifiedDiagnosticServices::RequestSeedRequest1_template t__requestSeedRequest1(const OCTETSTRING& p__securityAccessDataRecord);
extern UnifiedDiagnosticServices::SendKeyRequest1_template t__sendKeyRequest1(const OCTETSTRING& p__securityKey);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__securityAccessRequest(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::SecurityAccessRequestType_template& p__securityAccessType);
extern UnifiedDiagnosticServices::RequestSeedResponse0_template t__requestSeedResponse0(const OCTETSTRING& p__securitySeed);
extern UnifiedDiagnosticServices::RequestSeedResponse1_template t__requestSeedResponse1(const OCTETSTRING& p__securitySeed);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__SecurityAccessResponseSID(const UnifiedDiagnosticServices::SecurityAccessResponseType_template& p__securityAccessType);
extern UnifiedDiagnosticServices::CommunicationType_template t__communicationType(const UnifiedDiagnosticServices::e__DisableEnable& p__disableEnable, const UnifiedDiagnosticServices::e__CommunicationMessages& p__communicationMessages);
extern UnifiedDiagnosticServices::CommunicationControlRequestType_template t__EnableRxAndTxRequest(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::CommunicationType_template& p__communicationType);
extern UnifiedDiagnosticServices::CommunicationControlRequestType_template t__EnableRxAndDisableTxRequest(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::CommunicationType_template& p__communicationType);
extern UnifiedDiagnosticServices::CommunicationControlRequestType_template t__DisableRxAndEnableTxRequest(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::CommunicationType_template& p__communicationType);
extern UnifiedDiagnosticServices::CommunicationControlRequestType_template t__DisableRxAndTxRequest(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit, const UnifiedDiagnosticServices::CommunicationType_template& p__communicationType);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__communicationControlRequest(const UnifiedDiagnosticServices::CommunicationControlRequestType_template& p__communicationControlRequestType);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__communicationControlResponse(const UnifiedDiagnosticServices::e__ControlType_template& p__controlType);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__testerPresentRequest(const UnifiedDiagnosticServices::SuppressPosRspMsgIndicationBitType& p__suppressPosRspMsgIndicationBit);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__ReadDataByIdentifierRequestSID(const UnifiedDiagnosticServices::ReadDataByIdentifierRequest_template& p__readDataByIdentifierRequest);
extern UnifiedDiagnosticServices::ReadDataByIdentifierResponse1_template t__ReadDataByIdentifierResponse1(const OCTETSTRING& p__readDataByIdentifierResponse);
extern UnifiedDiagnosticServices::ReadDataByIdentifierResponse2_template t__ReadDataByIdentifierResponse2(const OCTETSTRING& p__readDataByIdentifierResponse);
extern UnifiedDiagnosticServices::ReadDataByIdentifierResponse3_template t__ReadDataByIdentifierResponse3(const OCTETSTRING& p__readDataByIdentifierResponse);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__ReadDataByIdentifierResponseSID(const UnifiedDiagnosticServices::ReadDataByIdentifierResponse_template& p__readDataByIdentifierResponse);
extern UnifiedDiagnosticServices::WriteDataByIdentifierRequest1_template t__WriteDataByIdentifierRequest1(const OCTETSTRING& p__dataRecord);
extern UnifiedDiagnosticServices::WriteDataByIdentifierRequest2_template t__WriteDataByIdentifierRequest2(const OCTETSTRING& p__dataRecord);
extern UnifiedDiagnosticServices::WriteDataByIdentifierRequest3_template t__WriteDataByIdentifierRequest3(const OCTETSTRING& p__dataRecord);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__requests_template t__WriteDataByIdentifierRequestSID(const UnifiedDiagnosticServices::WriteDataByIdentifierRequest_template& p__writeDataByIdentifierRequest);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__WriteDataByIdentifierResponseSID(const UnifiedDiagnosticServices::WriteDataByIdentifierResponse_template& p__writeDataByIdentifierResponse);
extern UnifiedDiagnosticServices::TopLevelMessage__UDS__responses_template t__NegativeResponseCodeSID(const UnifiedDiagnosticServices::e__RequestSID& p__requestSID, const UnifiedDiagnosticServices::e__ResponseCode& p__responseCode);

/* Global variable declarations */

extern const UnifiedDiagnosticServices::DefaultSessionRequest_template& t__DefaultSessionRequest;
extern const UnifiedDiagnosticServices::ProgrammingSessionRequest_template& t__ProgrammingSessionRequest;
extern const UnifiedDiagnosticServices::ExtendedDiagnosticSessionRequest_template& t__ExtendedDiagnosticSessionRequest;
extern const UnifiedDiagnosticServices::SafetySystemDiagnosticSessionRequest_template& t__SafetySystemDiagnosticSessionRequest;
extern const UnifiedDiagnosticServices::HardResetRequest_template& t__HardResetRequest;
extern const UnifiedDiagnosticServices::KeyOffOnResetRequest_template& t__KeyOffOnResetRequest;
extern const UnifiedDiagnosticServices::SoftResetRequest_template& t__SoftResetRequest;
extern const UnifiedDiagnosticServices::EnableRapidPowerShutDownRequest_template& t__EnableRapidPowerShutDownRequest;
extern const UnifiedDiagnosticServices::DisableRapidPowerShutDownRequest_template& t__DisableRapidPowerShutDownRequest;
extern const UnifiedDiagnosticServices::HardResetResponse_template& t__HardResetResponse;
extern const UnifiedDiagnosticServices::KeyOffOnResetResponse_template& t__KeyOffOnResetResponse;
extern const UnifiedDiagnosticServices::SoftResetResponse_template& t__SoftResetResponse;
extern const UnifiedDiagnosticServices::DisableRapidPowerShutDownResponse_template& t__DisableRapidPowerShutDownResponse;
extern const UnifiedDiagnosticServices::SendKeyResponse0_template& t__sendKeyResponse0;
extern const UnifiedDiagnosticServices::SendKeyResponse1_template& t__sendKeyResponse1;
extern const UnifiedDiagnosticServices::ReadDataByIdentifierRequest1_template& t__ReadDataByIdentifierRequest1;
extern const UnifiedDiagnosticServices::ReadDataByIdentifierRequest2_template& t__ReadDataByIdentifierRequest2;
extern const UnifiedDiagnosticServices::ReadDataByIdentifierRequest3_template& t__ReadDataByIdentifierRequest3;
extern const UnifiedDiagnosticServices::WriteDataByIdentifierResponse1_template& t__WriteDataByIdentifierResponse1;
extern const UnifiedDiagnosticServices::WriteDataByIdentifierResponse2_template& t__WriteDataByIdentifierResponse2;
extern const UnifiedDiagnosticServices::WriteDataByIdentifierResponse3_template& t__WriteDataByIdentifierResponse3;
extern TTCN_Module module_object;

} /* end of namespace */

#endif
