Example usage for io.netty.handler.codec DecoderException DecoderException

List of usage examples for io.netty.handler.codec DecoderException DecoderException

Introduction

In this page you can find the example usage for io.netty.handler.codec DecoderException DecoderException.

Prototype

public DecoderException() 

Source Link

Document

Creates a new instance.

Usage

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);
    }

}