/*********************************************************************
*                    SEGGER Microcontroller GmbH                     *
*                        The Embedded Experts                        *
**********************************************************************
*                                                                    *
*            (c) 1995 - 2019 SEGGER Microcontroller GmbH             *
*                                                                    *
*       www.segger.com     Support: support@segger.com               *
*                                                                    *
**********************************************************************
*                                                                    *
*       SEGGER RTT * Real Time Transfer for embedded targets         *
*                                                                    *
**********************************************************************
*                                                                    *
* All rights reserved.                                               *
*                                                                    *
* SEGGER strongly recommends to not make any changes                 *
* to or modify the source code of this software in order to stay     *
* compatible with the RTT protocol and J-Link.                       *
*                                                                    *
* Redistribution and use in source and binary forms, with or         *
* without modification, are permitted provided that the following    *
* condition is met:                                                  *
*                                                                    *
* o Redistributions of source code must retain the above copyright   *
*   notice, this condition and the following disclaimer.             *
*                                                                    *
* 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 SEGGER Microcontroller 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.                                                            *
*                                                                    *
**********************************************************************
---------------------------END-OF-HEADER------------------------------
File    : RTT_Syscalls_KEIL.c
Purpose : Retargeting module for KEIL MDK-CM3.
          Low-level functions for using printf() via RTT
Revision: $Rev: 20159 $
----------------------------------------------------------------------
*/
#if (defined __CC_ARM) || (defined __ARMCC_VERSION)

#include <rt_misc.h>
#include <rt_sys.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "SEGGER_RTT.h"
/*********************************************************************
 *
 *       #pragmas
 *
 **********************************************************************
 */
#if __ARMCC_VERSION < 6000000
#pragma import(__use_no_semihosting)
#endif

#ifdef _MICROLIB
#pragma import(__use_full_stdio)
#endif

/*********************************************************************
 *
 *       Defines non-configurable
 *
 **********************************************************************
 */

/* Standard IO device handles - arbitrary, but any real file system handles must be
   less than 0x8000. */
#define STDIN 0x8001  // Standard Input Stream
#define STDOUT 0x8002 // Standard Output Stream
#define STDERR 0x8003 // Standard Error Stream

/*********************************************************************
 *
 *       Public const
 *
 **********************************************************************
 */
#if __ARMCC_VERSION < 5000000
// const char __stdin_name[]  = "STDIN";
const char __stdout_name[] = "STDOUT";
const char __stderr_name[] = "STDERR";
#endif

/*********************************************************************
 *
 *       Public code
 *
 **********************************************************************
 */

/*********************************************************************
 *
 *       _ttywrch
 *
 *  Function description:
 *    Outputs a character to the console
 *
 *  Parameters:
 *    c    - character to output
 *
 */
void _ttywrch(int c)
{
    fputc(c, stdout); // stdout
    fflush(stdout);
}

/*********************************************************************
 *
 *       _sys_open
 *
 *  Function description:
 *    Opens the device/file in order to do read/write operations
 *
 *  Parameters:
 *    sName        - sName of the device/file to open
 *    OpenMode    - This parameter is currently ignored
 *
 *  Return value:
 *    != 0     - Handle to the object to open, otherwise
 *    == 0     -"device" is not handled by this module
 *
 */
FILEHANDLE _sys_open(const char * sName, int OpenMode)
{
    (void) OpenMode;
    // Register standard Input Output devices.
    if (strcmp(sName, __stdout_name) == 0)
    {
        return (STDOUT);
    }
    else if (strcmp(sName, __stderr_name) == 0)
    {
        return (STDERR);
    }
    else
        return (0); // Not implemented
}

/*********************************************************************
 *
 *       _sys_close
 *
 *  Function description:
 *    Closes the handle to the open device/file
 *
 *  Parameters:
 *    hFile    - Handle to a file opened via _sys_open
 *
 *  Return value:
 *    0     - device/file closed
 *
 */
int _sys_close(FILEHANDLE hFile)
{
    (void) hFile;
    return 0; // Not implemented
}

/*********************************************************************
 *
 *       _sys_write
 *
 *  Function description:
 *    Writes the data to an open handle.
 *    Currently this function only outputs data to the console
 *
 *  Parameters:
 *    hFile    - Handle to a file opened via _sys_open
 *    pBuffer  - Pointer to the data that shall be written
 *    NumBytes      - Number of bytes to write
 *    Mode     - The Mode that shall be used
 *
 *  Return value:
 *    Number of bytes *not* written to the file/device
 *
 */
