FreeCalypso > hg > freecalypso-sw
comparison rvinterf/lowlevel/packetrx.c @ 174:3256dc6e84ae
rvinterf: refactored rvtdump compiles and works
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Fri, 22 Nov 2013 07:41:31 +0000 |
parents | f42854da4563 |
children | 2f285f20d617 |
comparison
equal
deleted
inserted
replaced
173:f42854da4563 | 174:3256dc6e84ae |
---|---|
4 | 4 |
5 #include <sys/types.h> | 5 #include <sys/types.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <unistd.h> | 8 #include <unistd.h> |
9 #include "pktmux.h" | 9 #include "../pktmux.h" |
10 #include "../limits.h" | |
10 | 11 |
11 extern int target_fd; | 12 extern int target_fd; |
12 | 13 |
13 #define MAXPKT 512 | 14 u_char rxpkt[MAX_PKT_FROM_TARGET]; |
14 u_char rxpkt[MAXPKT]; | |
15 size_t rxpkt_len; | 15 size_t rxpkt_len; |
16 | |
17 extern char pr_item[]; | |
18 | 16 |
19 static int in_pkt, dle_state, toobig; | 17 static int in_pkt, dle_state, toobig; |
20 | 18 |
21 static void | 19 static void |
22 process_inbyte(inb) | 20 process_inbyte(inb) |
23 { | 21 { |
22 char errbuf[128]; | |
23 | |
24 if (!in_pkt) { | 24 if (!in_pkt) { |
25 if (inb != STX || dle_state) { | 25 if (inb != STX || dle_state) { |
26 rxpkt_len++; | 26 rxpkt_len++; |
27 dle_state = (inb == DLE); | 27 dle_state = (inb == DLE); |
28 return; | 28 return; |
29 } | 29 } |
30 if (rxpkt_len) { | 30 if (rxpkt_len) { |
31 sprintf(pr_item, | 31 sprintf(errbuf, |
32 "Warning: Rx %u byte%s outside of a packet", | 32 "Warning: Rx %u byte%s outside of a packet", |
33 (unsigned)rxpkt_len, rxpkt_len != 1 ? "s" : ""); | 33 (unsigned)rxpkt_len, rxpkt_len != 1 ? "s" : ""); |
34 print_item(); | 34 output_line(errbuf); |
35 rxpkt_len = 0; | 35 rxpkt_len = 0; |
36 } | 36 } |
37 in_pkt = 1; | 37 in_pkt = 1; |
38 toobig = 0; | 38 toobig = 0; |
39 return; | 39 return; |
40 } | 40 } |
41 if (dle_state) { | 41 if (dle_state) { |
42 dle_state = 0; | 42 dle_state = 0; |
43 if (inb != STX && inb != DLE) { | 43 if (inb != STX && inb != DLE) { |
44 sprintf(pr_item, | 44 sprintf(errbuf, |
45 "Rx framing error: %02X after DLE\n", inb); | 45 "Rx framing error: %02X after DLE", inb); |
46 print_item(); | 46 output_line(errbuf); |
47 in_pkt = 0; | 47 in_pkt = 0; |
48 rxpkt_len = 0; | 48 rxpkt_len = 0; |
49 return; | 49 return; |
50 } | 50 } |
51 goto data; | 51 goto data; |
59 in_pkt = 0; | 59 in_pkt = 0; |
60 handle_rx_packet(); | 60 handle_rx_packet(); |
61 rxpkt_len = 0; | 61 rxpkt_len = 0; |
62 return; | 62 return; |
63 } | 63 } |
64 data: if (rxpkt_len >= MAXPKT) { | 64 data: if (rxpkt_len >= MAX_PKT_FROM_TARGET) { |
65 if (!toobig) { | 65 if (!toobig) { |
66 sprintf(pr_item, "Error: Rx packet too big!\n"); | 66 output_line("Error: Rx packet too big!"); |
67 print_item(); | |
68 toobig = 1; | 67 toobig = 1; |
69 } | 68 } |
70 return; | 69 return; |
71 } | 70 } |
72 rxpkt[rxpkt_len++] = inb; | 71 rxpkt[rxpkt_len++] = inb; |