List of usage examples for io.netty.handler.codec DecoderException DecoderException
public DecoderException()
From source file:net.epsilony.utils.codec.modbus.func.ReadBooleanRegistersFunction.java
License:Open Source License
@Override public void decodeResponseData(ByteBuf data, ModbusResponse response) { if (data.readableBytes() < getResponseDataLength()) { throw new DecoderException(); }/*from w w w . j ava 2s . c om*/ ReadBooleanRegistersResponse readBooleanRegistersResponse = (ReadBooleanRegistersResponse) response; readBooleanRegistersResponse.setStartingAddress(startingAddress); int dataContentBytes = data.readUnsignedByte(); if (dataContentBytes != getResponseDataLength() - 1) { throw new DecoderException(); } readBooleanRegistersResponse.setQuantityAndAllocate(quantity); int dataByte = 0; int mask = 0; for (int i = 0; i < quantity; i++) { if (i % 8 == 0) { dataByte = data.readUnsignedByte(); mask = 1; } readBooleanRegistersResponse.setValue(i, (mask & dataByte) != 0); mask <<= 1; } }
From source file:net.epsilony.utils.codec.modbus.func.ReadRegistersFunction.java
License:Open Source License
@Override public void decodeRequestData(ByteBuf data) { if (data.readableBytes() < 4) { throw new DecoderException(); }/* w w w . j a v a 2 s . c o m*/ startingAddress = data.readUnsignedShort(); setQuantity(data.readUnsignedShort()); }
From source file:net.epsilony.utils.codec.modbus.func.ReadWordRegistersFunction.java
License:Open Source License
@Override public void decodeResponseData(ByteBuf data, ModbusResponse response) { if (data.readableBytes() < getResponseDataLength()) { throw new DecoderException(); }/* w ww .j a va2 s . c o m*/ ReadWordRegistersResponse readWordRegistersResponse = (ReadWordRegistersResponse) response; readWordRegistersResponse.setStartingAddress(startingAddress); int dataContentBytes = data.readUnsignedByte(); if (dataContentBytes != getResponseDataLength() - 1) { throw new DecoderException(); } readWordRegistersResponse.setQuantityAndAllocate(quantity); for (int i = 0; i < quantity; i++) { readWordRegistersResponse.setValue(i, data.readUnsignedShort()); } }
From source file:net.epsilony.utils.codec.modbus.handler.ModbusMasterResponseDecoder.java
License:Open Source License
@Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception { if (in.readableBytes() < 6) { return;// www . j a v a2s. c o m } int adupLength = in.getUnsignedShort(in.readerIndex() + 4); int wholeLength = adupLength + 6 + (withCheckSum ? 2 : 0); if (wholeLength > in.readableBytes()) { return; } if (withCheckSum) { checkSum(in, wholeLength); } int transectionId = in.readUnsignedShort(); ModbusRequest request = transectingRequestRetriever.apply(transectionId); if (null == request) { in.readerIndex(in.readerIndex() + wholeLength - 2); out.add(new MissMatchResponse(transectionId)); return; } in.readerIndex(in.readerIndex() + 4); int unitId = in.readUnsignedByte(); if (unitId != request.getUnitId()) { throw new DecoderException(); } int functionCode = in.readUnsignedByte(); if ((functionCode & 0x7F) != request.getFunction().getCode()) { throw new DecoderException(); } ModbusResponse response; if ((functionCode & 0x80) == 0) { switch (functionCode) { case 0x01: { ReadBooleanRegistersResponse bResponse = new ReadBooleanRegistersResponse(); bResponse.setRegisterType(ModbusRegisterType.COIL); response = bResponse; } break; case 0x02: { ReadBooleanRegistersResponse bResponse = new ReadBooleanRegistersResponse(); bResponse.setRegisterType(ModbusRegisterType.DISCRETE_INPUT); response = bResponse; } break; case 0x03: { ReadWordRegistersResponse rResponse = new ReadWordRegistersResponse(); rResponse.setRegisterType(ModbusRegisterType.HOLDING); response = rResponse; break; } case 0x04: { ReadWordRegistersResponse rResponse = new ReadWordRegistersResponse(); rResponse.setRegisterType(ModbusRegisterType.INPUT); response = rResponse; } break; case 0x05: response = new WriteCoilResponse(); break; case 0x06: response = new WriteHoldingResponse(); break; default: throw new UnsupportedFunctionCodeException(); } request.getFunction().decodeResponseData(in, response); } else { ExceptionResponse exResponse = new ExceptionResponse(); exResponse.setFunctionCode(functionCode); exResponse.setExceptionCode(in.readUnsignedByte()); response = exResponse; } response.setTransectionId(transectionId); response.setUnitId(unitId); out.add(response); if (withCheckSum) { in.readerIndex(in.readerIndex() + 2); } }