// 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 SocketCAN__PortType_HH
#define SocketCAN__PortType_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 "SocketCAN_Types.hh"
#include "SocketCAN_PT.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

#undef SocketCAN__PortType_HH
#endif

namespace SocketCAN__PortType {

/* Forward declarations of classes */

class SocketCAN__PT;

} /* end of namespace */

#ifndef SocketCAN__PortType_HH
#define SocketCAN__PortType_HH

namespace SocketCAN__PortType {

/* Class definitions */

class SocketCAN__PT : public SocketCAN__PT_PROVIDER {
enum msg_selection { MESSAGE_0, MESSAGE_1, MESSAGE_2, MESSAGE_3, MESSAGE_4, MESSAGE_5, MESSAGE_6, MESSAGE_7, MESSAGE_8, MESSAGE_9, MESSAGE_10 };
struct msg_queue_item : public msg_queue_item_base {
msg_selection item_selection;
union {
SocketCAN__Types::SocketCAN__socket__result *message_0;
SocketCAN__Types::SocketCAN__ioctl__result *message_1;
SocketCAN__Types::SocketCAN__connect__result *message_2;
SocketCAN__Types::SocketCAN__bind__result *message_3;
SocketCAN__Types::SocketCAN__send__data__result *message_4;
SocketCAN__Types::SocketCAN__write__data__result *message_5;
SocketCAN__Types::SocketCAN__write__isotp__result *message_6;
SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame *message_7;
SocketCAN__Types::SocketCAN__receive__BCM__message *message_8;
SocketCAN__Types::SocketCAN__receive__isotp__pdu *message_9;
SocketCAN__Types::SocketCAN__setsockopt__result *message_10;
};
component sender_component;
};

void remove_msg_queue_head();
protected:
void clear_queue();
private:
PORT** mapped_ports;
size_t n_mapped_ports;
public:
SocketCAN__PT(const char *par_port_name = NULL);
~SocketCAN__PT();
void send(const SocketCAN__Types::SocketCAN__socket& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__socket& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__socket_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__socket_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__ioctl& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__ioctl& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__ioctl_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__ioctl_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__connect& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__connect& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__connect_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__connect_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__bind& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__bind& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__bind_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__bind_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__send__data& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__send__data& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__send__data_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__send__data_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__data& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__data& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__data_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__data_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__isotp& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__isotp& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__isotp_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__write__isotp_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__setsockopt& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__setsockopt& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__setsockopt_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__setsockopt_template& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__close& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__close& send_par, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__close_template& send_par, const COMPONENT& destination_component, FLOAT* timestamp_redirect = NULL);
void send(const SocketCAN__Types::SocketCAN__close_template& send_par, FLOAT* timestamp_redirect = NULL);
public:
void add_port(PORT* p);
void remove_port(PORT* p);
private:
void reset_port_variables();
public:
void outgoing_public_send(const SocketCAN__Types::SocketCAN__socket& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__ioctl& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__connect& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__bind& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__send__data& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__write__data& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__write__isotp& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__setsockopt& send_par);
void outgoing_public_send(const SocketCAN__Types::SocketCAN__close& send_par);
alt_status receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__socket__result_template& value_template, SocketCAN__Types::SocketCAN__socket__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__socket__result_template& value_template, SocketCAN__Types::SocketCAN__socket__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__socket__result_template& value_template, SocketCAN__Types::SocketCAN__socket__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__ioctl__result_template& value_template, SocketCAN__Types::SocketCAN__ioctl__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__ioctl__result_template& value_template, SocketCAN__Types::SocketCAN__ioctl__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__ioctl__result_template& value_template, SocketCAN__Types::SocketCAN__ioctl__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__connect__result_template& value_template, SocketCAN__Types::SocketCAN__connect__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__connect__result_template& value_template, SocketCAN__Types::SocketCAN__connect__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__connect__result_template& value_template, SocketCAN__Types::SocketCAN__connect__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__bind__result_template& value_template, SocketCAN__Types::SocketCAN__bind__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__bind__result_template& value_template, SocketCAN__Types::SocketCAN__bind__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__bind__result_template& value_template, SocketCAN__Types::SocketCAN__bind__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__send__data__result_template& value_template, SocketCAN__Types::SocketCAN__send__data__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__send__data__result_template& value_template, SocketCAN__Types::SocketCAN__send__data__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__send__data__result_template& value_template, SocketCAN__Types::SocketCAN__send__data__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__write__data__result_template& value_template, SocketCAN__Types::SocketCAN__write__data__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__write__data__result_template& value_template, SocketCAN__Types::SocketCAN__write__data__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__write__data__result_template& value_template, SocketCAN__Types::SocketCAN__write__data__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__write__isotp__result_template& value_template, SocketCAN__Types::SocketCAN__write__isotp__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__write__isotp__result_template& value_template, SocketCAN__Types::SocketCAN__write__isotp__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__write__isotp__result_template& value_template, SocketCAN__Types::SocketCAN__write__isotp__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame_template& value_template, SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame_template& value_template, SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame_template& value_template, SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__receive__BCM__message_template& value_template, SocketCAN__Types::SocketCAN__receive__BCM__message *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__receive__BCM__message_template& value_template, SocketCAN__Types::SocketCAN__receive__BCM__message *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__receive__BCM__message_template& value_template, SocketCAN__Types::SocketCAN__receive__BCM__message *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__receive__isotp__pdu_template& value_template, SocketCAN__Types::SocketCAN__receive__isotp__pdu *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__receive__isotp__pdu_template& value_template, SocketCAN__Types::SocketCAN__receive__isotp__pdu *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__receive__isotp__pdu_template& value_template, SocketCAN__Types::SocketCAN__receive__isotp__pdu *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status receive(const SocketCAN__Types::SocketCAN__setsockopt__result_template& value_template, SocketCAN__Types::SocketCAN__setsockopt__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status check_receive(const SocketCAN__Types::SocketCAN__setsockopt__result_template& value_template, SocketCAN__Types::SocketCAN__setsockopt__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
alt_status trigger(const SocketCAN__Types::SocketCAN__setsockopt__result_template& value_template, SocketCAN__Types::SocketCAN__setsockopt__result *value_redirect, const COMPONENT_template& sender_template, COMPONENT *sender_ptr, FLOAT* timestamp_redirect, Index_Redirect*);
private:
void incoming_message(const SocketCAN__Types::SocketCAN__socket__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__ioctl__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__connect__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__bind__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__send__data__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__write__data__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__write__isotp__result& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__receive__BCM__message& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__receive__isotp__pdu& incoming_par, component sender_component);
void incoming_message(const SocketCAN__Types::SocketCAN__setsockopt__result& incoming_par, component sender_component);
private:
protected:
void incoming_message(const SocketCAN__Types::SocketCAN__socket__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__ioctl__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__connect__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__bind__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__send__data__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__write__data__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__write__isotp__result& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__receive__CAN__or__CAN__FD__frame& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__receive__BCM__message& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__receive__isotp__pdu& incoming_par);
void incoming_message(const SocketCAN__Types::SocketCAN__setsockopt__result& incoming_par);
boolean process_message(const char *message_type, Text_Buf& incoming_buf, component sender_component, OCTETSTRING& slider);
};


/* Global variable declarations */

extern TTCN_Module module_object;

} /* end of namespace */

#endif
