All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gurux.dlms.enums.Conformance Maven / Gradle / Ivy

There is a newer version: 4.0.72
Show newest version
package gurux.dlms.enums;

import java.util.HashSet;
import java.util.Set;

/**
 * Enumerates all conformance bits.
* Client is using conformance to tell what kind of services it's interested and * server is using conformance to tell what kind of services it can offer. All * services enumerated here are not necessary supported by the client or the * server.
* https://www.gurux.fi/Gurux.DLMS.Conformance */ public enum Conformance { /** * None conformace is reserved for internal use. */ NONE(0), /** * Reserved zero conformance bit.
* Not used at the moment. */ RESERVED_ZERO(0x1), /** * Is General Protection supported by the meter or is client interested from * General Protection.
* General Protection is used to secure connection between client and the * meter using Symmetric or ASymmetric ciphering or General Signing. */ GENERAL_PROTECTION(0x2), /** * General Block Transfer mechanism is used to transport data that size is * longer than PDU size. */ GENERAL_BLOCK_TRANSFER(0x4), /** * Is Read supported by the meter or is client interested from Read.
* Read is used with Short Name Referencing to read value from the meter. */ READ(0x8), /** * Is Write supported by the meter or is client interested from write data * to the meter.
* Write is used with Short Name Referencing to write value to the meter. */ WRITE(0x10), /** * Is Unconfirmed Write supported by the meter or is client interested from * write unconfirmed data to the meter.
* Unconfirmed Write is used with Short Name Referencing to write value * without confirmation from success to the meter. */ UN_CONFIRMED_WRITE(0x20), /** * Delta value encoding. */ DELTA_VALUE_ENCODING(0x40), /** * Reserved seven conformance bit.
* Not used at the moment. */ RESERVED_SEVEN(0x80), /** * Is Attribute Set supported by the meter or is client interested from * write data with Attribute 0 to the meter.
* Attribute 0 Set means that all COSEM object's attributes can be write * with one message. */ ATTRIBUTE_0_SUPPORTED_WITH_SET(0x100), /** * Is Priority Management supported by the meter or is client interested * from Priority Management.
* Priority Management is used by Logical Name referencing to handle urgent * messages. */ PRIORITY_MGMT_SUPPORTED(0x200), /** * Is Attribute get supported by the meter or is client interested from read * data with Attribute 0 from the meter.
* Attribute 0 Get means that all COSEM object's attributes can be read with * one message. */ ATTRIBUTE_0_SUPPORTED_WITH_GET(0x400), /** * Is Block transfer supported by the meter or is client interested from * read data with blocks from the meter.
* Read Block transfer is used to read data from the meter that is not fit * to one PDU. Example reading historical data might take more than one PDU * and then block transfer is used. */ BLOCK_TRANSFER_WITH_GET_OR_READ(0x800), /** * Is Block transfer supported by the meter or is client interested from * writing data with blocks to the meter.
* Write Block transfer is used to write data from the meter that is not fit * to one PDU. Example updating image (Firmware) might take more than one * PDU and then block transfer is used. */ BLOCK_TRANSFER_WITH_SET_OR_WRITE(0x1000), /** * Is Block with action transfer supported by the meter or is client * interested from sending action data with blocks to the meter.
* Action Block transfer is used to send action data from the meter that is * not fit to one PDU. Example Public Key transfer might take more than one * PDU and then block transfer with action is used. */ BLOCK_TRANSFER_WITH_ACTION(0x2000), /** * Is multiple references supported by the meter or is client interested * from multiple references.
* Multiple references is used when reading or writing several object with * one message. Example ReadByList is using it. */ MULTIPLE_REFERENCES(0x4000), /** * Is Information reports supported by the meter.
* Information reports is used with Short Name Referencing * * @see DATA_NOTIFICATION * @see EVENT_NOTIFICATION */ INFORMATION_REPORT(0x8000), /** * Is Data Notification supported by the meter. * * @see INFORMATION_REPORT * @see EVENT_NOTIFICATION */ DATA_NOTIFICATION(0x10000), /** * Is Access service supported by the meter or is client interested from * Access service.
* Using Access service client can make several Read, Write or Action * requests with one command. */ ACCESS(0x20000), /** * Is parameterized access supported by the meter or is client interested * from parameterized access.
* Parameterized access is used with Short Name Referencing example if * Profile Generic is read by range or entry. * * @see SELECTIVE_ACCESS */ PARAMETERIZED_ACCESS(0x40000), /** * Is Get supported by the meter or is client interested from Get.
* Get is used with Logical Name Referencing to read value from the meter. */ GET(0x80000), /** * Is Set supported by the meter or is client interested from Set.
* Set is used with Logical Name Referencing to write value to the meter. */ SET(0x100000), /** * Is selective access supported by the meter or is client interested from * selective access.
* Selective access is used with Logical Name Referencing example if Profile * Generic is read by range or entry. * * @see PARAMETERIZED_ACCESS */ SELECTIVE_ACCESS(0x200000), /** * Is Event Notification supported by the meter.
* Meter is using Event Notifications with Logical Name referencing to send * events for given target. Example if power down occurred. Note! Client do * not need to have connection to the server when event notification is * send. * * @see INFORMATION_REPORT * @see DATA_NOTIFICATION */ EVENT_NOTIFICATION(0x400000), /** * Is actions supported by the meter or is client interested from actions. *
* Actions are used example to reset historical data. */ ACTION(0x800000); private int value; /* * Constructor. */ Conformance(final int forValue) { value = forValue; } /* * Get integer value for enumerator. */ public int getValue() { return value; } public static Conformance[] getEnumConstants() { return new Conformance[] { ACTION, EVENT_NOTIFICATION, SELECTIVE_ACCESS, SET, GET, PARAMETERIZED_ACCESS, ACCESS, DATA_NOTIFICATION, INFORMATION_REPORT, MULTIPLE_REFERENCES, BLOCK_TRANSFER_WITH_ACTION, BLOCK_TRANSFER_WITH_SET_OR_WRITE, BLOCK_TRANSFER_WITH_GET_OR_READ, ATTRIBUTE_0_SUPPORTED_WITH_GET, PRIORITY_MGMT_SUPPORTED, ATTRIBUTE_0_SUPPORTED_WITH_SET, RESERVED_SEVEN, DELTA_VALUE_ENCODING, UN_CONFIRMED_WRITE, WRITE, READ, GENERAL_BLOCK_TRANSFER, GENERAL_PROTECTION, RESERVED_ZERO }; } /** * Converts the integer value to enumerated value. * * @param value * The integer value, which is read from the device. * @return The enumerated value, which represents the integer. */ public static Set forValue(final int value) { Set types = new HashSet(); Conformance[] enums = getEnumConstants(); for (int pos = 0; pos != enums.length; ++pos) { if ((enums[pos].value & value) == enums[pos].value) { types.add(enums[pos]); } } return types; } /** * Converts the enumerated value to integer value. * * @param value * The enumerated value. * @return The integer value. */ public static int toInteger(final Set value) { if (value == null) { return 0; } int tmp = 0; for (Conformance it : value) { tmp |= it.getValue(); } return tmp; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy