comparison rvinterf/lowlevel/format.c @ 327:05874f1ddacb

rvinterf & rvtdump: new decoding of G23/GPF packets
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 20 Apr 2014 20:39:53 +0000
parents 2f285f20d617
children 2ac2f6d88bb2
comparison
equal deleted inserted replaced
326:7e878e6b9cf7 327:05874f1ddacb
11 #include "../include/limits.h" 11 #include "../include/limits.h"
12 12
13 extern u_char rxpkt[]; 13 extern u_char rxpkt[];
14 extern size_t rxpkt_len; 14 extern size_t rxpkt_len;
15 15
16 char fmtbuf[MAX_PKT_FROM_TARGET*8]; /* size it generously */
17
16 void 18 void
17 print_rv_trace() 19 print_rv_trace()
18 { 20 {
19 char buf[MAX_PKT_FROM_TARGET*4];
20 int i, c; 21 int i, c;
21 char *dp; 22 char *dp;
22 23
23 dp = buf; 24 dp = fmtbuf;
24 strcpy(dp, "RV "); 25 strcpy(dp, "RV ");
25 dp += 3; 26 dp += 3;
26 /* the SWE static ID is sent MSB first */ 27 /* the SWE static ID is sent MSB first */
27 for (i = 1; i <= 4; i++) { 28 for (i = 1; i <= 4; i++) {
28 sprintf(dp, "%02X", rxpkt[i]); 29 sprintf(dp, "%02X", rxpkt[i]);
46 *dp++ = '?'; 47 *dp++ = '?';
47 } else 48 } else
48 *dp++ = c; 49 *dp++ = c;
49 } 50 }
50 *dp = '\0'; 51 *dp = '\0';
51 output_line(buf); 52 output_line(fmtbuf);
52 } 53 }
53 54
54 void 55 void
55 print_l1_trace() 56 print_l1_trace()
56 { 57 {
57 char buf[MAX_PKT_FROM_TARGET*4+1];
58 int i, c; 58 int i, c;
59 char *dp; 59 char *dp;
60 60
61 dp = buf; 61 dp = fmtbuf;
62 strcpy(dp, "L1: "); 62 strcpy(dp, "L1: ");
63 dp += 4; 63 dp += 4;
64 for (i = 1; i < rxpkt_len; i++) { 64 for (i = 1; i < rxpkt_len; i++) {
65 if ((i+1 < rxpkt_len) && 65 if ((i+1 < rxpkt_len) &&
66 (rxpkt[i] == '\r' && rxpkt[i+1] == '\n' || 66 (rxpkt[i] == '\r' && rxpkt[i+1] == '\n' ||
67 rxpkt[i] == '\n' && rxpkt[i+1] == '\r')) { 67 rxpkt[i] == '\n' && rxpkt[i+1] == '\r')) {
68 *dp = '\0'; 68 *dp = '\0';
69 output_line(buf); 69 output_line(fmtbuf);
70 if (i+2 == rxpkt_len) 70 if (i+2 == rxpkt_len)
71 return; 71 return;
72 dp = buf; 72 dp = fmtbuf;
73 *dp++ = '+'; 73 *dp++ = '+';
74 *dp++ = ' '; 74 *dp++ = ' ';
75 i++; 75 i++;
76 continue; 76 continue;
77 } 77 }
90 } else 90 } else
91 *dp++ = c; 91 *dp++ = c;
92 } 92 }
93 /* will get here only if no newline sequence at the end */ 93 /* will get here only if no newline sequence at the end */
94 *dp = '\0'; 94 *dp = '\0';
95 output_line(buf); 95 output_line(fmtbuf);
96 } 96 }
97 97
98 void 98 void
99 print_etm_output_raw() 99 print_etm_output_raw()
100 { 100 {
101 char buf[MAX_PKT_FROM_TARGET*3+2];
102 int i; 101 int i;
103 char *dp; 102 char *dp;
104 103
105 dp = buf; 104 dp = fmtbuf;
106 strcpy(dp, "ETM:"); 105 strcpy(dp, "ETM:");
107 dp += 4; 106 dp += 4;
108 for (i = 1; i < rxpkt_len; i++) { 107 for (i = 1; i < rxpkt_len; i++) {
109 sprintf(dp, " %02X", rxpkt[i]); 108 sprintf(dp, " %02X", rxpkt[i]);
110 dp += 3; 109 dp += 3;
111 } 110 }
112 *dp = '\0'; 111 *dp = '\0';
113 output_line(buf); 112 output_line(fmtbuf);
114 } 113 }
115 114
116 void 115 void
117 print_unknown_packet() 116 print_unknown_packet()
118 { 117 {
119 char buf[MAX_PKT_FROM_TARGET*3+5];
120 int i; 118 int i;
121 char *dp; 119 char *dp;
122 120
123 dp = buf; 121 dp = fmtbuf;
124 strcpy(dp, "UNK:"); 122 strcpy(dp, "UNK:");
125 dp += 4; 123 dp += 4;
126 for (i = 0; i < rxpkt_len; i++) { 124 for (i = 0; i < rxpkt_len; i++) {
127 sprintf(dp, " %02X", rxpkt[i]); 125 sprintf(dp, " %02X", rxpkt[i]);
128 dp += 3; 126 dp += 3;
129 } 127 }
130 *dp = '\0'; 128 *dp = '\0';
131 output_line(buf); 129 output_line(fmtbuf);
132 } 130 }