//************************************************************************************
//**  
//**  Source name:   I:\01_Lanzante_Projects\Lanzante_-_Lambo_SESTO\MPH_Display\FlowCode\TECI_Mini_PIC18F2585_MPH_V1-0_NoUART.fcfx
//**  Title:         
//**  Description:   
//**  Device:        PIC.18F.18F2585
//**  
//**  Generated by:  Flowcode v10.1.2.40
//**  Date:          Wednesday, May 14, 2025 18:34:51
//**  Users:         1
//**  Registered to: jay_dee (15266180)
//**  Licence key: QUHWM7
//**  
//**  
//**  https://www.flowcode.co.uk
//**  
//************************************************************************************


#include "I:\01_Lanzante_Projects\Lanzante_-_Lambo_SESTO\MPH_Display\FlowCode\TECI_Mini_PIC18F2585_MPH_V1-0_NoUART.h"


/*========================================================================*\
   Use :cal_i2c1
       :GUID: ed3a5141-43bb-43e0-86b0-2243fd1147ca
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\cal_i2c.fcpx
       :Version: 15.0 (0x200028)
       :Timestamp: 19\12\2024
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_07da2_cal_i2c1__TRANSADDR;
MX_GLOBAL MX_UINT32 FCV_07da2_cal_i2c1__CONSOLELOG;

/*=----------------------------------------------------------------------=*\
   Use :Send text to the console
       :
       :Parameters for macro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
       :  Colour : MX_UINT8
       :  AppendTimestamp : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_07da2_cal_i2c1__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR, MX_UINT8 FCL_APPENDTIMESTAMP)
{
  //Local variable definitions
  #define FCLsz_TSTR 20
  MX_CHAR FCL_TSTR[FCLsz_TSTR];


  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  //Local variable definitions
  #undef FCLsz_TSTR
}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb10_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb10_WidthData__INTFIXEDLIST 1
#define FCD_00fb10_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb10_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fbf_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fbf_ASCIIData__INTFIXEDLIST 1
#define FCD_00fbf_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fbf_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font8
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e58_gLCD_Font8__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e58_gLCD_Font8__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e58_gLCD_Font8__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e58_gLCD_Font8__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e58_gLCD_Font8__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 11;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e58_gLCD_Font8__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fbe_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fbe_WidthData__INTFIXEDLIST 1
#define FCD_00fbe_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fbe_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fbd_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fbd_ASCIIData__INTFIXEDLIST 1
#define FCD_00fbd_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fbd_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font7
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e57_gLCD_Font7__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e57_gLCD_Font7__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e57_gLCD_Font7__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e57_gLCD_Font7__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e57_gLCD_Font7__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 40;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e57_gLCD_Font7__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fbc_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fbc_WidthData__INTFIXEDLIST 1
#define FCD_00fbc_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fbc_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fbb_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fbb_ASCIIData__INTFIXEDLIST 1
#define FCD_00fbb_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fbb_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font6
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e56_gLCD_Font6__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e56_gLCD_Font6__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e56_gLCD_Font6__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e56_gLCD_Font6__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e56_gLCD_Font6__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 12;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e56_gLCD_Font6__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fba_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fba_WidthData__INTFIXEDLIST 1
#define FCD_00fba_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fba_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb9_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb9_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb9_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb9_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font5
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e55_gLCD_Font5__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e55_gLCD_Font5__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e55_gLCD_Font5__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e55_gLCD_Font5__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e55_gLCD_Font5__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 13;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e55_gLCD_Font5__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb8_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb8_WidthData__INTFIXEDLIST 1
#define FCD_00fb8_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb8_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb7_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb7_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb7_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb7_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font4
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e54_gLCD_Font4__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e54_gLCD_Font4__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e54_gLCD_Font4__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e54_gLCD_Font4__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e54_gLCD_Font4__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 36;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e54_gLCD_Font4__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb6_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb6_WidthData__INTFIXEDLIST 1
#define FCD_00fb6_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb6_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb5_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb5_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb5_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb5_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font3
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e53_gLCD_Font3__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e53_gLCD_Font3__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e53_gLCD_Font3__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e53_gLCD_Font3__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e53_gLCD_Font3__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 14;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e53_gLCD_Font3__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb4_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb4_WidthData__INTFIXEDLIST 1
#define FCD_00fb4_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb4_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb3_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb3_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb3_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb3_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font2
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e52_gLCD_Font2__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e52_gLCD_Font2__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e52_gLCD_Font2__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e52_gLCD_Font2__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e52_gLCD_Font2__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 11;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e52_gLCD_Font2__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0xAA;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb2_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb2_WidthData__INTFIXEDLIST 94
#define FCD_00fb2_WidthData__INTFIXEDLIST(ix) FCD_00fb2_WidthData__INTFIXEDLIST_LUT[ix]
ROMARRAY_(MX_UINT8) FCD_00fb2_WidthData__INTFIXEDLIST_LUT ROMARRAY_E =
{
2,7,14,11,19,15,2,6,6,8,12,2,6,2,7,12,7,12,12,12,12,12,12,12,12,2,2,12,12,12,12,23,15,14,16,15,14,12,16,14,2,10,15,11,17,14,17,14,17,15,15,14,14,15,25,17,16,14,5,7,5,10,15,4,12,11,11,11,12,7,11,10,2,5,11,2,18,10,12,11,11,6,11,7,10,11,19,11,11,11,8,2,8,13
};

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb2_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (1)
    FCR_RETVAL = 94;

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100828)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb1_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb1_ASCIIData__INTFIXEDLIST 3084
#define FCD_00fb1_ASCIIData__INTFIXEDLIST(ix) FCD_00fb1_ASCIIData__INTFIXEDLIST_LUT[ix]
ROMARRAY_(MX_UINT8) FCD_00fb1_ASCIIData__INTFIXEDLIST_LUT ROMARRAY_E =
{
0xFE,0xFE,0x7F,0x7F,0x06,0x06,0x7E,0x7E,0x00,0x00,0x00,0x7E,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xF8,0xFE,0xC6,0xC0,0xC0,0xC0,0xF8,0xFE,0xC6,0xC0,0x30,0x30,0xF0,0xFF,0x3F,0x30,0x30,0x30,0xF0,0xFF,0x3F,0x30,0x30,0x30,0x00,0x06,0x07,0x01,0x00,0x00,0x00,0x06,0x07,0x01,0x00,0x00,0x00,0x00,0xF0,0xFC,0x8C,0x06,0x06,0xFF,0x06,0x06,0x0C,0x1C,0x18,0xC0,0xC1,0x83,0x03,0x03,0xFF,0x06,0x06,0x0C,0xFC,0xF8,0x00,0x03,0x03,0x06,0x06,0x1F,0x06,0x07,0x03,0x03,0x00,0xF8,0xFC,0x0E,0x06,0x06,0x0E,0xFC,0xF8,0x00,0x00,0xC0,0xF0,0x7C,0x1E,0x06,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x07,0xC3,0xF1,0x3C,0x0F,0x03,0xF8,0xFC,0x0E,0x06,0x06,0x0E,0xFC,0xF8,0x00,0x00,0x00,0x00,0x04,0x07,0x03,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x78,0xFC,0xCE,0x86,0x06,0x86,0xCE,0xFC,0x78,0x00,0x00,0x00,0x00,0xF0,0xF8,0x8C,0x06,0x07,0x03,0x07,0x1D,0x39,0xF0,0xE0,0xF0,0xB8,0x18,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x01,0x07,0x07,0x02,0x7E,0x7E,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x06,0x02,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x0F,0x3E,0x70,0xC0,0x80,0x02,0x06,0x1C,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xC0,0x70,0x3E,0x0F,0x01,0x18,0x98,0xF0,0x7E,0x7E,0xF0,0x98,0x18,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0xC0,0xF8,0x7E,0x06,0x00,0xC0,0xFC,0x3F,0x03,0x00,0x00,0x06,0x07,0x01,0x00,0x00,0x00,0x00,0xE0,0xF8,0x1C,0x0E,0x06,0x06,0x06,0x06,0x0E,0x1C,0xF8,0xE0,0x7F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x60,0x60,0x70,0x38,0x18,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x30,0x38,0x0C,0x0E,0x06,0x06,0x06,0x06,0x0E,0x1C,0xF8,0xF0,0x00,0x00,0x80,0xC0,0x60,0x60,0x30,0x18,0x0C,0x07,0x03,0x00,0x06,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x30,0x38,0x1C,0x0E,0x06,0x06,0x06,0x06,0x8C,0xFC,0x78,0x00,0xC0,0xC0,0x80,0x00,0x03,0x03,0x03,0x03,0x03,0x86,0xFC,0xF8,0x00,0x01,0x03,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x78,0x1C,0xFE,0xFE,0x00,0x00,0x70,0x78,0x7E,0x67,0x63,0x60,0x60,0x60,0xFF,0xFF,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0xF8,0xFE,0x06,0x86,0x86,0x86,0x86,0x86,0x06,0x06,0x00,0xC3,0xC3,0x83,0x01,0x01,0x01,0x01,0x01,0x01,0x87,0xFE,0x7C,0x00,0x01,0x03,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0xC0,0xF0,0x38,0x0C,0x86,0x86,0x86,0x86,0x8E,0x1C,0x38,0x30,0x7F,0xFF,0x86,0x03,0x01,0x01,0x01,0x01,0x03,0x87,0xFE,0x7C,0x00,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xC6,0xF6,0x3E,0x0E,0x06,0x00,0x00,0x00,0x80,0xF0,0x7C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xFC,0x8C,0x06,0x06,0x06,0x06,0x8C,0xFC,0x78,0x00,0xF8,0xFC,0x0E,0x03,0x03,0x03,0x03,0x03,0x07,0x0E,0xFC,0xF8,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x06,0x03,0x01,0x00,0xF0,0xF8,0x1C,0x0E,0x06,0x06,0x06,0x06,0x0C,0x1C,0xF8,0xE0,0xC3,0xC7,0x8E,0x1C,0x18,0x18,0x18,0x18,0x0C,0xC6,0xFF,0x3F,0x00,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x03,0x01,0x00,0x00,0xC0,0xC0,0x00,0x00,0x06,0x06,0xC0,0xC0,0x00,0x00,0x66,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0x60,0x04,0x0E,0x0A,0x0A,0x1B,0x11,0x31,0x31,0x60,0x60,0x60,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x60,0x60,0x60,0x31,0x31,0x11,0x1B,0x0A,0x0A,0x0E,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x38,0x1C,0x0E,0x06,0x06,0x06,0x06,0x0E,0x8C,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x70,0x7C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x70,0x38,0x18,0x0C,0x8C,0x86,0xC6,0xC6,0xC6,0xC6,0x86,0x06,0xCC,0xCC,0x1C,0x38,0xF0,0xE0,0x80,0x00,0xFC,0xFF,0x03,0x00,0xF8,0xFE,0x07,0x03,0x01,0x00,0x00,0x00,0x80,0xC1,0xFF,0x3F,0x01,0x00,0x80,0xE0,0x7F,0x1F,0x00,0x01,0x07,0x0F,0x1C,0x38,0x73,0x63,0x66,0xC6,0xC6,0xC6,0xC3,0xC1,0xC3,0xC7,0xC6,0x66,0x63,0x73,0x31,0x18,0x0C,0x04,0x00,0x00,0x00,0x00,0xC0,0xF8,0x3E,0x06,0x3E,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0x3F,0x1F,0x19,0x18,0x18,0x18,0x19,0x1F,0x3F,0xF8,0xC0,0x00,0x06,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x06,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0xFC,0xF0,0x00,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0F,0x0D,0xF8,0xF0,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x03,0x03,0x00,0x80,0xF0,0x78,0x1C,0x0C,0x0C,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x1C,0x38,0x20,0x1F,0xFF,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x01,0x03,0x03,0x07,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x1C,0x38,0xF0,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xFF,0x3F,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x78,0x1C,0x0C,0x0E,0x06,0x06,0x06,0x06,0x06,0x0E,0x0C,0x3C,0x78,0x20,0x1F,0x7F,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0C,0x0C,0xFC,0xFC,0x00,0x00,0x01,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x01,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0xFE,0xFE,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x03,0x07,0x06,0x06,0x06,0x06,0x03,0x03,0x00,0xFE,0xFE,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x06,0x02,0x00,0xFF,0xFF,0x1C,0x0E,0x07,0x07,0x0F,0x1E,0x38,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x04,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFE,0xFE,0x0E,0x7C,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0x7C,0x0E,0xFE,0xFE,0xFF,0xFF,0x00,0x00,0x03,0x1F,0xFC,0xE0,0x00,0xE0,0xFC,0x1F,0x03,0x00,0x00,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0xFE,0xFE,0x1C,0x38,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x01,0x07,0x0E,0x38,0x70,0xC0,0x80,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x80,0xE0,0x78,0x1C,0x0C,0x0E,0x06,0x06,0x06,0x06,0x06,0x0E,0x0C,0x1C,0x78,0xE0,0x80,0x1F,0x7F,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x7F,0x1F,0x00,0x00,0x01,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x06,0x07,0x03,0x03,0x01,0x00,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x1C,0xFC,0xF0,0xFF,0xFF,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x07,0x03,0x01,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x78,0x1C,0x0C,0x0E,0x06,0x06,0x06,0x06,0x06,0x0E,0x0C,0x1C,0x78,0xE0,0x80,0x1F,0x7F,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x80,0x80,0xE0,0xFF,0x3F,0x00,0x00,0x01,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x07,0x03,0x07,0x07,0x0E,0x0C,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x8C,0xFC,0xF0,0x00,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x0E,0x3E,0x7E,0xE7,0xC3,0x83,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x04,0x00,0xF0,0xF8,0x8C,0x0C,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x1C,0x38,0x30,0x60,0xE0,0x81,0x03,0x03,0x03,0x07,0x07,0x06,0x06,0x06,0x0E,0x8C,0xFC,0xF0,0x00,0x01,0x03,0x03,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x7F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x06,0x3E,0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0x3E,0x06,0x00,0x00,0x00,0x07,0x3F,0xF8,0xE0,0x00,0xE0,0xF8,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x06,0x3E,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0x7E,0x06,0x7E,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0x3E,0x06,0x00,0x00,0x03,0x1F,0xFC,0xE0,0x00,0xE0,0xFC,0x1F,0x03,0x00,0x00,0x00,0x03,0x1F,0xFC,0xE0,0x00,0xE0,0xFE,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x0E,0x3C,0x78,0xE0,0xC0,0x00,0xC0,0xE0,0x78,0x3C,0x0E,0x06,0x02,0x00,0x00,0x00,0x00,0xC0,0xE0,0x70,0x3C,0x1F,0x07,0x1F,0x3C,0x70,0xE0,0xC0,0x00,0x00,0x00,0x04,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x04,0x02,0x06,0x1C,0x38,0xF0,0xE0,0x80,0x00,0x00,0x80,0xE0,0xF0,0x3C,0x1E,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFE,0xFE,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xC6,0xE6,0x76,0x3E,0x1E,0x06,0x00,0x00,0xC0,0xE0,0x70,0x3C,0x1E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x06,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFE,0xFE,0x06,0x06,0x06,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0x06,0x7E,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x3F,0xFC,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x06,0x06,0x06,0x06,0xFE,0xFE,0x00,0x00,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x80,0xF0,0x7C,0x0E,0x0E,0x7C,0xF0,0x80,0x00,0x04,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x02,0x06,0x0E,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xC2,0xE3,0x31,0x30,0x30,0x30,0x18,0x18,0x99,0xFF,0xFF,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x03,0x01,0x03,0x07,0x04,0xFE,0xFE,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x83,0x01,0x00,0x00,0x00,0x01,0x83,0xFF,0x7E,0x07,0x07,0x01,0x03,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0xFE,0xFF,0x83,0x01,0x00,0x00,0x00,0x00,0x01,0xC3,0xC3,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x03,0x01,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0xFE,0xFE,0x7E,0xFF,0x83,0x01,0x00,0x00,0x00,0x01,0x83,0xFF,0xFF,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x03,0x01,0x07,0x07,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xFC,0xFF,0x9B,0x19,0x18,0x18,0x18,0x18,0x19,0x1B,0x9F,0x9E,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x06,0x03,0x01,0x00,0xC0,0xC0,0xFC,0xFE,0xC6,0xC6,0xC6,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0xC0,0xC0,0x7C,0xFF,0x83,0x01,0x00,0x00,0x00,0x01,0x83,0xFF,0xFF,0x30,0x71,0xE3,0xC7,0xC6,0xC6,0xC6,0xE3,0x61,0x7F,0x1F,0xFE,0xFE,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x01,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0xC6,0xC6,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0xC6,0xC6,0x00,0x00,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xFF,0x7F,0xFE,0xFE,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x40,0x00,0xFF,0xFF,0x18,0x1C,0x3E,0x77,0xE3,0xC1,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x06,0x04,0xFE,0xFE,0xFF,0xFF,0x07,0x07,0xC0,0xC0,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x01,0xFF,0xFF,0x01,0x01,0x00,0x00,0x00,0x01,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0xC0,0xC0,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x01,0xFF,0xFF,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xFE,0xFF,0x83,0x01,0x00,0x00,0x00,0x00,0x01,0x83,0xFF,0xFE,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0xC0,0xC0,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x83,0x01,0x00,0x00,0x00,0x01,0x83,0xFF,0x7E,0xFF,0xFF,0x01,0x03,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0xC0,0xC0,0x7E,0xFF,0x83,0x01,0x00,0x00,0x00,0x01,0x83,0xFF,0xFF,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x03,0x01,0xFF,0xFF,0xC0,0xC0,0x80,0xC0,0xC0,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x87,0x8F,0x1D,0x18,0x18,0x38,0x38,0x30,0x31,0xF1,0xE0,0x01,0x03,0x03,0x06,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0xC0,0xC0,0xFC,0xFC,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x06,0x06,0x06,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x01,0x03,0x07,0x06,0x06,0x06,0x03,0x01,0x07,0x07,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x07,0x1F,0xF8,0xE0,0x00,0xE0,0xF8,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x03,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x07,0x1F,0xF8,0xE0,0x00,0xF0,0x7E,0x0F,0x01,0x0F,0x7E,0xF0,0x00,0xE0,0xF8,0x3F,0x07,0x01,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x00,0x00,0x00,0x00,0x40,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x40,0x00,0x00,0x83,0xC7,0xFE,0x38,0xFC,0xC7,0x83,0x01,0x00,0x04,0x06,0x07,0x01,0x00,0x00,0x00,0x01,0x07,0x06,0x04,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x07,0x3F,0xF8,0xC0,0x80,0xE0,0x7C,0x1F,0x03,0x00,0x00,0xC0,0xC0,0xE1,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x03,0x01,0x00,0x06,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0xF8,0xFC,0x06,0x06,0x06,0x18,0x18,0x3C,0xE7,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0xC0,0xC0,0xC0,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xE7,0x3C,0x18,0x18,0xC0,0xC0,0xC0,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x03,0x03,0x03,0x07,0x06,0x0E,0x0C,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb1_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (1)
    FCR_RETVAL = 3084;

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font1
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 29.0 (0x1300128)
       :Timestamp: 16\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e51_gLCD_Font1__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT32 FCV_09e51_gLCD_Font1__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_09e51_gLCD_Font1__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (1)
    #if (1) // 0 == 0
      while (FCL_CHARACTER > 0)
      {
        FCL_CHARACTER = FCL_CHARACTER - 1;

        FCL_WIDTH = FCD_00fb2_WidthData__INTFIXEDLIST(FCL_CHARACTER);

        FCR_RETVAL = FCR_RETVAL + FCL_WIDTH;

      }

      FCR_RETVAL = FCR_RETVAL * 3;

    // #else
    //Code has been optimised out by the pre-processor
    #endif

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e51_gLCD_Font1__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (1)
    #if (0) // 255 < 255
    //Code has been optimised out by the pre-processor
    // #else
    #endif

    #if (0) // 0 && (FCL_CHARACTER >= 'a')
    //Code has been optimised out by the pre-processor
    // #else
    #endif

    #if (0)
    //Code has been optimised out by the pre-processor
    #else
      if ((FCL_CHARACTER < 33) || (FCL_CHARACTER > (33 + 95)))
      {      

        if (FCL_CHARACTER == 32)
        {        

          FCR_RETVAL = 4;

        } else {

          //Comment:
          //Out of range,return 5 character to show the character out of range pattern

          FCR_RETVAL = 5;

        }

      } else {

        FCL_CHARACTER = FCL_CHARACTER - 33;

        FCR_RETVAL = FCD_00fb2_WidthData__INTFIXEDLIST(FCL_CHARACTER);

      }

    #endif

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e51_gLCD_Font1__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 24;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e51_gLCD_Font1__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT32 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (1)
    #if (0) // 255 < 255
    //Code has been optimised out by the pre-processor
    // #else
    #endif

    #if (0) // 0 && (FCL_CHARACTER >= 'a')
    //Code has been optimised out by the pre-processor
    // #else
    #endif

    if ((FCL_CHARACTER < 33) || (FCL_CHARACTER > (33 + 95)))
    {    

      if (FCL_CHARACTER == 32)
      {      

        FCR_RETVAL = 0;

      } else {

        //Comment:
        //Out of range

        FCR_RETVAL = 0xAA;

      }

    } else {

      FCL_CHARACTER = FCL_CHARACTER - 33;

      #if (0) // 0 == 1
      //Code has been optimised out by the pre-processor
      #else
        if (FCL_CHARACTER == FCV_09e51_gLCD_Font1__OLDCHAR)
        {        

          FCL_POSITION = FCV_09e51_gLCD_Font1__OLDPOSITION;

        } else {

          FCL_POSITION = FCD_09e51_gLCD_Font1__SumWidths(FCL_CHARACTER);

          FCV_09e51_gLCD_Font1__OLDPOSITION = FCL_POSITION;
          FCV_09e51_gLCD_Font1__OLDCHAR = FCL_CHARACTER;

        }

      #endif

      FCL_POSITION = FCL_POSITION + FCL_BYTEINDEX;

      FCR_RETVAL = FCD_00fb1_ASCIIData__INTFIXEDLIST(FCL_POSITION);

    }

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :Base_GLCD
       :GUID: 4384cba9-0bea-4359-8c5b-dcd046aa7778
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\Base_GLCD.fcpx
       :Version: 43.0 (0x2300028)
       :Timestamp: 06\05\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Reads the number of pixel columns used in the selected font
       :
       :Parameters for macro ReadFontWidth:
       :  Font : Font selection range: 0 to (NumFonts - 1)
       :  Character : ASCII character to get the pixel width e.g. 'A' or 65
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ba71_Base_GLCD__ReadFontWidth(MX_UINT8 FCL_FONT, MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_FONT >= 1)
  {  

    FCL_FONT = 0;

  // } else {

  }

  if (FCL_FONT == 0)
  {  

    FCR_RETVAL = FCD_09e51_gLCD_Font1__ReadWidth(FCL_CHARACTER);

  // } else {

  }

  #if (0) // 1 > 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 3
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 4
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 5
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 6
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 7
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a stat from the selected embedded ASCII font data.
       :
       :Parameters for macro ReadFontStat:
       :  Font : Font selection range: 0 to (NumFonts - 1)
       :  Index : 0=SpaceWidth, 1=PixelHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ba71_Base_GLCD__ReadFontStat(MX_UINT8 FCL_FONT, MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_FONT >= 1)
  {  

    FCL_FONT = 0;

  // } else {

  }

  if (FCL_FONT == 0)
  {  

    FCR_RETVAL = FCD_09e51_gLCD_Font1__ReadFontStat(FCL_INDEX);

  // } else {

  }

  #if (0) // 1 > 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 3
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 4
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 5
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 6
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 7
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a byte from the selected embedded ASCII font data.
       :
       :Parameters for macro ReadFontByte:
       :  Font : Font selection range: 0 to (NumFonts - 1)
       :  Character : ASCII character for example 'A' or 65
       :  ByteIndex : Font column Ranging 0-4
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ba71_Base_GLCD__ReadFontByte(MX_UINT8 FCL_FONT, MX_UINT8 FCL_CHARACTER, MX_UINT16 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_FONT >= 1)
  {  

    FCL_FONT = 0;

  // } else {

  }

  if (FCL_FONT == 0)
  {  

    FCR_RETVAL = FCD_09e51_gLCD_Font1__ReadASCIILUT(FCL_CHARACTER, FCL_BYTEINDEX);

  // } else {

  }

  #if (0) // 1 > 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 3
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 4
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 5
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 6
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 7
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_SSD1306_i2c1
       :GUID: f6ab6074-68ba-4cd4-9274-f973102f8518
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_SSD1306_i2c.fcpx
       :Version: 16.0 (0x100928)
       :Timestamp: 01\05\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM7 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM6 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM5 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM4 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM3 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM2 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM1 128
#define FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM0 128
#define FCV_0cc51_gLCD_SSD1306_i2c1__BLACK (0)
#define FCV_0cc51_gLCD_SSD1306_i2c1__WHITE (255)
MX_GLOBAL MX_UINT16 FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR;
MX_GLOBAL MX_UINT16 FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR;
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__ORIENTATION = (0x0);
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__SCALEY = (0x1);
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM7];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__SCALEX = (0x1);
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM6];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM5];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__INVERTED = (0x0);
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM4];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM3];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM2];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM1];
MX_GLOBAL MX_UINT8 FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCVsz_0cc51_gLCD_SSD1306_i2c1__DRAM0];

/*=----------------------------------------------------------------------=*\
   Use :Allows the fonts to be scaled up by multiplying the number of pixels on the X and Y.
       :
       :Parameters for macro SetFontScaler:
       :  ScaleX : Sets the horizontal scale of the font, default 1
       :  ScaleY : Sets the vertical scale of the font, default 1
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__SetFontScaler(MX_UINT8 FCL_SCALEX, MX_UINT8 FCL_SCALEY)
{

  if (FCL_SCALEX > 0)
  {  

    FCV_0cc51_gLCD_SSD1306_i2c1__SCALEX = FCL_SCALEX;

  } else {

    FCV_0cc51_gLCD_SSD1306_i2c1__SCALEX = 1;

  }

  if (FCL_SCALEY > 0)
  {  

    FCV_0cc51_gLCD_SSD1306_i2c1__SCALEY = FCL_SCALEY;

  } else {

    FCV_0cc51_gLCD_SSD1306_i2c1__SCALEY = 1;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro SendCommand:
       :  Command : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(MX_UINT8 FCL_COMMAND)
{
  //Local variable definitions
  #define FCLsz_BUFFER 2
  MX_UINT8 FCL_BUFFER[FCLsz_BUFFER];


  FCL_BUFFER[0] = 0;
  FCL_BUFFER[1] = FCL_COMMAND;

  FC_CAL_I2C_Transaction_Write_2(FCL_BUFFER, 2, 2);

  //Local variable definitions
  #undef FCLsz_BUFFER
}

/*=----------------------------------------------------------------------=*\
   Use :This macro prints a decimal number to the Graphical LCD.
       :
       :Parameters for macro PrintNumber:
       :  Number : Byte or Integer number to send to the display.
       :  X : X pixel coordinate to set the output string position.
       :  Y : Y pixel coordinate to set the output string position.
       :  Font : Range: 0 to 31 - 0=5x8, 1=10x8, 2=10x16, 3=5x16, 4-31=Extended Sizes
       :  Transparent : Specifies if the background of the text is drawn - 0 = Background colour is drawn, 1 = Background colour not drawn.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__PrintNumber(MX_SINT16 FCL_NUMBER, MX_UINT16 FCL_X, MX_UINT16 FCL_Y, MX_UINT8 FCL_FONT, MX_UINT8 FCL_TRANSPARENT)
{
  //Local variable definitions
  #define FCLsz_TEMP 6
  MX_CHAR FCL_TEMP[FCLsz_TEMP];


  FCI_TOSTRING(FCL_NUMBER, FCL_TEMP,6);

  FCD_0cc51_gLCD_SSD1306_i2c1__Print(FCL_TEMP, FCLsz_TEMP, FCL_X, FCL_Y, FCL_FONT, FCL_TRANSPARENT);

  //Local variable definitions
  #undef FCLsz_TEMP
}

/*=----------------------------------------------------------------------=*\
   Use :Draws a line with the current foreground colour from pixel location X1, Y1 to pixel location X2, Y2.
       :
       :Parameters for macro DrawLine:
       :  X1 : MX_UINT16
       :  Y1 : MX_UINT16
       :  X2 : MX_UINT16
       :  Y2 : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(MX_UINT16 FCL_X1, MX_UINT16 FCL_Y1, MX_UINT16 FCL_X2, MX_UINT16 FCL_Y2)
{
  //Local variable definitions
  MX_SINT16 FCL_C1;
  MX_SINT16 FCL_M1;
  MX_SINT16 FCL_D1 = (0);
  MX_SINT16 FCL_PIXELX;
  MX_SINT16 FCL_PIXELY;
  MX_SINT16 FCL_YINC = (1);
  MX_SINT16 FCL_XINC = (1);
  MX_SINT16 FCL_X;
  MX_SINT16 FCL_Y;


  FCL_PIXELX = FCL_X2 - FCL_X1;
  FCL_PIXELY = FCL_Y2 - FCL_Y1;

  FCL_X = FCL_X1;
  FCL_Y = FCL_Y1;

  if (FCL_PIXELX < 0)
  {  

    FCL_XINC = -1;
    FCL_PIXELX = FCL_PIXELX * -1;

  // } else {

  }

  if (FCL_PIXELY < 0)
  {  

    FCL_YINC = -1;
    FCL_PIXELY = FCL_PIXELY * -1;

  // } else {

  }

  if (FCL_PIXELY <= FCL_PIXELX)
  {  

    FCL_C1 = 2 * FCL_PIXELX;
    FCL_M1 = 2 * FCL_PIXELY;

    while (FCL_X != FCL_X2)
    {
      FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X, FCL_Y);

      FCL_X = FCL_X + FCL_XINC;

      FCL_D1 = FCL_D1 + FCL_M1;

      if (FCL_D1 > FCL_PIXELX)
      {      

        FCL_Y = FCL_Y + FCL_YINC;

        FCL_D1 = FCL_D1 - FCL_C1;

      // } else {

      }

    }

  } else {

    FCL_C1 = 2 * FCL_PIXELY;
    FCL_M1 = 2 * FCL_PIXELX;

    while (FCL_Y != FCL_Y2)
    {
      FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X, FCL_Y);

      FCL_Y = FCL_Y + FCL_YINC;

      FCL_D1 = FCL_D1 + FCL_M1;

      if (FCL_D1 > FCL_PIXELY)
      {      

        FCL_X = FCL_X + FCL_XINC;

        FCL_D1 = FCL_D1 - FCL_C1;

      // } else {

      }

    }

  }

  FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X, FCL_Y);

}

/*=----------------------------------------------------------------------=*\
   Use :Draws an ellipse object on the display with the center of the ellipse at the location X,Y
       :
       :Parameters for macro DrawEllipse:
       :  X : X Coordinate for the center of the circle
       :  Y : Y coordinate for the center of the circle
       :  XRadius : Radius of the circle on the X axis specified in pixels
       :  YRadius : Radius of the circle on the Y axis specified in pixels
       :  Transparent : 0=Fill inside circle using background colour / 1=Draw outer circle only
       :  Solid : 0=Use Transparent Setting / 1=Fill with foreground colour
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__DrawEllipse(MX_UINT16 FCL_X, MX_UINT16 FCL_Y, MX_UINT16 FCL_XRADIUS, MX_UINT16 FCL_YRADIUS, MX_UINT8 FCL_TRANSPARENT, MX_UINT8 FCL_SOLID)
{
  //Local variable definitions
  MX_SINT16 FCL_ERR;
  MX_SINT16 FCL_CURX;
  MX_SINT16 FCL_CURY;
  MX_UINT32 FCL_BGCOL;
  MX_UINT32 FCL_FGCOL;
  MX_UINT8 FCL_REP = (0x0);
  MX_SINT16 FCL_E2;
  MX_FLOAT FCL_K;


  if (FCL_SOLID == 1)
  {  

  FCC_DrawEllipse_A:
    ;

    FCL_CURX = 0;
    FCL_CURY = 0 - FCL_YRADIUS;

    FCL_ERR = 2 - (2 * FCL_XRADIUS);

    FCL_K = (flt_div(flt_fromi(FCL_YRADIUS), flt_fromi(FCL_XRADIUS)));

    while (1)
    {
      FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(flt_toi(flt_sub(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y + FCL_CURY, flt_toi(flt_add(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y + FCL_CURY);

      FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(flt_toi(flt_sub(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y - FCL_CURY, flt_toi(flt_add(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y - FCL_CURY);

      FCL_E2 = FCL_ERR;

      if (FCL_E2 <= FCL_CURX)
      {      

        FCL_CURX = FCL_CURX + 1;
        FCL_ERR = FCL_ERR + ((FCL_CURX * 2) + 1);

        if ((0 - FCL_CURY == FCL_CURX) && (FCL_E2 <= FCL_CURY))
        {        

          FCL_E2 = 0;

        // } else {

        }

      // } else {

      }

      if (FCL_E2 > FCL_CURY)
      {      

        FCL_CURY = FCL_CURY + 1;
        FCL_ERR = FCL_ERR + ((FCL_CURY * 2) + 1);

      // } else {

      }

      if ((FCL_CURY <= 0) == 0) break;
    }

  } else {

    if (FCL_TRANSPARENT == 1)
    {    

    FCC_DrawEllipse_B:
      ;

      FCL_CURX = 0;
      FCL_CURY = 0 - FCL_YRADIUS;

      FCL_ERR = 2 - (2 * FCL_XRADIUS);

      FCL_K = (flt_div(flt_fromi(FCL_YRADIUS), flt_fromi(FCL_XRADIUS)));

      while (1)
      {
        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(flt_toi(flt_sub(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y + FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(flt_toi(flt_add(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y + FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(flt_toi(flt_add(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y - FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(flt_toi(flt_sub(flt_fromi(FCL_X), (flt_div(flt_fromi(FCL_CURX), FCL_K)))), FCL_Y - FCL_CURY);

        FCL_E2 = FCL_ERR;

        if (FCL_E2 <= FCL_CURX)
        {        

          FCL_CURX = FCL_CURX + 1;
          FCL_ERR = FCL_ERR + ((FCL_CURX * 2) + 1);

          if ((0 - FCL_CURY == FCL_CURX) && (FCL_E2 <= FCL_CURY))
          {          

            FCL_E2 = 0;

          // } else {

          }

        // } else {

        }

        if (FCL_E2 > FCL_CURY)
        {        

          FCL_CURY = FCL_CURY + 1;
          FCL_ERR = FCL_ERR + ((FCL_CURY * 2) + 1);

        // } else {

        }

        if ((FCL_CURY <= 0) == 0) break;
      }

    } else {

      FCL_FGCOL = FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR;
      FCL_BGCOL = FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR;

      FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCL_BGCOL;

      FCL_REP = 1;

      goto FCC_DrawEllipse_A;

    }

  }

  if (FCL_REP == 1)
  {  

    FCL_REP = FCL_REP + 1;

    FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCL_FGCOL;

    goto FCC_DrawEllipse_B;

  // } else {

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a pixel with the current foreground colour at pixel location X, Y.
       :
       :Parameters for macro Plot:
       :  X1 : MX_UINT16
       :  Y1 : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__Plot(MX_UINT16 FCL_X1, MX_UINT16 FCL_Y1)
{
  //Local variable definitions
  MX_UINT16 FCL_TEMP;
  MX_UINT8 FCL_DATA = (0x0);
  MX_UINT8 FCL_MOD_Y;
  MX_UINT8 FCL_OLD_DATA;
  MX_UINT8 FCL_PAGE;


  switch (FCV_0cc51_gLCD_SSD1306_i2c1__ORIENTATION)
  {
    case 1:
    {

      FCL_TEMP = 128 - (FCL_Y1 + 1);
      FCL_Y1 = FCL_X1;
      FCL_X1 = FCL_TEMP;

      break;
    }
    case 2:
    {

      FCL_X1 = 128 - (FCL_X1 + 1);
      FCL_Y1 = 64 - (FCL_Y1 + 1);

      break;
    }
    case 3:
    {

      FCL_TEMP = FCL_Y1;
      FCL_Y1 = 64 - (FCL_X1 + 1);
      FCL_X1 = FCL_TEMP;

      break;
    }
    // default:

  }

  FCL_MOD_Y = FCL_Y1 & 0x07;
  FCL_PAGE = FCL_Y1 >> 3;

  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCD_0cc51_gLCD_SSD1306_i2c1__Goto_XY(FCL_X1, FCL_Y1);

  #endif

  if (FCL_PAGE == 0)
  {  

    if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
    {    

      FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] | (0x01 << FCL_MOD_Y);

    } else {

      FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] & (~(0x01 << FCL_MOD_Y));

    }

    #if (0)
    //Code has been optimised out by the pre-processor
    #else
      FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1]);

    #endif

  // } else {

  }

  #if (1) // 64 > 8
    if (FCL_PAGE == 1)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 16
    if (FCL_PAGE == 2)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 24
    if (FCL_PAGE == 3)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 32
    if (FCL_PAGE == 4)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 40
    if (FCL_PAGE == 5)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 48
    if (FCL_PAGE == 6)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 56
    if (FCL_PAGE == 7)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Goto_XY:
       :  X : MX_UINT8
       :  Y : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__Goto_XY(MX_UINT8 FCL_X, MX_UINT8 FCL_Y)
{
  //Local variable definitions
  #define FCLsz_BUFFER 6
  MX_UINT8 FCL_BUFFER[FCLsz_BUFFER];
  MX_UINT8 FCL_PAGE;


#if 0 // Disabled code
  FCL_PAGE = (FCL_Y + 0) >> 3;
  FCL_X = FCL_X + 0;

#endif // Disabled code

#if 0 // Disabled code
  FCL_BUFFER[0] = 0x80;
  FCL_BUFFER[1] = FCL_X & 0x0f;

#endif // Disabled code

#if 0 // Disabled code
  FCL_BUFFER[2] = 0x80;
  FCL_BUFFER[3] = 0x10 | (FCL_X >> 4);

#endif // Disabled code

#if 0 // Disabled code
  FCL_BUFFER[4] = 0x00;
  FCL_BUFFER[5] = 0xb0 | FCL_PAGE;

#endif // Disabled code

#if 0 // Disabled code
  FC_CAL_I2C_Transaction_Write_2(FCL_BUFFER, 6, 6);

#endif // Disabled code

  FCL_PAGE = (FCL_Y + 0) >> 3;
  FCL_X = FCL_X + 0;

  FCL_BUFFER[0] = 0;
  FCL_BUFFER[1] = 0xb0 | FCL_PAGE;

  FC_CAL_I2C_Transaction_Write_2(FCL_BUFFER, 6, 2);

  FCL_BUFFER[0] = 0;
  FCL_BUFFER[1] = 0x10 | (FCL_X >> 4);

  FC_CAL_I2C_Transaction_Write_2(FCL_BUFFER, 6, 2);

  FCL_BUFFER[0] = 0;
  FCL_BUFFER[1] = FCL_X & 0x0f;

  FC_CAL_I2C_Transaction_Write_2(FCL_BUFFER, 6, 2);

  //Local variable definitions
  #undef FCLsz_BUFFER
}

/*=----------------------------------------------------------------------=*\
   Use :Allows the display to be switched on and off
       :
       :Parameters for macro ControlDisplay:
       :  Control : 0=Off, 1=On
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__ControlDisplay(MX_UINT8 FCL_CONTROL)
{

  if (FCL_CONTROL > 0)
  {  

    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xAF);

  } else {

    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xAE);

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Draws an arc either as an outline or as a filled object.
       :
       :Parameters for macro DrawArc:
       :  X : Center X coordinate
       :  Y : Center Y coordinate
       :  Radius : Radius, distance of edge from the centre coordinates
       :  StartAngle : Angle to start drawing, in degrees
       :  EndAngle : Angle to end drawing, in degrees
       :  Resolution : Number of lines to draw from the center to the outer edge, 0=Fill
       :  Transparent : Chooses the transparency - 0 = Arc contains background colour, 1 = Arc contains previous pixel data.
       :  Solid : Chooses to fill with colour - 0 = Arc transparency data, 1 = Arc contains foreground colour.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__DrawArc(MX_UINT16 FCL_X, MX_UINT16 FCL_Y, MX_UINT16 FCL_RADIUS, MX_FLOAT FCL_STARTANGLE, MX_FLOAT FCL_ENDANGLE, MX_UINT16 FCL_RESOLUTION, MX_UINT8 FCL_TRANSPARENT, MX_UINT8 FCL_SOLID)
{
  //Local variable definitions
  MX_SINT16 FCL_I;
  MX_SINT16 FCL_J;
  MX_SINT16 FCL_SX;
  MX_SINT16 FCL_SY;
  MX_FLOAT FCL_ANGLESTEP;
  MX_FLOAT FCL_ANGLE;
  MX_SINT16 FCL_OX = (-32768);
  MX_SINT16 FCL_OY = (-32768);


  if (FCL_RESOLUTION == 0)
  {  

    FCL_RESOLUTION = (FCL_RADIUS * 6) / 2;

  // } else {

  }

  FCL_STARTANGLE = flt_mul(FCL_STARTANGLE, 0.017453);
  FCL_ENDANGLE = flt_mul(FCL_ENDANGLE, 0.017453);
  FCL_ANGLESTEP = flt_div((flt_sub(FCL_ENDANGLE, FCL_STARTANGLE)), flt_fromi(FCL_RESOLUTION));

  for (FCL_I=0; (FCL_I)<(FCL_RESOLUTION); (FCL_I)++)
  {
    if ((FCL_TRANSPARENT == 0) || (FCL_SOLID == 1))
    {    

      for (FCL_J=0; (FCL_J)<(FCL_RADIUS + 1); (FCL_J)++)
      {
        FCL_ANGLE = flt_add(FCL_STARTANGLE, (flt_mul(flt_fromi(FCL_I), FCL_ANGLESTEP)));

        FCL_SX = flt_round(flt_mul(flt_fromi(FCL_J), cos(FCL_ANGLE)));
        FCL_SY = flt_round(flt_mul(flt_fromi(FCL_J), sin(FCL_ANGLE)));

        FCL_SX = FCL_SX + FCL_X;
        FCL_SY = FCL_SY + FCL_Y;

        if (FCL_J == FCL_RADIUS)
        {        

          FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_SX, FCL_SY);

          FCL_OX = FCL_SX;
          FCL_OY = FCL_SY;

        } else {

          if (FCL_SOLID == 1)
          {          

            FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_SX, FCL_SY);

          } else {

            if ((FCL_OY == FCL_SY) && (FCL_OX == FCL_SX))
            {            

            } else {

              FCD_0cc51_gLCD_SSD1306_i2c1__BPlot(FCL_SX, FCL_SY);

            }

          }

        }

      }

    } else {

      FCL_J = FCL_RADIUS;

      FCL_ANGLE = flt_add(FCL_STARTANGLE, (flt_mul(flt_fromi(FCL_I), FCL_ANGLESTEP)));

      FCL_SX = flt_round(flt_mul(flt_fromi(FCL_J), cos(FCL_ANGLE)));
      FCL_SY = flt_round(flt_mul(flt_fromi(FCL_J), sin(FCL_ANGLE)));

      FCL_SX = FCL_SX + FCL_X;
      FCL_SY = FCL_SY + FCL_Y;

      FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_SX, FCL_SY);

    }

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro SendData:
       :  Byte : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__SendData(MX_UINT8 FCL_BYTE)
{
  //Local variable definitions
  #define FCLsz_BUFFER 2
  MX_UINT8 FCL_BUFFER[FCLsz_BUFFER];


  FCL_BUFFER[0] = 0x40;
  FCL_BUFFER[1] = FCL_BYTE;

  FC_CAL_I2C_Transaction_Write_2(FCL_BUFFER, 2, 2);

  //Local variable definitions
  #undef FCLsz_BUFFER
}

/*=----------------------------------------------------------------------=*\
   Use :Controls the way data is printed out on the display allowing multiple different viewing orientations. Default is 0.
       :
       :Parameters for macro SetDisplayOrientation:
       :  Orientation : 0=Default, 1=90??CW, 2=180??CW, 3=270??CW
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__SetDisplayOrientation(MX_UINT8 FCL_ORIENTATION)
{

  FCV_0cc51_gLCD_SSD1306_i2c1__ORIENTATION = FCL_ORIENTATION;

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a pixel with the current background colour at pixel location X, Y.
       :
       :Parameters for macro BPlot:
       :  X1 : MX_UINT16
       :  Y1 : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__BPlot(MX_UINT16 FCL_X1, MX_UINT16 FCL_Y1)
{
  //Local variable definitions
  MX_UINT16 FCL_TEMP;
  MX_UINT8 FCL_MOD_Y;
  MX_UINT8 FCL_DATA = (0x0);
  MX_UINT8 FCL_OLD_DATA;
  MX_UINT8 FCL_PAGE;


  switch (FCV_0cc51_gLCD_SSD1306_i2c1__ORIENTATION)
  {
    case 1:
    {

      FCL_TEMP = 128 - (FCL_Y1 + 1);
      FCL_Y1 = FCL_X1;
      FCL_X1 = FCL_TEMP;

      break;
    }
    case 2:
    {

      FCL_X1 = 128 - (FCL_X1 + 1);
      FCL_Y1 = 64 - (FCL_Y1 + 1);

      break;
    }
    case 3:
    {

      FCL_TEMP = FCL_Y1;
      FCL_Y1 = 64 - (FCL_X1 + 1);
      FCL_X1 = FCL_TEMP;

      break;
    }
    // default:

  }

  FCL_MOD_Y = FCL_Y1 & 0x07;
  FCL_PAGE = FCL_Y1 >> 3;

  if (FCL_PAGE == 0)
  {  

    if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
    {    

      FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] | (0x01 << FCL_MOD_Y);

    } else {

      FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1] & (~(0x01 << FCL_MOD_Y));

    }

    #if (0)
    //Code has been optimised out by the pre-processor
    #else
      FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_X1]);

    #endif

  // } else {

  }

  #if (1) // 64 > 8
    if (FCL_PAGE == 1)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 16
    if (FCL_PAGE == 2)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 24
    if (FCL_PAGE == 3)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 32
    if (FCL_PAGE == 4)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 40
    if (FCL_PAGE == 5)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 48
    if (FCL_PAGE == 6)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (1) // 64 > 56
    if (FCL_PAGE == 7)
    {    

      if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
      {      

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] | (0x01 << FCL_MOD_Y);

      } else {

        FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] = FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1] & (~(0x01 << FCL_MOD_Y));

      }

      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_X1]);

      #endif

    // } else {

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :This macro send all the RAM pixels to the display.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__RefreshDisplay()
{
  //Local variable definitions
  MX_UINT8 FCL_Y = (0x0);
  MX_UINT8 FCL_COLUMN = (0x0);
  MX_UINT8 FCL_DATA;
  MX_UINT8 FCL_PAGE;


  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :This macro prints a string of characters to the Graphical LCD.
       :
       :Parameters for macro Print:
       :  Str[20] : String of characters to send to the display.
       :  X1 : X pixel coordinate to set the output string position.
       :  Y1 : Y pixel coordinate to set the output string position.
       :  Font : Selects which Font to use Range: 0 to Font Count
       :  Transparent : Specifies if the background of the text is drawn - 0 = Background colour is drawn, 1 = Background colour not drawn.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__Print(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT16 FCL_X1, MX_UINT16 FCL_Y1, MX_UINT8 FCL_FONT, MX_UINT8 FCL_TRANSPARENT)
{
  //Local variable definitions
  MX_UINT8 FCL_BYTESPERCOLUMN;
  MX_UINT8 FCL_CHARACTERCOLUMNS;
  MX_UINT8 FCL_CHARACTERHEIGHT;
  MX_UINT8 FCL_COLUMNINDEX;
  MX_UINT8 FCL_COLUMNSUBINDEX;
  MX_UINT8 FCL_PIXELDATA;
  MX_UINT8 FCL_SPACECOLUMNS;
  MX_UINT8 FCL_IDX;
  MX_UINT8 FCL_LEN_STR;
  MX_UINT8 FCL_YCOUNT;
  MX_UINT8 FCL_YPIX;
  MX_UINT16 FCL_XCOUNT;
  MX_UINT8 FCL_H;


  FCL_XCOUNT = 0;
  FCL_IDX = 0;

  FCL_LEN_STR = FCI_GETLENGTH(FCL_STR, FCLsz_STR);

  FCL_SPACECOLUMNS = FCD_0ba71_Base_GLCD__ReadFontStat(FCL_FONT, 0);

  FCL_CHARACTERHEIGHT = FCD_0ba71_Base_GLCD__ReadFontStat(FCL_FONT, 1);

  FCL_BYTESPERCOLUMN = ((FCL_CHARACTERHEIGHT - 1) >> 3) + 1;

  while (FCL_IDX < FCL_LEN_STR)
  {
    FCL_CHARACTERCOLUMNS = FCD_0ba71_Base_GLCD__ReadFontWidth(FCL_FONT, FCL_STR[FCL_IDX]);

    FCL_COLUMNSUBINDEX = 0;

    while (FCL_COLUMNSUBINDEX < FCL_BYTESPERCOLUMN)
    {
      if (FCL_COLUMNSUBINDEX)
      {      

        FCL_XCOUNT = FCL_XCOUNT - ((FCL_CHARACTERCOLUMNS + FCL_SPACECOLUMNS) * FCV_0cc51_gLCD_SSD1306_i2c1__SCALEX);

      // } else {

      }

      FCL_COLUMNINDEX = 0;

      while (FCL_COLUMNINDEX < (FCL_CHARACTERCOLUMNS + FCL_SPACECOLUMNS))
      {
        for (FCLV_LOOP8=0; (FCLV_LOOP8)<(FCV_0cc51_gLCD_SSD1306_i2c1__SCALEX); (FCLV_LOOP8)++)
        {
          if (FCL_COLUMNINDEX < FCL_CHARACTERCOLUMNS)
          {          

            FCL_PIXELDATA = FCD_0ba71_Base_GLCD__ReadFontByte(FCL_FONT, FCL_STR[FCL_IDX], FCL_COLUMNINDEX + (FCL_CHARACTERCOLUMNS * FCL_COLUMNSUBINDEX));

          } else {

            FCL_PIXELDATA = 0;

          }

          FCL_YCOUNT = (FCL_COLUMNSUBINDEX * 8) * FCV_0cc51_gLCD_SSD1306_i2c1__SCALEY;

          if (((FCL_COLUMNSUBINDEX + 1) * 8) <= FCL_CHARACTERHEIGHT)
          {          

            FCL_YPIX = 0;

          } else {

            FCL_YPIX = ((FCL_COLUMNSUBINDEX + 1) * 8) - FCL_CHARACTERHEIGHT;

          }

          while (FCL_YPIX < 8)
          {
            for (FCLV_LOOP9=0; (FCLV_LOOP9)<(FCV_0cc51_gLCD_SSD1306_i2c1__SCALEY); (FCLV_LOOP9)++)
            {
              if (FCL_PIXELDATA & (0x01 << FCL_YPIX))
              {              

                FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X1 + FCL_XCOUNT, FCL_Y1 + FCL_YCOUNT);

              } else {

                if (FCL_TRANSPARENT == 0)
                {                

                  FCD_0cc51_gLCD_SSD1306_i2c1__BPlot(FCL_X1 + FCL_XCOUNT, FCL_Y1 + FCL_YCOUNT);

                // } else {

                }

              }

              FCL_YCOUNT = FCL_YCOUNT + 1;

            }

            FCL_YPIX = FCL_YPIX + 1;

          }

          FCL_XCOUNT = FCL_XCOUNT + 1;

        }

        FCL_COLUMNINDEX = FCL_COLUMNINDEX + 1;

      }

      FCL_COLUMNSUBINDEX = FCL_COLUMNSUBINDEX + 1;

    }

    FCL_IDX = FCL_IDX + 1;

  }

  #if (0) // 0 == 1
  //Code has been optimised out by the pre-processor
  #else
    // ::Panel.Graphics.DrawEnd()

  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :Sets the display contrast from 0 to 255.
       :
       :Parameters for macro ControlContrast:
       :  Contrast : Range 0 - 255, Default 207
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__ControlContrast(MX_UINT8 FCL_CONTRAST)
{

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x81);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(FCL_CONTRAST);

}

/*=----------------------------------------------------------------------=*\
   Use :This macro clears the display of any previous output by overwriting the entire display with the background colour.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__ClearDisplay()
{
  //Local variable definitions
  MX_UINT8 FCL_Y = (0x0);
  MX_UINT8 FCL_COLUMN = (0x0);
  MX_UINT8 FCL_DATA;
  MX_UINT8 FCL_PAGE;


  if (FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR)
  {  

    FCL_DATA = 255;

  } else {

    FCL_DATA = 0;

  }

  while (FCL_Y < 64)
  {
    FCL_COLUMN = 0;
    FCL_PAGE = FCL_Y >> 3;

    #if (0)
    //Code has been optimised out by the pre-processor
    #else
      FCD_0cc51_gLCD_SSD1306_i2c1__Goto_XY(0, FCL_Y);

    #endif

    while (FCL_COLUMN < 128)
    {
      #if (0)
      //Code has been optimised out by the pre-processor
      #else
        FCD_0cc51_gLCD_SSD1306_i2c1__SendData(FCL_DATA);

      #endif

      switch (FCL_PAGE)
      {
        case 1:
        {

          #if (1) // 64 > 8
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM1[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        case 2:
        {

          #if (1) // 64 > 16
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM2[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        case 3:
        {

          #if (1) // 64 > 24
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM3[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        case 4:
        {

          #if (1) // 64 > 32
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM4[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        case 5:
        {

          #if (1) // 64 > 40
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM5[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        case 6:
        {

          #if (1) // 64 > 48
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM6[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        case 7:
        {

          #if (1) // 64 > 56
            FCV_0cc51_gLCD_SSD1306_i2c1__DRAM7[FCL_COLUMN] = FCL_DATA;

          // #else
          //Code has been optimised out by the pre-processor
          #endif

          break;
        }
        default:
        {
          FCV_0cc51_gLCD_SSD1306_i2c1__DRAM0[FCL_COLUMN] = FCL_DATA;

        }
      }

      FCL_COLUMN = FCL_COLUMN + 1;

    }

    FCL_Y = FCL_Y + 8;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Specifies the colour of the background by creating a mixture of red, green and blue.
       :
       :Parameters for macro SetBackgroundColour:
       :  PixelColour : 0=White, 1=Black
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__SetBackgroundColour(MX_UINT8 FCL_PIXELCOLOUR)
{

  if (FCL_PIXELCOLOUR)
  {  

    FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__WHITE;

  } else {

    FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__BLACK;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Draws a circle object on the display with the center of the circle at the location X,Y
       :
       :Parameters for macro DrawCircle:
       :  X : X Coordinate for the center of the circle
       :  Y : Y coordinate for the center of the circle
       :  Radius : Radius of the circle specified in pixels
       :  Transparent : 0=Fill inside circle using background colour / 1=Draw outer circle only
       :  Solid : 0=Use Transparent Setting / 1=Fill with foreground colour
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__DrawCircle(MX_UINT16 FCL_X, MX_UINT16 FCL_Y, MX_UINT16 FCL_RADIUS, MX_UINT8 FCL_TRANSPARENT, MX_UINT8 FCL_SOLID)
{
  //Local variable definitions
  MX_SINT16 FCL_D;
  MX_SINT16 FCL_CURX;
  MX_SINT16 FCL_CURY;
  MX_UINT32 FCL_BGCOL;
  MX_UINT32 FCL_FGCOL;
  MX_UINT8 FCL_REP = (0x0);


  if (FCL_SOLID == 1)
  {  

  FCC_DrawCircle_A:
    ;

    FCL_D = 3 - (FCL_RADIUS << 1);

    FCL_CURX = 0;
    FCL_CURY = FCL_RADIUS;

    while (FCL_CURX <= FCL_CURY)
    {
      if (FCL_CURY > 0)
      {      

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X - FCL_CURY, FCL_Y + FCL_CURX, FCL_X + FCL_CURY, FCL_Y + FCL_CURX);

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X - FCL_CURY, FCL_Y - FCL_CURX, FCL_X + FCL_CURY, FCL_Y - FCL_CURX);

      // } else {

      }

      if (FCL_CURX > 0)
      {      

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X - FCL_CURX, FCL_Y - FCL_CURY, FCL_X + FCL_CURX, FCL_Y - FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X - FCL_CURX, FCL_Y + FCL_CURY, FCL_X + FCL_CURX, FCL_Y + FCL_CURY);

      // } else {

      }

      if (FCL_D < 0)
      {      

        FCL_D = FCL_D + ((FCL_CURX << 2) + 6);

      } else {

        FCL_D = FCL_D + (((FCL_CURX - FCL_CURY) << 2) + 10);

        FCL_CURY = FCL_CURY - 1;

      }

      FCL_CURX = FCL_CURX + 1;

    }

  } else {

    if (FCL_TRANSPARENT == 1)
    {    

    FCC_DrawCircle_B:
      ;

      FCL_D = 3 - (FCL_RADIUS << 1);

      FCL_CURX = 0;
      FCL_CURY = FCL_RADIUS;

      while (FCL_CURX <= FCL_CURY)
      {
        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X + FCL_CURX, FCL_Y - FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X - FCL_CURX, FCL_Y - FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X + FCL_CURY, FCL_Y - FCL_CURX);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X - FCL_CURY, FCL_Y - FCL_CURX);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X + FCL_CURX, FCL_Y + FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X - FCL_CURX, FCL_Y + FCL_CURY);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X + FCL_CURY, FCL_Y + FCL_CURX);

        FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X - FCL_CURY, FCL_Y + FCL_CURX);

        if (FCL_D < 0)
        {        

          FCL_D = FCL_D + ((FCL_CURX << 2) + 6);

        } else {

          FCL_D = FCL_D + (((FCL_CURX - FCL_CURY) << 2) + 10);

          FCL_CURY = FCL_CURY - 1;

        }

        FCL_CURX = FCL_CURX + 1;

      }

    } else {

      FCL_FGCOL = FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR;
      FCL_BGCOL = FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR;

      FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCL_BGCOL;

      FCL_REP = 1;

      goto FCC_DrawCircle_A;

    }

  }

  if (FCL_REP == 1)
  {  

    FCL_REP = FCL_REP + 1;

    FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCL_FGCOL;

    goto FCC_DrawCircle_B;

  // } else {

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Draws a rectangle with rounded corners
       :
       :Parameters for macro DrawRoundedRectangle:
       :  X1 : MX_UINT16
       :  Y1 : MX_UINT16
       :  X2 : MX_UINT16
       :  Y2 : MX_UINT16
       :  Radius : MX_UINT16
       :  Transparent : Chooses the transparency of the box - 0 = Box contains background colour, 1 = Box contains previous pixel data.
       :  Solid : Chooses to fill the box with colour - 0 = Box contains transparency data, 1 = Box contains foreground colour.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__DrawRoundedRectangle(MX_UINT16 FCL_X1, MX_UINT16 FCL_Y1, MX_UINT16 FCL_X2, MX_UINT16 FCL_Y2, MX_UINT16 FCL_RADIUS, MX_UINT8 FCL_TRANSPARENT, MX_UINT8 FCL_SOLID)
{
  //Local variable definitions
  #define FCLsz_COLSAVE 3
  MX_UINT8 FCL_COLSAVE[FCLsz_COLSAVE];
  MX_SINT16 FCL_G;
  MX_SINT16 FCL_HEIGHT;
  MX_SINT16 FCL_OXX1 = (0);
  MX_SINT16 FCL_OXX2 = (0);
  MX_SINT16 FCL_R;
  MX_SINT16 FCL_WIDTH;
  MX_SINT16 FCL_XX1;
  MX_SINT16 FCL_XX2;
  MX_SINT16 FCL_Y;
  MX_UINT16 FCL_COLSAVE16;


  FCL_WIDTH = FCL_X2 - FCL_X1;
  FCL_HEIGHT = FCL_Y2 - FCL_Y1;

  FCL_Y = -FCL_RADIUS;

  if (FCL_SOLID)
  {  

    while (FCL_Y <= 0)
    {
      FCL_R = flt_round(float32_sqrt(flt_fromi(FCL_RADIUS * FCL_RADIUS - FCL_Y * FCL_Y)));
      FCL_XX1 = FCL_X1 + FCL_R;
      FCL_XX2 = FCL_X1 - FCL_R;
      FCL_XX1 = FCL_XX1 + FCL_WIDTH - FCL_RADIUS;
      FCL_XX2 = FCL_XX2 + FCL_RADIUS;
      FCL_G = FCL_Y1 - FCL_Y + FCL_HEIGHT;

      FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX2, FCL_G - FCL_RADIUS, FCL_XX1, FCL_G - FCL_RADIUS);

      FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX2, FCL_Y1 + FCL_Y + FCL_RADIUS, FCL_XX1, FCL_Y1 + FCL_Y + FCL_RADIUS);

      FCL_Y = FCL_Y + 1;

    }

    if ((FCL_RADIUS >> 1) < (FCL_Y2 - FCL_Y1))
    {    

      FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(FCL_X1, FCL_Y1 + FCL_RADIUS, FCL_X2, FCL_Y2 - FCL_RADIUS, FCL_TRANSPARENT, FCL_SOLID);

    // } else {

    }

  } else {

    while (FCL_Y <= 0)
    {
      FCL_R = flt_round(float32_sqrt(flt_fromi((FCL_RADIUS * FCL_RADIUS) - (FCL_Y * FCL_Y))));
      FCL_XX1 = FCL_X1 + FCL_R;
      FCL_XX2 = FCL_X1 - FCL_R;
      FCL_XX1 = FCL_XX1 + FCL_WIDTH - FCL_RADIUS;
      FCL_XX2 = FCL_XX2 + FCL_RADIUS;
      FCL_G = FCL_Y1 - FCL_Y + FCL_HEIGHT;

      if (FCL_Y == -FCL_RADIUS)
      {      

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX2, FCL_G - FCL_RADIUS, FCL_XX1, FCL_G - FCL_RADIUS);

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX2, FCL_Y1 + FCL_Y + FCL_RADIUS, FCL_XX1, FCL_Y1 + FCL_Y + FCL_RADIUS);

        FCL_OXX2 = FCL_XX2;
        FCL_OXX1 = FCL_XX1;

      } else {

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX2, FCL_G - FCL_RADIUS, FCL_OXX2, FCL_G - FCL_RADIUS);

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX1, FCL_G - FCL_RADIUS, FCL_OXX1, FCL_G - FCL_RADIUS);

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX2, FCL_Y1 + FCL_Y + FCL_RADIUS, FCL_OXX2, FCL_Y1 + FCL_Y + FCL_RADIUS);

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_XX1, FCL_Y1 + FCL_Y + FCL_RADIUS, FCL_OXX1, FCL_Y1 + FCL_Y + FCL_RADIUS);

        if (FCL_TRANSPARENT == 0)
        {        

          FCL_COLSAVE16 = FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR;

          FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR;

          FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_OXX2 + 1, FCL_G - FCL_RADIUS, FCL_OXX1 - 1, FCL_G - FCL_RADIUS);

          FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_OXX2 + 1, FCL_Y1 + FCL_Y + FCL_RADIUS, FCL_OXX1 - 1, FCL_Y1 + FCL_Y + FCL_RADIUS);

          FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCL_COLSAVE16;

        // } else {

        }

        FCL_OXX2 = FCL_XX2;
        FCL_OXX1 = FCL_XX1;

      }

      FCL_Y = FCL_Y + 1;

    }

    if ((FCL_RADIUS >> 1) < (FCL_Y2 - FCL_Y1))
    {    

      FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X1, FCL_Y1 + FCL_RADIUS, FCL_X1, FCL_Y2 - FCL_RADIUS);

      FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X2, FCL_Y1 + FCL_RADIUS, FCL_X2, FCL_Y2 - FCL_RADIUS);

    // } else {

    }

    if (FCL_TRANSPARENT == 0)
    {    

      FCL_COLSAVE16 = FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR;

      FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR;

      if ((FCL_RADIUS >> 1) < (FCL_Y2 - FCL_Y1))
      {      

        FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(FCL_X1 + 1, FCL_Y1 + FCL_RADIUS + 1, FCL_X2 - 1, FCL_Y2 - FCL_RADIUS - 1, FCL_TRANSPARENT, FCL_SOLID);

      // } else {

      }

      FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCL_COLSAVE16;

    // } else {

    }

  }

  //Local variable definitions
  #undef FCLsz_COLSAVE
}

/*=----------------------------------------------------------------------=*\
   Use :Specifies the colour of the foreground by creating a mixture of red, green and blue.
       :
       :Parameters for macro SetForegroundColour:
       :  PixelColour : 0=White, 1=Black
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__SetForegroundColour(MX_UINT8 FCL_PIXELCOLOUR)
{

  if (FCL_PIXELCOLOUR)
  {  

    FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__WHITE;

  } else {

    FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__BLACK;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Draws a rectangle with the current foreground colour from pixel loaction X1, Y1 to pixel location X2, Y2
       :
       :Parameters for macro DrawRectangle:
       :  X1 : MX_UINT16
       :  Y1 : MX_UINT16
       :  X2 : MX_UINT16
       :  Y2 : MX_UINT16
       :  Transparent : Chooses the transparency of the box - 0 = Box contains background colour, 1 = Box contains previous pixel data.
       :  Solid : Chooses to fill the box with colour - 0 = Box contains transparency data, 1 = Box contains foreground colour.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(MX_UINT16 FCL_X1, MX_UINT16 FCL_Y1, MX_UINT16 FCL_X2, MX_UINT16 FCL_Y2, MX_UINT8 FCL_TRANSPARENT, MX_UINT8 FCL_SOLID)
{
  //Local variable definitions
  MX_UINT16 FCL_XMIN;
  MX_UINT16 FCL_XMAX;
  MX_UINT16 FCL_YMIN;
  MX_UINT16 FCL_YMAX;


  FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X1, FCL_Y1, FCL_X2, FCL_Y1);

  FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X2, FCL_Y1, FCL_X2, FCL_Y2);

  FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X1, FCL_Y2, FCL_X2, FCL_Y2);

  FCD_0cc51_gLCD_SSD1306_i2c1__DrawLine(FCL_X1, FCL_Y1, FCL_X1, FCL_Y2);

  if (FCL_TRANSPARENT == 0)
  {  

    if (FCL_X1 > FCL_X2)
    {    

      FCL_XMAX = FCL_X1;
      FCL_XMIN = FCL_X2 + 1;

    } else {

      FCL_XMAX = FCL_X2;
      FCL_XMIN = FCL_X1 + 1;

    }

    if (FCL_Y1 > FCL_Y2)
    {    

      FCL_YMAX = FCL_Y1;
      FCL_YMIN = FCL_Y2 + 1;

    } else {

      FCL_YMAX = FCL_Y2;
      FCL_YMIN = FCL_Y1 + 1;

    }

    FCL_Y1 = FCL_YMIN;

    while (FCL_Y1 < FCL_YMAX)
    {
      FCL_X1 = FCL_XMIN;

      while (FCL_X1 < FCL_XMAX)
      {
        if (FCL_SOLID)
        {        

          FCD_0cc51_gLCD_SSD1306_i2c1__Plot(FCL_X1, FCL_Y1);

        } else {

          FCD_0cc51_gLCD_SSD1306_i2c1__BPlot(FCL_X1, FCL_Y1);

        }

        FCL_X1 = FCL_X1 + 1;

      }

      FCL_Y1 = FCL_Y1 + 1;

    }

  // } else {

  }

}

/*=----------------------------------------------------------------------=*\
   Use :The Init macro must be called once to initialise the Graphical LCD display before any other Graphical LCD component macros are called.
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__Initialise()
{
  //Local variable definitions
  MX_UINT8 FCL_RED;
  MX_UINT8 FCL_GREEN;
  MX_UINT8 FCL_BLUE;


  FC_CAL_I2C_Transaction_Init_2(120 >> 1);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xAE);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x00);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x10);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x40);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x81);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xCF);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA1);

  #if (1)
    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xC8);

  #else
  //Code has been optimised out by the pre-processor
  #endif

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA6);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA8);

  #if (1) // 64 > 32
    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x3F);

  #else
  //Code has been optimised out by the pre-processor
  #endif

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xD3);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x00);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xD5);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x80);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xD9);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xF1);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xDA);

  #if (0) // 0 == 1
  //Code has been optimised out by the pre-processor
  #else
    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x02);

  #endif

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xDB);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x40);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x20);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x02);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x8D);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0x14);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA4);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA6);

  FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xAF);

  #if (1) // 16777215 > 0
    FCV_0cc51_gLCD_SSD1306_i2c1__FOREGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__WHITE;

  #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (0) // 0 > 0
  //Code has been optimised out by the pre-processor
  #else
    FCV_0cc51_gLCD_SSD1306_i2c1__BACKGROUND_COL_VAR = FCV_0cc51_gLCD_SSD1306_i2c1__BLACK;

  #endif

  FCD_0cc51_gLCD_SSD1306_i2c1__ClearDisplay();

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCD_0cc51_gLCD_SSD1306_i2c1__InvertDisplay()
{

  if (FCV_0cc51_gLCD_SSD1306_i2c1__INVERTED == 0)
  {  

    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA7);

    FCV_0cc51_gLCD_SSD1306_i2c1__INVERTED = 1;

  } else {

    FCD_0cc51_gLCD_SSD1306_i2c1__SendCommand(0xA6);

    FCV_0cc51_gLCD_SSD1306_i2c1__INVERTED = 0;

  }

}


/*========================================================================*\
   Use :cal_i2c
       :GUID: ed3a5141-43bb-43e0-86b0-2243fd1147ca
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\cal_i2c.fcpx
       :Version: 15.0 (0x200028)
       :Timestamp: 19\12\2024
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_07da1_cal_i2c__TRANSADDR;
MX_GLOBAL MX_UINT32 FCV_07da1_cal_i2c__CONSOLELOG;

/*=----------------------------------------------------------------------=*\
   Use :Send text to the console
       :
       :Parameters for macro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
       :  Colour : MX_UINT8
       :  AppendTimestamp : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_07da1_cal_i2c__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR, MX_UINT8 FCL_APPENDTIMESTAMP)
{
  //Local variable definitions
  #define FCLsz_TSTR 20
  MX_CHAR FCL_TSTR[FCLsz_TSTR];


  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  //Local variable definitions
  #undef FCLsz_TSTR
}


/*========================================================================*\
   Use :LED_RED_A0
       :GUID: 44f82374-a417-40d5-bd42-23a177a390d2
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\LED_Mono_2dgi.fcpx
       :Version: 17.0 (0x100028)
       :Timestamp: 06\03\2024
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCD_0e9e1_LED_RED_A0__TurnOn()
{

  #if (1) // 0 == 0
    SET_PORT_PIN(A, 0, 1);

  #else
  //Code has been optimised out by the pre-processor
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :Sets the state of the LED, accounting for the polarity.
       :
       :Parameters for macro SetState:
       :  State : 1=On, 0=Off
\*=----------------------------------------------------------------------=*/
void FCD_0e9e1_LED_RED_A0__SetState(MX_BOOL FCL_STATE)
{

  if (FCL_STATE)
  {  

    #if (1) // 0 == 0
      SET_PORT_PIN(A, 0, 1);

    #else
    //Code has been optimised out by the pre-processor
    #endif

  } else {

    #if (1) // 0 == 0
      SET_PORT_PIN(A, 0, 1 - 1);

    #else
    //Code has been optimised out by the pre-processor
    #endif

  }

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCD_0e9e1_LED_RED_A0__TurnOff()
{

  #if (1) // 0 == 0
    SET_PORT_PIN(A, 0, 1 - 1);

  #else
  //Code has been optimised out by the pre-processor
  #endif

}


/*========================================================================*\
   Use :TypeConversionsFree1
       :GUID: 
       :Location: 
       :Version:  (0x0)
       :Timestamp: 
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro SetInt:
       :  Index : Range: 0-1
       :  Value : Range: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_02573_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
       :
       :Parameters for macro SetLong:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02573_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE)
{

  MX_Conv_Var.AsLong = FCL_VALUE;

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit FLOAT value
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02573_TypeConversionsFree1__GetFloat()
{
  //Local variable definitions
  MX_FLOAT FCR_RETVAL;


  FCR_RETVAL = MX_Conv_Var.AsFloat;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02573_TypeConversionsFree1__GetLong()
{
  //Local variable definitions
  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
       :
       :Parameters for macro GetInt:
       :  Index : Range: 0-1
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02573_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  if (FCL_INDEX < 2)
  {  

    FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

  } else {

    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
       :
       :Parameters for macro SetByte:
       :  Index : Range: 0-3
       :  Value : Range: 0-255
\*=----------------------------------------------------------------------=*/
void FCD_02573_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
       :
       :Parameters for macro GetByte:
       :  Index : Range: 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02573_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX < 4)
  {  

    FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

  } else {

    FCR_RETVAL = 0;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameters for macro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02573_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE)
{

  MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :TypeConversionsFree
       :GUID: 
       :Location: 
       :Version:  (0x0)
       :Timestamp: 
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro SetInt:
       :  Index : Range: 0-1
       :  Value : Range: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree__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
       :
       :Parameters for macro SetLong:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree__SetLong(MX_UINT32 FCL_VALUE)
{

  MX_Conv_Var.AsLong = FCL_VALUE;

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit FLOAT value
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02572_TypeConversionsFree__GetFloat()
{
  //Local variable definitions
  MX_FLOAT FCR_RETVAL;


  FCR_RETVAL = MX_Conv_Var.AsFloat;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02572_TypeConversionsFree__GetLong()
{
  //Local variable definitions
  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
       :
       :Parameters for macro GetInt:
       :  Index : Range: 0-1
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02572_TypeConversionsFree__GetInt(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  if (FCL_INDEX < 2)
  {  

    FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

  } else {

    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
       :
       :Parameters for macro SetByte:
       :  Index : Range: 0-3
       :  Value : Range: 0-255
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree__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
       :
       :Parameters for macro GetByte:
       :  Index : Range: 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02572_TypeConversionsFree__GetByte(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX < 4)
  {  

    FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

  } else {

    FCR_RETVAL = 0;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameters for macro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree__SetFloat(MX_FLOAT FCL_VALUE)
{

  MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :TypeConversionsFree1
       :GUID: 
       :Location: 
       :Version:  (0x0)
       :Timestamp: 
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro 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
       :
       :Parameters for macro 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
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02571_TypeConversionsFree1__GetFloat()
{
  //Local variable definitions
  MX_FLOAT FCR_RETVAL;


  FCR_RETVAL = MX_Conv_Var.AsFloat;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02571_TypeConversionsFree1__GetLong()
{
  //Local variable definitions
  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
       :
       :Parameters for macro GetInt:
       :  Index : Range: 0-1
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02571_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  if (FCL_INDEX < 2)
  {  

    FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

  } else {

    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
       :
       :Parameters for macro 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
       :
       :Parameters for macro GetByte:
       :  Index : Range: 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02571_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX < 4)
  {  

    FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

  } else {

    FCR_RETVAL = 0;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameters for macro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE)
{

  MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :cal_uart
       :GUID: 91b64b1d-b8b2-40f1-b073-e953a91fa234
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\cal_uart.fcpx
       :Version: 19.0 (0x200328)
       :Timestamp: 06\05\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_BOOL FCV_05481_cal_uart__RS485_STATE;
MX_GLOBAL MX_UINT32 FCV_05481_cal_uart__CONSOLE;

/*=----------------------------------------------------------------------=*\
   Use :Allows direct control over the TX and RTS pins
       :Also allows for reading of the state of the RX and CTS pins.
       :Only available when the UART is uninitialised.
       :
       :Parameters for macro ControlPin:
       :  Pin : 0=TX, 1=RX, 2=RTS, 3=CTS
       :  State : MX_UINT8
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__ControlPin(MX_UINT8 FCL_PIN, MX_UINT8 FCL_STATE)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  switch (FCL_PIN)
  {
    case 1:
    {

      #if (0)
      //Code has been optimised out by the pre-processor
      // #else
      #endif

      break;
    }
    case 2:
    {

      #if (0)
      //Code has been optimised out by the pre-processor
      // #else
      #endif

      break;
    }
    case 3:
    {

      #if (0)
      //Code has been optimised out by the pre-processor
      // #else
      #endif

      break;
    }
    default:
    {
      #if (1)
        if (FCL_STATE)
        {        

          SET_PORT_PIN(C, 6, 1);

        } else {

          SET_PORT_PIN(C, 6, 0);

        }

      // #else
      //Code has been optimised out by the pre-processor
      #endif

    }
  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits a string of bytes via the UART peripheral
       :
       :Parameters for macro SendString:
       :  Data[200] : Data String to transmit
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
  //Local variable definitions
  MX_UINT16 FCL_IDX;
  MX_UINT16 FCL_LEN;


  FCL_LEN = FCI_GETLENGTH(FCL_DATA, FCLsz_DATA);
  FCL_IDX = 0;

  while (FCL_IDX < FCL_LEN)
  {
    FC_CAL_UART_Send_1(FCL_DATA[FCL_IDX]);

    FCL_IDX = FCL_IDX + 1;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_TextConsole:
       :  Str[20] : MX_CHAR (by-ref)
       :  colour : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR)
{

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :A simple macro to allow us to test the value of a single property during runtime.
       :
       :Parameters for macro TestProperty:
       :  Property : 0=UseTX, 1=UseRX, 2=UseFlowControl
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__TestProperty(MX_UINT8 FCL_PROPERTY)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_PROPERTY == 0)
  {  

    #if (1)
      FCR_RETVAL = 1;

    // #else
    //Code has been optimised out by the pre-processor
    #endif

  // } else {

  }

  if (FCL_PROPERTY == 1)
  {  

    #if (0)
    //Code has been optimised out by the pre-processor
    // #else
    #endif

  // } else {

  }

  if (FCL_PROPERTY == 2)
  {  

    #if (0)
    //Code has been optimised out by the pre-processor
    // #else
    #endif

  // } else {

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits a numeric value as an ASCII string
       :
       :Parameters for macro SendNumber:
       :  Number : Numeric value to send
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__SendNumber(MX_SINT32 FCL_NUMBER)
{
  //Local variable definitions
  #define FCLsz_NUMSTR 20
  MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


  FCI_TOSTRING(FCL_NUMBER, FCL_NUMSTR,20);

  FCD_05481_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);

  //Local variable definitions
  #undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_SimShowWaveform:
       :  TXRX : MX_UINT8
       :  Data : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__Prv_SimShowWaveform(MX_UINT8 FCL_TXRX, MX_UINT16 FCL_DATA)
{

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of bytes via the UART peripheral
       :
       :Parameters for macro SendByteArray:
       :  Data[32768] : Data to transmit
       :  NumBytes : Number of bytes to send from the array
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT16 FCL_NUMBYTES)
{
  //Local variable definitions
  MX_UINT16 FCL_IDX;


  FCL_IDX = 0;

  while (FCL_IDX < FCL_NUMBYTES)
  {
    FC_CAL_UART_Send_1(FCL_DATA[FCL_IDX]);

    FCL_IDX = FCL_IDX + 1;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveByteArray:
       :  Data[32768] : MX_UINT8
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT16 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT16 FCL_IDX;
  MX_UINT16 FCL_IN;
  MX_UINT16 FCL_TOUT;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCL_TOUT = 255;

  #endif

  FCR_RETVAL = 0;

  while (FCR_RETVAL < FCL_NUMBYTES)
  {
    FCL_IN = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_IN < FCL_TOUT)
    {    

      FCL_DATA[FCR_RETVAL] = FCL_IN;

      FCR_RETVAL = FCR_RETVAL + 1;

    } else {

      goto FCC_ReceiveByteArray_A;

    }

  }

FCC_ReceiveByteArray_A:
  ;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a string of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveString:
       :  StringData[20] : MX_CHAR (by-ref)
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__ReceiveString(MX_CHAR *FCL_STRINGDATA, MX_UINT16 FCLsz_STRINGDATA, MX_UINT16 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT16 FCL_IDX;
  MX_UINT16 FCL_IN;
  MX_UINT16 FCL_TOUT;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCL_TOUT = 255;

  #endif

  FCR_RETVAL = 0;

  while (FCR_RETVAL < FCL_NUMBYTES)
  {
    FCL_IN = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_IN < FCL_TOUT)
    {    

      FCL_STRINGDATA[FCR_RETVAL] = FCL_IN;

      FCR_RETVAL = FCR_RETVAL + 1;

    } else {

      goto FCC_ReceiveString_A;

    }

  }

FCC_ReceiveString_A:
  ;

  FCL_STRINGDATA[FCR_RETVAL] = 0;

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :UART1
       :GUID: c73616d1-7ad0-45d9-aada-69ccfa4c5efc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\RS232.fcpx
       :Version: 9.0 (0x300028)
       :Timestamp: 22\02\2024
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sends out a string of bytes from the UART interface.
       :
       :Parameters for macro SendString:
       :  Data[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
  //Local variable definitions
  MX_UINT16 FCL_LEN;
  MX_UINT16 FCL_IDX;


  FCD_05481_cal_uart__SendString(FCL_DATA, FCLsz_DATA);

  // LibraryComponent1::FlashTx()

}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of 16-bit INT/UINT values and returns the number of values received.
       :
       :Parameters for macro ReceiveINTArray:
       :  Data[1000] : Array to store the incoming data
       :  NumValues : Maximum number of values to try and receive
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_047b1_UART1__ReceiveINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT16 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT16 FCL_BYTE;
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  while (FCR_RETVAL < FCL_NUMVALUES)
  {
    if (FCL_MSBFIRST)
    {    

      FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

      if (FCL_BYTE > 255)
      {      

        goto FCC_ReceiveINTArray_A;

      // } else {

      }

      FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

      FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

      if (FCL_BYTE > 255)
      {      

        goto FCC_ReceiveINTArray_A;

      // } else {

      }

      FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

    } else {

      FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

      if (FCL_BYTE > 255)
      {      

        goto FCC_ReceiveINTArray_A;

      // } else {

      }

      FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

      FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

      if (FCL_BYTE > 255)
      {      

        goto FCC_ReceiveINTArray_A;

      // } else {

      }

      FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

    }

    // LibraryComponent1::FlashRx()

    FCL_DATA[FCR_RETVAL] = FCD_02573_TypeConversionsFree1__GetInt(0);

    FCR_RETVAL = FCR_RETVAL + 1;

  }

FCC_ReceiveINTArray_A:
  ;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none numeric char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveNumber:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :
       :Returns : MX_SINT32
\*=----------------------------------------------------------------------=*/
MX_SINT32 FCD_047b1_UART1__ReceiveNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA)
{
  //Local variable definitions
  MX_BOOL FCL_FIRST = (1);
  MX_BOOL FCL_DONE = (0);
  MX_UINT16 FCL_CHAR;
  MX_BOOL FCL_BNEG = (0);
  MX_SINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  while (FCL_DONE == 0)
  {
    FCL_CHAR = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_CHAR >= 255)
    {    

      FCL_DONE = 1;

    } else {

      // LibraryComponent1::FlashRx()

      if (FCL_FIRST)
      {      

        if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || FCL_CHAR == '-')
        {        

          FCL_FIRST = 0;

          if (FCL_CHAR == '-')
          {          

            FCL_BNEG = 1;

          } else {

            FCR_RETVAL = FCR_RETVAL * 10;
            FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

          }

        } else {

          if (FCL_IGNOREDATA)
          {          

          } else {

            FCL_DONE = 1;

          }

        }

      } else {

        if (FCL_CHAR >= '0' && FCL_CHAR <= '9')
        {        

          FCR_RETVAL = FCR_RETVAL * 10;
          FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

        } else {

          FCL_DONE = 1;

        }

      }

    }

  }

  if (FCL_BNEG)
  {  

    FCR_RETVAL = 0 - FCR_RETVAL;

  // } else {

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 16-bit binary value split across two bytes.
       :
       :Parameters for macro SendBinary16Bit:
       :  Value : MX_UINT16
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendBinary16Bit(MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
  //Local variable definitions
  MX_UINT8 FCL_BYTE;


  FCD_02573_TypeConversionsFree1__SetInt(0, FCL_VALUE);

  if (FCL_MSBFIRST)
  {  

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

    FC_CAL_UART_Send_1(FCL_BYTE);

  } else {

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

    FC_CAL_UART_Send_1(FCL_BYTE);

  }

  // LibraryComponent1::FlashTx()

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of 16-bit INT/UINT values via the UART peripheral
       :
       :Parameters for macro SendINTArray:
       :  Data[1000] : Data to transmit
       :  NumValues : Number of 16-bit values to send from the array
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT16 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST)
{
  //Local variable definitions
  MX_UINT8 FCL_IDX = (0x0);
  MX_UINT8 FCL_BYTE;


  while (FCL_IDX < FCL_NUMVALUES)
  {
    FCD_02573_TypeConversionsFree1__SetInt(0, FCL_DATA[FCL_IDX]);

    if (FCL_MSBFIRST)
    {    

      FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

      FC_CAL_UART_Send_1(FCL_BYTE);

      FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

      FC_CAL_UART_Send_1(FCL_BYTE);

    } else {

      FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

      FC_CAL_UART_Send_1(FCL_BYTE);

      FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

      FC_CAL_UART_Send_1(FCL_BYTE);

    }

    // LibraryComponent1::FlashTx()

    FCL_IDX = FCL_IDX + 1;

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a number as an ASCII String from the UART interface.
       :
       :Parameters for macro SendNumber:
       :  Number : MX_SINT32
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendNumber(MX_SINT32 FCL_NUMBER)
{
  //Local variable definitions
  #define FCLsz_NUMSTR 20
  MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


  FCI_TOSTRING(FCL_NUMBER, FCL_NUMSTR,20);

  FCD_05481_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);

  // LibraryComponent1::FlashTx()

  //Local variable definitions
  #undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 32-bit value split across four bytes.
       :
       :Parameters for macro ReceiveBinary32Bit:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_047b1_UART1__ReceiveBinary32Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT16 FCL_BYTE;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_MSBFIRST)
  {  

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

  } else {

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary32Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

  }

  // LibraryComponent1::FlashRx()

  FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetLong();

FCC_ReceiveBinary32Bit_A:
  ;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 32-bit floating point value split across four bytes.
       :
       :Parameters for macro ReceiveBinaryFloat:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_047b1_UART1__ReceiveBinaryFloat(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT16 FCL_BYTE;
  MX_FLOAT FCR_RETVAL;


  FCR_RETVAL = 0.0;

  if (FCL_MSBFIRST)
  {  

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

  } else {

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinaryFloat_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

  }

  // LibraryComponent1::FlashRx()

  FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetFloat();

FCC_ReceiveBinaryFloat_A:
  ;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a single packet from the UART interface.
       :
       :Parameters for macro SendChar:
       :  Char : MX_SINT16
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendChar(MX_SINT16 FCL_CHAR)
{

  FC_CAL_UART_Send_1(FCL_CHAR);

  // LibraryComponent1::FlashTx()

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of bytes via the UART peripheral
       :
       :Parameters for macro SendByteArray:
       :  Data[1000] : Data to transmit
       :  NumBytes : Number of bytes to send from the array
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT16 FCL_NUMBYTES)
{

  FCD_05481_cal_uart__SendByteArray(FCL_DATA, 1000, FCL_NUMBYTES);

  // LibraryComponent1::FlashTx()

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 16-bit value split across two bytes.
       :
       :Parameters for macro ReceiveBinary16Bit:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_047b1_UART1__ReceiveBinary16Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT16 FCL_BYTE;
  MX_UINT16 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_MSBFIRST)
  {  

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary16Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary16Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

  } else {

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary16Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

    FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_BYTE > 255)
    {    

      goto FCC_ReceiveBinary16Bit_A;

    // } else {

    }

    FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

  }

  // LibraryComponent1::FlashRx()

  FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetInt(0);

FCC_ReceiveBinary16Bit_A:
  ;

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Changes the hardware UART baud rate allowing for dynamic speed changes.
       :
       :Parameters for macro ChangeHWBaud:
       :  NewBaud : 0=1200, 1=2400, 2=4800, 3=9600, 4=19200, 5=38400, 6=57600, 7=115200, 8=250000
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__ChangeHWBaud(MX_UINT8 FCL_NEWBAUD)
{

  FC_CAL_UART_UpdateBaud_1(FCL_NEWBAUD);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a floating point number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none numeric char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveFloat:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_047b1_UART1__ReceiveFloat(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA)
{
  //Local variable definitions
  MX_UINT8 FCL_IDX = (0x0);
  MX_BOOL FCL_DONE = (0);
  MX_UINT16 FCL_CHAR;
  MX_BOOL FCL_DPRX = (0);
  #define FCLsz_STR 20
  MX_CHAR FCL_STR[FCLsz_STR];
  MX_FLOAT FCR_RETVAL;


  while (FCL_DONE == 0)
  {
    FCL_CHAR = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_CHAR >= 255)
    {    

      FCL_DONE = 1;

    } else {

      // LibraryComponent1::FlashRx()

      if (FCL_IDX == 0)
      {      

        if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR == '-'))
        {        

          FCL_STR[FCL_IDX] = FCL_CHAR;

          FCL_IDX = FCL_IDX + 1;

        } else {

          if (FCL_IGNOREDATA)
          {          

          } else {

            FCL_DONE = 1;

          }

        }

      } else {

        if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR == '.' && FCL_DPRX == 0))
        {        

          if (FCL_CHAR == '.')
          {          

            FCL_DPRX = 1;

          // } else {

          }

          FCL_STR[FCL_IDX] = FCL_CHAR;

          FCL_IDX = FCL_IDX + 1;

        } else {

          FCL_DONE = 1;

        }

      }

    }

  }

  if (FCL_IDX)
  {  

    FCL_STR[FCL_IDX] = 0;

    FCR_RETVAL = FCI_STRING_TO_FLOAT(FCL_STR, FCLsz_STR);

  } else {

    FCR_RETVAL = 0.0;

  }

  return (FCR_RETVAL);

  //Local variable definitions
  #undef FCLsz_STR
}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a floating point number as an ASCII String from the UART interface.
       :
       :Parameters for macro SendFloat:
       :  Number : MX_FLOAT
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendFloat(MX_FLOAT FCL_NUMBER)
{
  //Local variable definitions
  #define FCLsz_NUMSTR 20
  MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


  FCI_FLOAT_TO_STRING(FCL_NUMBER, FCV_PRECISION, FCL_NUMSTR, FCLsz_NUMSTR);

  FCD_05481_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);

  // LibraryComponent1::FlashTx()

  //Local variable definitions
  #undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a number as an ASCII hexadecimal String from the UART interface.
       :
       :Parameters for macro SendHexNumber:
       :  Number : MX_UINT32
       :  NumChars : Number of characters in the string data, 0 for auto, 2 for 0x00, 4 for 0x0000
       :  Prefix : Generate hexadecimal prefix 0x e.g. 1= 0xFF, 0= FF
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendHexNumber(MX_UINT32 FCL_NUMBER, MX_UINT8 FCL_NUMCHARS, MX_BOOL FCL_PREFIX)
{
  //Local variable definitions
  MX_UINT8 FCL_IDX = (0x0);
  #define FCLsz_CHARS 8
  MX_UINT8 FCL_CHARS[FCLsz_CHARS];


  if (FCL_PREFIX)
  {  

    FC_CAL_UART_Send_1('0');

    FC_CAL_UART_Send_1('x');

  // } else {

  }

  if (FCL_NUMCHARS == 0)
  {  

    if (FCL_NUMBER < 256)
    {    

      FCL_NUMCHARS = 2;

    } else {

      if (FCL_NUMBER < 65536)
      {      

        FCL_NUMCHARS = 4;

      } else {

        FCL_NUMCHARS = 8;

      }

    }

  // } else {

  }

  if (FCL_NUMCHARS > 8)
  {  

    FCL_NUMCHARS = 8;

  // } else {

  }

  while (FCL_IDX < FCL_NUMCHARS)
  {
    FCL_CHARS[FCL_IDX] = FCL_NUMBER % 16;
    FCL_NUMBER = FCL_NUMBER >> 4;

    if (FCL_CHARS[FCL_IDX] >= 10)
    {    

      FCL_CHARS[FCL_IDX] = FCL_CHARS[FCL_IDX] + 'A' - 10;

    } else {

      FCL_CHARS[FCL_IDX] = FCL_CHARS[FCL_IDX] + '0';

    }

    FCL_IDX = FCL_IDX + 1;

  }

  while (FCL_IDX > 0)
  {
    FCL_IDX = FCL_IDX - 1;

    FC_CAL_UART_Send_1(FCL_CHARS[FCL_IDX]);

    // LibraryComponent1::FlashTx()

  }

  //Local variable definitions
  #undef FCLsz_CHARS
}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a hex number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none hexadecimal char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveHexNumber:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :  Prefix : Look for prefix before receiving, 1=0xFF, 0=FF
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_047b1_UART1__ReceiveHexNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA, MX_BOOL FCL_PREFIX)
{
  //Local variable definitions
  MX_UINT8 FCL_STATE = (0x0);
  MX_BOOL FCL_DONE = (0);
  MX_UINT16 FCL_CHAR;
  MX_UINT32 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_PREFIX == 0)
  {  

    FCL_STATE = 2;

  // } else {

  }

  while (FCL_DONE == 0)
  {
    FCL_CHAR = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

    if (FCL_CHAR >= 255)
    {    

      FCL_DONE = 1;

    } else {

      // LibraryComponent1::FlashRx()

      switch (FCL_STATE)
      {
        case 1:
        {

          if (FCL_CHAR == 'x')
          {          

            FCL_STATE = FCL_STATE + 1;

          } else {

            if (FCL_CHAR == '0')
            {            

            } else {

              if (FCL_IGNOREDATA)
              {              

                FCL_STATE = FCL_STATE + 1;

              } else {

                FCL_DONE = 1;

              }

            }

          }

          break;
        }
        case 2:
        {

          if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR >= 'A' && FCL_CHAR <= 'F'))
          {          

            if (FCL_CHAR >= 'A' && FCL_CHAR <= 'F')
            {            

              FCR_RETVAL = FCR_RETVAL * 16;
              FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - 'A') + 10;

            } else {

              FCR_RETVAL = FCR_RETVAL * 16;
              FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

            }

          } else {

            if ((FCL_PREFIX == 0) && (FCL_IGNOREDATA == 1))
            {            

            } else {

              FCL_DONE = 1;

            }

          }

          break;
        }
        default:
        {
          if (FCL_CHAR == '0')
          {          

            FCL_STATE = FCL_STATE + 1;

          } else {

            if (FCL_IGNOREDATA)
            {            

            } else {

              FCL_DONE = 1;

            }

          }

        }
      }

    }

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 32-bit binary value split across four bytes.
       :
       :Parameters for macro SendBinary32Bit:
       :  Value : MX_UINT32
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendBinary32Bit(MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
  //Local variable definitions
  MX_UINT8 FCL_BYTE;


  FCD_02573_TypeConversionsFree1__SetLong(FCL_VALUE);

  if (FCL_MSBFIRST)
  {  

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

    FC_CAL_UART_Send_1(FCL_BYTE);

  } else {

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

    FC_CAL_UART_Send_1(FCL_BYTE);

  }

  // LibraryComponent1::FlashTx()

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 32-bit binary floating point value split across four bytes.
       :
       :Parameters for macro SendBinaryFloat:
       :  Value : MX_FLOAT
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__SendBinaryFloat(MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
  //Local variable definitions
  MX_UINT8 FCL_BYTE;


  FCD_02573_TypeConversionsFree1__SetFloat(FCL_VALUE);

  if (FCL_MSBFIRST)
  {  

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

    FC_CAL_UART_Send_1(FCL_BYTE);

  } else {

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

    FC_CAL_UART_Send_1(FCL_BYTE);

    FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

    FC_CAL_UART_Send_1(FCL_BYTE);

  }

  // LibraryComponent1::FlashTx()

}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveByteArray:
       :  Data[1000] : Array to store the incoming data
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_047b1_UART1__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT16 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = FCD_05481_cal_uart__ReceiveByteArray(FCL_DATA, 1000, FCL_NUMBYTES, FCL_TIMEOUT);

  // LibraryComponent1::FlashRx()

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a string of bytes from the UART interface.
       :
       :Parameters for macro ReceiveString:
       :  Timeout : Time to wait in milliseconds for valid data before returning, 0=Dont wait, 255=Wait forever.
       :  NumBytes : The number of bytes to try and receive, ideally your string variable should have at least 1 more byte to store the null termination byte
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__ReceiveString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT, MX_UINT16 FCL_NUMBYTES)
{
  //Local variable definitions
  MX_UINT16 FCL_RXCOUNT = (0x0);
  MX_UINT16 FCL_RETVAL;


  FCL_RXCOUNT = FCD_05481_cal_uart__ReceiveString(FCR_RETVAL, FCRsz_RETVAL, FCL_NUMBYTES, FCL_TIMEOUT);

  if (FCL_RXCOUNT)
  {  

    // LibraryComponent1::FlashRx()

  // } else {

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Sets up the RS232 peripheral, must be called at the start of your program or at least before you start calling any other RS232 macros.
\*=----------------------------------------------------------------------=*/
void FCD_047b1_UART1__Initialise()
{

  FC_CAL_UART_Init_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a single packet from the UART interface.
       :
       :Parameters for macro ReceiveChar:
       :  Timeout : Time to wait in milliseconds for valid data before returning, 0=Dont wait, 255=Wait forever.
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_047b1_UART1__ReceiveChar(MX_UINT8 FCL_TIMEOUT)
{
  //Local variable definitions
  MX_SINT16 FCR_RETVAL;


  FCR_RETVAL = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

  if (FCR_RETVAL <= 256)
  {  

    // LibraryComponent1::FlashRx()

  // } else {

  }

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :cal_spi
       :GUID: c67171df-0ad6-4b11-8361-cfe14b072847
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\cal_spi.fcpx
       :Version: 21.0 (0x1501528)
       :Timestamp: 28\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT32 FCV_01531_cal_spi__CONSOLELOG;

/*=----------------------------------------------------------------------=*\
   Use :Outputs a low signal to the chip select pin to select the remote slave device.
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Master_Enable_CS()
{
  //Local variable definitions
  #define FCLsz_STR 20
  MX_CHAR FCL_STR[FCLsz_STR];


  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  //Local variable definitions
  #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.
       :
       :Parameters for macro 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)
{
  //Local variable definitions
  #define FCLsz_TSTR 20
  MX_CHAR FCL_TSTR[FCLsz_TSTR];


  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  //Local variable definitions
  #undef FCLsz_TSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_SimShowWaveform:
       :  RXData : MX_UINT8
       :  TXData : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_01531_cal_spi__Prv_SimShowWaveform(MX_UINT8 FCL_RXDATA, MX_UINT16 FCL_TXDATA)
{

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #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()
{
  //Local variable definitions
  #define FCLsz_STR 20
  MX_CHAR FCL_STR[FCLsz_STR];


  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  //Local variable definitions
  #undef FCLsz_STR
}


/*========================================================================*\
   Use :cal_can
       :GUID: 8a1cca2f-7df1-4b3a-b24b-ca575fe84348
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\cal_can.fcpx
       :Version: 6.0 (0x200428)
       :Timestamp: 04\11\2024
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT32 FCV_09111_cal_can__CONSOLE;

/*=----------------------------------------------------------------------=*\
   Use :Send text to the console
       :
       :Parameters for macro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FC_CAL_Internal_CAN_Prv_TextConsole_1(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR)
{

  // ::Console.WriteText(console, .str)

}


/*========================================================================*\
   Use :User Project
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_CAN_RXCOUNT 6
#define FCVsz_CAN_TXDATA 8
#define FCVsz_CAN_RXDATAARRAY 6
#define FCVsz_CAN_RXDATAARRAY_1 8
#define FCVsz_CAN_RXDATA 8
#define FCVsz_CAN_RXDATA_D 8
#define FCVsz_CAN_RXDATA_C 8
#define FCVsz_CAN_RXDATA_B 8
#define FCVsz_CAN_RXDATA_A 8
#define FCV_FALSE (0)
#define FCV_TRUE (1)
MX_GLOBAL MX_UINT8 FCV_CAN_BUFFER0;
MX_GLOBAL MX_UINT8 FCV_CAN_ID1_FAIL;
MX_GLOBAL MX_UINT8 FCV_TOGGLE_RED;
MX_GLOBAL MX_UINT8 FCV_LIGHT_REAR_PWM;
MX_GLOBAL MX_UINT8 FCV_CAN_RXCOUNT[FCVsz_CAN_RXCOUNT];
MX_GLOBAL MX_UINT16 FCV_COUNT;
MX_GLOBAL MX_UINT8 FCV_MODE;
MX_GLOBAL MX_UINT16 FCV_RANDOMDELAY;
MX_GLOBAL MX_UINT8 FCV_CTRL_DIPPED;
MX_GLOBAL MX_UINT8 FCV_CTRL_BRAKE;
MX_GLOBAL MX_UINT8 FCV_INDICATOR_TRIGGER_ENABLE;
MX_GLOBAL MX_UINT8 FCV_SW_A3_RAW;
MX_GLOBAL MX_UINT16 FCV_LIGHTSSTEPDELAY;
MX_GLOBAL MX_UINT8 FCV_CAN_TXDATA[FCVsz_CAN_TXDATA];
MX_GLOBAL MX_UINT16 FCV_CAN_RX1_ID;
MX_GLOBAL MX_UINT8 FCV_CAN_RXDATAARRAY[FCVsz_CAN_RXDATAARRAY][FCVsz_CAN_RXDATAARRAY_1];
MX_GLOBAL MX_UINT8 FCV_CAN_RXDATA[FCVsz_CAN_RXDATA];
MX_GLOBAL MX_UINT32 FCV_CAN_ID2_CAPTURED;
MX_GLOBAL MX_UINT8 FCV_CTRL_INDICATOR_ENABLE;
MX_GLOBAL MX_UINT8 FCV_CTRL_NONE;
MX_GLOBAL MX_UINT8 FCV_VAR3;
MX_GLOBAL MX_UINT8 FCV_TOGGLE;
MX_GLOBAL MX_UINT8 FCV_VAR2;
MX_GLOBAL MX_UINT8 FCV_VAR1;
MX_GLOBAL MX_UINT8 FCV_CAN_ID4_FAIL;
MX_GLOBAL MX_UINT8 FCV_CAN_NODATA;
MX_GLOBAL MX_UINT8 FCV_CAN_RXCOUNT_D;
MX_GLOBAL MX_UINT8 FCV_CTRL_MAIN;
MX_GLOBAL MX_UINT8 FCV_CAN_RXCOUNT_C;
MX_GLOBAL MX_UINT8 FCV_CAN_ID2_FAIL;
MX_GLOBAL MX_UINT8 FCV_CAN_RXCOUNT_B;
MX_GLOBAL MX_UINT8 FCV_CAN_NEXT_ID;
MX_GLOBAL MX_UINT8 FCV_CAN_RXCOUNT_A;
MX_GLOBAL MX_UINT8 FCV_ERROR;
MX_GLOBAL MX_UINT8 FCV_REG2;
MX_GLOBAL MX_UINT8 FCV_INDICATOR_TRIGGER_RAW;
MX_GLOBAL MX_UINT8 FCV_REG1;
MX_GLOBAL MX_UINT8 FCV_STATUS_INDICATOR;
MX_GLOBAL MX_UINT8 FCV_CAN_ID1_CAPTURED;
MX_GLOBAL MX_UINT8 FCV_CAN_EXIT;
MX_GLOBAL MX_UINT8 FCV_CAN_FAIL_COUNT;
MX_GLOBAL MX_UINT8 FCV_CAN_RX0_DLC;
MX_GLOBAL MX_UINT8 FCV_STATUS_SIDE;
MX_GLOBAL MX_UINT8 FCV_LIGHTS_OFF;
MX_GLOBAL MX_UINT16 FCV_CAN_RX0_ID;
MX_GLOBAL MX_UINT16 FCV_LIGHTS_END_DELAY;
MX_GLOBAL MX_UINT8 FCV_CAN_RX1_DLC;
MX_GLOBAL MX_UINT8 FCV_CAN_LOOPCOUNT;
MX_GLOBAL MX_UINT8 FCV_CAN_RXDATA_D[FCVsz_CAN_RXDATA_D];
MX_GLOBAL MX_UINT8 FCV_CTRL_SIDE;
MX_GLOBAL MX_UINT8 FCV_CAN_RXDATA_C[FCVsz_CAN_RXDATA_C];
MX_GLOBAL MX_UINT32 FCV_CAN_RXCOUNT_X;
MX_GLOBAL MX_UINT8 FCV_CAN_RXDATA_B[FCVsz_CAN_RXDATA_B];
MX_GLOBAL MX_UINT8 FCV_CTRL_INDICATOR;
MX_GLOBAL MX_UINT8 FCV_STATUS_BRAKE_LIGHT = (0x0);
MX_GLOBAL MX_UINT8 FCV_CAN_ID3_FAIL;
MX_GLOBAL MX_UINT8 FCV_CTRL_INDICATOR_TIMEOUT;
MX_GLOBAL MX_UINT8 FCV_CAN_RXDATA_A[FCVsz_CAN_RXDATA_A];
MX_GLOBAL MX_UINT8 FCV_CAN_BUFFER1;



/*========================================================================*\
   Use :Main
\*========================================================================*/
void main()
{
	#ifdef INTOSCHELPER
		INTOSCHELPERCODE
	#endif
ADCON1 = 0x0F;
CCP1CON=0x00;




#if 0 // Disabled code
  // Component Macro
  FCD_047b1_UART1__Initialise();

#endif // Disabled code

  // Component Macro
  FCD_0cc51_gLCD_SSD1306_i2c1__Initialise();

  // Component Macro
  FCD_0cc51_gLCD_SSD1306_i2c1__SetBackgroundColour(1);

  // Component Macro
  FCD_0cc51_gLCD_SSD1306_i2c1__ClearDisplay();

  // Component Macro
  FCD_0cc51_gLCD_SSD1306_i2c1__SetForegroundColour(0);

  // Component Macro
  FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(2, 2, 100, 20, 0, 1);

  // Component Macro
  FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(10, 10, 30, 30, 1, 0);

  // Loop
  while (1)
  {
    // Delay
    FCI_DELAYBYTE_MS(100);

    // toggle
    if (FCV_TOGGLE)
    {    

      // Component Macro
      FCD_0cc51_gLCD_SSD1306_i2c1__SetForegroundColour(1);

      // Component Macro
      FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(10, 10, 30, 30, 1, 0);

      // Component Macro
      FCD_0e9e1_LED_RED_A0__TurnOff();

    } else {

      // Component Macro
      FCD_0cc51_gLCD_SSD1306_i2c1__SetForegroundColour(0);

      // Component Macro
      FCD_0cc51_gLCD_SSD1306_i2c1__DrawRectangle(10, 10, 30, 30, 1, 0);

      // Component Macro
      FCD_0e9e1_LED_RED_A0__TurnOn();

    }

    // Calculation
    FCV_TOGGLE = !FCV_TOGGLE;
    FCV_COUNT = FCV_COUNT + 1;

  }

	mainendloop: goto mainendloop;
}



/*========================================================================*\
   Use :Interrupt
\*========================================================================*/
void MX_INTERRUPT_MACRO(void)
{

}




