o add ff lib
o add ff lib samples o add ff linux sample
This commit is contained in:
214
tools/ffsample/lpc2k/monitor.c
Normal file
214
tools/ffsample/lpc2k/monitor.c
Normal file
@@ -0,0 +1,214 @@
|
||||
#include <stdarg.h>
|
||||
#include "monitor.h"
|
||||
|
||||
|
||||
|
||||
int xatoi (char **str, long *res)
|
||||
{
|
||||
DWORD val;
|
||||
BYTE c, radix, s = 0;
|
||||
|
||||
|
||||
while ((c = **str) == ' ') (*str)++;
|
||||
if (c == '-') {
|
||||
s = 1;
|
||||
c = *(++(*str));
|
||||
}
|
||||
if (c == '0') {
|
||||
c = *(++(*str));
|
||||
if (c <= ' ') {
|
||||
*res = 0; return 1;
|
||||
}
|
||||
if (c == 'x') {
|
||||
radix = 16;
|
||||
c = *(++(*str));
|
||||
} else {
|
||||
if (c == 'b') {
|
||||
radix = 2;
|
||||
c = *(++(*str));
|
||||
} else {
|
||||
if ((c >= '0')&&(c <= '9'))
|
||||
radix = 8;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((c < '1')||(c > '9'))
|
||||
return 0;
|
||||
radix = 10;
|
||||
}
|
||||
val = 0;
|
||||
while (c > ' ') {
|
||||
if (c >= 'a') c -= 0x20;
|
||||
c -= '0';
|
||||
if (c >= 17) {
|
||||
c -= 7;
|
||||
if (c <= 9) return 0;
|
||||
}
|
||||
if (c >= radix) return 0;
|
||||
val = val * radix + c;
|
||||
c = *(++(*str));
|
||||
}
|
||||
if (s) val = -val;
|
||||
*res = val;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void xputc (char c)
|
||||
{
|
||||
if (c == '\n') uart0_put('\r');
|
||||
uart0_put(c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void xputs (const char* str)
|
||||
{
|
||||
while (*str)
|
||||
xputc(*str++);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void xitoa (long val, int radix, int len)
|
||||
{
|
||||
BYTE c, r, sgn = 0, pad = ' ';
|
||||
BYTE s[20], i = 0;
|
||||
DWORD v;
|
||||
|
||||
|
||||
if (radix < 0) {
|
||||
radix = -radix;
|
||||
if (val < 0) {
|
||||
val = -val;
|
||||
sgn = '-';
|
||||
}
|
||||
}
|
||||
v = val;
|
||||
r = radix;
|
||||
if (len < 0) {
|
||||
len = -len;
|
||||
pad = '0';
|
||||
}
|
||||
if (len > 20) return;
|
||||
do {
|
||||
c = (BYTE)(v % r);
|
||||
if (c >= 10) c += 7;
|
||||
c += '0';
|
||||
s[i++] = c;
|
||||
v /= r;
|
||||
} while (v);
|
||||
if (sgn) s[i++] = sgn;
|
||||
while (i < len)
|
||||
s[i++] = pad;
|
||||
do
|
||||
xputc(s[--i]);
|
||||
while (i);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void xprintf (const char* str, ...)
|
||||
{
|
||||
va_list arp;
|
||||
int d, r, w, s, l;
|
||||
|
||||
|
||||
va_start(arp, str);
|
||||
|
||||
while ((d = *str++) != 0) {
|
||||
if (d != '%') {
|
||||
xputc(d); continue;
|
||||
}
|
||||
d = *str++; w = r = s = l = 0;
|
||||
if (d == '0') {
|
||||
d = *str++; s = 1;
|
||||
}
|
||||
while ((d >= '0')&&(d <= '9')) {
|
||||
w += w * 10 + (d - '0');
|
||||
d = *str++;
|
||||
}
|
||||
if (s) w = -w;
|
||||
if (d == 'l') {
|
||||
l = 1;
|
||||
d = *str++;
|
||||
}
|
||||
if (!d) break;
|
||||
if (d == 's') {
|
||||
xputs(va_arg(arp, char*));
|
||||
continue;
|
||||
}
|
||||
if (d == 'c') {
|
||||
xputc((char)va_arg(arp, int));
|
||||
continue;
|
||||
}
|
||||
if (d == 'u') r = 10;
|
||||
if (d == 'd') r = -10;
|
||||
if (d == 'X') r = 16;
|
||||
if (d == 'b') r = 2;
|
||||
if (!r) break;
|
||||
if (l) {
|
||||
xitoa((long)va_arg(arp, long), r, w);
|
||||
} else {
|
||||
if (r > 0)
|
||||
xitoa((unsigned long)va_arg(arp, int), r, w);
|
||||
else
|
||||
xitoa((long)va_arg(arp, int), r, w);
|
||||
}
|
||||
}
|
||||
|
||||
va_end(arp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void put_dump (const BYTE *buff, DWORD ofs, int cnt)
|
||||
{
|
||||
BYTE n;
|
||||
|
||||
|
||||
xprintf("%08lX ", ofs);
|
||||
for(n = 0; n < cnt; n++)
|
||||
xprintf(" %02X", buff[n]);
|
||||
xputc(' ');
|
||||
for(n = 0; n < cnt; n++) {
|
||||
if ((buff[n] < 0x20)||(buff[n] >= 0x7F))
|
||||
xputc('.');
|
||||
else
|
||||
xputc(buff[n]);
|
||||
}
|
||||
xputc('\n');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void get_line (char *buff, int len)
|
||||
{
|
||||
char c;
|
||||
int idx = 0;
|
||||
|
||||
|
||||
for (;;) {
|
||||
c = xgetc();
|
||||
if (c == '\r') break;
|
||||
if ((c == '\b') && idx) {
|
||||
idx--; xputc(c);
|
||||
}
|
||||
if (((BYTE)c >= ' ') && (idx < len - 1)) {
|
||||
buff[idx++] = c; xputc(c);
|
||||
}
|
||||
}
|
||||
buff[idx] = 0;
|
||||
xputc('\n');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user