//************************************************************************************
//**  
//**  Source name:   D:\Projekte_Flowcode_8\SPI_Slave_Error.fcfx
//**  Title:         
//**  Description:   *******************************
//**                 *
//**                 *    Irissoft    2018
//**                 *
//**                 *     24FJ64GB002    Basic ohne Quarz
//**                 *
//**                 *******************************
//**  Device:        PIC16.24F.24FJ64GB002
//**  
//**  Generated by:  Flowcode v8.2.2.15
//**  Date:          Sunday, March 22, 2020 22:32:41
//**  Users:         1
//**  Registriert für:HansJuergenHalder
//**  Lizenzschlüssel:UMPKEQ
//**  
//**  
//**  https://www.matrixtsl.com
//**  
//************************************************************************************


#define MX_PIC16

#define MX_CAL_PIC16

#define MX_CLK_SPEED 32000000

#define FCP_NULL Unconnected_Port

#define MX_CLKS_PER_INST 2
#include <xc.h>
#include <math.h>
#include <stdlib.h>
#include "p24fxxxx.h"
//Configuration Start
_CONFIG4(65304);
_CONFIG3(62719);
_CONFIG2(35247);
_CONFIG1(16255);
//Configuration End

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



MX_UINT8 FCLV_LOOP1;


/*========================================================================*\
   Use :panel
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/
#define FCVsz_CR 2
#define FCV_CR "\r\n"
#define FCV_OFF (0)
#define FCV_FALSE (0)
#define FCV_ON (1)
#define FCV_TRUE (1)
MX_GLOBAL MX_UINT8 FCV_RET = (0x0);

void FCM_readSensoren();

/*========================================================================*\
   Use :bezel_radiused1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :shape_cuboid1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :TimeStamp1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :InjectorBase1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :cal_spi
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/
#define MX_SPI_SS_TRIS_1 trisa
#define MX_SPI_MISO_PORT_1 portb
#define MX_SPI_SCK_TRIS_1 tris
#define MX_SPI_SCK_PIN_1 (0)
#define MX_SPI_MOSI_TRIS_1 trisa
#define MX_SPI_BMODE_1 (0)
#define MX_SPI_MISO_TRIS_1 trisb
#define MX_SPI_MOSI_PIN_1 (0)
#define MX_SPI_MISO_PIN_1 (13)
#define MX_SPI_SS_PIN_1 (1)
#define MX_SPI_PR_SCALE_1 (16)
#define MX_SPI_SS_PORT_1 porta
#define MX_SPI_USESS_1 1
#define MX_SPI_SCK_PORT_1 port
#define MX_SPI_MOSI_PORT_1 porta
#define MX_SPI_CHANNEL_1 (2)


/*=----------------------------------------------------------------------=*\
   Use :cal_spi
       :Ergänzende Definitionen
\*=----------------------------------------------------------------------=*/
#define MX_SPI_REF1
#define MX_SPI_SLAVE_1 1
#define MX_SPI_REMAPPABLE_1 1
#define MX_SPI_MOSI_RPOR_1 RPOR2bits.RP5R
#define MX_SPI_MOSI_SDO_1 10
#define MX_SPI_MISO_RPINR_1 RPINR22bits.SDI2R
#define MX_SPI_MISO_RP_1 13
#define MX_SPI_CLK_RPINR_1 RPINR22bits.SCK2R
#define MX_SPI_CLK_RP_1 18
#define MX_SPI_USESS_1 1
#define MX_SPI_SS_RPINR_1 RPINR23bits.SS2R
#define MX_SPI_SS_RP_1 6
#define MX_SPI_SLAVE_1 1

MX_GLOBAL MX_UINT32 FCV_01531_cal_spi__CONSOLELOG;

void FCD_01531_cal_spi__Master_Enable_CS();
void FC_CAL_SPI_Slave_Uninit_1();
void FCD_01531_cal_spi__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR, MX_UINT8 FCL_APPENDTIMESTAMP);
MX_UINT8 FC_CAL_SPI_Transaction_1(MX_UINT8 *FCL_BUFFER, MX_UINT16 FCLsz_BUFFER, MX_UINT16 FCL_LENGTH);
void FCD_01531_cal_spi__Prv_SimShowWaveform(MX_UINT8 FCL_RXDATA, MX_UINT16 FCL_TXDATA);
void FC_CAL_SPI_Slave_Init_1();
void FCD_01531_cal_spi__Master_Disable_CS();
void FC_CAL_SPI_Master_Uninit_1();
MX_UINT8 FC_CAL_SPI_Master_Byte_1(MX_UINT8 FCL_DATAOUT);
void FC_CAL_SPI_Slave_TxByte_1(MX_UINT8 FCL_DATA);
MX_UINT8 FC_CAL_SPI_Slave_RxByte_1();
void FC_CAL_SPI_SetPrescaler_1(MX_UINT8 FCL_PRESCALER);
MX_UINT8 FC_CAL_SPI_Master_Init_1();

