annotate packages/infra/current/src/diag.cxx @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents bf00f99aec69
children 59d97b6ba612
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 /*========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // diag.c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // Infrastructure diagnostic output code
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
12 // Version 1.1 (the "License"); you may not use this file except in
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
14 // http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
15 //
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
18 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
21 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
24 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
25 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
29 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 //========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Contributors: nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Date: 1999-02-22
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Purpose: Infrastructure diagnostic output
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 // Description: Implementations of infrastructure diagnostic routines.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 //======================================================================*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 #include <pkgconf/system.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 #include <pkgconf/infra.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #include <cyg/infra/cyg_type.h> // base types
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 #include <cyg/infra/diag.h> // HAL polled output
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 #include <cyg/hal/hal_arch.h> // architectural stuff for...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 #include <cyg/hal/hal_intr.h> // interrupt control
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #include <cyg/hal/hal_diag.h> // diagnostic output routines
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 #ifdef CYGDBG_INFRA_DIAG_PRINTF_USE_VARARG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 #include <stdarg.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 #ifdef CYGDBG_INFRA_DIAG_USE_DEVICE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #include <cyg/io/io_diag.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 externC void diag_write_num(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 cyg_uint32 n, /* number to write */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 cyg_ucount8 base, /* radix to write to */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 cyg_ucount8 sign, /* sign, '-' if -ve, '+' if +ve */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 cyg_bool pfzero, /* prefix with zero ? */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 cyg_ucount8 width /* min width of number */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 class Cyg_dummy_diag_init_class {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 public:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 Cyg_dummy_diag_init_class() {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 #ifdef CYGDBG_INFRA_DIAG_USE_DEVICE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 diag_device_init();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 HAL_DIAG_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 #ifdef CYGDBG_INFRA_DIAG_USE_DEVICE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 // Initialize after IO devices.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 static Cyg_dummy_diag_init_class cyg_dummy_diag_init_obj
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 CYGBLD_ATTRIB_INIT_AFTER(CYG_INIT_IO);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 /* Write single char to output */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 externC void diag_write_char(char c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 diag_device_write_char(c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 // Initialize after HAL.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 static Cyg_dummy_diag_init_class cyg_dummy_diag_init_obj
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 CYGBLD_ATTRIB_INIT_AFTER(CYG_INIT_HAL);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 /* Write single char to output */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 #define PREFIX()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 //#define PREFIX() HAL_DIAG_WRITE_CHAR(0x0F)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 externC void diag_write_char(char c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 /* Translate LF into CRLF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 if( c == '\n' )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 PREFIX();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 HAL_DIAG_WRITE_CHAR('\r');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 PREFIX();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 HAL_DIAG_WRITE_CHAR(c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 /* Initialize. Call to pull in diag initializing constructor */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 externC void diag_init(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 /* Write zero terminated string */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 externC void diag_write_string(const char *psz)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 while( *psz ) diag_write_char( *psz++ );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 /* Write decimal value */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 externC void diag_write_dec( cyg_int32 n)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 cyg_ucount8 sign;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 if( n < 0 ) n = -n, sign = '-';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 else sign = '+';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 diag_write_num( n, 10, sign, false, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 /* Write hexadecimal value */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 externC void diag_write_hex( cyg_uint32 n)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 diag_write_num( n, 16, '+', false, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 /* Generic number writing function */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 /* The parameters determine what radix is used, the signed-ness of the */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 /* number, its minimum width and whether it is zero or space filled on */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 /* the left. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 externC void diag_write_num(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 cyg_uint32 n, /* number to write */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 cyg_ucount8 base, /* radix to write to */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 cyg_ucount8 sign, /* sign, '-' if -ve, '+' if +ve */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 cyg_bool pfzero, /* prefix with zero ? */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 cyg_ucount8 width /* min width of number */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 char buf[16];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 cyg_count8 bpos;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 char bufinit = pfzero?'0':' ';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 char *digits = "0123456789ABCDEF";
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 /* init buffer to padding char: space or zero */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 for( bpos = 0; bpos < (cyg_count8)sizeof(buf); bpos++ ) buf[bpos] = bufinit;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 /* Set pos to start */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 bpos = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 /* construct digits into buffer in reverse order */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 if( n == 0 ) buf[bpos++] = '0';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 else while( n != 0 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 cyg_ucount8 d = n % base;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 buf[bpos++] = digits[d];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 n /= base;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 /* set pos to width if less. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 if( (cyg_count8)width > bpos ) bpos = width;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 /* set sign if negative. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 if( sign == '-' )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 if( buf[bpos-1] == bufinit ) bpos--;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 buf[bpos] = sign;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 else bpos--;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 /* Now write it out in correct order. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 while( bpos >= 0 )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 diag_write_char(buf[bpos--]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 /* perform some simple sanity checks on a string to ensure that it */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 /* consists of printable characters and is of reasonable length. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 static cyg_bool diag_check_string( const char *str )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 cyg_bool result = true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 const char *s;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 if( str == NULL ) return false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 for( s = str ; result && *s ; s++ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 char c = *s;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 /* Check for a reasonable length string. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 if( s-str > 256 ) result = false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 /* We only really support CR and NL at present. If we want to
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 * use tabs or other special chars, this test will have to be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 * expanded.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 if( c == '\n' || c == '\r' )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 continue;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 /* Check for printable chars. This assumes ASCII */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 if( c < ' ' || c > '~' )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 result = false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 return result;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 /*----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 externC void diag_vprintf( const char *fmt, CYG_ADDRWORD *args)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 if( !diag_check_string(fmt) )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 int i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 diag_write_string("<Bad format string: ");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 diag_write_hex((cyg_uint32)fmt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 diag_write_string(" :");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 for( i = 0; i < 8; i++ )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 diag_write_char(' ');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 diag_write_hex(args[i]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 diag_write_string(">\n");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 while( *fmt != '\0' )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 char c = *fmt;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 if( c != '%' ) diag_write_char( c );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 cyg_bool pfzero = false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 cyg_count8 width = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278 char sign = '+';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 c = *++fmt;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 if( c == '0' ) pfzero = true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 while( '0' <= c && c <= '9' )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 width = width*10 + c - '0';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 c = *++fmt;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 switch( c )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 case 'd':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293 case 'D':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 long val = (long)(*args++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 if( val < 0 ) val = -val, sign = '-';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 diag_write_num(val, 10, sign, pfzero, width);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 case 'x':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 case 'X':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304 unsigned long val = (long)(*args++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 diag_write_num(val, 16, sign, pfzero, width);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 case 'c':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 case 'C':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 char ch = (char)(*args++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 diag_write_char(ch);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 case 's':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 case 'S':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320 char *s = (char *)(*args++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
321 cyg_count32 len = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 cyg_count32 pre = 0, post = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 if( s == NULL ) s = "<null>";
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325 else if( !diag_check_string(s) )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 diag_write_string("<Not a string: 0x");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 diag_write_hex((cyg_uint32)s);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 s = ">";
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330 if( width > 25 ) width -= 25;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331 pfzero = false;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332 /* Drop through to print the closing ">" */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 /* and pad to the required length. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 while( s[len] != 0 ) len++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 if( width && len > width ) len = width;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 if( pfzero ) pre = width-len;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 else post = width-len;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 while( pre-- > 0 ) diag_write_char(' ');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 while( *s != '\0' && len-- != 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 diag_write_char(*s++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348 while( post-- > 0 ) diag_write_char(' ');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 case 'b':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 case 'B':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 unsigned long val = (unsigned long)(*args++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 cyg_uint32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 if( width == 0 ) width = 32;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 for( i = width-1; i >= 0; i-- )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 diag_write_char( (val&(1<<i))?'1':'.' );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 case '%':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 diag_write_char('%');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 default:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 diag_write_char('%');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 diag_write_char(c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377 fmt++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 /*-----------------------------------------------------------------------*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 /* Formatted diagnostic output. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 #ifdef CYGDBG_INFRA_DIAG_PRINTF_USE_VARARG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387 externC void diag_printf(const char *fmt, ... )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 CYG_ADDRWORD args[8];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 va_list a;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 va_start(a, fmt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 /* Move all of the arguments into simple scalars. This avoids
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 * having to use varargs to define diag_vprintf().
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 args[0] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401 args[1] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 args[2] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 args[3] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 args[4] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 args[5] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 args[6] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 args[7] = va_arg(a,CYG_ADDRWORD);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 va_end(a);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 diag_vprintf( fmt, args);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 /* The prototype for diag_printf in diag.h is defined using K&R syntax */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417 /* to allow us to use a variable number of arguments in the call without */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 /* using ellipses, which would require use of varargs stuff. If we ever */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 /* need to support arguments that are not simple words, we may need to */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 /* use varargs. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 /* For the actual implementation, a normal ANSI C prototype is */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 /* acceptable. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 externC void diag_printf(const char *fmt, CYG_ADDRWORD a1, CYG_ADDRWORD a2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 CYG_ADDRWORD a3, CYG_ADDRWORD a4,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426 CYG_ADDRWORD a5, CYG_ADDRWORD a6,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 CYG_ADDRWORD a7, CYG_ADDRWORD a8)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 CYG_ADDRWORD args[8];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 args[0] = a1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 args[1] = a2;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 args[2] = a3;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 args[3] = a4;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 args[4] = a5;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 args[5] = a6;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 args[6] = a7;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 args[7] = a8;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 diag_vprintf( fmt, args);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
446 static void
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
447 diag_dump_buf_with_offset(cyg_uint8 *p,
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
448 CYG_ADDRWORD s,
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
449 cyg_uint8 *base)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
450 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
451 int i, c;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
452 if ((CYG_ADDRWORD)s > (CYG_ADDRWORD)p) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
453 s = (CYG_ADDRWORD)s - (CYG_ADDRWORD)p;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
454 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
455 while ((int)s > 0) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
456 if (base) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
457 diag_printf("%08X: ", (CYG_ADDRWORD)p - (CYG_ADDRWORD)base);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
458 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
459 diag_printf("%08X: ", p);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
460 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
461 for (i = 0; i < 16; i++) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
462 if (i < (int)s) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
463 diag_printf("%02X", p[i] & 0xFF);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
464 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
465 diag_printf(" ");
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
466 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
467 if ((i % 2) == 1) diag_printf(" ");
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
468 if ((i % 8) == 7) diag_printf(" ");
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
469 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
470 diag_printf(" |");
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
471 for (i = 0; i < 16; i++) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
472 if (i < (int)s) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
473 c = p[i] & 0xFF;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
474 if ((c < 0x20) || (c >= 0x7F)) c = '.';
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
475 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
476 c = ' ';
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
477 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
478 diag_printf("%c", c);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
479 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
480 diag_printf("|\n");
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
481 s -= 16;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
482 p += 16;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
483 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
484 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
485
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
486 externC void
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
487 diag_dump_buf(void *p, CYG_ADDRWORD s)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
488 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
489 diag_dump_buf_with_offset((cyg_uint8 *)p, s, 0);
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
490 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
491
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 /*-----------------------------------------------------------------------*/
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
493 /* EOF infra/diag.c */