1 package net.sf.mbus4j.dataframes.datablocks.vif;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.KILO;
31 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MEGA;
32 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MICRO;
33 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MILLI;
34 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.NANO;
35 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.ONE;
36 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.PICO;
37 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.AMPERE;
38 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.CURRENCY;
39 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DAY;
40 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.HOUR;
41 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.MINUTE;
42 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.MONTH;
43 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.SECOND;
44 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.TIME_AND_DATE;
45 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.VOLT;
46 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.YEAR;
47
48 import java.util.HashMap;
49 import java.util.Map;
50
51
52
53
54
55
56 public enum VifFD implements Vif {
57
58 CREDIT_CURRENCY_E__3(CREDIT, ONE, CURRENCY, -3),
59 CREDIT_CURRENCY_E__2(CREDIT, ONE, CURRENCY, -2),
60 CREDIT_CURRENCY_E__1(CREDIT, ONE, CURRENCY, -1),
61 CREDIT_CURRENCY_E_0(CREDIT, ONE, CURRENCY, 0),
62 DEBIT_CURRENCY_E__3(DEBIT, ONE, CURRENCY, -3),
63 DEBIT_CURRENCY_E__2(DEBIT, ONE, CURRENCY, -2),
64 DEBIT_CURRENCY_E__1(DEBIT, ONE, CURRENCY, -1),
65 DEBIT_CURRENCY_E_0(DEBIT, ONE, CURRENCY, 0),
66 ACCESS_NUMBER("Access Number (transmission count)"),
67 DEVIVE_TYPE("Device type"),
68 MANUFACTURER("Manufacturer"),
69 PARAMETER_SET_IDENTIFICATION("Parameter set identification"),
70 MODEL("Model/Version"),
71 HARDWARE_VERSION("Hardware version #"),
72 FIRMWARE_VERSION("Metrology (firmware) version #"),
73 SOFTWARE_VERSION("Other software version #"),
74 CUSTOMER_LOCATION("Other location"),
75 CUSTOMER("Customer"),
76 ACCESS_CODE_USER("Access Code User"),
77 ACCESS_CODE_OPERATOR("Access Code Operator"),
78 ACCESS_CODE_SYSTEM_OPERATOR("Access Code System Operator"),
79 ACCESS_CODE_DEVELOPER("Access Code Developer"),
80 PASSWORD("Password"),
81 ERROR_FLAGS("Error flags (binary)"),
82 ERROR_MASK("Error mask"),
83 RESERVED_0X19(),
84 DIGITAL_OUTPUT("Digital Output (binary)"),
85 DIGITAL_INPUT("Digital Input (binary)"),
86 BAUDRATE("Baudrate [Baud]"),
87 RESPONSE_DELAY_TIME("Response delay time [bittimes]"),
88 RETRY("Retry"),
89 REMOTE_CONTROL("Remote control (device specific)"),
90 FIRST_STORAGE("First storage # for cyclic storage"),
91 LAST_STORAGE("Last storage # for cyclic storage"),
92 SIZE_OF_STORAGE_BLOCK("Size of storage block"),
93 RESERVED_0X23(),
94 STORAGE_INTERVAL_S(STORAGE_INTERVAL, SECOND),
95 STORAGE_INTERVAL_MIN(STORAGE_INTERVAL, MINUTE),
96 STORAGE_INTERVAL_H(STORAGE_INTERVAL, HOUR),
97 STORAGE_INTERVAL_D(STORAGE_INTERVAL, DAY),
98 STORAGE_INTERVAL_MONTH(STORAGE_INTERVAL, MONTH),
99 STORAGE_INTERVAL_Y(STORAGE_INTERVAL, YEAR),
100 RESERVED_0X2A(),
101 TIME_POINT_S("Time point second (0 to 59)"),
102 DURATION_SINCE_LAST_READOUT_S(DURATION_SINCE_LAST_READOUT, SECOND),
103 DURATION_SINCE_LAST_READOUT_MIN(DURATION_SINCE_LAST_READOUT, MINUTE),
104 DURATION_SINCE_LAST_READOUT_H(DURATION_SINCE_LAST_READOUT, HOUR),
105 DURATION_SINCE_LAST_READOUT_D(DURATION_SINCE_LAST_READOUT, DAY),
106 START_OF_TARIFF("Start of tariff", TIME_AND_DATE),
107 DURATION_OF_TARIFF_MIN(DURATION_OF_TARIFF, MINUTE),
108 DURATION_OF_TARIFF_H(DURATION_OF_TARIFF, HOUR),
109 DURATION_OF_TARIFF_D(DURATION_OF_TARIFF, DAY),
110 PERIOD_OF_TARIFF_S(PERIOD_OF_TARIFF, SECOND),
111 PERIOD_OF_TARIFF_MIN(PERIOD_OF_TARIFF, MINUTE),
112 PERIOD_OF_TARIFF_H(PERIOD_OF_TARIFF, HOUR),
113 PERIOD_OF_TARIFF_D(PERIOD_OF_TARIFF, DAY),
114 PERIOD_OF_TARIFF_MONTH(PERIOD_OF_TARIFF, MONTH),
115 PERIOD_OF_TARIFF_Y(PERIOD_OF_TARIFF, YEAR),
116 DIMENSIONLESS("dimensionless / no VIF"),
117 RESERVED_0X3B(),
118 RESERVED_0X3C(),
119 RESERVED_0X3D(),
120 RESERVED_0X3E(),
121 RESERVED_0X3F(),
122 VOLTAGE_NANO_V_E_0(VOLTAGE, NANO, VOLT, 0),
123 VOLTAGE_NANO_V_E_1(VOLTAGE, NANO, VOLT, 1),
124 VOLTAGE_NANO_V_E_2(VOLTAGE, NANO, VOLT, 2),
125 VOLTAGE_MICRO_V_E_0(VOLTAGE, MICRO, VOLT, 0),
126 VOLTAGE_MICRO_V_E_1(VOLTAGE, MICRO, VOLT, 1),
127 VOLTAGE_MICRO_V_E_2(VOLTAGE, MICRO, VOLT, 2),
128 VOLTAGE_MILLI_V_E_0(VOLTAGE, MILLI, VOLT, 0),
129 VOLTAGE_MILLI_V_E_1(VOLTAGE, MILLI, VOLT, 1),
130 VOLTAGE_MILLI_V_E_2(VOLTAGE, MILLI, VOLT, 2),
131 VOLTAGE_V_E_0(VOLTAGE, ONE, VOLT, 0),
132 VOLTAGE_V_E_1(VOLTAGE, ONE, VOLT, 1),
133 VOLTAGE_V_E_2(VOLTAGE, ONE, VOLT, 2),
134 VOLTAGE_KILO_V_E_0(VOLTAGE, KILO, VOLT, 0),
135 VOLTAGE_KILO_V_E_1(VOLTAGE, KILO, VOLT, 1),
136 VOLTAGE_KILO_V_E_2(VOLTAGE, KILO, VOLT, 2),
137 VOLTAGE_MEGA_V_E_0(VOLTAGE, MEGA, VOLT, 0),
138 CURRENT_PICO_A_E_0(CURRENT, PICO, AMPERE, 0),
139 CURRENT_PICO_A_E_1(CURRENT, PICO, AMPERE, 1),
140 CURRENT_PICO_A_E_2(CURRENT, PICO, AMPERE, 2),
141 CURRENT_NANO_A_E_0(CURRENT, NANO, AMPERE, 0),
142 CURRENT_NANO_A_E_1(CURRENT, NANO, AMPERE, 1),
143 CURRENT_NANO_A_E_2(CURRENT, NANO, AMPERE, 2),
144 CURRENT_MICRO_A_E_0(CURRENT, MICRO, AMPERE, 0),
145 CURRENT_MICRO_A_E_1(CURRENT, MICRO, AMPERE, 1),
146 CURRENT_MICRO_A_E_2(CURRENT, MICRO, AMPERE, 2),
147 CURRENT_MILLI_A_E_0(CURRENT, MILLI, AMPERE, 0),
148 CURRENT_MILLI_A_E_1(CURRENT, MILLI, AMPERE, 1),
149 CURRENT_MILLI_A_E_2(CURRENT, MILLI, AMPERE, 2),
150 CURRENT_A_E_0(CURRENT, ONE, AMPERE, 0),
151 CURRENT_A_E_1(CURRENT, ONE, AMPERE, 1),
152 CURRENT_A_E_2(CURRENT, ONE, AMPERE, 2),
153 CURRENT_KILO_A_E_3(CURRENT, KILO, AMPERE, 0),
154 RESET_COUINTER("Reset counter"),
155 CUMULATION_COUNTER("Cumulation counter"),
156 CONTROL_SIGNAL("Control signal"),
157 DAY_OF_WEEK("Day of week"),
158 WEEK_NUMBER("Week number"),
159 TIMEPOINT_OF_DAY_CHANGE("Timepoint of day change"),
160 STATE_OF_PARAMETER_ACTIVATION("State of parameter activation"),
161 SPECIAL_SUPPLIER_INFORMATION("Special supplier information"),
162 DURATION_SINCE_LAST_CUMULATION_H(DURATION_SINCE_LAST_CUMULATION, HOUR),
163 DURATION_SINCE_LAST_CUMULATION_D(DURATION_SINCE_LAST_CUMULATION, DAY),
164 DURATION_SINCE_LAST_CUMULATION_MONTH(DURATION_SINCE_LAST_CUMULATION, MONTH),
165 DURATION_SINCE_LAST_CUMULATION_Y(DURATION_SINCE_LAST_CUMULATION, YEAR),
166 OPERATIONG_TIME_BATTERY_H(OPERATING_TIME_BYTTERY, HOUR),
167 OPERATIONG_TIME_BATTERY_D(OPERATING_TIME_BYTTERY, DAY),
168 OPERATIONG_TIME_BATTERY_MONTH(OPERATING_TIME_BYTTERY, MONTH),
169 OPERATIONG_TIME_BATTERY_Y(OPERATING_TIME_BYTTERY, YEAR),
170 DATE_AND_TIME_OF_BATTERY_CHANGE("Date and time of battery change", TIME_AND_DATE),
171 RESERVED_0X71(),
172 DAYLIGHT_SAVNING("Day light saving (beginning, ending, deviation"),
173 LISTENING_WINDOW_MANAGEMENT("Listening windeow management"),
174 REMAINING_BATTERY_LIVE_TIME("Remaining battery life time (days)"),
175 NUMBER_OF_TIMES_THE_METER_WAS_STOPPED("#times the meter was stopped"),
176 RESERVED_0X76(),
177 RESERVED_0X77(),
178 RESERVED_0X78(),
179 RESERVED_0X79(),
180 RESERVED_0X7A(),
181 RESERVED_0X7B(),
182 RESERVED_0X7C(),
183 RESERVED_0X7D(),
184 RESERVED_0X7E(),
185 RESERVED_0X7F();
186
187 public static VifFD valueOfTableIndex(byte ordinal) {
188 if (map == null) {
189 map = new HashMap<>(0xFE);
190 for (VifFD val : values()) {
191 map.put((byte) val.ordinal(), val);
192
193 }
194 }
195 return map.get(ordinal);
196 }
197 private final String label;
198 private final SiPrefix siPrefix;
199 private final UnitOfMeasurement unit;
200 private final Integer exponent;
201 private static Map<Byte, VifFD> map;
202
203 private VifFD() {
204 this.label = String.format("VifFD Reserved 0x%02x", ordinal());
205 this.siPrefix = null;
206 this.unit = null;
207 this.exponent = null;
208 }
209
210 private VifFD(String label) {
211 this.label = label;
212 this.siPrefix = null;
213 this.unit = null;
214 this.exponent = null;
215 }
216
217 private VifFD(String label, SiPrefix siPrefix, UnitOfMeasurement unit, int exponent) {
218 this.label = label;
219 this.siPrefix = siPrefix;
220 this.unit = unit;
221 this.exponent = exponent;
222 }
223
224 private VifFD(String label, UnitOfMeasurement unit) {
225 this.label = label;
226 this.siPrefix = null;
227 this.unit = unit;
228 this.exponent = null;
229 }
230
231
232
233
234 @Override
235 public Integer getExponent() {
236 return exponent;
237 }
238
239 @Override
240 public String getLabel() {
241 return label;
242 }
243
244
245
246
247 @Override
248 public SiPrefix getSiPrefix() {
249 return siPrefix;
250 }
251
252 public byte getTableIndex() {
253 return (byte) ordinal();
254 }
255
256
257
258
259 @Override
260 public UnitOfMeasurement getUnitOfMeasurement() {
261 return unit;
262 }
263
264 @Override
265 public String toString() {
266 return VifToString.vifToString(this);
267 }
268
269 public static VifFD assemble(String label, UnitOfMeasurement unitOfMeasurement, SiPrefix siPrefix, Integer exponent) {
270 for (VifFD value : values()) {
271 if (value.getLabel().equals(label) && ((unitOfMeasurement == value.getUnitOfMeasurement()) || ((unitOfMeasurement != null) && unitOfMeasurement.equals(value.getUnitOfMeasurement()))) && ((siPrefix == value.getSiPrefix()) || ((siPrefix != null) && siPrefix.equals(value.getSiPrefix()))) && ((exponent == value.getExponent()) || ((exponent != null) && exponent.equals(value.getExponent())))) {
272 return value;
273 }
274 }
275 return valueOf(label);
276 }
277
278 @Override
279 public VifTypes getVifType() {
280 return VifTypes.FD_EXTENTION;
281 }
282 }