1 /*
2  * @ : Copyright (c) 2021 Phytium Information Technology, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0.
5  *
6  * @Date: 2021-04-07 09:53:07
7  * @LastEditTime: 2021-05-26 15:20:14
8  * @Description:  This files is for printf function
9  *
10  * @Modify History:
11  *  Ver   Who        Date         Changes
12  * ----- ------     --------    --------------------------------------
13  */
14 
15 #include "ft_printf.h"
16 #include "stdio.h"
17 #include "ft_aarch32_asm.h"
18 
19 static char print_buffer[PRINTF_BUFFER_LENGTH];
20 
21 extern void outbyte(char byte);
22 
23 vsprintf_p Vsprintf_pFun = (vsprintf_p)vsprintf;
24 
Ft_vsprintfRegister(vsprintf_p f)25 void Ft_vsprintfRegister(vsprintf_p f)
26 {
27     Vsprintf_pFun = f;
28 }
29 
Ft_printf(const char * fmt,...)30 void Ft_printf(const char *fmt, ...)
31 {
32     va_list args;
33     size_t i;
34     size_t length;
35 #ifdef NEED_CLOSE_ISR
36     IRQ_DISABLE();
37 #endif
38     va_start(args, fmt);
39 
40     length = Vsprintf_pFun(print_buffer, fmt, args);
41     va_end(args);
42     for (i = 0; i < length; i++)
43     {
44         outbyte(print_buffer[i]);
45     }
46 
47 #ifdef NEED_CLOSE_ISR
48     IRQ_ENABLE();
49 #endif
50 }
51 
Ft_itoa(int num,char * str,int radix)52 char *Ft_itoa(int num, char *str, int radix)
53 {
54     char index[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
55     unsigned unum;
56     int i = 0;
57     int j;
58     int k;
59     char temp;
60 
61     if (radix == 10 && num < 0)
62     {
63         unum = (unsigned)-num;
64         str[i++] = '-';
65     }
66     else
67     {
68         unum = (unsigned)num;
69     }
70 
71     do
72     {
73         str[i++] = index[unum % (unsigned)radix];
74         unum /= radix;
75     } while (unum);
76 
77     str[i] = '\0';
78 
79     if (str[0] == '-')
80     {
81         k = 1;
82     }
83     else
84     {
85         k = 0;
86     }
87 
88     for (j = k; j <= (i - 1) / 2; j++)
89     {
90         temp = str[j];
91         str[j] = str[i - 1 + k - j];
92         str[i - 1 + k - j] = temp;
93     }
94 
95     return str;
96 }
97