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.util.ArrayList;
28 import java.util.List;
29
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33
34
35
36
37
38
39
40
41
42 public class SimpleDataContainer extends DataContainer {
43 private static Logger log = LoggerFactory.getLogger(SimpleDataContainer.class);
44 private List<DataBlock> data = new ArrayList<DataBlock>();
45
46
47
48
49
50
51
52 @Override
53 public void addToDataContainer(int startAddress, int length) {
54 data.add(new DataBlock(startAddress, length));
55 }
56
57
58
59
60
61
62
63 @Override
64 public void addToDataContainer(int startAddress, int[] bytes) {
65 data.add(new DataBlock(startAddress, bytes));
66 }
67
68
69
70
71
72
73
74
75 @Override
76 public DataBlock getDataBlock(int i) {
77 return data.get(i);
78 }
79
80
81
82
83
84
85 @Override
86 public int getDataBlockCount() {
87 return data.size();
88 }
89
90
91
92
93
94
95 public int getLength() {
96 return data.size();
97 }
98
99
100
101
102
103
104
105
106 @Override
107 public int getRawByte(int address) {
108 for (DataBlock db : data) {
109 if (hasAddress(db, address)) {
110 return db.getByteAtPos(address - db.getBaseAddress()) & 0x00ff;
111 }
112 }
113
114 log.error(String.format("No such Address %04x", address));
115
116 return 0x00ff;
117 }
118
119
120
121
122
123
124
125 @Override
126 public void setRawByte(int address, byte theData) {
127 for (DataBlock db : data) {
128 if (hasAddress(db, address)) {
129 db.setByteAtPos(address - db.getBaseAddress(), theData);
130 }
131 }
132
133 log.error(String.format("No such Address %04x", address));
134 }
135
136
137
138
139
140
141 @Override
142 public String toString() {
143 StringBuilder sb = new StringBuilder();
144
145 for (DataBlock db : data) {
146 sb.append(String.format("0x04x :", db.getBaseAddress()));
147
148 for (int i = 0; i < db.getLength(); i++) {
149 sb.append(String.format(" %02x", db.getByteAtPos(i)));
150 }
151 }
152
153 return sb.toString();
154 }
155
156 private boolean hasAddress(DataBlock db, int address) {
157 return (db.getBaseAddress() <= address) && ((db.getBaseAddress() + db.getLength()) > address);
158 }
159 }