blob: 685bd63f567bb5bd4f44e91831e676c42327f95b [file] [log] [blame]
/*
*
* Copyright (c) 2023 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
This file is only used to implement weak syscall stubs
that gcc-arm-none-eabi 12.2.1 expect to link when using Libc
(newlib/libc_nano)
*/
#include <reent.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#ifdef __cplusplus
extern "C" {
#endif
#if SILABS_LOG_OUT_UART
#include "uart.h"
#endif
int _close(int file);
int _fstat(int file, struct stat * st);
int _isatty(int file);
int _lseek(int file, int ptr, int dir);
int _read(int file, char * ptr, int len);
int _write(int file, const char * ptr, int len);
/**************************************************************************
* @brief
* Close a file.
*
* @param[in] file
* File you want to close.
*
* @return
* Returns 0 when the file is closed.
**************************************************************************/
int __attribute__((weak)) _close(int file)
{
(void) file;
return 0;
}
/**************************************************************************
* @brief Exit the program.
* @param[in] status The value to return to the parent process as the
* exit status (not used).
**************************************************************************/
void __attribute__((weak)) _exit(int status)
{
(void) status;
while (1)
{
} /* Hang here forever... */
}
/*************************************************************************
* @brief
* Status of an open file.
*
* @param[in] file
* Check status for this file.
*
* @param[in] st
* Status information.
*
* @return
* Returns 0 when st_mode is set to character special.
************************************************************************/
int __attribute__((weak)) _fstat(int file, struct stat * st)
{
(void) file;
(void) st;
return 0;
}
/**************************************************************************
* @brief Get process ID.
*************************************************************************/
int __attribute__((weak)) _getpid(void)
{
return 1;
}
/**************************************************************************
* @brief
* Query whether output stream is a terminal.
*
* @param[in] file
* Descriptor for the file.
*
* @return
* Returns 1 when query is done.
**************************************************************************/
int __attribute__((weak)) _isatty(int file)
{
(void) file;
return 1;
}
/**************************************************************************
* @brief Send signal to process.
* @param[in] pid Process id (not used).
* @param[in] sig Signal to send (not used).
*************************************************************************/
int __attribute__((weak)) _kill(int pid, int sig)
{
(void) pid;
(void) sig;
return -1;
}
/**************************************************************************
* @brief
* Set position in a file.
*
* @param[in] file
* Descriptor for the file.
*
* @param[in] ptr
* Poiter to the argument offset.
*
* @param[in] dir
* Directory whence.
*
* @return
* Returns 0 when position is set.
*************************************************************************/
int __attribute__((weak)) _lseek(int file, int ptr, int dir)
{
(void) file;
(void) ptr;
(void) dir;
return 0;
}
/**************************************************************************
* @brief
* Read from a file.
*
* @param[in] file
* Descriptor for the file you want to read from.
*
* @param[in] ptr
* Pointer to the chacaters that are beeing read.
*
* @param[in] len
* Number of characters to be read.
*
* @return
* Number of characters that have been read.
*************************************************************************/
int __attribute__((weak)) _read(int file, char * ptr, int len)
{
(void) file;
#if SILABS_LOG_OUT_UART
return uartConsoleRead(ptr, len);
#else
(void) ptr;
(void) len;
#endif
return 0;
}
/**************************************************************************
* @brief
* Write to a file.
*
* @param[in] file
* Descriptor for the file you want to write to.
*
* @param[in] ptr
* Pointer to the text you want to write
*
* @param[in] len
* Number of characters to be written.
*
* @return
* Number of characters that have been written.
**************************************************************************/
int __attribute__((weak)) _write(int file, const char * ptr, int len)
{
(void) file;
#if SILABS_LOG_OUT_UART
uartConsoleWrite(ptr, len);
#else
(void) ptr;
#endif
return len;
}
#ifdef __cplusplus
}
#endif