1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package net.sf.openv4j.protocolhandlers;
26
27 import java.io.BufferedReader;
28 import java.io.IOException;
29 import java.io.InputStream;
30 import java.io.InputStreamReader;
31
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 import net.sf.openv4j.DataPoint;
36
37
38
39
40
41
42
43
44
45
46 public abstract class DataContainer extends MemoryImage {
47 private static Logger log = LoggerFactory.getLogger(DataContainer.class);
48
49
50
51
52
53
54
55 public abstract void addToDataContainer(int startAddress, int length);
56
57
58
59
60
61
62
63
64
65 public abstract void addToDataContainer(int startAddress, int[] data);
66
67
68
69
70
71
72
73
74
75 public void addToDataContainer(DataPoint dataPoint, int[] data) {
76 if (dataPoint.getLength() != data.length) {
77 throw new IllegalArgumentException(String.format("Lenght of datapoint %s (%d) must match lenght of data (%d)", dataPoint.getName(), dataPoint.getLength(), data.length));
78 }
79
80 addToDataContainer(dataPoint.getAddr(), data);
81 }
82
83
84
85
86
87
88
89
90 public abstract DataBlock getDataBlock(int i);
91
92
93
94
95
96
97 public abstract int getDataBlockCount();
98
99
100
101
102
103
104 public void addMemoryImageLine(String line) {
105 String[] splitted = line.split(" ");
106 int address = -1;
107
108 for (int i = 0; i < splitted.length; i++) {
109 if (i == 0) {
110 address = Integer.parseInt(splitted[0], 16);
111 addToDataContainer(address, 16);
112 } else {
113 if ((splitted[i].length() != 0) && (!"|".equals(splitted[i]))) {
114 setRawByte(address, (byte) Integer.parseInt(splitted[i], 16));
115 address++;
116 }
117 }
118 }
119 }
120
121
122
123
124
125
126 public void addToDataContainer(DataPoint dataPoint) {
127 addToDataContainer(dataPoint.getAddr(), dataPoint.getLength());
128 }
129
130
131
132
133
134
135
136
137 public void readFromStream(InputStream in) throws IOException {
138 BufferedReader br = new BufferedReader(new InputStreamReader(in));
139 String line;
140
141 while ((line = br.readLine()) != null) {
142 addMemoryImageLine(line);
143 }
144 }
145 }