blob: 96fba9e2b381d49067018e49d43da83866f93f49 [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"
Xiaohu.Huang448314d2021-12-31 17:12:48 +080013#endif
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080014
xiaohu.huangbf62d7b2023-07-18 18:02:43 +080015#define MAX_BUFFER_LEN 512
16
xiaohu.huang9169c492022-11-18 16:30:06 +080017static char printbuffer[MAX_BUFFER_LEN];
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080018
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080019int printf(const char *fmt, ...)
20{
21 va_list args;
xiaohu.huang9169c492022-11-18 16:30:06 +080022 char *p = printbuffer;
23 int n = 0;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080024
25 va_start(args, fmt);
xiaohu.huangbf62d7b2023-07-18 18:02:43 +080026 vsnprintf(p, MAX_BUFFER_LEN, fmt, args);
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080027 va_end(args);
xiaohu.huang9169c492022-11-18 16:30:06 +080028
29 while (*p) {
30 if ('\n' == *p) {
Xiaohu.Huang448314d2021-12-31 17:12:48 +080031#if (1 == CONFIG_ARM64)
xiaohu.huang9169c492022-11-18 16:30:06 +080032 vSerialPutChar(ConsoleSerial, '\r');
Xiaohu.Huang448314d2021-12-31 17:12:48 +080033#else
xiaohu.huang9169c492022-11-18 16:30:06 +080034 vUartPutc('\r');
Xiaohu.Huang448314d2021-12-31 17:12:48 +080035#endif
xiaohu.huang9169c492022-11-18 16:30:06 +080036 n++;
37 }
38#if (1 == CONFIG_ARM64)
39 vSerialPutChar(ConsoleSerial, *p);
40#else
41 vUartPutc(*p);
42#endif
43 n++;
44 p++;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080045 }
xiaohu.huang9169c492022-11-18 16:30:06 +080046
47 return n;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080048}
49
xiaohu.huang9169c492022-11-18 16:30:06 +080050int iprintf(const char *fmt, ...)
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080051{
xiaohu.huang9169c492022-11-18 16:30:06 +080052 va_list args;
53 int n = 0;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080054
xiaohu.huang9169c492022-11-18 16:30:06 +080055 va_start(args, fmt);
56 n = printf(fmt, args);
57 va_end(args);
58
59 return n;
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080060}
61
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080062int puts(const char *str)
63{
Xiaohu.Huang448314d2021-12-31 17:12:48 +080064#if (1 == CONFIG_ARM64)
xiaohu.huang9169c492022-11-18 16:30:06 +080065 return vSerialPutString(ConsoleSerial, str);
Xiaohu.Huang448314d2021-12-31 17:12:48 +080066#else
xiaohu.huang9169c492022-11-18 16:30:06 +080067 return vUartPuts(str);
Xiaohu.Huang448314d2021-12-31 17:12:48 +080068#endif
Xiaohu.Huang60a7f2f2021-10-25 15:40:57 +080069}