/**
 * @file	VirtualChannelReceptionIF.h
 * @brief	This file defines the VirtualChannelReceptionIF class.
 * @date	25.03.2013
 * @author	baetz
 */

#ifndef VIRTUALCHANNELRECEPTIONIF_H_
#define VIRTUALCHANNELRECEPTIONIF_H_

#include "ClcwIF.h"
#include "TcTransferFrame.h"
#include "../returnvalues/HasReturnvaluesIF.h"

/**
 * This is the interface for Virtual Channel reception classes.
 * It represents a single TC Virtual Channel that operates on one IO
 */
class VirtualChannelReceptionIF {
public:
	/**
	 * Enum including all valid types of frames.
	 * The type is made up by two flags, so 0b1111 is definitely illegal.
	 */
	enum frameType  {
		AD_FRAME = 0b00,
		BC_FRAME = 0b11,
		BD_FRAME = 0b10,
		ILLEGAL_FRAME = 0b1111
	};
	/**
	 * Empty virtual destructor.
	 */
	virtual ~VirtualChannelReceptionIF() {
	}
	/**
	 * This method shall accept frames and do all FARM-1 stuff.
	 * Handling the Frame includes forwarding to higher-level procedures.
	 * @param frame	The Tc Transfer Frame that was received and checked.
	 * @param clcw	Any changes to the CLCW value are forwarded by using this parameter.
	 * @return The return Value shall indicate successful processing with @c RETURN_OK.
	 */
	virtual ReturnValue_t frameAcceptanceAndReportingMechanism( TcTransferFrame* frame, ClcwIF* clcw ) = 0;
	/**
	 * If any other System Objects are required for operation they shall be initialized here.
	 * @return	@c RETURN_OK for successful initialization.
	 */
	virtual ReturnValue_t initialize() = 0;
	/**
	 * Getter for the VCID.
	 * @return	The #channelId.
	 */
	virtual uint8_t getChannelId() const = 0;
};


#endif /* VIRTUALCHANNELRECEPTIONIF_H_ */