package mods.eln.sixnode.modbusrtu; import mods.eln.Eln; import mods.eln.misc.Coordonate; import mods.eln.misc.Utils; import mods.eln.sixnode.wirelesssignal.IWirelessSignalTx; import mods.eln.sixnode.wirelesssignal.tx.WirelessSignalTxElement; import net.minecraft.nbt.NBTTagCompound; public class ServerWirelessTxStatus extends WirelessTxStatus implements IWirelessSignalTx, IModbusSlot { private ModbusRtuElement rtu; Coordonate coordonate; short getHoldingRegister_1; short setHoldingRegister_0; public ServerWirelessTxStatus(String name, int id, double value, Coordonate coordonate, int uuid, ModbusRtuElement rtu) { super(name, id, value, uuid); this.coordonate = coordonate; WirelessSignalTxElement.channelRegister(this); this.rtu = rtu; rtu.mapping.add(this); } public ServerWirelessTxStatus(NBTTagCompound nbt, String str, ModbusRtuElement rtu) { super(); readFromNBT(nbt, str); this.coordonate = rtu.sixNode.coordonate; WirelessSignalTxElement.channelRegister(this); this.rtu = rtu; rtu.mapping.add(this); } public void setName(String name) { WirelessSignalTxElement.channelRemove(this); super.setName(name); WirelessSignalTxElement.channelRegister(this); } public void delete() { rtu.mapping.remove(this); WirelessSignalTxElement.channelRemove(this); } @Override public Coordonate getCoordonate() { return coordonate; } @Override public int getRange() { return Eln.instance.wirelessTxRange; } @Override public String getChannel() { return name; } @Override public double getValue() { return value; } public void setValue(double value) { this.value = value; } @Override public int getOffset() { return id; } @Override public int getSize() { return 4; } @Override public boolean getCoil(int id) { switch (id) { case 1: return value >= 0.5; } return false; } @Override public short getHoldingRegister(int id) { switch (id) { case 1: float v = (float) getValue(); getHoldingRegister_1 = Utils.modbusToShort(v, 1); return Utils.modbusToShort(v, 0); case 2: return getHoldingRegister_1; case 3: return (short) (65535.0 * getValue()); } return 0; } @Override public boolean getInput(int id) { return false; } @Override public short getInputRegister(int id) { return 0; } @Override public void setCoil(int id, boolean value) { switch (id) { case 1: setValue(value ? 1.0 : 0.0); break; } } @Override public void setHoldingRegister(int id, short value) { switch (id) { case 1: setHoldingRegister_0 = value; break; case 2: setValue(Utils.modbusToFloat(setHoldingRegister_0, value)); break; case 3: setValue((double) ((int) value & 0xFFFF) / 65535.0); break; } } @Override public void setInput(int id, boolean value) { } @Override public void setInputRegister(int id, short value) { } @Override public void writeCoil(int id, boolean value) { setCoil(id, value); } @Override public void writeHoldingRegister(int id, short value) { setHoldingRegister(id, value); } }