int _sys_write(FILEHANDLE hFile, const unsigned char * pBuffer, unsigned NumBytes, int Mode)
{
    int r = 0;

    (void) Mode;
    if (hFile == STDOUT)
    {
        SEGGER_RTT_Write(0, (const char *) pBuffer, NumBytes);
        return 0;
    }
    return r;
}

/*********************************************************************
 *
 *       _sys_read
 *
 *  Function description:
 *    Reads data from an open handle.
 *    Currently this modules does nothing.
 *
 *  Parameters:
 *    hFile    - Handle to a file opened via _sys_open
 *    pBuffer  - Pointer to buffer to store the read data
 *    NumBytes      - Number of bytes to read
 *    Mode     - The Mode that shall be used
 *
 *  Return value:
 *    Number of bytes read from the file/device
 *
 */
int _sys_read(FILEHANDLE hFile, unsigned char * pBuffer, unsigned NumBytes, int Mode)
{
    (void) hFile;
    (void) pBuffer;
    (void) NumBytes;
    (void) Mode;
    return (0); // Not implemented
}

/*********************************************************************
 *
 *       _sys_istty
 *
 *  Function description:
 *    This function shall return whether the opened file
 *    is a console device or not.
 *
 *  Parameters:
 *    hFile    - Handle to a file opened via _sys_open
 *
 *  Return value:
 *    1       - Device is     a console
 *    0       - Device is not a console
 *
 */
int _sys_istty(FILEHANDLE hFile)
{
    if (hFile > 0x8000)
    {
        return (1);
    }
    return (0); // Not implemented
}

/*********************************************************************
 *
 *       _sys_seek
 *
 *  Function description:
 *    Seeks via the file to a specific position
 *
 *  Parameters:
 *    hFile  - Handle to a file opened via _sys_open
 *    Pos    -
 *
 *  Return value:
 *    int       -
 *
 */
int _sys_seek(FILEHANDLE hFile, long Pos)
{
    (void) hFile;
    (void) Pos;
    return (0); // Not implemented
}

/*********************************************************************
 *
 *       _sys_ensure
 *
 *  Function description:
 *
 *
 *  Parameters:
 *    hFile    - Handle to a file opened via _sys_open
 *
 *  Return value:
 *    int       -
 *
 */
int _sys_ensure(FILEHANDLE hFile)
{
    (void) hFile;
    return (-1); // Not implemented
}

/*********************************************************************
 *
 *       _sys_flen
 *
 *  Function description:
 *    Returns the length of the opened file handle
 *
 *  Parameters:
 *    hFile    - Handle to a file opened via _sys_open
 *
 *  Return value:
 *    Length of the file
 *
 */
long _sys_flen(FILEHANDLE hFile)
{
    (void) hFile;
    return (0); // Not implemented
}

/*********************************************************************
 *
 *       _sys_tmpnam
 *
 *  Function description:
 *    This function converts the file number fileno for a temporary
 *    file to a unique filename, for example, tmp0001.
 *
 *  Parameters:
 *    pBuffer    - Pointer to a buffer to store the name
 *    FileNum    - file number to convert
 *    MaxLen     - Size of the buffer
 *
 *  Return value:
 *     1 - Error
 *     0 - Success
 *
 */
int _sys_tmpnam(char * pBuffer, int FileNum, unsigned MaxLen)
{
    (void) pBuffer;
    (void) FileNum;
    (void) MaxLen;
    return (1); // Not implemented
}

/*********************************************************************
 *
 *       _sys_command_string
 *
 *  Function description:
 *    This function shall execute a system command.
 *
 *  Parameters:
 *    cmd    - Pointer to the command string
 *    len    - Length of the string
 *
 *  Return value:
 *    == NULL - Command was not successfully executed
 *    == sCmd - Command was passed successfully
 *
 */
char * _sys_command_string(char * cmd, int len)
{
    (void) len;
    return cmd; // Not implemented
}

/*********************************************************************
 *
 *       _sys_exit
 *
 *  Function description:
 *    This function is called when the application returns from main
 *
 *  Parameters:
 *    ReturnCode    - Return code from the main function
 *
 *
 */
void _sys_exit(int ReturnCode)
{
    (void) ReturnCode;
    while (1)
        ; // Not implemented
}

#if __ARMCC_VERSION >= 5000000
/*********************************************************************
 *
 *       stdout_putchar
 *
 *  Function description:
 *    Put a character to the stdout
 *
 *  Parameters:
 *    ch    - Character to output
 *
 *
 */
int stdout_putchar(int ch)
{
    (void) ch;
    return ch; // Not implemented
}
#endif

#endif
/*************************** End of file ****************************/