/*========================================================================*\
   Use :SPI_Slave1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/
void FCD_05311_SPI_Slave1__SendChar(MX_UINT8 FCL_CHAR);
MX_UINT8 FCD_05311_SPI_Slave1__GetChar();
void FCD_05311_SPI_Slave1__UnInitialise();
void FCD_05311_SPI_Slave1__Initialise();

/*========================================================================*\
   Use :bezel_radiused1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :shape_cuboid1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :bezel_radiused1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :shape_cuboid1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher1
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   Use :COMPort
       :Deklarationen zu Variablen
       :Deklarationen zur Makrofunktion
\*========================================================================*/

/*========================================================================*\
   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/FlowcodeV8/CAL/PIC/USB/usb_serial_config.h"

    #include USB_CONFIG



	// USB library includes

	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/usb.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/usb_device.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/usb_device_cdc.h"
	//#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/system.h"


    #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/usb_device.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/usb_device_cdc.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC/USB/usb_hal_16bit.c"
	//#include "C:/ProgramData/MatrixTSL/FlowcodeV8/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/FlowcodeV8/CAL/PIC/USB/usb_serial_descriptors.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV8/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/FlowcodeV8/CAL/PIC16BIT/USB/usb_serial_config.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_function_cdc.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/GenericTypeDefs.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/Compiler.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_device.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_device.c"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_ch9.h"


    #if defined(__dsPIC33E__) 
      #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_hal_dspic33e.c"
    #elif defined(__PIC24E__)
      #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_hal_pic24e.c"
    #else
      #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_hal_pic24.c"
    #endif


	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_function_cdc.c"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_common.h"
	#include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_hal.h"


    #if defined(__dsPIC33E__) 
      #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_hal_dspic33e.h"
    #elif defined(__PIC24E__)
      #include "C:/ProgramData/MatrixTSL/FlowcodeV8/CAL/PIC16BIT/USB/usb_hal_pic24e.h"
    #else
      #include "C:/ProgramData/MatrixTSL/FlowcodeV8/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/FlowcodeV8/CAL/PIC16BIT/USB/usb_serial_descriptors.c"
    #include "C:/ProgramData/MatrixTSL/FlowcodeV8/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\FlowcodeV8\CAL\includes.c"


/*========================================================================*\
   Use :bezel_radiused1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :shape_cuboid1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :TimeStamp1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :InjectorBase1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :cal_spi
       :Makro-Implementierungen
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Outputs a low signal to the chip select pin to select the remote slave device.
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Master_Enable_CS()
{
	//Lokale Variablen-Definitionen
#define FCLsz_STR 20
	MX_CHAR FCL_STR[FCLsz_STR];


	#if (1)

		#if (0) // 1 == 0

		//Code wurde vom Vorprozessor optimiert
		// #else

		#endif

	// #else

	//Code wurde vom Vorprozessor optimiert
	#endif

	//Lokale Variablen-Definitionen
#undef FCLsz_STR
}

/*=----------------------------------------------------------------------=*\
   Use :Send text to the SPI console.
       :Exposed as part of the CAL_SPI component to allow none AutoCS pins and other.
       :
       :Parameter f??r Makro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
       :  Colour : 0=Default, 1=TX, 2=RX
       :  AppendTimestamp : 0=Don't Append / 1=Do Append
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR, MX_UINT8 FCL_APPENDTIMESTAMP)
{
	//Lokale Variablen-Definitionen
#define FCLsz_TSTR 20
	MX_CHAR FCL_TSTR[FCLsz_TSTR];


	#if (0)

	//Code wurde vom Vorprozessor optimiert
	// #else

	#endif

	//Lokale Variablen-Definitionen
#undef FCLsz_TSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Parameter f??r Makro Prv_SimShowWaveform:
       :  RXData : MX_UINT8
       :  TXData : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Prv_SimShowWaveform(MX_UINT8 FCL_RXDATA, MX_UINT16 FCL_TXDATA)
{

	#if (1)

		for (FCLV_LOOP1=0; (FCLV_LOOP1)<(8); (FCLV_LOOP1)++)
		{

			#if (1) // (0 & 0x02) == 0

				#if (1) // (0 & 0x01) == 0

					// CLK = 1
					SET_PORT_MASK(FCP_NULL, 1);

				#else

				//Code wurde vom Vorprozessor optimiert
				#endif

			// #else

			//Code wurde vom Vorprozessor optimiert
			#endif

			if (FCL_TXDATA & 0x80)
			{

				// MOSI = 1
				SET_PORT_PIN(A, 0, 1);

			} else {

				// MOSI = 0
				SET_PORT_PIN(A, 0, 0);

			}

			#if (1) // (0 & 0x04) == 0

				if (FCL_RXDATA & 0x80)
				{

					// MISO = 1
					SET_PORT_PIN(B, 13, 1);

				} else {

					// MISO = 0
					SET_PORT_PIN(B, 13, 0);

				}

			// #else

			//Code wurde vom Vorprozessor optimiert
			#endif

			FCI_DELAYBYTE_US(1);

			#if (0) // (0 & 0x02) == 2

			//Code wurde vom Vorprozessor optimiert
			#else

				#if (1) // (0 & 0x01) == 0

					// CLK = 0
					SET_PORT_MASK(FCP_NULL, 0);

				#else

				//Code wurde vom Vorprozessor optimiert
				#endif

			#endif

			#if (0) // (0 & 0x04) == 4

			//Code wurde vom Vorprozessor optimiert
			// #else

			#endif

			FCI_DELAYBYTE_US(1);

			#if (0) // (0 & 0x02) == 2

			//Code wurde vom Vorprozessor optimiert
			// #else

			#endif

			// .TXData = .TXData << 1
			// .RXData = .RXData << 1
			FCL_TXDATA = FCL_TXDATA << 1;
			FCL_RXDATA = FCL_RXDATA << 1;


		}

	// #else

	//Code wurde vom Vorprozessor optimiert
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Outputs a high signal to the chip select pin to deselect the remote slave device.
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Master_Disable_CS()
{
	//Lokale Variablen-Definitionen
#define FCLsz_STR 20
	MX_CHAR FCL_STR[FCLsz_STR];


	#if (1)

		#if (0) // 1 == 0

		//Code wurde vom Vorprozessor optimiert
		// #else

		#endif

	// #else

	//Code wurde vom Vorprozessor optimiert
	#endif

	//Lokale Variablen-Definitionen
#undef FCLsz_STR
}


/*========================================================================*\
   Use :SPI_Slave1
       :Makro-Implementierungen
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :General purpose SPI send byte macro
       :
       :Parameter f??r Makro SendChar:
       :  Char : Data byte to send
\*=----------------------------------------------------------------------=*/
void FCD_05311_SPI_Slave1__SendChar(MX_UINT8 FCL_CHAR)
{



	FC_CAL_SPI_Slave_TxByte_1(FCL_CHAR);

}

