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

        final CANTransport<Message> canTransport = (CANTransport<Message>) transport;
        return CustomProtocolStackConfigurer.builder(canTransport.getMessageType(), canTransport::getMessageInput)
            .withProtocol(cfg -> {
                CANOpenProtocolLogic protocolLogic = new CANOpenProtocolLogic();
                ConfigurationFactory.configure(cfg, protocolLogic);
                return new CANDriverAdapter<>(protocolLogic,
                    canTransport.getMessageType(), canTransport.adapter(),
                    new CANOpenFrameDataHandler(canTransport::getTransportFrameBuilder),
                    new CANOpenTagHandler()
                );
            })
            .withDriverContext(cfg -> new CANOpenDriverContext())
            .withPacketSizeEstimator(configuration1 -> 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/canopen/src/main/java/org/apache/plc4x/java/canopen/CANOpenPlcDriver.java