comparison rvinterf/packetrx.c @ 133:56b53c289785

rvtdump: some restructuring
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 02 Nov 2013 22:24:14 +0000
parents 811b138f1bed
children
comparison
equal deleted inserted replaced
132:2c5160a9d652 133:56b53c289785
12 12
13 #define MAXPKT 512 13 #define MAXPKT 512
14 u_char rxpkt[MAXPKT]; 14 u_char rxpkt[MAXPKT];
15 size_t rxpkt_len; 15 size_t rxpkt_len;
16 16
17 extern char pr_item[];
18
17 static int in_pkt, dle_state, toobig; 19 static int in_pkt, dle_state, toobig;
18 20
19 static void 21 static void
20 process_inbyte(inb) 22 process_inbyte(inb)
21 { 23 {
22 if (!in_pkt) { 24 if (!in_pkt) {
23 if (inb != STX || dle_state) { 25 if (inb != STX || dle_state) {
26 rxpkt_len++;
24 dle_state = (inb == DLE); 27 dle_state = (inb == DLE);
25 return; 28 return;
26 } 29 }
30 if (rxpkt_len) {
31 sprintf(pr_item,
32 "Warning: Rx %u byte%s outside of a packet",
33 (unsigned)rxpkt_len, rxpkt_len != 1 ? "s" : "");
34 print_item();
35 rxpkt_len = 0;
36 }
27 in_pkt = 1; 37 in_pkt = 1;
28 rxpkt_len = 0;
29 toobig = 0; 38 toobig = 0;
30 return; 39 return;
31 } 40 }
32 if (dle_state) { 41 if (dle_state) {
33 dle_state = 0; 42 dle_state = 0;
34 if (inb != STX && inb != DLE) { 43 if (inb != STX && inb != DLE) {
35 printf("Rx framing error: %02X after DLE\n", inb); 44 sprintf(pr_item,
45 "Rx framing error: %02X after DLE\n", inb);
46 print_item();
36 in_pkt = 0; 47 in_pkt = 0;
48 rxpkt_len = 0;
37 return; 49 return;
38 } 50 }
39 goto data; 51 goto data;
40 } 52 }
41 if (inb == DLE) { 53 if (inb == DLE) {
44 } else if (inb == STX) { 56 } else if (inb == STX) {
45 if (!rxpkt_len) 57 if (!rxpkt_len)
46 return; 58 return;
47 in_pkt = 0; 59 in_pkt = 0;
48 handle_rx_packet(); 60 handle_rx_packet();
61 rxpkt_len = 0;
49 return; 62 return;
50 } 63 }
51 data: if (rxpkt_len >= MAXPKT) { 64 data: if (rxpkt_len >= MAXPKT) {
52 if (!toobig) { 65 if (!toobig) {
53 printf("Rx packet too big!\n"); 66 sprintf(pr_item, "Error: Rx packet too big!\n");
67 print_item();
54 toobig = 1; 68 toobig = 1;
55 } 69 }
56 return; 70 return;
57 } 71 }
58 rxpkt[rxpkt_len++] = inb; 72 rxpkt[rxpkt_len++] = inb;