text: /* ###################################################################
  **     This component module is generated by Processor Expert. Do not modify it.
  **     Filename    : McuRTT.h
  **     Project     : FRDM-K64F_Generator
  **     Processor   : MK64FN1M0VLL12
  **     Component   : SeggerRTT
  **     Version     : Component 01.090, Driver 01.00, CPU db: 3.00.000
  **     Compiler    : GNU C Compiler
  **     Date/Time   : 2020-10-23, 19:24, # CodeGen: 710
  **     Abstract    :
  **
  **     Settings    :
  **          Component name                                 : McuRTT
  **          Version                                        : V6.86e
  **          Number of Up Channels                          : 3
  **          Number of Down Channels                        : 3
  **          Max Blocked Interrupt Level                    : 3
  **          Syscalls                                       : no
  **          Channel 0                                      : Enabled
  **            Name                                         : "Terminal"
  **            Up Buffer Size (Tx)                          : 512
  **            Down Buffer Size (Rx)                        : 64
  **            Up Buffer Mode                               : Skip (Default)
  **            Down Buffer Mode                             : Skip (Default)
  **            Blocking Send                                : Disabled
  **            Printf Buffer Size                           : 64
  **          SDK                                            : McuLib
  **          Shell                                          : McuShell
  **          Source Folders                                 : 
  **            Source Folder                                : SEGGER_RTT
  **            Config Folder                                : SEGGER_RTT
  **     Contents    :
  **         Read             - int McuRTT_Read(unsigned BufferIndex, const char* pBuffer, unsigned NumBytes);
  **         Write            - int McuRTT_Write(unsigned BufferIndex, char* pBuffer, unsigned BufferSize);
  **         WriteString      - unsigned McuRTT_WriteString(unsigned BufferIndex, const char* s);
  **         printf           - int McuRTT_printf(unsigned BufferIndex, const char* sFormat, ...);
  **         GetKey           - dword McuRTT_GetKey(void);
  **         WaitKey          - long McuRTT_WaitKey(void);
  **         HasKey           - long McuRTT_HasKey(void);
  **         SetTerminal      - int McuRTT_SetTerminal(char TerminalId);
  **         TerminalOut      - int McuRTT_TerminalOut(char TerminalId, const char* s);
  **         ConfigUpBuffer   - int McuRTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, char*...
  **         ConfigDownBuffer - int McuRTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, char*...
  **         RecvChar         - uint8_t McuRTT_RecvChar(uint8_t *c);
  **         SendChar         - uint8_t McuRTT_SendChar(uint8_t ch);
  **         GetCharsInRxBuf  - uint16_t McuRTT_GetCharsInRxBuf(void);
  **         StdIOKeyPressed  - bool McuRTT_StdIOKeyPressed(void);
  **         StdIOReadChar    - void McuRTT_StdIOReadChar(uint8_t *c);
  **         StdIOSendChar    - void McuRTT_StdIOSendChar(uint8_t ch);
  **         GetStdio         - %@Shell@'ModuleName'%.ConstStdIOTypePtr McuRTT_GetStdio(void);
  **         Deinit           - void McuRTT_Deinit(void);
  **         Init             - void McuRTT_Init(void);
  **
  ** * (c) Copyright Segger, 2020
  **  * http      : www.segger.com
  **  * See separate Segger licensing terms.
  **  *
  **  * Processor Expert port: Copyright (c) 2016-2019 Erich Styger
  **  * Web:         https://mcuoneclipse.com
  **  * SourceForge: https://sourceforge.net/projects/mcuoneclipse
  **  * Git:         https://github.com/ErichStyger/McuOnEclipse_PEx
  **  * All rights reserved.
  **  *
  **  * Redistribution and use in source and binary forms, with or without modification,
  **  * are permitted provided that the following conditions are met:
  **  *
  **  * - Redistributions of source code must retain the above copyright notice, this list
  **  *   of conditions and the following disclaimer.
  **  *
  **  * - Redistributions in binary form must reproduce the above copyright notice, this
  **  *   list of conditions and the following disclaimer in the documentation and/or
  **  *   other materials provided with the distribution.
  **  *
  **  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  **  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  **  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  **  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
  **  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  **  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  **  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  **  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  **  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  **  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  ** ###################################################################*/
  /*!
  ** @file McuRTT.h
  ** @version 01.00
  ** @brief
  **
  */         
  /*!
  **  @addtogroup McuRTT_module McuRTT module documentation
  **  @{
  */         
  
  /* MODULE McuRTT. */
  
  #include "McuRTT.h"
  #if McuRTT_CONFIG_BLOCKING_SEND
    #include "McuWait.h"
  #endif
  
  /* default standard I/O struct */
  McuShell_ConstStdIOType McuRTT_stdio = {
      (McuShell_StdIO_In_FctType)McuRTT_StdIOReadChar, /* stdin */
      (McuShell_StdIO_OutErr_FctType)McuRTT_StdIOSendChar, /* stdout */
      (McuShell_StdIO_OutErr_FctType)McuRTT_StdIOSendChar, /* stderr */
      McuRTT_StdIOKeyPressed /* if input is not empty */
    };
  uint8_t McuRTT_DefaultShellBuffer[McuShell_DEFAULT_SHELL_BUFFER_SIZE]; /* default buffer which can be used by the application */
  
  /*
  ** ===================================================================
  **     Method      :  Read (component SeggerRTT)
  **
  **     Description :
  **         Read from buffer
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         BufferIndex     - Buffer/channel to be used.
  **                           0 for terminal.
  **       * pBuffer         - Pointer to buffer
  **         BufferSize      - Number of bytes to write
  **     Returns     :
  **         ---             - Number of bytes that have been read
  ** ===================================================================
  */
  /**
  int McuRTT_Read(unsigned BufferIndex, const char* pBuffer, unsigned NumBytes)
  {
    Implemented as macro in the header file.
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  Write (component SeggerRTT)
  **
  **     Description :
  **         Write to buffer
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         BufferIndex     - Buffer/channel to be used.
  **                           0 for terminal.
  **       * pBuffer         - Pointer to buffer
  **         BufferSize      - Size of buffer
  **     Returns     :
  **         ---             - Number of bytes which have been written to
  **                           the up buffer
  ** ===================================================================
  */
  /**
  int McuRTT_Write(unsigned BufferIndex, char* pBuffer, unsigned BufferSize)
  {
    Implemented as macro in the header file.
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  WriteString (component SeggerRTT)
  **
  **     Description :
  **         Write to buffer
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         BufferIndex     - Buffer/channel to be used.
  **                           0 for terminal.
  **       * s               - Pointer to 
  **     Returns     :
  **         ---             - Number of bytes which have been stored in
  **                           the "Up"-buffer.
  ** ===================================================================
  */
  /**
  unsigned McuRTT_WriteString(unsigned BufferIndex, const char* s)
  {
    Implemented as macro in the header file.
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  GetKey (component SeggerRTT)
  **
  **     Description :
  **         Returns a character/key
  **     Parameters  : None
  **     Returns     :
  **         ---             - character code
  ** ===================================================================
  */
  /**
  dword McuRTT_GetKey(void)
  {
    Implemented as macro in the header file.
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  WaitKey (component SeggerRTT)
  **
  **     Description :
  **         Waits for a key and returns it.
  **     Parameters  : None
  **     Returns     :
  **         ---             - >=0    Character which has been read.
  ** ===================================================================
  */
  /**
  long McuRTT_WaitKey(void)
  {
    Implemented as macro in the header file.
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  HasKey (component SeggerRTT)
  **
  **     Description :
  **         Checks if at least one character for reading is available in
  **         the SEGGER RTT buffer
  **     Parameters  : None
  **     Returns     :
  **         ---             - 0: No characters are available to read; 1:
  **                           At least one character is available.
  ** ===================================================================
  */
  /**
  long McuRTT_HasKey(void)
  {
    Implemented as macro in the header file.
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  StdIOKeyPressed (component SeggerRTT)
  **
  **     Description :
  **         StdIO handler for Shell
  **     Parameters  : None
  **     Returns     :
  **         ---             - True if there are characters in teh input
  **                           buffer
  ** ===================================================================
  */
  bool McuRTT_StdIOKeyPressed(void)
  {
    return McuRTT_HasKey()!=0;
  }
  
  /*
  ** ===================================================================
  **     Method      :  StdIOReadChar (component SeggerRTT)
  **
  **     Description :
  **         StdIO Handler for reading a character. It returns a zero
  **         byte if there is no character in input buffer.
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **       * c               - Pointer to where to store the received
  **                           character
  **     Returns     : Nothing
  ** ===================================================================
  */
  void McuRTT_StdIOReadChar(uint8_t *c)
  {
    int res;
  
    res = McuRTT_GetKey();
    if (res==-1) { /* no character present */
      *c = '\0';
    } else {
      *c = (uint8_t)res; /* return character */
    }
  }
  
  /*
  ** ===================================================================
  **     Method      :  StdIOSendChar (component SeggerRTT)
  **
  **     Description :
  **         StdIO handler to sends a character.
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         ch              - Character to send
  **     Returns     : Nothing
  ** ===================================================================
  */
  void McuRTT_StdIOSendChar(uint8_t ch)
  {
  #if McuRTT_CONFIG_BLOCKING_SEND
    #if McuRTT_CONFIG_BLOCKING_SEND_WAIT_MS>0
      #define RTT_STDIO_CNTR (100)
  	static uint8_t cntr = 0;
    #endif
    #if McuRTT_CONFIG_BLOCKING_SEND_TIMEOUT_MS>0 && McuRTT_CONFIG_BLOCKING_SEND_WAIT_MS>0
    int timeoutMs = McuRTT_CONFIG_BLOCKING_SEND_TIMEOUT_MS;
    #endif
  
    for(;;) { /* will break */
      if (McuRTT_Write(0, (const char*)&ch, 1)==1) { /* non blocking send, check that we were able to send */
    #if McuRTT_CONFIG_BLOCKING_SEND_WAIT_MS>0
        if (cntr>0) {
          cntr--;
        }
    #endif
        break; /* was able to send character, get out of waiting loop */
      }
    #if McuRTT_CONFIG_BLOCKING_SEND_WAIT_MS>0
      cntr++;
      if (cntr>RTT_STDIO_CNTR) { /* waiting for too long, give up */
        cntr = RTT_STDIO_CNTR;
        return;
      }
      McuWait_WaitOSms(McuRTT_CONFIG_BLOCKING_SEND_WAIT_MS);
      #if McuRTT_CONFIG_BLOCKING_SEND_TIMEOUT_MS>0
      if(timeoutMs<=0) {
        break; /* timeout */
      }
      timeoutMs -= McuRTT_CONFIG_BLOCKING_SEND_WAIT_MS;
      #endif
    #endif
    } /* for */
  #else
    (void)McuRTT_Write(0, &ch, 1); /* non blocking send, might loose characters */
  #endif
  }
  
  /*
  ** ===================================================================
  **     Method      :  RecvChar (component SeggerRTT)
  **
  **     Description :
  **         Receives a character from channel 0. Returns ERR_RXEMPTY if
  **         no character available
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **       * c               - Pointer to where to store the received
  **                           character
  **     Returns     :
  **         ---             - Error code
  ** ===================================================================
  */
  uint8_t McuRTT_RecvChar(uint8_t *c)
  {
    int res;
  
    res = McuRTT_GetKey();
    if (res==-1) { /* no character present */
      return ERR_RXEMPTY;
    }
    *c = (uint8_t)res; /* return character */
    return ERR_OK;
  }
  
  /*
  ** ===================================================================
  **     Method      :  SendChar (component SeggerRTT)
  **
  **     Description :
  **         Sends a character to channel 0.
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         ch              - Character to send
  **     Returns     :
  **         ---             - Error code. ERR_OK if character has been
  **                           sent, ERR_TXFULL otherwise.
  ** ===================================================================
  */
  uint8_t McuRTT_SendChar(uint8_t ch)
  {
    int res;
  
    res = SEGGER_RTT_Write(0, (const char*)&ch, 1);
    if (res!=1) {
      return ERR_TXFULL; /* character not sent? */
    }
    return ERR_OK;
  }
  
  /*
  ** ===================================================================
  **     Method      :  GetCharsInRxBuf (component SeggerRTT)
  **
  **     Description :
  **         Returns the number of characters in the receive buffer.
  **     Parameters  : None
  **     Returns     :
  **         ---             - Number of characters in the input buffer,
  **                           zero for none available.
  ** ===================================================================
  */
  /**
  uint16_t McuRTT_GetCharsInRxBuf(void)
  {
    // Function is implemented as macro in the header file
    if (SEGGER_RTT_HasKey()) {
      return 1; // at least one available
    }
    return 0; // none available
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  TerminalOut (component SeggerRTT)
  **
  **     Description :
  **         Writes a string to the given terminal without changing the
  **         terminal for channel 0.
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         TerminalId      - TerminalId, 0..15
  **       * s               - Pointer to string
  **     Returns     :
  **         ---             - Error code
  ** ===================================================================
  */
  /**
  int McuRTT_TerminalOut(char TerminalId, const char* s)
  {
    Function is implemented as macro in the header file
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  SetTerminal (component SeggerRTT)
  **
  **     Description :
  **          Sets the terminal to be used for output on channel 0.
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         TerminalId      - Terminal ID, 0..15
  **     Returns     :
  **         ---             - Error code
  ** ===================================================================
  */
  /**
  int McuRTT_SetTerminal(char TerminalId)
  {
    Function is implemented as macro in the header file
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  ConfigUpBuffer (component SeggerRTT)
  **
  **     Description :
  **         Configures the Up (device to host) buffer
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         BufferIndex     - Buffer index
  **         sName           - Buffer name
  **       * pBuffer         - Pointer to buffer
  **         intBufferSize   - Size of buffer in bytes
  **         Flags           - SEGGER_RTT_MODE_NO_BLOCK_SKIP,
  **                           SEGGER_RTT_MODE_NO_BLOCK_TRIM or
  **                           SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
  **     Returns     :
  **         ---             - Error code, >=0 OK, <0 Error
  ** ===================================================================
  */
  /**
  int McuRTT_ConfigUpBuffer(unsigned BufferIndex, const char* sName, char* pBuffer, int BufferSize, int Flags)
  {
    Function is implemented as macro in the header file
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  ConfigDownBuffer (component SeggerRTT)
  **
  **     Description :
  **         Configures the Down (host to device) buffer
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         BufferIndex     - Buffer index
  **         sName           - Buffer name
  **       * pBuffer         - Pointer to buffer
  **         intBufferSize   - Size of buffer in bytes
  **         Flags           - SEGGER_RTT_MODE_NO_BLOCK_SKIP,
  **                           SEGGER_RTT_MODE_NO_BLOCK_TRIM or
  **                           SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
  **     Returns     :
  **         ---             - Error code, >=0 OK, <0 Error
  ** ===================================================================
  */
  /**
  int McuRTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, char* pBuffer, int BufferSize, int Flags)
  {
    Function is implemented as macro in the header file
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  printf (component SeggerRTT)
  **
  **     Description :
  **         Stores a formatted string in SEGGER RTT control block. This
  **         data is sent to the host.
  **     Parameters  :
  **         NAME            - DESCRIPTION
  **         BufferIndex     - Index of "Up"-buffer to be
  **                           used. (e.g. 0 for "Terminal")
  **         sFormat         - Pointer to format string, followed
  **                           by the arguments for conversion
  **     Returns     :
  **         ---             - Error code
  ** ===================================================================
  */
  /**
  int McuRTT_printf(unsigned BufferIndex, const char* sFormat, ...)
  {
    Function is implemented as macro in the header file
  }
  */
  
  /*
  ** ===================================================================
  **     Method      :  Deinit (component SeggerRTT)
  **
  **     Description :
  **         Driver deinitialization
  **     Parameters  : None
  **     Returns     : Nothing
  ** ===================================================================
  */
  void McuRTT_Deinit(void)
  {
    /* noting to de-initialize */
  }
  
  /*
  ** ===================================================================
  **     Method      :  Init (component SeggerRTT)
  **
  **     Description :
  **         Initializes the RTT Control Block.
  **     Parameters  : None
  **     Returns     : Nothing
  ** ===================================================================
  */
  void McuRTT_Init(void)
  {
    SEGGER_RTT_Init();
  }
  
  /*
  ** ===================================================================
  **     Method      :  GetStdio (component SeggerRTT)
  **
  **     Description :
  **         Returns a pointer to the standard I/O
  **     Parameters  : None
  **     Returns     :
  **         ---             - Error code
  ** ===================================================================
  */
  McuShell_ConstStdIOTypePtr McuRTT_GetStdio(void)
  {
    return &McuRTT_stdio;
  }
  
  /* END McuRTT. */
  
  /*!
  ** @}
  */
  