//************************************************************************************
//**  
//**  Source name:   C:\Users\uwe\Documents\Daten\FC9\USBCDCTEST.fcfx
//**  Title:         
//**  Description:   
//**  Device:        PIC32.32MZ.32MZ2048EFH100
//**  
//**  Generated by:  Flowcode v9.3.1.36
//**  Date:          Wednesday, September 20, 2023 20:39:46
//**  Users:         1
//**  Registriert für: SpeedPic32 (24146314)
//**  Lizenzschlüssel:ACFPTQ
//**  
//**  
//**     NICHT FÜR KOMMERZiELLE ANWENDUNGEN
//**  
//**  https://www.flowcode.co.uk
//**  
//************************************************************************************


#define MX_PIC32

#define MX_CAL_PIC32

#define MX_CLK_SPEED 200000000

#define FCP_NULL Unconnected_Port

#define MX_PIC32_MZ
#define MX_ALT_WATCHDOG
#define MX_MZ_MODE
#define MX_SPI_MZ_FAMILY
#include <xc.h>
#include <math.h>
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <p32xxxx.h>
#include <sys/attribs.h>
//Configuration Start
#pragma config FMIIEN = 0
#pragma config FETHIO = 1
#pragma config PGL1WAY = 0
#pragma config PMDL1WAY = 0
#pragma config IOL1WAY = 0
#pragma config FUSBIDIO = 1
#pragma config FPLLIDIV = 5
#pragma config FPLLRNG = 3
#pragma config FPLLICLK = 0
#pragma config FPLLMULT = 99
#pragma config FPLLODIV = 1
#pragma config UPLLFSEL = 1
#pragma config FNOSC = 1
#pragma config DMTINTV = 0
#pragma config FSOSCEN = 0
#pragma config IESO = 0
#pragma config POSCMOD = 0
#pragma config OSCIOFNC = 1
#pragma config FCKSM = 0
#pragma config WDTPS = 20
#pragma config WDTSPGM = 1
#pragma config WINDIS = 1
#pragma config FWDTEN = 0
#pragma config FWDTWINSZ = 3
#pragma config DMTCNT = 0
#pragma config FDMTEN = 0
#pragma config DEBUG = 3
#pragma config JTAGEN = 0
#pragma config ICESEL = 2
#pragma config TRCEN = 0
#pragma config BOOTISA = 1
#pragma config FECCCON = 3
#pragma config FSLEEP = 1
#pragma config DBGPER = 1
#pragma config SMCLR = 1
#pragma config SOSCGAIN = 3
#pragma config SOSCBOOST = 1
#pragma config POSCGAIN = 3
#pragma config POSCBOOST = 1
#pragma config EJTAGBEN = 1
#pragma config CP = 1
//Configuration End

/*========================================================================*\
   Use :Mit Typdefinitionen
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\internals.c"




void FCM_I2Cschreiben();
void FCM_ein();
void FCM_Auswerten();
void FCM_I2Clesen();
void FCM_Messen();
void FCM_PID_Calculate();
void FCM_umsetzen();
void FCM_Init_pid();
void FCM_empfang();
void FCM_netzteil();
void FCM_aus();
void FCM_Read_24Bit();
void FCM_lesen();
void FCM_Conversion_start();
void FCM_takt();
void FCM_reset_PID();
void FCM_Config_MCP3561();
void FCM_serial();

/*========================================================================*\
   Use :TypeConversionsFree1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :TypeConversionsFree1
       :Ergänzende Definitionen
\*=----------------------------------------------------------------------=*/

#ifndef MX_UNIONTYPE
 #define MX_UNIONTYPE
 typedef union
{
  MX_FLOAT AsFloat;
  MX_UINT32 AsLong;
  MX_UINT16 AsInt[2];
  MX_UINT8  AsByte[4];
} MX_Union_Type;
 MX_Union_Type MX_Conv_Var;
#endif


void FCD_02571_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE);
void FCD_02571_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE);
MX_FLOAT FCD_02571_TypeConversionsFree1__GetFloat();
MX_UINT32 FCD_02571_TypeConversionsFree1__GetLong();
MX_UINT16 FCD_02571_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX);
void FCD_02571_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE);
MX_UINT8 FCD_02571_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX);
void FCD_02571_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE);

/*========================================================================*\
   Use :USB_Serial1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/
#define dev_name 40,3,'F',0,'l',0,'o',0,'w',0,'c',0,'o',0,'d',0,'e',0,' ',0,'U',0,'S',0,'B',0,' ',0,'S',0,'e',0,'r',0,'i',0,'a',0,'l',0
#define dev_name_count 40
#define dev_name_DS 'F','l','o','w','c','o','d','e',' ','U','S','B',' ','S','e','r','i','a','l'
#define dev_name_count_DS 19
#define MX_USB_TYPE1
#define timeout 10
#define RX_BUF_SZ (64)
#define MX_VID 4799
#define enumeration_tout 0
#define TX_BUF_SZ (64)
#define major_version 1
#define MX_PID 61456
#define dev_manufacturer 46,3,'M',0,'a',0,'t',0,'r',0,'i',0,'x',0,' ',0,'M',0,'u',0,'l',0,'t',0,'i',0,'m',0,'e',0,'d',0,'i',0,'a',0,' ',0,'L',0,'t',0,'d',0,'.',0
#define dev_manufacturer_count 46
#define dev_manufacturer_DS 'M','a','t','r','i','x',' ','M','u','l','t','i','m','e','d','i','a',' ','L','t','d','.'
#define dev_manufacturer_count_DS 22
#define minor_version 0


/*=----------------------------------------------------------------------=*\
   Use :USB_Serial1
       :Ergänzende Definitionen
\*=----------------------------------------------------------------------=*/
#define MX_VERSION ((major_version << 8) | minor_version)