/*=----------------------------------------------------------------------=*\
   Use :General purpose SPI get byte macro
       :
       :R??ckgaben : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05311_SPI_Slave1__GetChar()
{
	//Lokale Variablen-Definitionen
	MX_UINT8 FCR_RETVAL;




	FCR_RETVAL = FC_CAL_SPI_Slave_RxByte_1();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Deactivates the SPI peripheral leaving the I/O pins in a state where they can be used for general purpose I/O.
\*=----------------------------------------------------------------------=*/
void FCD_05311_SPI_Slave1__UnInitialise()
{

	FC_CAL_SPI_Slave_Uninit_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Activates the SPI peripheral and claims control over the I/O pins.
\*=----------------------------------------------------------------------=*/
void FCD_05311_SPI_Slave1__Initialise()
{

	FC_CAL_SPI_Slave_Init_1();

}


/*========================================================================*\
   Use :bezel_radiused1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :shape_cuboid1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :bezel_radiused1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :shape_cuboid1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher1
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   Use :COMPort
       :Makro-Implementierungen
\*========================================================================*/

/*========================================================================*\
   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 // #if 0: 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 // #if 0: 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 // #if 0: 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_readSensoren()
{

}



/*========================================================================*\
   Use :Main
\*========================================================================*/
int main()
{
AD1PCFG = 0xffff;


	// Name: , Art: Aufruf Komponenten-Makro: USB_Serial1::Initialise()
	FCD_056e1_USB_Serial1__Initialise();

	// Name: , Art: Aufruf Komponenten-Makro: SPI_Slave1::Initialise()
	FCD_05311_SPI_Slave1__Initialise();

	// Name: , Art: Schleife: While 1
	while (1)
	{

		// Name: , Art: Aufruf Komponenten-Makro: ret=SPI_Slave1::GetChar()
		FCV_RET = FCD_05311_SPI_Slave1__GetChar();

		// Name: , Art: Ausgang: ON -> B5
		SET_PORT_PIN(B,5,(FCV_ON));

		// Name: , Art: Warten: 500 ms
		FCI_DELAYINT_MS(500);

		// Name: , Art: Aufruf Komponenten-Makro: USB_Serial1::SendByte(ret)
		FCD_056e1_USB_Serial1__SendByte(FCV_RET);

		// Name: , Art: Ausgang: OFF -> B5
		SET_PORT_PIN(B,5,(FCV_OFF));

		// Name: , Art: Warten: 500 ms
		FCI_DELAYINT_MS(500);


	}

	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




