Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 1 | /* |
yang.li | b06e0a8 | 2022-01-10 17:35:09 +0800 | [diff] [blame] | 2 | * Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved. |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 3 | * |
yang.li | b06e0a8 | 2022-01-10 17:35:09 +0800 | [diff] [blame] | 4 | * SPDX-License-Identifier: MIT |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 5 | */ |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 6 | #include "aml_printf.h" |
xiaohu.huang | bf62d7b | 2023-07-18 18:02:43 +0800 | [diff] [blame] | 7 | #include "aml_vsnprintf.h" |
| 8 | |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 9 | #if (1 == CONFIG_ARM64) |
xiaohu.huang | 1fd6f11 | 2022-05-24 11:02:05 +0800 | [diff] [blame] | 10 | #include "serial.h" |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 11 | #else |
xiaohu.huang | 1fd6f11 | 2022-05-24 11:02:05 +0800 | [diff] [blame] | 12 | #include "uart.h" |
Yao Jie | 36fc350 | 2024-10-22 16:14:05 +0800 | [diff] [blame^] | 13 | __attribute__((__weak__)) int iUartBufPuts(const char *s); |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 14 | #endif |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 15 | |
xiaohu.huang | bf62d7b | 2023-07-18 18:02:43 +0800 | [diff] [blame] | 16 | #define MAX_BUFFER_LEN 512 |
| 17 | |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 18 | static char printbuffer[MAX_BUFFER_LEN]; |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 19 | |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 20 | int printf(const char *fmt, ...) |
| 21 | { |
| 22 | va_list args; |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 23 | char *p = printbuffer; |
| 24 | int n = 0; |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 25 | |
| 26 | va_start(args, fmt); |
xiaohu.huang | bf62d7b | 2023-07-18 18:02:43 +0800 | [diff] [blame] | 27 | vsnprintf(p, MAX_BUFFER_LEN, fmt, args); |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 28 | va_end(args); |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 29 | |
Yao Jie | 36fc350 | 2024-10-22 16:14:05 +0800 | [diff] [blame^] | 30 | #if (1 == CONFIG_ARM64) |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 31 | while (*p) { |
| 32 | if ('\n' == *p) { |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 33 | vSerialPutChar(ConsoleSerial, '\r'); |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 34 | n++; |
| 35 | } |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 36 | vSerialPutChar(ConsoleSerial, *p); |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 37 | n++; |
| 38 | p++; |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 39 | } |
Yao Jie | 36fc350 | 2024-10-22 16:14:05 +0800 | [diff] [blame^] | 40 | #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.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 55 | |
| 56 | return n; |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 57 | } |
| 58 | |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 59 | int iprintf(const char *fmt, ...) |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 60 | { |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 61 | va_list args; |
| 62 | int n = 0; |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 63 | |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 64 | va_start(args, fmt); |
| 65 | n = printf(fmt, args); |
| 66 | va_end(args); |
| 67 | |
| 68 | return n; |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 69 | } |
| 70 | |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 71 | int puts(const char *str) |
| 72 | { |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 73 | #if (1 == CONFIG_ARM64) |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 74 | return vSerialPutString(ConsoleSerial, str); |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 75 | #else |
xiaohu.huang | 9169c49 | 2022-11-18 16:30:06 +0800 | [diff] [blame] | 76 | return vUartPuts(str); |
Xiaohu.Huang | 448314d | 2021-12-31 17:12:48 +0800 | [diff] [blame] | 77 | #endif |
Xiaohu.Huang | 60a7f2f | 2021-10-25 15:40:57 +0800 | [diff] [blame] | 78 | } |