//************************************************************************************
//**  
//**  Source name:   E:\Development Moxa\TEST programs\PIC24FJ128GA202 - Tests\Compiler test.fcfx
//**  Title:         
//**  Description:   
//**  Device:        PIC16.24F.24FJ128GA202
//**  
//**  Generated by:  Flowcode v7.2.1.4
//**  Date:          Monday, October 02, 2017 12:59:15
//**  Users:         1
//**  Registered to: leoo
//**  Licence key:   0T84PB
//**  
//**  
//**  http://www.matrixtsl.com
//**  
//************************************************************************************


#define MX_PIC16

#define MX_CAL_PIC16

#define MX_CLK_SPEED 24576000

#define FCP_NULL Unconnected_Port


#include <xc.h>
#include <math.h>
#include <stdlib.h>
#include "p24Fxxxx.h"
//Configuration Start
_CONFIG1(65327);
_CONFIG2(64254);
_CONFIG3(65535);
_CONFIG4(32767);
//Configuration End

/*========================================================================*\
   Use :Include the type definitions
\*========================================================================*/
#include "C:\Program Files\Flowcode 7\CAL\internals.c"





/*========================================================================*\
   Use :panel
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCV_FALSE (0)
#define FCV_TRUE (1)


/*========================================================================*\
   Use :dash_IO_flasher1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :cal_spi
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_SPI_SS_TRIS_1 tris
#define MX_SPI_MISO_PORT_1 portb
#define MX_SPI_SCK_TRIS_1 trisb
#define MX_SPI_SCK_PIN_1 (8)
#define MX_SPI_MOSI_TRIS_1 trisb
#define MX_SPI_BMODE_1 (2)
#define MX_SPI_MISO_TRIS_1 trisb
#define MX_SPI_MOSI_PIN_1 (9)
#define MX_SPI_MISO_PIN_1 (11)
#define MX_SPI_SS_PIN_1 (0)
#define MX_SPI_PR_SCALE_1 (4)
#define MX_SPI_SS_PORT_1 port
#define MX_SPI_SCK_PORT_1 portb
#define MX_SPI_MOSI_PORT_1 portb
#define MX_SPI_CHANNEL_1 (0)


/*=----------------------------------------------------------------------=*\
   Use :cal_spi
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define MX_SPI_REF1

MX_GLOBAL MX_UINT32 FCV_01531_cal_spi__CONSOLE;

void FC_CAL_SPI_Slave_Uninit_1();
void FCD_01531_cal_spi__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR);
void FC_CAL_SPI_Slave_Init_1();
void FC_CAL_SPI_Master_Uninit_1();
MX_UINT8 FC_CAL_SPI_Master_Byte_1(MX_UINT8 FCL_DATAOUT);
void FC_CAL_SPI_Slave_TxByte_1(MX_UINT8 FCL_DATA);
MX_UINT8 FC_CAL_SPI_Slave_RxByte_1();
void FC_CAL_SPI_SetPrescaler_1(MX_UINT8 FCL_PRESCALER);
void FC_CAL_SPI_Master_Init_1();

/*========================================================================*\
   Use :TCP_Base
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :TCP_IP_EB023_00_2
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCVsz_01351_TCP_IP_EB023_00_2__GHRDSIZE 4
#define FCVsz_01351_TCP_IP_EB023_00_2__HEADER 32
#define FCVsz_01351_TCP_IP_EB023_00_2__GTXSIZE 4
#define FCVsz_01351_TCP_IP_EB023_00_2__GRXSIZE 4
#define FCVsz_01351_TCP_IP_EB023_00_2__MY_IP 4
#define FCVsz_01351_TCP_IP_EB023_00_2__GRXPTR 4
#define FCVsz_01351_TCP_IP_EB023_00_2__MY_MAC 6
#define FCVsz_01351_TCP_IP_EB023_00_2__GTXPTR 4
MX_GLOBAL MX_UINT8 FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCVsz_01351_TCP_IP_EB023_00_2__GHRDSIZE];
MX_GLOBAL MX_UINT8 FCV_01351_TCP_IP_EB023_00_2__HEADER[FCVsz_01351_TCP_IP_EB023_00_2__HEADER];
MX_GLOBAL MX_UINT16 FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCVsz_01351_TCP_IP_EB023_00_2__GTXSIZE];
MX_GLOBAL MX_UINT16 FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCVsz_01351_TCP_IP_EB023_00_2__GRXSIZE];
MX_GLOBAL MX_UINT8 FCV_01351_TCP_IP_EB023_00_2__MY_IP[FCVsz_01351_TCP_IP_EB023_00_2__MY_IP];
MX_GLOBAL MX_UINT16 FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCVsz_01351_TCP_IP_EB023_00_2__GRXPTR];
MX_GLOBAL MX_UINT8 FCV_01351_TCP_IP_EB023_00_2__MY_MAC[FCVsz_01351_TCP_IP_EB023_00_2__MY_MAC];
MX_GLOBAL MX_UINT16 FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCVsz_01351_TCP_IP_EB023_00_2__GTXPTR];

void FCD_01351_TCP_IP_EB023_00_2__TxSendMyIP(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatchMyIP(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatch_4_Bytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_BYTE1, MX_UINT8 FCL_BYTE2, MX_UINT8 FCL_BYTE3, MX_UINT8 FCL_BYTE4);
MX_UINT16 FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(MX_UINT16 FCL_ADDRESS);
void FCD_01351_TCP_IP_EB023_00_2__SetMyIP(MX_UINT8 FCL_IP0, MX_UINT8 FCL_IP1, MX_UINT8 FCL_IP2, MX_UINT8 FCL_IP3);
void FCD_01351_TCP_IP_EB023_00_2__TxSendString(MX_UINT8 FCL_CHANNEL, MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_LENGTH);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxReadHeader(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_IDX);
void FCD_01351_TCP_IP_EB023_00_2__RxSkipBytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_COUNT);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateIPSocket(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_PROTOCOL, MX_UINT8 FCL_BROADCAST);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__SetDestination(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_DST_IP0, MX_UINT8 FCL_DST_IP1, MX_UINT8 FCL_DST_IP2, MX_UINT8 FCL_DST_IP3, MX_UINT8 FCL_DST_PORT_HI, MX_UINT8 FCL_DST_PORT_LO);
void FCD_01351_TCP_IP_EB023_00_2__TxStart(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxReadByte(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateUDPSocket(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_SRC_PORT_HI, MX_UINT8 FCL_SRC_PORT_LO);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatch_6_Bytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_BYTE1, MX_UINT8 FCL_BYTE2, MX_UINT8 FCL_BYTE3, MX_UINT8 FCL_BYTE4, MX_UINT8 FCL_BYTE5, MX_UINT8 FCL_BYTE6);
void FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(MX_UINT16 FCL_ADDRESS, MX_UINT8 FCL_DATA);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatch_2_Bytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_BYTE1, MX_UINT8 FCL_BYTE2);
void FCD_01351_TCP_IP_EB023_00_2__TxEnd(MX_UINT8 FCL_CHANNEL);
void FCD_01351_TCP_IP_EB023_00_2__RxReadString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_LENGTH);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateTCPSocket(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_SRC_PORT_HI, MX_UINT8 FCL_SRC_PORT_LO);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxDataAvailable(MX_UINT8 FCL_CHANNEL);
void FCD_01351_TCP_IP_EB023_00_2__TxSendByte(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_DATA);
void FCD_01351_TCP_IP_EB023_00_2__TCPListen(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(MX_UINT16 FCL_ADDRESS);
void FCD_01351_TCP_IP_EB023_00_2__RxFlushData(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__TCPConnect(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_DST_IP0, MX_UINT8 FCL_DST_IP1, MX_UINT8 FCL_DST_IP2, MX_UINT8 FCL_DST_IP3, MX_UINT8 FCL_DST_PORT_HI, MX_UINT8 FCL_DST_PORT_LO);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatchMyMAC(MX_UINT8 FCL_CHANNEL);
MX_UINT16 FCD_01351_TCP_IP_EB023_00_2__RxDataSize(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateMACSocket(MX_UINT8 FCL_PROMISCUOUS, MX_UINT8 FCL_BROADCAST, MX_UINT8 FCL_ERROR);
void FCD_01351_TCP_IP_EB023_00_2__TxSendMyMAC(MX_UINT8 FCL_CHANNEL);
void FCD_01351_TCP_IP_EB023_00_2__SetMACAddress(MX_UINT8 FCL_MAC0, MX_UINT8 FCL_MAC1, MX_UINT8 FCL_MAC2, MX_UINT8 FCL_MAC3, MX_UINT8 FCL_MAC4, MX_UINT8 FCL_MAC5);
void FCD_01351_TCP_IP_EB023_00_2__SetSubnetMask(MX_UINT8 FCL_IP0, MX_UINT8 FCL_IP1, MX_UINT8 FCL_IP2, MX_UINT8 FCL_IP3);
void FCD_01351_TCP_IP_EB023_00_2__MAC_WriteWord(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_DATA);
void FCD_01351_TCP_IP_EB023_00_2__TCPClose(MX_UINT8 FCL_CHANNEL);
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__GetSocketStatus(MX_UINT8 FCL_CHANNEL);
void FCD_01351_TCP_IP_EB023_00_2__MAC_ResetPointers(MX_UINT8 FCL_CHANNEL);
void FCD_01351_TCP_IP_EB023_00_2__Initialise();
void FCD_01351_TCP_IP_EB023_00_2__SetGateway(MX_UINT8 FCL_IP0, MX_UINT8 FCL_IP1, MX_UINT8 FCL_IP2, MX_UINT8 FCL_IP3);

/*========================================================================*\
   Use :Include the chip adaption layer
\*========================================================================*/
#include "C:\Program Files\Flowcode 7\CAL\includes.c"


/*========================================================================*\
   Use :dash_IO_flasher1
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :cal_spi
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Send text to the SPI console
       :
       :Parameters for macro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR)
{


}


/*========================================================================*\
   Use :TCP_Base
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :TCP_IP_EB023_00_2
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :This macro fills the specified channel's transmit buffer with 4 bytes of data representing this Internet E-Block's IP address as specified in the component's property page.
       :
       :Parameters for macro TxSendMyIP:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TxSendMyIP(MX_UINT8 FCL_CHANNEL)
{

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_IP[0]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_IP[1]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_IP[2]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_IP[3]);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro returns a non-zero value when the next 4 bytes of data in the specified channel's reception buffer are the same as the Internet E-block's IP address.
       :
       :Parameters for macro RxMatchMyIP:
       :  Channel : Specifies the communications channel 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatchMyIP(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT8 FCL_RX_BYTE;
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = 1;

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_IP[0])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_IP[1])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_IP[2])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_IP[3])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro returns a non-zero value when the next 4 bytes of data in the specified channel's reception buffer are the same as those passed as parameters.  There are similar functions that check for 2 bytes and 6 bytes.
       :
       :Parameters for macro RxMatch_4_Bytes:
       :  Channel : Specifies the communications channel 0-3
       :  Byte1 : Specifies the value of the first byte
       :  Byte2 : Specifies the value of the second byte
       :  Byte3 : Specifies the value of the third byte
       :  Byte4 : Specifies the value of the fourth byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatch_4_Bytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_BYTE1, MX_UINT8 FCL_BYTE2, MX_UINT8 FCL_BYTE3, MX_UINT8 FCL_BYTE4)
{
	//Local variable definitions
	MX_UINT8 FCL_RX_BYTE;
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = 1;

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE1)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE2)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE3)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE4)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro MAC_ReadWord:
       :  Address : MX_UINT16
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(MX_UINT16 FCL_ADDRESS)
{
	//Local variable definitions
	MX_UINT8 FCL_DATA0;
	MX_UINT16 FCR_RETVAL;


	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FCP_SET(B, B, 0x8000, 0xf, 0);

		FC_CAL_SPI_Master_Byte_1(0x0F);

		FC_CAL_SPI_Master_Byte_1((FCL_ADDRESS & 0xFF00) >> 8);

		FC_CAL_SPI_Master_Byte_1(FCL_ADDRESS & 0xFF);

		FCL_DATA0 = FC_CAL_SPI_Master_Byte_1(0xAA);

		FCP_SET(B, B, 0x8000, 0xf, 1);

		FCI_DELAYBYTE_US(10);

		FCL_ADDRESS = FCL_ADDRESS + 1;

		FCP_SET(B, B, 0x8000, 0xf, 0);

		FC_CAL_SPI_Master_Byte_1(0x0F);

		FC_CAL_SPI_Master_Byte_1((FCL_ADDRESS & 0xFF00) >> 8);

		FC_CAL_SPI_Master_Byte_1(FCL_ADDRESS & 0xFF);

		FCR_RETVAL = FC_CAL_SPI_Master_Byte_1(0xAA);

		FCP_SET(B, B, 0x8000, 0xf, 1);

		FCI_DELAYBYTE_US(10);

		FCR_RETVAL = FCR_RETVAL | (FCL_DATA0 << 8);

	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro sets up the Internet E-Block's own IP address.  In most circumstances, this macro will not be required as the IP address setting in the component property page will remain constant throughout your application.
       :
       :Parameters for macro SetMyIP:
       :  IP0 : First Byte of IP address
       :  IP1 : Second Byte of IP address
       :  IP2 : Third Byte of IP address
       :  IP3 : Fourth Byte of IP address
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__SetMyIP(MX_UINT8 FCL_IP0, MX_UINT8 FCL_IP1, MX_UINT8 FCL_IP2, MX_UINT8 FCL_IP3)
{

	FCV_01351_TCP_IP_EB023_00_2__MY_IP[0] = FCL_IP0;
	FCV_01351_TCP_IP_EB023_00_2__MY_IP[1] = FCL_IP1;
	FCV_01351_TCP_IP_EB023_00_2__MY_IP[2] = FCL_IP2;
	FCV_01351_TCP_IP_EB023_00_2__MY_IP[3] = FCL_IP3;

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0F, FCV_01351_TCP_IP_EB023_00_2__MY_IP[0]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x10, FCV_01351_TCP_IP_EB023_00_2__MY_IP[1]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x11, FCV_01351_TCP_IP_EB023_00_2__MY_IP[2]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x12, FCV_01351_TCP_IP_EB023_00_2__MY_IP[3]);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro fills the specified channel's transmit buffer with data.  It can fill the buffer with a string of information.
       :
       :Parameters for macro TxSendString:
       :  Channel : Specifies the communications channel 0-3
       :  Data[20] : Data byte to append to Tx buffer.
       :  Length : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TxSendString(MX_UINT8 FCL_CHANNEL, MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_LENGTH)
{
	//Local variable definitions
	MX_UINT8 FCL_ADDR_L;
	MX_UINT8 FCL_ADDR_H;
	MX_UINT8 FCL_OFFSET;
	MX_UINT16 FCL_TX_MEM;
	MX_UINT8 FCL_IDX = (0x0);


	FCL_TX_MEM = 0x4000 + (0x0800 * FCL_CHANNEL);

	while (FCL_IDX < FCL_LENGTH)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL], FCL_DATA[FCL_IDX]);

		FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] + 1;
		FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] + 1;

		if (FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] >= 0x7FF)
		{

			FCD_01351_TCP_IP_EB023_00_2__TxEnd(FCL_CHANNEL);

		// } else {

		}

		if (FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] > (FCL_TX_MEM + 0x07FF))
		{

			FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] = FCL_TX_MEM;

		// } else {

		}

		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Once data in a particular channel has been received, the header will be filled with information about the received data.  This macro will return the information in the header.  The idx parameter specifies which byte of information in the header to read
       :
       :Parameters for macro RxReadHeader:
       :  Channel : Specifies the communications channel 0-3
       :  Idx : Specifies the byte index to return
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxReadHeader(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_IDX)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCL_IDX];

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Often when receiving data packets, it may be necessary to ignore large sections of the data.  This can be achieved by reading each byte individually (and ignoring the returned data), but a better way is to use this Rx_skipbytes macro.
       :
       :Parameters for macro RxSkipBytes:
       :  Channel : Specifies the communications channel 0-3
       :  Count : Specifies how many bytes to skip
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__RxSkipBytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_COUNT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);


	while (FCL_IDX < FCL_COUNT)
	{

		FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Note that sockets on up to 4 channels can be simultaneously opened and these channels are numbered 0 to 3.  Note that sockets with different modes can be opened on different channels.
       :
       :Parameters for macro CreateIPSocket:
       :  Channel : Specifies the communications channel 0-3
       :  Protocol : Specifies which IP protocol to use
       :  Broadcast : Allows broadcast type packets to be sent and received
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateIPSocket(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_PROTOCOL, MX_UINT8 FCL_BROADCAST)
{
	//Local variable definitions
	MX_UINT8 FCL_REGVAL;
	MX_UINT16 FCL_SR;
	MX_UINT16 FCL_CR;
	MX_UINT16 FCL_MR;
	MX_UINT16 FCL_PROTO;
	MX_UINT8 FCR_RETVAL;


	FCL_MR = 0x400 + (0x100 * FCL_CHANNEL);
	FCL_CR = FCL_MR + 0x01;
	FCL_SR = FCL_MR + 0x03;
	FCL_PROTO = FCL_MR + 0x14;

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	if (FCL_REGVAL != 0)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x10);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

	// } else {

	}

	FCD_01351_TCP_IP_EB023_00_2__MAC_ResetPointers(FCL_CHANNEL);

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	while (FCL_REGVAL != 0x32)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_MR, 0x03);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_PROTO, FCL_PROTOCOL);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x01);

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);


	}

	FCR_RETVAL = 1;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This is used in IP and UDP modes to set the destination of the intended data transfer.  The destination IP address needs to be set for both IP and UDP modes.
       :
       :Parameters for macro SetDestination:
       :  Channel : Specifies the communications channel 0-3
       :  Dst_IP0 : Specifies the first byte of an IP address
       :  Dst_IP1 : Specifies the second byte of an IP address
       :  Dst_IP2 : Specifies the third byte of an IP address
       :  Dst_IP3 : Specifies the fourth byte of an IP address
       :  Dst_Port_Hi : Port High Byte
       :  Dst_Port_Lo : Port Low Byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__SetDestination(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_DST_IP0, MX_UINT8 FCL_DST_IP1, MX_UINT8 FCL_DST_IP2, MX_UINT8 FCL_DST_IP3, MX_UINT8 FCL_DST_PORT_HI, MX_UINT8 FCL_DST_PORT_LO)
{
	//Local variable definitions
	MX_UINT16 FCL_DIPR;
	MX_UINT16 FCL_DPORT;
	MX_UINT8 FCR_RETVAL;


	if (FCL_CHANNEL >= 4)
	{

		FCR_RETVAL = 0;

	} else {

		FCL_DIPR = 0x040C + (0x100 * FCL_CHANNEL);
		FCL_DPORT = 0x0410 + (0x100 * FCL_CHANNEL);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR, FCL_DST_IP0);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR + 1, FCL_DST_IP1);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR + 2, FCL_DST_IP2);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR + 3, FCL_DST_IP3);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DPORT, FCL_DST_PORT_HI);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DPORT + 1, FCL_DST_PORT_LO);

		FCR_RETVAL = 1;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro indicates the start of data transmission for the specified buffer.  In TCP mode, data transmission can only begin once the socket has become established.  In other modes, data transmission can occur as soon as the socket has been opened.
       :
       :Parameters for macro TxStart:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TxStart(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_TX_PTR_VAL;
	MX_UINT16 FCL_TX_WR;
	MX_UINT16 FCL_TX_MEM;


	FCL_TX_WR = 0x424 + (0x100 * FCL_CHANNEL);
	FCL_TX_MEM = 0x4000 + (0x0800 * FCL_CHANNEL);

	FCL_TX_PTR_VAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_TX_WR);

	FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] = FCL_TX_MEM + (FCL_TX_PTR_VAL & 0x7FF);

	FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] = 0;

}

/*=----------------------------------------------------------------------=*\
   Use :A call to this macro will return a byte of data in the reception buffer of the specified channel.  It will also internally increment a pointer to that data so that the next call to 'Rx_readbyte' (or any other read function) will read the next byte
       :
       :Parameters for macro RxReadByte:
       :  Channel : Specifies the communications channel 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxReadByte(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_RX_MEM;
	MX_UINT8 FCR_RETVAL;


	FCL_RX_MEM = 0x6000 + (0x800 * FCL_CHANNEL);

	FCR_RETVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL]);

	FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] + 1;

	if (FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] > (FCL_RX_MEM + 0x7FF))
	{

		FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCL_RX_MEM;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro creates a socket for sending and receiving UDP data.
       :
       :Parameters for macro CreateUDPSocket:
       :  Channel : Specifies the communications channel 0-3
       :  Src_Port_Hi : Port High Byte
       :  Src_Port_Lo : Port Low Byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateUDPSocket(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_SRC_PORT_HI, MX_UINT8 FCL_SRC_PORT_LO)
{
	//Local variable definitions
	MX_UINT8 FCL_REGVAL;
	MX_UINT16 FCL_SR;
	MX_UINT16 FCL_CR;
	MX_UINT16 FCL_MR;
	MX_UINT16 FCL_PORT;
	MX_UINT8 FCR_RETVAL;


	FCL_MR = 0x400 + (0x100 * FCL_CHANNEL);
	FCL_CR = FCL_MR + 0x01;
	FCL_SR = FCL_MR + 0x03;
	FCL_PORT = FCL_MR + 0x04;

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	if (FCL_REGVAL != 0)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x10);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

	// } else {

	}

	FCD_01351_TCP_IP_EB023_00_2__MAC_ResetPointers(FCL_CHANNEL);

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	while (FCL_REGVAL != 0x22)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_MR, 0x02);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_PORT, FCL_SRC_PORT_HI);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_PORT + 1, FCL_SRC_PORT_LO);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x01);

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);


	}

	FCR_RETVAL = 1;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro returns a non-zero value when the next 6 bytes of data in the specified channel's reception buffer are the same as those passed as parameters.  There are similar functions that check for 2 bytes and 4 bytes.
       :
       :Parameters for macro RxMatch_6_Bytes:
       :  Channel : Specifies the communications channel 0-3
       :  Byte1 : Specifies the value of the first byte
       :  Byte2 : Specifies the value of the second byte
       :  Byte3 : Specifies the value of the third byte
       :  Byte4 : Specifies the value of the fourth byte
       :  Byte5 : Specifies the value of the fifth byte
       :  Byte6 : Specifies the value of the sixth byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatch_6_Bytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_BYTE1, MX_UINT8 FCL_BYTE2, MX_UINT8 FCL_BYTE3, MX_UINT8 FCL_BYTE4, MX_UINT8 FCL_BYTE5, MX_UINT8 FCL_BYTE6)
{
	//Local variable definitions
	MX_UINT8 FCL_RX_BYTE;
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = 1;

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE1)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE2)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE3)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE4)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE5)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE6)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro MAC_WriteByte:
       :  Address : MX_UINT16
       :  Data : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(MX_UINT16 FCL_ADDRESS, MX_UINT8 FCL_DATA)
{

	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FCP_SET(B, B, 0x8000, 0xf, 0);

		FC_CAL_SPI_Master_Byte_1(0xF0);

		FC_CAL_SPI_Master_Byte_1((FCL_ADDRESS & 0xFF00) >> 8);

		FC_CAL_SPI_Master_Byte_1(FCL_ADDRESS & 0xFF);

		FC_CAL_SPI_Master_Byte_1(FCL_DATA);

		FCP_SET(B, B, 0x8000, 0xf, 1);

	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :This macro returns a non-zero value when the next 2 bytes of data in the specified channel's reception buffer are the same as those passed as parameters.  There are similar functions that check for 4 bytes and 6 bytes.
       :
       :Parameters for macro RxMatch_2_Bytes:
       :  Channel : Specifies the communications channel 0-3
       :  Byte1 : Specifies the value of the first byte
       :  Byte2 : Specifies the value of the second byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatch_2_Bytes(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_BYTE1, MX_UINT8 FCL_BYTE2)
{
	//Local variable definitions
	MX_UINT8 FCL_RX_BYTE;
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = 1;

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE1)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCL_BYTE2)
	{

		FCR_RETVAL = 0;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Once the transmit buffer has been filled with data, call this macro to actually send the data.
       :
       :Parameters for macro TxEnd:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TxEnd(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_TX_PTR_CUR;
	MX_UINT16 FCL_CR;
	MX_UINT16 FCL_TX_WR;
	MX_UINT8 FCL_TEMP;


	FCL_CR = 0x401 + (0x100 * FCL_CHANNEL);
	FCL_TX_WR = 0x424 + (0x100 * FCL_CHANNEL);

	FCL_TX_PTR_CUR = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_TX_WR);

	FCL_TX_PTR_CUR = FCL_TX_PTR_CUR + FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL];

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteWord(FCL_TX_WR, FCL_TX_PTR_CUR);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x20);

	FCL_TEMP = 1;

	while (FCL_TEMP)
	{

		FCL_TEMP = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


	}

	FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] = 0;

}

/*=----------------------------------------------------------------------=*\
   Use :A call to this macro will return a string of data in the reception buffer of the specified channel.  It will also internally increment a pointer to that data so that the next call to 'Rx_readbyte' (or any other read function) will read the next byte
       :
       :Parameters for macro RxReadString:
       :  Channel : Specifies the communications channel 0-3
       :  Length : MX_UINT8
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__RxReadString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_LENGTH)
{
	//Local variable definitions
	MX_UINT16 FCL_RX_MEM;
	MX_UINT8 FCL_IDX = (0x0);


	FCL_RX_MEM = 0x6000 + (0x800 * FCL_CHANNEL);

	while (FCL_IDX < FCL_LENGTH)
	{

		FCR_RETVAL[FCL_IDX] = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL]);

		FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] + 1;

		if (FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] > (FCL_RX_MEM + 0x7FF))
		{

			FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCL_RX_MEM;

		// } else {

		}

		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :This macro creates a socket for sending and receiving TCP data.
       :
       :Parameters for macro CreateTCPSocket:
       :  Channel : Specifies the communications channel 0-3
       :  Src_Port_Hi : Port High Byte
       :  Src_Port_Lo : Port Low Byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateTCPSocket(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_SRC_PORT_HI, MX_UINT8 FCL_SRC_PORT_LO)
{
	//Local variable definitions
	MX_UINT8 FCL_REGVAL;
	MX_UINT16 FCL_SR;
	MX_UINT16 FCL_CR;
	MX_UINT16 FCL_MR;
	MX_UINT16 FCL_PORT;
	MX_UINT8 FCR_RETVAL;


	FCL_MR = 0x400 + (0x100 * FCL_CHANNEL);
	FCL_CR = FCL_MR + 0x01;
	FCL_SR = FCL_MR + 0x03;
	FCL_PORT = FCL_MR + 0x04;

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	if (FCL_REGVAL != 0)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x10);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

	// } else {

	}

	FCD_01351_TCP_IP_EB023_00_2__MAC_ResetPointers(FCL_CHANNEL);

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	while (FCL_REGVAL != 0x13)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_MR, 0x01);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_PORT, FCL_SRC_PORT_HI);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_PORT + 1, FCL_SRC_PORT_LO);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x01);

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);


	}

	FCR_RETVAL = 1;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro is used to check whether or not data has been received by the Internet E-Block. A return value of zero indicated that no data has been received.  A positive return value indicates that data is available.
       :
       :Parameters for macro RxDataAvailable:
       :  Channel : Specifies the communications channel 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxDataAvailable(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_TLEN;
	MX_UINT16 FCL_SR;
	MX_UINT16 FCL_RX_RSR;
	MX_UINT16 FCL_RX_RD;
	MX_UINT16 FCL_RX_MEM;
	MX_UINT8 FCL_SSR;
	MX_UINT16 FCL_RX_RSR_VAL;
	MX_UINT16 FCL_OFFSET;
	MX_UINT8 FCL_IDX;
	MX_UINT8 FCR_RETVAL;


	FCL_SR = 0x403 + (0x100 * FCL_CHANNEL);
	FCL_RX_RSR = FCL_SR + 0x23;
	FCL_RX_RD = FCL_SR + 0x25;
	FCL_RX_MEM = 0x6000 + (0x800 * FCL_CHANNEL);

	FCL_SSR = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	switch (FCL_SSR)
	{
		case 0x22:
		{
			FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] = 8;

			break;
		}
		case 0x32:
		{
			FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] = 6;

			break;
		}
		case 0x42:
		{
			FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] = 2;

			break;
		}
		default:
		{
			FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] = 0;

		}
	}

	FCL_RX_RSR_VAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_RX_RSR);

	FCR_RETVAL = 0;

	if (FCL_RX_RSR_VAL >= FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL])
	{

		if (FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] > 0)
		{

			FCL_OFFSET = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_RX_RD);

			FCL_OFFSET = FCL_OFFSET & 0x07FF;

			FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCL_RX_MEM + FCL_OFFSET;

			FCL_IDX = 0;

			while (FCL_IDX < FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL])
			{

				FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCL_IDX] = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL]);

				FCL_IDX = FCL_IDX + 1;
				FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] + 1;

				if (FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] > (FCL_RX_MEM + 0x7FF))
				{

					FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCL_RX_MEM;

				// } else {

				}


			}

			FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] - 2];

			FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] << 8;

			FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] | FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCV_01351_TCP_IP_EB023_00_2__GHRDSIZE[FCL_CHANNEL] - 1];

			FCL_IDX = 7;

			while (FCL_IDX > 1)
			{

				FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCL_IDX] = FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCL_IDX - 2];

				FCL_IDX = FCL_IDX - 1;


			}

			FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + 1] = FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] & 0xFF;

			FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8)] = (FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] & 0xFF00) >> 8;

		} else {

			FCL_OFFSET = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_RX_RD);

			FCL_OFFSET = FCL_OFFSET & 0x7FF;

			FCV_01351_TCP_IP_EB023_00_2__GRXPTR[FCL_CHANNEL] = FCL_RX_MEM + FCL_OFFSET;

			FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] = FCL_RX_RSR_VAL;

			FCL_IDX = 7;

			while (FCL_IDX > 1)
			{

				FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + FCL_IDX] = 0;

				FCL_IDX = FCL_IDX - 1;


			}

			FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8) + 1] = FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] & 0xFF;

			FCV_01351_TCP_IP_EB023_00_2__HEADER[(FCL_CHANNEL * 8)] = (FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] & 0xFF00) >> 8;

		}

		if (FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL] >= 255)
		{

			FCR_RETVAL = 255;

		} else {

			FCR_RETVAL = FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL];

		}

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro fills the specified channel's transmit buffer with data.  It can fill the buffer with a single byte of data, or with a string of information.
       :
       :Parameters for macro TxSendByte:
       :  Channel : Specifies the communications channel 0-3
       :  Data : Data byte to append to Tx buffer.
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TxSendByte(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_DATA)
{
	//Local variable definitions
	MX_UINT8 FCL_ADDR_L;
	MX_UINT8 FCL_ADDR_H;
	MX_UINT8 FCL_OFFSET;
	MX_UINT16 FCL_TX_MEM;


	FCL_TX_MEM = 0x4000 + (0x0800 * FCL_CHANNEL);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL], FCL_DATA);

	FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] + 1;
	FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] = FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] + 1;

	if (FCV_01351_TCP_IP_EB023_00_2__GTXSIZE[FCL_CHANNEL] >= 0x7FF)
	{

		FCD_01351_TCP_IP_EB023_00_2__TxEnd(FCL_CHANNEL);

	// } else {

	}

	if (FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] > (FCL_TX_MEM + 0x07FF))
	{

		FCV_01351_TCP_IP_EB023_00_2__GTXPTR[FCL_CHANNEL] = FCL_TX_MEM;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :This macro puts a previously opened TCP channel in "passive open" mode.  This is the required mode when writing a TCP server application (e.g. a web server to display HTML web pages).
       :
       :Parameters for macro TCPListen:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TCPListen(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_CR;


	if (FCL_CHANNEL >= 4)
	{

	} else {

		FCL_CR = 0x401 + (0x100 * FCL_CHANNEL);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x02);

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro MAC_ReadByte:
       :  Address : MX_UINT16
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(MX_UINT16 FCL_ADDRESS)
{
	//Local variable definitions
	MX_UINT8 FCL_RET;
	MX_UINT8 FCR_RETVAL;


	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FCP_SET(B, B, 0x8000, 0xf, 0);

		FC_CAL_SPI_Master_Byte_1(0x0F);

		FC_CAL_SPI_Master_Byte_1((FCL_ADDRESS & 0xFF00) >> 8);

		FC_CAL_SPI_Master_Byte_1(FCL_ADDRESS & 0xFF);

		FCR_RETVAL = FC_CAL_SPI_Master_Byte_1(0xAA);

		FCP_SET(B, B, 0x8000, 0xf, 1);

	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Once data reception has been completed, this macro should be called to discard the data packet and allow other data packets to be read.
       :
       :Parameters for macro RxFlushData:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__RxFlushData(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_RX_RSR;
	MX_UINT16 FCL_RX_RD;
	MX_UINT16 FCL_CR;
	MX_UINT16 FCL_RX_SZ;
	MX_UINT16 FCL_RX_PTR;


	FCL_CR = 0x401 + (0x100 * FCL_CHANNEL);
	FCL_RX_RSR = FCL_CR + 0x25;
	FCL_RX_RD = FCL_RX_RSR + 0x02;

	FCL_RX_SZ = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_RX_RSR);

	FCL_RX_PTR = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadWord(FCL_RX_RD);

	FCL_RX_PTR = (FCL_RX_PTR + FCL_RX_SZ);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteWord(FCL_RX_RD, FCL_RX_PTR);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x40);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro puts a previously opened TCP channel in "active open" mode.  This is the required mode when writing a TCP client application (e.g. using SMTP to send an email).
       :
       :Parameters for macro TCPConnect:
       :  Channel : Specifies the communications channel 0-3
       :  Dst_IP0 : First Byte of IP address
       :  Dst_IP1 : Second Byte of IP address
       :  Dst_IP2 : Third Byte of IP address
       :  Dst_IP3 : Fourth Byte of IP address
       :  Dst_Port_Hi : High Byte of destination port
       :  Dst_Port_Lo : Low Byte of destination port
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__TCPConnect(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_DST_IP0, MX_UINT8 FCL_DST_IP1, MX_UINT8 FCL_DST_IP2, MX_UINT8 FCL_DST_IP3, MX_UINT8 FCL_DST_PORT_HI, MX_UINT8 FCL_DST_PORT_LO)
{
	//Local variable definitions
	MX_UINT16 FCL_DPORT;
	MX_UINT16 FCL_DIPR;
	MX_UINT16 FCL_CR;
	MX_UINT16 FCL_IR;
	MX_UINT8 FCR_RETVAL;


	FCL_CR = 0x401 + (0x100 * FCL_CHANNEL);
	FCL_IR = FCL_CR + 1;
	FCL_DIPR = FCL_CR + 11;
	FCL_DPORT = FCL_CR + 15;

	if (FCL_CHANNEL >= 4)
	{

		FCR_RETVAL = 0;

	} else {

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DPORT, FCL_DST_PORT_HI);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DPORT + 1, FCL_DST_PORT_LO);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR, FCL_DST_IP0);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR + 1, FCL_DST_IP1);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR + 2, FCL_DST_IP2);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_DIPR + 3, FCL_DST_IP3);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(FCL_CR, 0x04);

		FCR_RETVAL = 1;

		while (FCR_RETVAL)
		{

			FCR_RETVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

		while (FCR_RETVAL == 0)
		{

			FCR_RETVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_IR);


		}

		if ((FCR_RETVAL & 0x01) != 0)
		{

			FCR_RETVAL = 1;

		} else {

			FCR_RETVAL = 0;

		}

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro returns a non-zero value when the next 6 bytes of data in the specified channel's reception buffer are the same as the Internet E-block's MAC address entered in the component's property page.
       :
       :Parameters for macro RxMatchMyMAC:
       :  Channel : Specifies the communications channel 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__RxMatchMyMAC(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT8 FCL_RX_BYTE;
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = 1;

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_MAC[0])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_MAC[1])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_MAC[2])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_MAC[3])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_MAC[4])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	FCL_RX_BYTE = FCD_01351_TCP_IP_EB023_00_2__RxReadByte(FCL_CHANNEL);

	if (FCL_RX_BYTE != FCV_01351_TCP_IP_EB023_00_2__MY_MAC[5])
	{

		FCR_RETVAL = 0;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro is used to detect the size of data collected by the Rx_data_available macro.
       :
       :Parameters for macro RxDataSize:
       :  Channel : Specifies the communications channel 0-3
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_01351_TCP_IP_EB023_00_2__RxDataSize(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FCV_01351_TCP_IP_EB023_00_2__GRXSIZE[FCL_CHANNEL];

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro creates a socket for sending and receiving Ethernet data using raw data.
       :
       :Parameters for macro CreateMACSocket:
       :  Promiscuous : Receive everything (1) or just data bound for your MAC (0)
       :  Broadcast : Allows broadcast messages to be accepted (1) or rejected (0)
       :  Error : Allowsmessages with errors to be accepted (1) or rejected (0)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__CreateMACSocket(MX_UINT8 FCL_PROMISCUOUS, MX_UINT8 FCL_BROADCAST, MX_UINT8 FCL_ERROR)
{
	//Local variable definitions
	MX_UINT8 FCL_REGVAL = (0x4);
	MX_UINT8 FCR_RETVAL;


	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(0x0403);

	if (FCL_REGVAL != 0)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0401, 0x10);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(0x0401);


		}

	// } else {

	}

	FCD_01351_TCP_IP_EB023_00_2__MAC_ResetPointers(0);

	FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(0x0403);

	while (FCL_REGVAL != 0x42)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0400, 0x04);

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0401, 0x01);

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(0x0401);

		while (FCL_REGVAL)
		{

			FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(0x0401);


		}

		FCL_REGVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(0x0403);


	}

	FCV_01351_TCP_IP_EB023_00_2__HEADER[0] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[1] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[2] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[3] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[4] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[5] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[6] = 0;
	FCV_01351_TCP_IP_EB023_00_2__HEADER[7] = 0;

	FCR_RETVAL = 1;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro fills the specified channel's transmit buffer with 6 bytes of data representing this Internet E-Block's MAC address as specified in the component's property page.
       :
       :Parameters for macro TxSendMyMAC:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TxSendMyMAC(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT8 FCL_ADDR_L;
	MX_UINT8 FCL_ADDR_H;
	MX_UINT8 FCL_OFFSET;


	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_MAC[0]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_MAC[1]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_MAC[2]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_MAC[3]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_MAC[4]);

	FCD_01351_TCP_IP_EB023_00_2__TxSendByte(FCL_CHANNEL, FCV_01351_TCP_IP_EB023_00_2__MY_MAC[5]);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro sets up the Internet E-Block's MAC address.  In most circumstances, this macro will not be required as the MAC address setting in the component property page will remain constant throughout your application.
       :
       :Parameters for macro SetMACAddress:
       :  MAC0 : First Byte of address
       :  MAC1 : Second Byte of address
       :  MAC2 : Third Byte of address
       :  MAC3 : Fourth Byte of address
       :  MAC4 : Fourth Byte of address
       :  MAC5 : Fifth Byte of address
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__SetMACAddress(MX_UINT8 FCL_MAC0, MX_UINT8 FCL_MAC1, MX_UINT8 FCL_MAC2, MX_UINT8 FCL_MAC3, MX_UINT8 FCL_MAC4, MX_UINT8 FCL_MAC5)
{

	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[0] = FCL_MAC0;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[1] = FCL_MAC1;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[2] = FCL_MAC2;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[3] = FCL_MAC3;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[4] = FCL_MAC4;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[5] = FCL_MAC5;

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x09, FCL_MAC0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0A, FCL_MAC1);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0B, FCL_MAC2);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0C, FCL_MAC3);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0D, FCL_MAC4);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0E, FCL_MAC5);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro sets up the Internet E-Block's Subnet Mask.  In most circumstances, this macro will not be required as the subnet mask setting in the component property page will remain constant throughout your application.
       :
       :Parameters for macro SetSubnetMask:
       :  IP0 : First Byte of IP address
       :  IP1 : Second Byte of IP address
       :  IP2 : Third Byte of IP address
       :  IP3 : Fourth Byte of IP address
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__SetSubnetMask(MX_UINT8 FCL_IP0, MX_UINT8 FCL_IP1, MX_UINT8 FCL_IP2, MX_UINT8 FCL_IP3)
{

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x05, FCL_IP0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x06, FCL_IP1);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x07, FCL_IP2);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x08, FCL_IP3);

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro MAC_WriteWord:
       :  Address : MX_UINT16
       :  Data : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__MAC_WriteWord(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_DATA)
{

	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FCP_SET(B, B, 0x8000, 0xf, 0);

		FC_CAL_SPI_Master_Byte_1(0xF0);

		FC_CAL_SPI_Master_Byte_1((FCL_ADDRESS & 0xFF00) >> 8);

		FC_CAL_SPI_Master_Byte_1(FCL_ADDRESS & 0xFF);

		FC_CAL_SPI_Master_Byte_1((FCL_DATA & 0xFF00) >> 8);

		FCP_SET(B, B, 0x8000, 0xf, 1);

		FCI_DELAYBYTE_US(10);

		FCL_ADDRESS = FCL_ADDRESS + 1;

		FCP_SET(B, B, 0x8000, 0xf, 0);

		FC_CAL_SPI_Master_Byte_1(0xF0);

		FC_CAL_SPI_Master_Byte_1((FCL_ADDRESS & 0xFF00) >> 8);

		FC_CAL_SPI_Master_Byte_1(FCL_ADDRESS & 0xFF);

		FC_CAL_SPI_Master_Byte_1(FCL_DATA & 0xFF);

		FCP_SET(B, B, 0x8000, 0xf, 1);

		FCI_DELAYBYTE_US(10);

	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :When an established TCP connection has finished transmission of data, either the local application (i.e. your code) or the remote application (i.e. the application at the other end of the connection) can initiate closure of the socket.
       :
       :Parameters for macro TCPClose:
       :  Channel : Specifies the communications channel 0-3
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__TCPClose(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT8 FCL_IS_EQUAL = (0x0);
	MX_UINT8 FCL_TIMEOUT = (0x64);
	MX_UINT16 FCL_IR;
	MX_UINT16 FCL_CR;
	MX_UINT8 FCL_TEMP;


	FCL_CR = 0x401 + (0x100 * FCL_CHANNEL);
	FCL_IR = FCL_CR + 1;

	while (FCL_IS_EQUAL == 0)
	{

		FCL_TEMP = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_IR);

		if (FCL_TEMP & 0x10)
		{

			FCL_IS_EQUAL = 1;

		} else {

			FCI_DELAYBYTE_MS(1);

			FCL_TIMEOUT = FCL_TIMEOUT - 1;

			if (FCL_TIMEOUT == 0)
			{

				FCL_IS_EQUAL = 1;

			// } else {

			}

		}


	}

	if (FCL_TIMEOUT != 0)
	{

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x401, 0x08);

		FCL_IS_EQUAL = 1;

		while (FCL_IS_EQUAL)
		{

			FCL_IS_EQUAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

		FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x401, 0x10);

		FCL_IS_EQUAL = 1;

		while (FCL_IS_EQUAL)
		{

			FCL_IS_EQUAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_CR);


		}

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :This returns the state of the requested channel's socket.
       :
       :Parameters for macro GetSocketStatus:
       :  Channel : Specifies the communications channel 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01351_TCP_IP_EB023_00_2__GetSocketStatus(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT16 FCL_SR;
	MX_UINT8 FCR_RETVAL;


	FCL_SR = 0x403 + (0x100 * FCL_CHANNEL);

	if (FCL_CHANNEL >= 4)
	{

		FCR_RETVAL = 255;

	} else {

		FCR_RETVAL = FCD_01351_TCP_IP_EB023_00_2__MAC_ReadByte(FCL_SR);

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro MAC_ResetPointers:
       :  Channel : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__MAC_ResetPointers(MX_UINT8 FCL_CHANNEL)
{
	//Local variable definitions
	MX_UINT8 FCL_SSR;
	MX_UINT8 FCL_RR;
	MX_UINT8 FCL_RW;
	MX_UINT8 FCL_TW;
	MX_UINT8 FCL_TR;
	MX_UINT8 FCL_TA;


}

/*=----------------------------------------------------------------------=*\
   Use :Resets and initialises the Internet E-Block. It sets up the gateway address, subnet mask, device IP address and device MAC address as defined in the properties of the Flowcode component. This macro must be called before any other TCP_IP component macros
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__Initialise()
{
	//Local variable definitions
	MX_UINT8 FCL_TEMP;


	FCV_01351_TCP_IP_EB023_00_2__MY_IP[0] = 192;
	FCV_01351_TCP_IP_EB023_00_2__MY_IP[1] = 168;
	FCV_01351_TCP_IP_EB023_00_2__MY_IP[2] = 0;
	FCV_01351_TCP_IP_EB023_00_2__MY_IP[3] = 2;

	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[0] = 0;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[1] = 8;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[2] = 220;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[3] = 0;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[4] = 0;
	FCV_01351_TCP_IP_EB023_00_2__MY_MAC[5] = 0;

	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FCP_SET(B, B, 0x8000, 0xf, 1);

		FCL_TEMP = FCP_GET(B, B, 0x20, 0x5);

		FC_CAL_SPI_Master_Init_1();

	#endif

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0, 0x80);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x16, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x01, 192);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x02, 168);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x03, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x04, 10);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x05, 255);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x06, 255);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x07, 255);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x08, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x09, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0A, 8);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0B, 220);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0C, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0D, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0E, 0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x0F, FCV_01351_TCP_IP_EB023_00_2__MY_IP[0]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x10, FCV_01351_TCP_IP_EB023_00_2__MY_IP[1]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x11, FCV_01351_TCP_IP_EB023_00_2__MY_IP[2]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x12, FCV_01351_TCP_IP_EB023_00_2__MY_IP[3]);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x1A, 0x55);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x1B, 0x55);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x17, 0x07);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x18, 0xD0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x19, 25);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro sets up the Internet E-Block's Gateway address.  In most circumstances, this macro will not be required as the gateway address setting in the component property page will remain constant throughout your application.
       :
       :Parameters for macro SetGateway:
       :  IP0 : First Byte of IP address
       :  IP1 : Second Byte of IP address
       :  IP2 : Third Byte of IP address
       :  IP3 : Fourth Byte of IP address
\*=----------------------------------------------------------------------=*/
void FCD_01351_TCP_IP_EB023_00_2__SetGateway(MX_UINT8 FCL_IP0, MX_UINT8 FCL_IP1, MX_UINT8 FCL_IP2, MX_UINT8 FCL_IP3)
{

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x01, FCL_IP0);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x02, FCL_IP1);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x03, FCL_IP2);

	FCD_01351_TCP_IP_EB023_00_2__MAC_WriteByte(0x04, FCL_IP3);

}


/*========================================================================*\
   Use :panel
       :Macro implementations
\*========================================================================*/


/*========================================================================*\
   Use :Main
\*========================================================================*/
int main()
{
ANSA = 0;
ANSB = 0;


	// Call Component Macro
	// Call Component Macro: TCP_IP_EB023_00_2::Initialise()
	FCD_01351_TCP_IP_EB023_00_2__Initialise();

	mainendloop: goto mainendloop;
	return 0;
}



/*========================================================================*\
   Use :Interrupt
\*========================================================================*/




