@Override
    protected ProtocolStackConfigurer<Message> getStackConfigurer(Transport transport) {
        if (!(transport instanceof CANTransport)) {
            throw new PlcRuntimeException("Generic CAN Driver requires CAN Transport instance");
        }

        CANTransport<Message> canTransport = (CANTransport<Message>) transport;
        return CustomProtocolStackConfigurer.builder(canTransport.getMessageType(), canTransport::getMessageInput)
            .withProtocol(cfg -> {
                GenericCANProtocolLogic protocolLogic = new GenericCANProtocolLogic();
                ConfigurationFactory.configure(cfg, protocolLogic);
                return new CANDriverAdapter<>(protocolLogic,
                    canTransport.getMessageType(), canTransport.adapter(),
                    new GenericCANFrameDataHandler(canTransport::getTransportFrameBuilder),
                    new GenericCANTagHandler()
                );
            })
            .withDriverContext(cfg -> new GenericCANDriverContext())
            .withPacketSizeEstimator(cfg -> canTransport.getEstimator())
            .littleEndian()
            .build();
    }
This protocol doesn't have a disconnect procedure, so there is no need to wait for a login to finish.
@return false
plc4j/drivers/can/src/main/java/org/apache/plc4x/java/can/generic/GenericCANDriver.java