//************************************************************************************
//**  
//**  Source name:   C:\Users\uwe\Documents\Daten\FC9\test usb cdc06092023 fc9.fcfx
//**  Title:         
//**  Description:   
//**  Device:        PIC32.32MZ.32MZ2048EFH100
//**  
//**  Generated by:  Flowcode v9.3.1.36
//**  Date:          Wednesday, September 06, 2023 17:16:49
//**  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 = 0
#pragma config PGL1WAY = 0
#pragma config PMDL1WAY = 0
#pragma config IOL1WAY = 0
#pragma config FUSBIDIO = 0
#pragma config FPLLIDIV = 0
#pragma config FPLLRNG = 0
#pragma config FPLLICLK = 0
#pragma config FPLLMULT = 0
#pragma config FPLLODIV = 0
#pragma config UPLLFSEL = 0
#pragma config FNOSC = 0
#pragma config DMTINTV = 0
#pragma config FSOSCEN = 0
#pragma config IESO = 0
#pragma config POSCMOD = 0
#pragma config OSCIOFNC = 0
#pragma config FCKSM = 0
#pragma config WDTPS = 0
#pragma config WDTSPGM = 0
#pragma config WINDIS = 0
#pragma config FWDTEN = 0
#pragma config FWDTWINSZ = 0
#pragma config DMTCNT = 0
#pragma config FDMTEN = 0
#pragma config DEBUG = 3
#pragma config JTAGEN = 0
#pragma config ICESEL = 0
#pragma config TRCEN = 0
#pragma config BOOTISA = 1
#pragma config FECCCON = 0
#pragma config FSLEEP = 0
#pragma config DBGPER = 0
#pragma config SMCLR = 0
#pragma config SOSCGAIN = 0
#pragma config SOSCBOOST = 0
#pragma config POSCGAIN = 0
#pragma config POSCBOOST = 0
#pragma config EJTAGBEN = 0
#pragma config CP = 1
//Configuration End

/*========================================================================*\
   Use :Mit Typdefinitionen
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\internals.c"





/*========================================================================*\
   Use :panel
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/
#define FCV_FALSE (0)
#define FCV_TRUE (1)


/*========================================================================*\
   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 :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: Warten, Art: Warten: 5 s
    FCI_DELAYBYTE_S(5);

    // Name: Aufruf Komponenten-Makro, Art: Aufruf Komponenten-Makro: USB_Serial1::SendString("Hallo")
    FCD_056e1_USB_Serial1__SendString("Hallo", 6);

    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






