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;