/// <summary>
        /// Creates a new serial <see cref="ITransport"/> for the given <paramref name="settings"/>.
        /// </summary>
        ///
        /// <param name="settings">
        /// The settings for the serial transport to create.</param>
        /// <param name="hooks">
        /// A hooks implementation being called for sent or received data.</param>
        ///
        /// <exception cref="ArgumentNullException">
        /// A null reference was passed to a method that did not accept it as a valid argument.</exception>
        public static ITransport Create(SerialTransportSettings settings, ITransportHooks hooks)
        {
            Verify.NotNull(settings, nameof(settings));
            Verify.NotNull(hooks, nameof(hooks));

            settings = new SerialTransportSettings(settings);

            return(new DefaultSerialTransport(settings, NullLogger.Instance, hooks));
        }
        /// <summary>
        /// Creates a <see cref="IFeigReader"/> based on the supplied settings.
        /// </summary>
        ///
        /// <param name="settings">
        /// The settings used to create the reader.</param>
        /// <param name="hooks">
        /// A hooks implementation being called for sent or received data.</param>
        ///
        /// <exception cref="ArgumentNullException">
        /// A null reference was passed to a method that did not accept it as a valid argument.</exception>
        public static IFeigReader Create(FeigReaderSettings settings, ITransportHooks hooks)
        {
            Verify.NotNull(settings, nameof(settings));
            Verify.NotNull(hooks, nameof(hooks));

            var copy      = new FeigReaderSettings(settings);
            var logger    = NullLogger.Instance;
            var transport = new DefaultFeigTransport(copy.TransportSettings, logger, hooks);

            return(new DefaultFeigReader(copy, transport, logger));
        }