comparison rvinterf/tmsh/omr.c @ 979:ebdf5afa9fb5

fc-tmsh: omr responses parsed and formatted in a readable manner
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Thu, 10 Dec 2015 04:28:19 +0000
parents 1ee80bcb0fd0
children a0879ce32d2c
comparison
equal deleted inserted replaced
978:1ee80bcb0fd0 979:ebdf5afa9fb5
12 #include "localtypes.h" 12 #include "localtypes.h"
13 #include "tm3.h" 13 #include "tm3.h"
14 14
15 extern u_char rvi_msg[]; 15 extern u_char rvi_msg[];
16 extern int rvi_msg_len; 16 extern int rvi_msg_len;
17
18 static void
19 memdump_line(off, inbuf, len)
20 u_char *inbuf;
21 {
22 char outbuf[80], *dp;
23 int i, c;
24
25 sprintf(outbuf, "omr %02X: ", off);
26 dp = index(outbuf, '\0');
27 for (i = 0; i < 16; i++) {
28 if (i < len)
29 sprintf(dp, "%02X ", inbuf[i]);
30 else
31 strcpy(dp, " ");
32 dp += 3;
33 if (i == 7 || i == 15)
34 *dp++ = ' ';
35 }
36 for (i = 0; i < len; i++) {
37 c = inbuf[i];
38 if (c < ' ' || c > '~')
39 c = '.';
40 *dp++ = c;
41 }
42 *dp = '\0';
43 async_msg_output(outbuf);
44 }
45
46 void
47 handle_omr_response()
48 {
49 int off, len;
50
51 if (rvi_msg[3]) {
52 print_etm_pkt_raw("TM3 memread error");
53 return;
54 }
55 if (rvi_msg_len < 10) {
56 bad: print_etm_pkt_raw("omr bad resp");
57 return;
58 }
59 if (rvi_msg[5] || rvi_msg[6] || rvi_msg[7])
60 goto bad;
61 if (rvi_msg_len != rvi_msg[4] + 9)
62 goto bad;
63 for (off = 0; off < rvi_msg[4]; off += len) {
64 len = rvi_msg[4] - off;
65 if (len > 16)
66 len = 16;
67 memdump_line(off, rvi_msg + 8 + off, len);
68 }
69 }
17 70
18 void 71 void
19 cmd_omr(argc, argv) 72 cmd_omr(argc, argv)
20 char **argv; 73 char **argv;
21 { 74 {