java-org.hwo.servicelink/src/org/hwo/servicelink/ng/ServiceLinkRequestBuffer.java

125 lines
2.3 KiB
Java

package org.hwo.servicelink.ng;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public class ServiceLinkRequestBuffer {
int ax;
int node;
int register;
Object value;
boolean write;
boolean reply;
boolean success;
public ServiceLinkRequestBuffer()
{
}
public void clear() {
ax = 0;
node = 0;
register = 0;
value = null;
write = false;
success = false;
}
@Override
public int hashCode() {
return ((ax & 0x0F) << 20) | ((node & 0x0F) << 16) | ((register & 0xFFFF) << 0) | (write ? 0x01000000 : 0) | (hasFloatValue() ? 0x02000000 : 0);
}
public boolean hasFloatValue() {
return Float.class.isInstance(this.value) || Double.class.isInstance(this.value);
}
public boolean hasIntegerValue() {
return Integer.class.isInstance(this.value);
}
public int getAx() {
return ax;
}
public void setAx(int ax) {
this.ax = ax;
}
public int getNode() {
return node;
}
public void setNode(int node) {
this.node = node;
}
public int getRegister() {
return register;
}
public void setRegister(int register) {
if (register < 0) {
register += 65536;
}
this.register = register;
}
public byte[] getValueAsBytes() {
byte[] v = new byte[4];
if (Float.class.isInstance(value) || Double.class.isInstance(value)) {
ByteBuffer.wrap(v).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().put(Float.floatToIntBits((Float)value));
} else if (Integer.class.isInstance(value)) {
ByteBuffer.wrap(v).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().put((Integer)value);
}
return v;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
if (!Integer.class.isInstance(value) && !Float.class.isInstance(value) && !Double.class.isInstance(value)) {
throw new IllegalArgumentException();
}
this.value = value;
}
public boolean isWrite() {
return write;
}
public void setWrite(boolean write) {
this.write = write;
}
public boolean isReply() {
return reply;
}
public void setReply(boolean reply) {
this.reply = reply;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
@Override
public String toString() {
return String.format("[ServiceLinkRequestBuffer(ax=%d node=%d reg=%d value=%s write=%s success=%s hash=0x%08X)]",ax,node,register,value,write,success,hashCode());
}
}