View Javadoc
1   package net.sf.mbus4j.dataframes.datablocks.vif;
2   
3   /*
4    * #%L
5    * mbus4j-core
6    * %%
7    * Copyright (C) 2009 - 2014 MBus4J
8    * %%
9    * mbus4j - Drivers for the M-Bus protocol - http://mbus4j.sourceforge.net/
10   * Copyright (C) 2009-2014, mbus4j.sf.net, and individual contributors as indicated
11   * by the @authors tag. See the copyright.txt in the distribution for a
12   * full listing of individual contributors.
13   * 
14   * This is free software; you can redistribute it and/or modify it
15   * under the terms of the GNU General Public License as
16   * published by the Free Software Foundation; either version 3 of
17   * the License, or (at your option) any later version.
18   * 
19   * This software is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22   * Lesser General Public License for more details.
23   * 
24   * You should have received a copy of the GNU Lesser General Public
25   * License along with this software; if not, write to the Free
26   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
28   * #L%
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   * @author arnep@users.sourceforge.net
54   * @version $Id: VifFD.java 163 2016-10-07 18:53:55Z arnep $
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                 //             System.out.println(String.format("0x%02x %s\t%s\t%s", val.ordinal(), val, val.getUnitOfMeasurement(), val.getExponent()));
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      * @return the exponent
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      * @return the siPrefix
246      */
247     @Override
248     public SiPrefix getSiPrefix() {
249         return siPrefix;
250     }
251 
252     public byte getTableIndex() {
253         return (byte) ordinal();
254     }
255 
256     /**
257      * @return the unit
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 }