blob: fa0f9a4fe760885a5818fa7524116ffde7b58d1d [file] [log] [blame]
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +08001/*
yang.lib06e0a82022-01-10 17:35:09 +08002 * Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +08003 *
yang.lib06e0a82022-01-10 17:35:09 +08004 * SPDX-License-Identifier: MIT
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +08005 */
Xiaohu.Huang448314d2021-12-31 17:12:48 +08006#include "aml_printf.h"
xiaohu.huangbf62d7b2023-07-18 18:02:43 +08007#include "aml_vsnprintf.h"
8
Xiaohu.Huang448314d2021-12-31 17:12:48 +08009#if (1 == CONFIG_ARM64)
xiaohu.huang1fd6f112022-05-24 11:02:05 +080010#include "serial.h"
Xiaohu.Huang448314d2021-12-31 17:12:48 +080011#else
xiaohu.huang1fd6f112022-05-24 11:02:05 +080012#include "uart.h"
Yao Jie36fc3502024-10-22 16:14:05 +080013__attribute__((__weak__)) int iUartBufPuts(const char *s);
Xiaohu.Huang448314d2021-12-31 17:12:48 +080014#endif
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080015
xiaohu.huangbf62d7b2023-07-18 18:02:43 +080016#define MAX_BUFFER_LEN 512
17
xiaohu.huang9169c492022-11-18 16:30:06 +080018static char printbuffer[MAX_BUFFER_LEN];
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080019
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080020int printf(const char *fmt, ...)
21{
22 va_list args;
xiaohu.huang9169c492022-11-18 16:30:06 +080023 char *p = printbuffer;
24 int n = 0;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080025
26 va_start(args, fmt);
xiaohu.huangbf62d7b2023-07-18 18:02:43 +080027 vsnprintf(p, MAX_BUFFER_LEN, fmt, args);
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080028 va_end(args);
xiaohu.huang9169c492022-11-18 16:30:06 +080029
Yao Jie36fc3502024-10-22 16:14:05 +080030#if (1 == CONFIG_ARM64)
xiaohu.huang9169c492022-11-18 16:30:06 +080031 while (*p) {
32 if ('\n' == *p) {
xiaohu.huang9169c492022-11-18 16:30:06 +080033 vSerialPutChar(ConsoleSerial, '\r');
xiaohu.huang9169c492022-11-18 16:30:06 +080034 n++;
35 }
xiaohu.huang9169c492022-11-18 16:30:06 +080036 vSerialPutChar(ConsoleSerial, *p);
xiaohu.huang9169c492022-11-18 16:30:06 +080037 n++;
38 p++;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080039 }
Yao Jie36fc3502024-10-22 16:14:05 +080040#else
41 if (iUartBufPuts) {
42 n = iUartBufPuts(printbuffer);
43 } else {
44 while (*p) {
45 if ('\n' == *p) {
46 vUartPutc('\r');
47 n++;
48 }
49 vUartPutc(*p);
50 n++;
51 p++;
52 }
53 }
54#endif
xiaohu.huang9169c492022-11-18 16:30:06 +080055
56 return n;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080057}
58
xiaohu.huang9169c492022-11-18 16:30:06 +080059int iprintf(const char *fmt, ...)
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080060{
xiaohu.huang9169c492022-11-18 16:30:06 +080061 va_list args;
62 int n = 0;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080063
xiaohu.huang9169c492022-11-18 16:30:06 +080064 va_start(args, fmt);
65 n = printf(fmt, args);
66 va_end(args);
67
68 return n;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080069}
70
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080071int puts(const char *str)
72{
Xiaohu.Huang448314d2021-12-31 17:12:48 +080073#if (1 == CONFIG_ARM64)
xiaohu.huang9169c492022-11-18 16:30:06 +080074 return vSerialPutString(ConsoleSerial, str);
Xiaohu.Huang448314d2021-12-31 17:12:48 +080075#else
xiaohu.huang9169c492022-11-18 16:30:06 +080076 return vUartPuts(str);
Xiaohu.Huang448314d2021-12-31 17:12:48 +080077#endif
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080078}