@Override
    public Function<SocketCANFrame, FrameData> adapter() {
        return frame -> new FrameData() {
            @Override
            public int getNodeId() {
                return frame.getIdentifier();
            }

            @Override
            public int getDataLength() {
                return frame.getData().length;
            }

            @Override
            public byte[] getData() {
                return frame.getData();
            }

            @Override
            public <T extends Message> T read(MessageInput<T> input) {
                try {
                    return input.parse(new ReadBufferByteBased(frame.getData(), ByteOrder.LITTLE_ENDIAN));
                } catch (ParseException e) {
                    throw new PlcRuntimeException(e);
                }
            }
        };
    }
CAN specific transport which rely on JavaCAN library.
plc4j/transports/socketcan/src/main/java/org/apache/plc4x/java/transport/socketcan/SocketCANTransport.java