xref: /nrf52832-nimble/rt-thread/components/libc/compilers/armlibc/stdio.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2017/10/15     bernard      implement stdio for armcc.
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #include <stdio.h>
12*10465441SEvalZero #include <stdlib.h>
13*10465441SEvalZero #include <string.h>
14*10465441SEvalZero 
15*10465441SEvalZero #include <rtthread.h>
16*10465441SEvalZero #include "libc.h"
17*10465441SEvalZero 
18*10465441SEvalZero #if defined(RT_USING_DFS) && defined(RT_USING_DFS_DEVFS)
19*10465441SEvalZero #include <dfs_posix.h>
20*10465441SEvalZero 
21*10465441SEvalZero #define STDIO_DEVICE_NAME_MAX   32
22*10465441SEvalZero 
23*10465441SEvalZero static int std_fd = -1;
libc_stdio_set_console(const char * device_name,int mode)24*10465441SEvalZero int libc_stdio_set_console(const char* device_name, int mode)
25*10465441SEvalZero {
26*10465441SEvalZero     int fd;
27*10465441SEvalZero     char name[STDIO_DEVICE_NAME_MAX];
28*10465441SEvalZero 
29*10465441SEvalZero     snprintf(name, sizeof(name) - 1, "/dev/%s", device_name);
30*10465441SEvalZero     name[STDIO_DEVICE_NAME_MAX - 1] = '\0';
31*10465441SEvalZero 
32*10465441SEvalZero     fd = open(name, mode, 0);
33*10465441SEvalZero     if (fd >= 0)
34*10465441SEvalZero     {
35*10465441SEvalZero         if (std_fd >= 0)
36*10465441SEvalZero         {
37*10465441SEvalZero             close(std_fd);
38*10465441SEvalZero         }
39*10465441SEvalZero         std_fd = fd;
40*10465441SEvalZero     }
41*10465441SEvalZero 
42*10465441SEvalZero     return std_fd;
43*10465441SEvalZero }
44*10465441SEvalZero 
libc_stdio_get_console(void)45*10465441SEvalZero int libc_stdio_get_console(void)
46*10465441SEvalZero {
47*10465441SEvalZero     return std_fd;
48*10465441SEvalZero }
49*10465441SEvalZero 
libc_stdio_read(void * buffer,size_t size)50*10465441SEvalZero int libc_stdio_read(void *buffer, size_t size)
51*10465441SEvalZero {
52*10465441SEvalZero     if (std_fd >= 0)
53*10465441SEvalZero     {
54*10465441SEvalZero         return read(std_fd, buffer, size);
55*10465441SEvalZero     }
56*10465441SEvalZero     else
57*10465441SEvalZero     {
58*10465441SEvalZero         rt_kprintf("Illegal stdio input!\n");
59*10465441SEvalZero         return 0;
60*10465441SEvalZero     }
61*10465441SEvalZero }
62*10465441SEvalZero 
libc_stdio_write(const void * buffer,size_t size)63*10465441SEvalZero int libc_stdio_write(const void *buffer, size_t size)
64*10465441SEvalZero {
65*10465441SEvalZero     if (std_fd >= 0)
66*10465441SEvalZero     {
67*10465441SEvalZero         return write(std_fd, buffer, size);
68*10465441SEvalZero     }
69*10465441SEvalZero     else
70*10465441SEvalZero     {
71*10465441SEvalZero         rt_kprintf("Illegal stdio output!\n");
72*10465441SEvalZero         return size;
73*10465441SEvalZero     }
74*10465441SEvalZero }
75*10465441SEvalZero #endif
76