// 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 CAN__matrix__test_HH
#define CAN__matrix__test_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 "CanError.hh"
#include "SocketCANtest.hh"
#include "CAN_matrix_templates.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 CAN__matrix__test {

/* Type definitions */

typedef COMPONENT MTC__CT;
typedef COMPONENT_template MTC__CT_template;

/* Function prototypes */

extern verdicttype testcase_tc__encdec(boolean has_timer, double timer_value);
extern verdicttype testcase_tc__can__raw__send__and__receive__can__frame(boolean has_timer, double timer_value);
extern verdicttype testcase_tc__can__raw__send__and__receive__canfd__frame(boolean has_timer, double timer_value);

/* Global variable declarations */

extern const TTCN_Typedescriptor_t& MTC__CT_descr_;
extern TTCN_Module module_object;

} /* end of namespace */

#endif
