FreeCalypso > hg > freecalypso-sw
view rvinterf/lowlevel/format.c @ 992:a7b0b426f9ca
target-utils: boot ROM UART autodetection revamped
The new implementation should work with both the familiar Calypso C035
boot ROM version found in our regular targets as well as the older
Calypso F741979B version found on the vintage D-Sample board.
| author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
|---|---|
| date | Wed, 30 Dec 2015 21:28:41 +0000 |
| parents | 0d7cc054ef72 |
| children | 009d5bf2ff4c |
line wrap: on
line source
/* * This module implements the decoding of Rx packets * into human-readable form. */ #include <sys/types.h> #include <stdio.h> #include <string.h> #include <strings.h> #include "../include/pktmux.h" #include "../include/limits.h" extern u_char rxpkt[]; extern size_t rxpkt_len; static char fmtbuf[MAX_PKT_FROM_TARGET*8]; /* size it generously */ void print_rv_trace() { int i, c; char *dp; dp = fmtbuf; strcpy(dp, "RV "); dp += 3; /* the SWE static ID is sent MSB first */ for (i = 1; i <= 4; i++) { sprintf(dp, "%02X", rxpkt[i]); dp += 2; } /* severity level */ sprintf(dp, " %d ", rxpkt[5]); dp = index(dp, '\0'); for (i = 6; i < rxpkt_len; i++) { c = rxpkt[i]; if (c & 0x80) { *dp++ = 'M'; *dp++ = '-'; c &= 0x7F; } if (c < 0x20) { *dp++ = '^'; *dp++ = c + '@'; } else if (c == 0x7F) { *dp++ = '^'; *dp++ = '?'; } else *dp++ = c; } *dp = '\0'; output_line(fmtbuf); } void print_l1_trace() { int i, c; char *dp; dp = fmtbuf; strcpy(dp, "L1: "); dp += 4; for (i = 1; i < rxpkt_len; i++) { if ((i+1 < rxpkt_len) && (rxpkt[i] == '\r' && rxpkt[i+1] == '\n' || rxpkt[i] == '\n' && rxpkt[i+1] == '\r')) { *dp = '\0'; output_line(fmtbuf); if (i+2 == rxpkt_len) return; dp = fmtbuf; *dp++ = '+'; *dp++ = ' '; i++; continue; } c = rxpkt[i]; if (c & 0x80) { *dp++ = 'M'; *dp++ = '-'; c &= 0x7F; } if (c < 0x20) { *dp++ = '^'; *dp++ = c + '@'; } else if (c == 0x7F) { *dp++ = '^'; *dp++ = '?'; } else *dp++ = c; } /* will get here only if no newline sequence at the end */ *dp = '\0'; output_line(fmtbuf); } void print_g23_trace() { /* messy logic factored out into libg23 */ format_g23_packet(rxpkt, (int)rxpkt_len, fmtbuf); output_line(fmtbuf); } void print_tm_output_raw() { int i; char *dp; dp = fmtbuf; strcpy(dp, "TM:"); dp += 3; for (i = 1; i < rxpkt_len; i++) { sprintf(dp, " %02X", rxpkt[i]); dp += 3; } *dp = '\0'; output_line(fmtbuf); } void print_ati_output() { int i, c; char *dp; dp = fmtbuf; strcpy(dp, "ATI: "); dp += 5; for (i = 1; i < rxpkt_len; i++) { c = rxpkt[i]; if (c & 0x80) { *dp++ = 'M'; *dp++ = '-'; c &= 0x7F; } if (c < 0x20) { *dp++ = '^'; *dp++ = c + '@'; } else if (c == 0x7F) { *dp++ = '^'; *dp++ = '?'; } else *dp++ = c; } *dp = '\0'; output_line(fmtbuf); } void print_fc_lld_msg() { int i, c; char *dp; dp = fmtbuf; strcpy(dp, "LLD: "); dp += 5; for (i = 1; i < rxpkt_len; i++) { c = rxpkt[i]; if (c & 0x80) { *dp++ = 'M'; *dp++ = '-'; c &= 0x7F; } if (c < 0x20) { *dp++ = '^'; *dp++ = c + '@'; } else if (c == 0x7F) { *dp++ = '^'; *dp++ = '?'; } else *dp++ = c; } *dp = '\0'; output_line(fmtbuf); } void report_extui_packet() { sprintf(fmtbuf, "LCD OUT: row %u col %u-%u", rxpkt[1], rxpkt[2], rxpkt[2] + (rxpkt_len - 3) / 2 - 1); output_line(fmtbuf); } void print_unknown_packet() { int i; char *dp; dp = fmtbuf; strcpy(dp, "UNK:"); dp += 4; for (i = 0; i < rxpkt_len; i++) { sprintf(dp, " %02X", rxpkt[i]); dp += 3; } *dp = '\0'; output_line(fmtbuf); }