#ifdef MX_CAL_PIC							//8-bit PIC specific

    #ifdef MX_USB_TYPE1                     //ECIO / MIAC / 18F4455
        #define FIXED_ADDRESS_MEMORY
        #define IN_DATA_BUFFER_ADDRESS_TAG      @0x500
        #define OUT_DATA_BUFFER_ADDRESS_TAG     @0x540
        #define CONTROL_BUFFER_ADDRESS_TAG      @0x580
    #endif

    #ifdef MX_USB_TYPE3                     //18F14K50
        #define FIXED_ADDRESS_MEMORY
        #define IN_DATA_BUFFER_ADDRESS_TAG      @0x240
        #define OUT_DATA_BUFFER_ADDRESS_TAG     @0x280
        #define CONTROL_BUFFER_ADDRESS_TAG      @0x2C0
    #endif

    #ifdef MX_USB_TYPE5                     //16F1455
        #define FIXED_ADDRESS_MEMORY
        #define IN_DATA_BUFFER_ADDRESS_TAG      @0x0A0
        #define OUT_DATA_BUFFER_ADDRESS_TAG     @0x120
        #define CONTROL_BUFFER_ADDRESS_TAG      @0x1A0
    #endif

    #ifdef MX_USB_TYPE6                     //18F45K50
        #define FIXED_ADDRESS_MEMORY
        #define IN_DATA_BUFFER_ADDRESS_TAG      @0x500
        #define OUT_DATA_BUFFER_ADDRESS_TAG     @0x540
        #define CONTROL_BUFFER_ADDRESS_TAG      @0x580
    #endif

	#ifdef MX_USB_TYPE0
		#error "Your target device does not support USB components"
	#endif

	// Global Defines
	#define USB_BUS_SENSE       1
	#define self_power          1
	#define tris_usb_bus_sense	1
	#define tris_self_power		1

	#define USB_CONFIG	"C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_serial_config.h"

    #include USB_CONFIG

	// USB library includes
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_device.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_device_cdc.h"
	//#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/system.h"

    #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_device.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_device_cdc.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_hal_16bit.c"
	//#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/system.c"
	
	// Device name and manufacturer
    const struct{uint8_t bLength;uint8_t bDscType;uint16_t string[dev_manufacturer_count_DS];}sd001={sizeof(sd001),USB_DESCRIPTOR_STRING,{dev_manufacturer_DS}};
    const struct{uint8_t bLength;uint8_t bDscType;uint16_t string[dev_name_count_DS];}sd002={sizeof(sd002),USB_DESCRIPTOR_STRING,{dev_name_DS}};

    #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_serial_descriptors.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC/USB/usb_serial_handler.c"

    uint8_t MX_USBSer_RxByteCount = 0;
    uint8_t MX_USBSer_RxPtr = 0;
    uint8_t MX_USBSer_RxBuffer[RX_BUF_SZ];

#endif

#ifdef MX_CAL_PIC16					//16-bit PIC specific

	#ifndef MX_USB_TYPE1
		#error "Your target device does not support USB components"
	#endif

	// Global Defines
	#define USB_BUS_SENSE       1
	#define self_power          1
	#define tris_usb_bus_sense	1
	#define tris_self_power		1

	#define USB_CONFIG	"usb_serial_config.h"

	// USB library includes
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_serial_config.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_function_cdc.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/GenericTypeDefs.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/Compiler.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_device.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_device.c"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_ch9.h"
    #if defined(__dsPIC33E__) 
      #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal_dspic33e.c"
    #elif defined(__PIC24E__)
      #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal_pic24e.c"
    #else
      #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal_pic24.c"
    #endif
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_function_cdc.c"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_common.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal.h"


    #if defined(__dsPIC33E__) 
      #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal_dspic33e.h"
    #elif defined(__PIC24E__)
      #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal_pic24e.h"
    #else
      #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_hal_pic24.h"
    #endif


	// Device name and manufacturer
	ROM struct{BYTE bLength;BYTE bDscType;WORD string[dev_name_count_DS];}sd001={sizeof(sd001),USB_DESCRIPTOR_STRING,{dev_name_DS}};
	ROM struct{BYTE bLength;BYTE bDscType;WORD string[dev_manufacturer_count_DS];}sd002={sizeof(sd002),USB_DESCRIPTOR_STRING,{dev_manufacturer_DS}};


	#include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_serial_descriptors.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV9/CAL/PIC16BIT/USB/usb_cdc_handler.c"


    MX_UINT16 MX_USBSer_RxByteCount = 0;
    MX_UINT16 MX_USBSer_RxPtr = 0;
    MX_UINT8 MX_USBSer_RxBuffer[RX_BUF_SZ];


#endif


#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific


#include <config.h>
#include <lib_mcu/usb/usb_drv.h>
#include <modules\usb\device_chap9\usb_standard_request.h>
#include <usb_specific_request.h>
#include <uart_usb_lib.h>


extern U8    rx_counter;
extern U8    tx_counter;


S_line_coding line_coding;
S_line_status line_status;      // for detection of serial state input lines
S_serial_state serial_state;    // for serial state output lines


#endif


#ifdef MX_CAL_PIC32					//PIC32 specific


#include "CDC_Setup.h"
#include "CDC_Desc.h"

SYSTEM_OBJECTS sysObj;
APP_DATA appData;

#ifdef MX_PIC32_MX
extern const DRV_USBFS_INIT drvUSBInit;
#endif

#ifdef MX_PIC32_MZ
extern const DRV_USBHS_INIT drvUSBInit;
#endif

const SYS_DEVCON_INIT sysDevconInit =
{
    .moduleInit = {0},
};

#define APP_MAKE_BUFFER_DMA_READY __attribute__((coherent)) __attribute__((aligned(16)))
static uint8_t APP_MAKE_BUFFER_DMA_READY writeBuffer[TX_BUF_SZ];
static uint8_t APP_MAKE_BUFFER_DMA_READY readBuffer[RX_BUF_SZ];

