com.intelligt.modbus.jlibmodbus.data.mei.ReadDeviceIdentificationInterface Maven / Gradle / Ivy
package com.intelligt.modbus.jlibmodbus.data.mei;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.TreeMap;
/*
* Copyright (C) 2016 "Invertor" Factory", JSC
* [http://www.sbp-invertor.ru]
*
* This file is part of JLibModbus.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Authors: Vladislav Y. Kochedykov, software engineer.
* email: [email protected]
*/
public class ReadDeviceIdentificationInterface {
final static public int BASIC_OBJECT_COUNT = 3;
final static public int REGULAR_OBJECT_COUNT = 0x7D;
final static public int EXTENDED_OBJECT_COUNT = 0x7F;
final static public int OBJECT_ID_VENDOR_NAME = 0;
final static public int OBJECT_ID_PRODUCT_CODE = 1;
final static public int OBJECT_ID_MAJOR_MINOR_REVISION = 2;
final static public int OBJECT_ID_VENDOR_URL = 3;
final static public int OBJECT_ID_PRODUCT_NAME = 4;
final static public int OBJECT_ID_MODEL_NAME = 5;
final static public int OBJECT_ID_USER_APPLICATION_NAME = 6;
final private DataObjectsHolder dataObjectsBasic = new DataObjectsHolder(BASIC_OBJECT_COUNT);
final private DataObjectsHolder dataObjectsRegular = new DataObjectsHolder(REGULAR_OBJECT_COUNT);
final private DataObjectsHolder dataObjectsExtended = new DataObjectsHolder(EXTENDED_OBJECT_COUNT);
public ReadDeviceIdentificationInterface() {
for (int i = 0; i < BASIC_OBJECT_COUNT; i++)
dataObjectsBasic.add(new DataObject(i, new byte[0]));
}
DataObjectsHolder getDataObjectsHolder(int id) {
if (id < 0)
throw new IllegalArgumentException();
if (id >= REGULAR_OBJECT_COUNT)
return dataObjectsExtended;
if (id >= BASIC_OBJECT_COUNT)
return dataObjectsRegular;
return dataObjectsBasic;
}
public void setValue(int id, String value) {
setValue(new DataObject(id, value.getBytes(Charset.forName("UTF-8"))));
}
public void setValue(DataObject dataObject) {
getDataObjectsHolder(dataObject.getId()).add(dataObject);
}
public DataObject getValue(int id) {
return getDataObjectsHolder(id).get(id);
}
public DataObject getVendorName() {
return getValue(OBJECT_ID_VENDOR_NAME);
}
public void setVendorName(String value) {
setValue(OBJECT_ID_VENDOR_NAME, value);
}
public DataObject getProductCode() {
return getValue(OBJECT_ID_PRODUCT_CODE);
}
public void setProductCode(String value) {
setValue(OBJECT_ID_PRODUCT_CODE, value);
}
public DataObject getMajorMinorRevision() {
return getValue(OBJECT_ID_MAJOR_MINOR_REVISION);
}
public void setMajorMinorRevision(String value) {
setValue(OBJECT_ID_MAJOR_MINOR_REVISION, value);
}
public DataObject getVendorUrl() {
return getValue(OBJECT_ID_VENDOR_URL);
}
public void setVendorUrl(String value) {
setValue(OBJECT_ID_VENDOR_URL, value);
}
public DataObject getProductName() {
return getValue(OBJECT_ID_PRODUCT_NAME);
}
public void setProductName(String value) {
setValue(OBJECT_ID_PRODUCT_NAME, value);
}
public DataObject getModelName() {
return getValue(OBJECT_ID_MODEL_NAME);
}
public void setModelName(String value) {
setValue(OBJECT_ID_MODEL_NAME, value);
}
public DataObject getUserApplicationName() {
return getValue(OBJECT_ID_USER_APPLICATION_NAME);
}
public void setUserApplicationName(String value) {
setValue(OBJECT_ID_USER_APPLICATION_NAME, value);
}
public DataObject[] getBasic() {
return dataObjectsBasic.toArray();
}
public DataObject[] getRegular() {
return dataObjectsRegular.toArray();
}
public DataObject[] getExtended() {
return dataObjectsExtended.toArray();
}
static public class DataObject {
final private int id;
private byte[] value;
public DataObject(int id, byte[] value) {
this.id = id;
setValue(value);
}
public int getId() {
return id;
}
public byte[] getValue() {
return Arrays.copyOf(value, value.length);
}
public void setValue(byte[] value) {
this.value = Arrays.copyOf(value, value.length);
}
}
static private class DataObjectsHolder {
final private int capacity;
final TreeMap map;
public DataObjectsHolder(int capacity) {
this.capacity = capacity;
map = new TreeMap();
}
public void add(DataObject dataObject) {
if (map.containsKey(dataObject.getId())) {
map.get(dataObject.getId()).setValue(dataObject.getValue());
} else if (map.size() < capacity) {
map.put(dataObject.getId(), dataObject);
}
}
public DataObject get(int id) {
return map.get(id);
}
public DataObject[] toArray() {
return map.values().toArray(new DataObject[map.size()]);
}
}
}
© 2015 - 2026 Weber Informatics LLC | Privacy Policy