uint16_t MX_USBSer_RxByteCount = 0;
uint16_t MX_USBSer_RxPtr = 0;
uint8_t MX_USBSer_RxBuffer[RX_BUF_SZ];

#endif
MX_UINT8 FCD_056e1_USB_Serial1__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA);
MX_UINT8 FCD_056e1_USB_Serial1__SendNumber(MX_SINT16 FCL_NUMBER);
void FCD_056e1_USB_Serial1__ReadString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT_MS, MX_UINT8 FCL_LENGTH);
MX_UINT8 FCD_056e1_USB_Serial1__SendByte(MX_UINT8 FCL_DATA);
MX_UINT8 FCD_056e1_USB_Serial1__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES);
MX_UINT16 FCD_056e1_USB_Serial1__ReadByte(MX_UINT8 FCL_TIMEOUT_MS);
MX_UINT8 FCD_056e1_USB_Serial1__Initialise();

/*========================================================================*\
   Use :Mit Chip Adaption Layer
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\includes.c"


/*========================================================================*\
   Use :TypeConversionsFree1
       :Makro-Implementierungen
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameter f?r Makro SetInt:
       :  Index : Range: 0-1
       :  Value : Range: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE)
{

	if (FCL_INDEX < 2)
	{

		MX_Conv_Var.AsInt[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit LONG value
       :
       :Parameter f?r Makro SetLong:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE)
{

	MX_Conv_Var.AsLong = FCL_VALUE;

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit FLOAT value
       :
       :R?ckgaben : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02571_TypeConversionsFree1__GetFloat()
{
	//Lokale Variablen-Definitionen
	MX_FLOAT FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsFloat;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :R?ckgaben : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02571_TypeConversionsFree1__GetLong()
{
	//Lokale Variablen-Definitionen
	MX_UINT32 FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsLong;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 16-bit INT value
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameter f?r Makro GetInt:
       :  Index : Range: 0-1
       :
       :R?ckgaben : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02571_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX)
{
	//Lokale Variablen-Definitionen
	MX_UINT16 FCR_RETVAL;


	if (FCL_INDEX < 2)
	{

		FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 8-bit BYTE value
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameter f?r Makro SetByte:
       :  Index : Range: 0-3
       :  Value : Range: 0-255
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE)
{

	if (FCL_INDEX < 4)
	{

		MX_Conv_Var.AsByte[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 8-bit BYTE value.
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameter f?r Makro GetByte:
       :  Index : Range: 0-3
       :
       :R?ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02571_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX)
{
	//Lokale Variablen-Definitionen
	MX_UINT8 FCR_RETVAL;


	if (FCL_INDEX < 4)
	{

		FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameter f?r Makro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE)
{

	MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :USB_Serial1
       :Makro-Implementierungen
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sends the specified data string to the host
       :
       :Parameter f?r Makro SendString:
       :  Data[20] : Data string to send to the host
       :
       :R?ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_056e1_USB_Serial1__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
	//Lokale Variablen-Definitionen
	MX_UINT16 FCL_TIMEOUT = (0x0);
	MX_UINT8 FCL_LENGTH;
	MX_UINT8 FCR_RETVAL;


	// .length = Length$ (.Data)
	FCL_LENGTH = FCI_GETLENGTH(FCL_DATA, FCLsz_DATA);

#if 0 // Disabled code
	#ifdef MX_CAL_PIC		//8-bit PIC specific
	
		MX_UINT8 n;
	
		while (usb_cdc_tx_empty() == 0 && FCL_TIMEOUT < 32000)	//Wait for outgoing buffer to empty
			FCL_TIMEOUT = FCL_TIMEOUT + 1;
	
		if (FCL_TIMEOUT == 32000)	//Pipeline full or disconnected
			return(1);
	
		// Flowcode strings are not necessarily null terminated
		// so we cannot use  usb_cdc_print_str(FCL_DATA);
		for(n = 0 ; (FCL_DATA[n] != 0)&&(n < FCL_LENGTH); n++)
		{
			usb_cdc_putc(FCL_DATA[n]);
		}
	
	  #endif

#endif // Disabled code

	#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
	
		if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1))
		{
			return(2);	    //USB Not Configured
		}
		else
		{
			CDCTxService();		//Required or every other send fails
	
			while ((mUSBUSARTIsTxTrfReady() == 0) && (FCL_TIMEOUT < 32000))		//Wait for outgoing buffer to empty
				FCL_TIMEOUT = FCL_TIMEOUT + 1;
	
			if (FCL_TIMEOUT >= 32000)	//Pipeline full or disconnected
			{
				return(1);		//USB Not Ready
			}
			else
			{
				putUSBUSART(FCL_DATA, FCL_LENGTH);
			}
		}
	
		while (mUSBUSARTIsTxTrfReady() == 0)		//Wait for outgoing buffer to empty	
		    CDCTxService();
	
	  #endif

	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	
	        MX_UINT8 n;
	
	        if(!Is_device_enumerated()) {
	            return(2);
	        } else {
	            for(n = 0; (FCL_DATA[n] != 0) && (n < FCL_LENGTH); n++) {
	                FCL_TIMEOUT = 0;
	                while((!uart_usb_tx_ready()) && (FCL_TIMEOUT < 32000))
	                    FCL_TIMEOUT++;
	
	                if(FCL_TIMEOUT == 32000) {
	                    return(1);
	                } else {
	                    uart_usb_putchar(FCL_DATA[n]);
	                    Usb_ack_in_ready();
	                }
	            }
	        }
	
	#endif

	#ifdef MX_CAL_PIC32
	  if(FCL_LENGTH) {
	    memcpy(writeBuffer, FCL_DATA, FCL_LENGTH);

	    if(!appData.isConfigured) {
	      appData.writeTransferHandle = USB_DEVICE_CDC_TRANSFER_HANDLE_INVALID;
	      return(2);
	    } else {
	      USB_DEVICE_CDC_Write(USB_DEVICE_CDC_INDEX_0,
	                         &appData.writeTransferHandle,
	                         writeBuffer,
	                         FCL_LENGTH,
	                         USB_DEVICE_CDC_TRANSFER_FLAGS_DATA_COMPLETE);
	      SYS_DEVCON_Tasks(sysObj.sysDevcon);

	    #ifdef MX_PIC32_MX
	      DRV_USBFS_Tasks(sysObj.drvUSBObject);
	    #endif

	    #ifdef MX_PIC32_MZ
	      DRV_USBHS_Tasks(sysObj.drvUSBObject);
	    #endif

	      USB_DEVICE_Tasks(sysObj.usbDevObject0);
	    }
	  }
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends the specified numeric value as an ASCII string to the host.
       :
       :Parameter f?r Makro SendNumber:
       :  Number : Range -32768 to 32767
       :
       :R?ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_056e1_USB_Serial1__SendNumber(MX_SINT16 FCL_NUMBER)
{
	//Lokale Variablen-Definitionen
#define FCLsz_STR 8
	MX_CHAR FCL_STR[FCLsz_STR];
	MX_UINT8 FCR_RETVAL;


	// .str = ToString$ (.Number)
	FCI_TOSTRING(FCL_NUMBER, FCL_STR,8);

	FCR_RETVAL = FCD_056e1_USB_Serial1__SendString(FCL_STR, FCLsz_STR);

	return (FCR_RETVAL);

	//Lokale Variablen-Definitionen
#undef FCLsz_STR
}

/*=----------------------------------------------------------------------=*\
   Use :Retreives a string from the incoming data buffer. If data is available then the macro will return straight away. If there is no data available then the macro waits up the the period specified by the timeout before returning the value 255.
       :
       :Parameter f?r Makro ReadString:
       :  Timeout_ms : Length of time to wait before timing out
       :  Length : Maximum number of bytes to try and read
       :
       :R?ckgaben : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_056e1_USB_Serial1__ReadString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT_MS, MX_UINT8 FCL_LENGTH)
{
	//Lokale Variablen-Definitionen
	MX_UINT8 FCL_WAIT_FOREVER = (0x0);


	if (FCL_TIMEOUT_MS == 0)
	{

		// .Timeout_ms = 1
		FCL_TIMEOUT_MS = 1;

	// } else {

	}

#if 0 // Disabled code
	#ifdef MX_CAL_PIC			//8-bit PIC specific
	
		MX_UINT8 Rx_Length;
	
		if(FCL_TIMEOUT_MS == 255)
			FCL_WAIT_FOREVER = 1;
	
		while (FCL_TIMEOUT_MS || FCL_WAIT_FOREVER)
		{
			Rx_Length = usb_cdc_rx_avail();		// get length of incoming data string
			if (Rx_Length)
			{
				if (Rx_Length > FCL_LENGTH)
					Rx_Length = FCL_LENGTH;
	
				usb_ep_get_rx_buffer(Rx_Length, FCR_RETVAL);	// copy data string to local buffer
	
				if (Rx_Length < FCL_LENGTH)
					FCR_RETVAL[Rx_Length] = 0;		//Add null MX_UINT8acter to end of string
				return;
			}
			else
			{
				Wdt_Delay_Ms(1);
				FCL_TIMEOUT_MS = FCL_TIMEOUT_MS - 1;
			}
		}
	
	  #endif

#endif // Disabled code

	#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
	    MX_USBSer_RxByteCount = 0;
	
		MX_UINT8 inner = 0;
		MX_UINT16 numBytesRead = 0;
	
		if(FCL_TIMEOUT_MS == 255)
			FCL_WAIT_FOREVER = 1;
	
		while(numBytesRead == 0 && FCL_TIMEOUT_MS > 0)
		{
			numBytesRead = getsUSBUSART(FCR_RETVAL, FCL_LENGTH);
			if ((FCL_WAIT_FOREVER == 0) && (numBytesRead == 0))
			{
				inner++;
				delay_us(10);
				if (inner == 100)
				{
					inner = 0;
					FCL_TIMEOUT_MS--;
				}
			}
	        if(numBytesRead < FCL_LENGTH)
	            FCR_RETVAL[numBytesRead] = 0;
		}
	
	  #endif

	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	
		MX_UINT8 Rx_Length = 0;
		MX_UINT8 inner = 0;
	
		if(FCL_TIMEOUT_MS == 255)
			FCL_WAIT_FOREVER = 1;
	
		while (FCL_TIMEOUT_MS || FCL_WAIT_FOREVER) {
	        if(uart_usb_test_hit()) {
	            FCL_WAIT_FOREVER = 0;
	            while(uart_usb_test_hit() && (Rx_Length <= FCL_LENGTH)) {
	                FCR_RETVAL[Rx_Length++] = uart_usb_getchar();
	            }
	        } else {
				inner++;
				delay_us(10);
				if (inner == 100) {
					inner = 0;
					FCL_TIMEOUT_MS--;
				}
	        }
	    }
		if (Rx_Length < FCL_LENGTH)
		    FCR_RETVAL[Rx_Length] = 0;		//Add null MX_UINT8acter to end of string
	
	  #endif

	#ifdef MX_CAL_PIC32
	  MX_UINT16 inner = 0;
	  MX_UINT16 idx;

	  MX_USBSer_RxByteCount = 0;

	  if(!appData.isConfigured)
	  {
	    appData.readTransferHandle = USB_DEVICE_CDC_TRANSFER_HANDLE_INVALID;
	    FCR_RETVAL[0] = 0;
	    appData.readProcessedLen = 0;
	  }
	  else
	  {
		if(FCL_TIMEOUT_MS == 255)
			FCL_WAIT_FOREVER = 1;

	    appData.readLen = 0;
	    while((appData.readLen == 0) && (FCL_TIMEOUT_MS > 0))
	    {
	      SYS_DEVCON_Tasks(sysObj.sysDevcon);

	    #ifdef MX_PIC32_MX
	      DRV_USBFS_Tasks(sysObj.drvUSBObject);
	    #endif

	    #ifdef MX_PIC32_MZ
	      DRV_USBHS_Tasks(sysObj.drvUSBObject);
	    #endif

	      USB_DEVICE_Tasks(sysObj.usbDevObject0);

	      if(appData.readTransferHandle == USB_DEVICE_CDC_TRANSFER_HANDLE_INVALID)
	      {
	        USB_DEVICE_CDC_Read(USB_DEVICE_CDC_INDEX_0,
	                            &appData.readTransferHandle,
	                            readBuffer,
	                            RX_BUF_SZ);
	      }

	      if((appData.readLen) && (FCL_WAIT_FOREVER == 0))
	      {
	         delay_us(10);
	         inner++;
	         if(inner >= 100)
	         {
	           inner = 0;
	           FCL_TIMEOUT_MS --;
	         }
	      }
	    }

	    if(appData.readLen)
	    {
	        if(appData.readLen <= FCL_LENGTH)
	        {
	            for(idx = 0; idx <= appData.readLen; idx++)
	                FCR_RETVAL[idx] = readBuffer[idx];
	        }
	    }

	    if(appData.readLen < FCL_LENGTH);
	      FCR_RETVAL[appData.readLen] = 0;

	    appData.readLen = 0;
	  }
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Sends the specified data byte to the host
       :
       :Parameter f?r Makro SendByte:
       :  data : Data byte to send to the host
       :
       :R?ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_056e1_USB_Serial1__SendByte(MX_UINT8 FCL_DATA)
{
	//Lokale Variablen-Definitionen
	MX_UINT16 FCL_TIMEOUT = (0x0);
	MX_UINT8 FCR_RETVAL;


#if 0 // Disabled code
	#ifdef MX_CAL_PIC		//8-bit PIC specific
	
		while (usb_cdc_tx_empty() == 0 && FCL_TIMEOUT < 32000)		//Wait for outgoing buffer to empty
			FCL_TIMEOUT = FCL_TIMEOUT + 1;
	
		if (FCL_TIMEOUT == 32000)			//Pipeline full or disconnected
			return(1);
	
		usb_cdc_putc(FCL_DATA);
	
	  #endif

#endif // Disabled code

	#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
	
	  	if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1))
	  	{
	  		return(2);		//USB Not Configured
	  	}
	  	else
	  	{
	//		CDCTxService();													//Required or every other send fails
			while ((USBUSARTIsTxTrfReady() == 0) && (FCL_TIMEOUT < 32000))		//Wait for outgoing buffer to empty
				FCL_TIMEOUT = FCL_TIMEOUT + 1;
	
			if (FCL_TIMEOUT == 32000)	//Pipeline full or disconnected
			{
				return(1);		//USB Not Ready
			}
			else
			{
				putUSBUSART(&FCL_DATA,1);
			}
		}
	
		while (mUSBUSARTIsTxTrfReady() == 0)		//Wait for outgoing buffer to empty	
		    CDCTxService();
	
	  #endif

	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	        if(!Is_device_enumerated()) {
	            return(2);
	        } else {
	            Usb_select_endpoint(TX_EP);
	            while((uart_usb_tx_ready() == 0) && (FCL_TIMEOUT < 32000))
	                FCL_TIMEOUT++;
	
	            if(FCL_TIMEOUT == 32000) {
	                return(1);
	            } else {
	                uart_usb_putchar(FCL_DATA);
	                Usb_ack_in_ready();
	            }
	        }
	#endif

	#ifdef MX_CAL_PIC32
	  writeBuffer[0] = FCL_DATA;

	  if(!appData.isConfigured) {
	    appData.writeTransferHandle = USB_DEVICE_CDC_TRANSFER_HANDLE_INVALID;
	    return(2);
	  } else {
	    USB_DEVICE_CDC_Write(USB_DEVICE_CDC_INDEX_0,
	                       &appData.writeTransferHandle,
	                       writeBuffer,
	                       1,
	                       USB_DEVICE_CDC_TRANSFER_FLAGS_DATA_COMPLETE);
	    SYS_DEVCON_Tasks(sysObj.sysDevcon);

	  #ifdef MX_PIC32_MX
	    DRV_USBFS_Tasks(sysObj.drvUSBObject);
	  #endif

	  #ifdef MX_PIC32_MZ
	    DRV_USBHS_Tasks(sysObj.drvUSBObject);
	  #endif

	    USB_DEVICE_Tasks(sysObj.usbDevObject0);
	  }
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends the specified data array to the host
       :
       :Parameter f?r Makro SendByteArray:
       :  Data[20] : Data array to send to the host
       :  NumBytes : Max bytes is set by the Transmit Buffer Size property
       :
       :R?ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_056e1_USB_Serial1__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES)
{
	//Lokale Variablen-Definitionen
	MX_UINT16 FCL_TIMEOUT = (0x0);
	MX_UINT8 FCR_RETVAL;


	#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
	
		if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1))
		{
			return(2);	    //USB Not Configured
		}
		else
		{
			CDCTxService();		//Required or every other send fails
	
			while ((mUSBUSARTIsTxTrfReady() == 0) && (FCL_TIMEOUT < 32000))		//Wait for outgoing buffer to empty
				FCL_TIMEOUT = FCL_TIMEOUT + 1;
	
			if (FCL_TIMEOUT >= 32000)	//Pipeline full or disconnected
			{
				return(1);		//USB Not Ready
			}
			else
			{
				putUSBUSART(FCL_DATA, FCL_NUMBYTES);
			}
		}
	
		while (mUSBUSARTIsTxTrfReady() == 0)		//Wait for outgoing buffer to empty	
		    CDCTxService();
	
	  #endif

	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	
	        MX_UINT8 n;
	
	        if(!Is_device_enumerated()) {
	            return(2);
	        } else {
	            for(n = 0; (n < FCL_NUMBYTES); n++) {
	                FCL_TIMEOUT = 0;
	                while((!uart_usb_tx_ready()) && (FCL_TIMEOUT < 32000))
	                    FCL_TIMEOUT++;
	
	                if(FCL_TIMEOUT == 32000) {
	                    return(1);
	                } else {
	                    uart_usb_putchar(FCL_DATA[n]);
	                    Usb_ack_in_ready();
	                }
	            }
	        }
	
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Retreives the byte from the incoming data buffer. If data is available then the macro will return straight away. If there is no data available then the macro waits up the the period specified by the timeout before returning the value 255.
       :
       :Parameter f?r Makro ReadByte:
       :  Timeout_ms : Number of milliseconds to wait before timing out
       :
       :R?ckgaben : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_056e1_USB_Serial1__ReadByte(MX_UINT8 FCL_TIMEOUT_MS)
{
	//Lokale Variablen-Definitionen
	MX_UINT8 FCL_WAIT_FOREVER = (0x0);
	MX_UINT16 FCR_RETVAL;


	#if (0) // 0 == 1

	//Code wurde vom Vorprozessor optimiert
	#else

		// .Return = 255
		FCR_RETVAL = 255;

	#endif

	MX_UINT8 inner = 0;

	if (FCL_TIMEOUT_MS == 0)
	{

		// .Timeout_ms = 1
		FCL_TIMEOUT_MS = 1;

		inner = 98;

	// } else {

	}

	#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
	
		MX_UINT8 retval;
		MX_UINT16 numBytesRead = 0;
	
	    if(MX_USBSer_RxByteCount)
	    {
	        FCR_RETVAL = MX_USBSer_RxBuffer[MX_USBSer_RxPtr++];
	        if(MX_USBSer_RxPtr >= MX_USBSer_RxByteCount)
	        {
	            MX_USBSer_RxPtr = 0;
	            MX_USBSer_RxByteCount = 0;
	        }
	    } else {
		    if(FCL_TIMEOUT_MS == 255)
			    FCL_WAIT_FOREVER = 1;
	
	    	while(numBytesRead == 0 && FCL_TIMEOUT_MS > 0)
		    {
			    numBytesRead = getsUSBUSART(MX_USBSer_RxBuffer, 64);
			    if ((FCL_WAIT_FOREVER == 0) && (numBytesRead == 0))
			    {
				    inner++;
	                #if defined(MX_CAL_PIC16)		//16-bit PIC specific

				        delay_us(10);

	                #else

				        delay_us(3);

	                #endif
				    if (inner == 100)
				    {
					    inner = 0;
					    FCL_TIMEOUT_MS--;
				    }
			    } else {
	                FCR_RETVAL = MX_USBSer_RxBuffer[0];
	                if(numBytesRead > 1)
	                {
	                    MX_USBSer_RxByteCount = numBytesRead;
	                    MX_USBSer_RxPtr = 1;
	                    if(numBytesRead < RX_BUF_SZ)
	                    MX_USBSer_RxBuffer[numBytesRead] = 0;
	                }
	            }
		    }
	    }
	
	  #endif

	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	
	    MX_UINT8 rx_rdy = 0;
	
		if(FCL_TIMEOUT_MS == 255)
			FCL_WAIT_FOREVER = 1;
	
		while((rx_rdy == 0) && (FCL_TIMEOUT_MS > 0))
		{
			rx_rdy = uart_usb_test_hit();
	        if(rx_rdy)
	            FCR_RETVAL = uart_usb_getchar();
	
			if ((FCL_WAIT_FOREVER == 0) && (rx_rdy == 0))
			{
				inner++;
				delay_us(10);
				if (inner == 100)
				{
					inner = 0;
					FCL_TIMEOUT_MS--;
				}
			}
		}
	  #endif

	#ifdef MX_CAL_PIC32		//32-bit PIC specific

		MX_UINT8 retval;

	    if(MX_USBSer_RxByteCount)
	    {
	        FCR_RETVAL = MX_USBSer_RxBuffer[MX_USBSer_RxPtr++];
	        if(MX_USBSer_RxPtr >= MX_USBSer_RxByteCount)
	        {
	            MX_USBSer_RxPtr = 0;
	            MX_USBSer_RxByteCount = 0;
	        }
	    } else {
		    if(FCL_TIMEOUT_MS == 255)
			    FCL_WAIT_FOREVER = 1;

	        appData.readLen = 0;
	    	while(appData.readLen == 0 && FCL_TIMEOUT_MS > 0)
		    {
	          SYS_DEVCON_Tasks(sysObj.sysDevcon);

	        #ifdef MX_PIC32_MX
	          DRV_USBFS_Tasks(sysObj.drvUSBObject);
	        #endif

	        #ifdef MX_PIC32_MZ
	          DRV_USBHS_Tasks(sysObj.drvUSBObject);
	        #endif

	          USB_DEVICE_Tasks(sysObj.usbDevObject0);

	          if(appData.readTransferHandle == USB_DEVICE_CDC_TRANSFER_HANDLE_INVALID)
	          {
	            USB_DEVICE_CDC_Read(USB_DEVICE_CDC_INDEX_0,
	                                &appData.readTransferHandle,
	                                readBuffer,
	                                RX_BUF_SZ);
	          }

	          if ((FCL_WAIT_FOREVER == 0) && (appData.readLen == 0))
			    {
				    inner++;
				    delay_us(10);
				    if (inner == 100)
				    {
					    inner = 0;
					    FCL_TIMEOUT_MS--;
				    }
			    } else {
	                FCR_RETVAL = readBuffer[0];
	                if(appData.readLen > 1)
	                {
	                    MX_USBSer_RxByteCount = appData.readLen;
	                    MX_USBSer_RxPtr = 1;
	                    if(appData.readLen < RX_BUF_SZ)
	                    MX_USBSer_RxBuffer[appData.readLen] = 0;
	                }
	            }
		    }
	    }

	  #endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Starts up the USB communications and attempts to enumerate.
       :Returns 0 for a successful startup or 255 for a enumeration timeout.
       :
       :R?ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_056e1_USB_Serial1__Initialise()
{
	//Lokale Variablen-Definitionen
	MX_UINT16 FCL_DELAY_COUNTER = (0x0);
	MX_UINT8 FCR_RETVAL;


	#ifdef MX_CAL_PIC                                //8-bit PIC specific
	  #if defined(P18F24J50) || defined(P18F25J55) || defined(P18F26J50) || defined(P18F44J50) || defined(P18F45J50) || defined(P18F46J55) || defined(P18F87J50) ||  defined(P18F86J55) || defined(P18F86J50) || defined(P18F85J50) || defined(P18F67J50) || defined(P18F66J55) || defined(P18F66J50) || defined(P18F65J50)
	  //On the PIC18F87J50 Family of USB microcontrollers, the PLL will not power up and be enabled
	  //by default, even if a PLL enabled oscillator configuration is selected (such as HS+PLL).
	  //This allows the device to power up at a lower initial operating frequency, which can be
	  //advantageous when powered from a source which is not gauranteed to be adequate for 48MHz
	  //operation.  On these devices, user firmware needs to manually set the OSCTUNE&lt;PLLEN&gt; bit to
	  //power up the PLL.
	  {
	      MX_UINT16 pll_startup_counter = 600;
	      OSCTUNEbits.PLLEN = 1;  //Enable the PLL and wait 2+ms until the PLL locks before enabling USB module
	      while(pll_startup_counter--);
	  }
	  //Device switches over automatically to PLL output after PLL is locked and ready.
	  #endif
	  MX_USBSer_RxByteCount = 0;
	#endif
	#ifdef MX_CAL_PIC16                        //16-bit PIC specific
	  #if defined(P24FJ64GB004) || defined(P24FJ64GB002) || defined(P24FJ32GB004) || defined(P24FJ32GB002)
	  //On the PIC24FJ64GB004 Family of USB microcontrollers, the PLL will not power up and be enabled
	  //by default, even if a PLL enabled oscillator configuration is selected (such as HS+PLL).
	  //This allows the device to power up at a lower initial operating frequency, which can be
	  //advantageous when powered from a source which is not gauranteed to be adequate for 48MHz
	  //operation.  On these devices, user firmware needs to manually set the CLKDIV&lt;PLLEN&gt; bit to
	  //power up the PLL.
	  {
	      MX_UINT16 pll_startup_counter = 600;
	      CLKDIVbits.PLLEN = 1;
	      while(pll_startup_counter--);
	  }
	  #endif
	#endif
	
	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	//  #if defined(AT90USB162)
	//  {
	      Usb_enable_regulator();
	//  }
	//  #endif
	#endif

	#ifdef MX_CAL_PIC32
	    sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit);
	#endif

	#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
	    USBDeviceInit();
		if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))
	        USBDeviceAttach();
	#endif

	#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific
	    usb_task_init();
	#endif

	#ifdef MX_CAL_PIC32
	#ifdef MX_PIC32_MX
	    sysObj.drvUSBObject = DRV_USBFS_Initialize(DRV_USBFS_INDEX_0, &drvUSBInit);
	    SYS_INT_Initialize();
	    SYS_INT_VectorPrioritySet(INT_VECTOR_USB1, INT_PRIORITY_LEVEL4);
	    SYS_INT_VectorSubprioritySet(INT_VECTOR_USB1, INT_SUBPRIORITY_LEVEL0);
	#endif

	#ifdef MX_PIC32_MZ
	    sysObj.drvUSBObject = DRV_USBHS_Initialize(DRV_USBHS_INDEX_0, &drvUSBInit);
	    SYS_INT_Initialize();
	    SYS_INT_VectorPrioritySet(INT_VECTOR_USB1, INT_PRIORITY_LEVEL4);
	    SYS_INT_VectorSubprioritySet(INT_VECTOR_USB1, INT_SUBPRIORITY_LEVEL0);
	    SYS_INT_VectorPrioritySet(INT_VECTOR_USB1_DMA, INT_PRIORITY_LEVEL4);
	    SYS_INT_VectorSubprioritySet(INT_VECTOR_USB1_DMA, INT_SUBPRIORITY_LEVEL0);
	#endif
	    sysObj.usbDevObject0 = USB_DEVICE_Initialize(USB_DEVICE_INDEX_0, &usbDevInitData);

	    SYS_INT_Enable();

	    APP_Initialize();
	#endif

	#if (0)

	//Code wurde vom Vorprozessor optimiert
	#else

		#if defined(MX_CAL_PIC) || defined(MX_CAL_PIC16)		//8-bit/16-bit PIC specific
		  while(USBDeviceState != CONFIGURED_STATE);
		#endif

		#if defined(MX_CAL_AVR) || defined(MX_CAL_ARD)                //8-bit AVR specific

		  while(Is_device_enumerated() == 0) {
		    usb_task();
		  }
		  uart_usb_init();
		#endif

		#ifdef MX_CAL_PIC32
		  do{
		    appData.deviceHandle = USB_DEVICE_Open(USB_DEVICE_INDEX_0, DRV_IO_INTENT_READWRITE);

		    SYS_DEVCON_Tasks(sysObj.sysDevcon);

		  #ifdef MX_PIC32_MX
		    DRV_USBFS_Tasks(sysObj.drvUSBObject);
		  #endif

		  #ifdef MX_PIC32_MZ
		    DRV_USBHS_Tasks(sysObj.drvUSBObject);
		  #endif

		    USB_DEVICE_Tasks(sysObj.usbDevObject0);
		  }
		  while(appData.deviceHandle == USB_DEVICE_HANDLE_INVALID);

		  USB_DEVICE_EventHandlerSet(appData.deviceHandle, APP_USBDeviceEventHandler, 0);
		  appData.state = APP_STATE_SERVICE_TASKS;

		  FCI_DELAYBYTE_MS(200);

		    SYS_DEVCON_Tasks(sysObj.sysDevcon);

		  #ifdef MX_PIC32_MX
		    DRV_USBFS_Tasks(sysObj.drvUSBObject);
		  #endif

		  #ifdef MX_PIC32_MZ
		    DRV_USBHS_Tasks(sysObj.drvUSBObject);
		  #endif

		    USB_DEVICE_Tasks(sysObj.usbDevObject0);

		#endif

		// .Return = 0
		FCR_RETVAL = 0;

	#endif

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :panel
       :Makro-Implementierungen
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_I2Cschreiben()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_ein()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Auswerten()
{
	//Lokale Variablen-Definitionen
#define FCLsz_FLOATVALUE 20
	MX_CHAR FCL_FLOATVALUE[FCLsz_FLOATVALUE];
	MX_UINT8 FCL_IDX;
#define FCLsz_WERT1 20
	MX_CHAR FCL_WERT1[FCLsz_WERT1];
	MX_UINT8 FCL_VERGLEICHSERGEBNIS;
#define FCLsz_VERGLEICHWERT 20
	MX_CHAR FCL_VERGLEICHWERT[FCLsz_VERGLEICHWERT];


	//Lokale Variablen-Definitionen
#undef FCLsz_FLOATVALUE
#undef FCLsz_WERT1
#undef FCLsz_VERGLEICHWERT
}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_I2Clesen()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Messen()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_PID_Calculate()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_umsetzen()
{
	//Lokale Variablen-Definitionen
#define FCLsz_ZAHLSTR 20
	MX_CHAR FCL_ZAHLSTR[FCLsz_ZAHLSTR];
#define FCLsz_WERT1 20
	MX_CHAR FCL_WERT1[FCLsz_WERT1];
#define FCLsz_WERT2 20
	MX_CHAR FCL_WERT2[FCLsz_WERT2];
#define FCLsz_WERT3 20
	MX_CHAR FCL_WERT3[FCLsz_WERT3];
#define FCLsz_WERT4 20
	MX_CHAR FCL_WERT4[FCLsz_WERT4];
#define FCLsz_WERT5 20
	MX_CHAR FCL_WERT5[FCLsz_WERT5];
#define FCLsz_WERT6 20
	MX_CHAR FCL_WERT6[FCLsz_WERT6];


	//Lokale Variablen-Definitionen
#undef FCLsz_ZAHLSTR
#undef FCLsz_WERT1
#undef FCLsz_WERT2
#undef FCLsz_WERT3
#undef FCLsz_WERT4
#undef FCLsz_WERT5
#undef FCLsz_WERT6
}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Init_pid()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_empfang()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_netzteil()
{
	//Lokale Variablen-Definitionen
	MX_UINT16 FCL_NETZW;
	MX_UINT8 FCL_W1;
	MX_UINT8 FCL_W2;
	MX_UINT8 FCL_W3;
	MX_UINT8 FCL_W4;


}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_aus()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Read_24Bit()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_lesen()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Conversion_start()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_takt()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_reset_PID()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Config_MCP3561()
{

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_serial()
{

}



/*========================================================================*\
   Use :Main
\*========================================================================*/
int main()
{
	#ifdef INTOSCHELPER
		INTOSCHELPERCODE
	#endif
ANSELA = 0x0000;
ANSELB = 0x0000;
ANSELC = 0x0000;
ANSELD = 0x0000;
ANSELE = 0x0000;
ANSELF = 0x0000;
ANSELG = 0x0000;

SYSKEY = 0xAA996655;
SYSKEY = 0x556699AA;
PB2DIV = 0x8000;
PB3DIV = 0x8000;
SYSKEY = 0x33333333;



	// Name: Aufruf Komponenten-Makro, Art: Aufruf Komponenten-Makro: USB_Serial1::Initialise()
	FCD_056e1_USB_Serial1__Initialise();

	// Name: Schleife, Art: Schleife: While 1
	while (1)
	{

		// Name: Delay, Art: Warten: 5 s
		FCI_DELAYBYTEWDT_S(5);

		// Name: Aufruf Komponenten-Makro, Art: Aufruf Komponenten-Makro: USB_Serial1::SendString("OK")
		FCD_056e1_USB_Serial1__SendString("OK", 3);


	}

	mainendloop: goto mainendloop;
	return 0;
}



/*========================================================================*\
   Use :Unterbrechung
\*========================================================================*/

	

	#ifdef MX_CAL_PIC 
	  USBDeviceTasks(); 
	#endif 


	#ifdef MX_CAL_PIC32

	#ifdef MX_PIC32_MZ
	void __ISR(_USB_VECTOR, ipl4AUTO) _IntHandlerUSBInstance0(void) {;
	    DRV_USBHS_Tasks_ISR(sysObj.drvUSBObject);
	}

	void __ISR ( _USB_DMA_VECTOR,ipl4AUTO) _IntHandlerUSBInstance0_USBDMA ( void ) {;
	    DRV_USBHS_Tasks_ISR_USBDMA(sysObj.drvUSBObject);
	}
	#endif

	#ifdef MX_PIC32_MX
	void __ISR(_USB_1_VECTOR, ipl4AUTO) _IntHandlerUSBInstance0(void) {;
	    DRV_USBFS_Tasks_ISR(sysObj.drvUSBObject);
	}
	#endif

	#endif




