| File: System\IO\Ports\SerialStream.cs | Web Access |
| Project: src\runtime\src\libraries\System.IO.Ports\src\System.IO.Ports.csproj (System.IO.Ports) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; using System.Diagnostics; using System.IO.Ports; using System.Net.Sockets; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; namespace System.IO.Ports { #pragma warning disable CA1844 internal sealed partial class SerialStream : Stream #pragma warning restore CA1844 { private const int MaxDataBits = 8; private const int MinDataBits = 5; // members supporting properties exposed to SerialPort private readonly string _portName; private bool _inBreak; private Handshake _handshake; #pragma warning disable CS0067 // Events shared by Windows and Linux, on Linux we currently never call them // called when any runtime error occurs on the port (frame, overrun, parity, etc.) internal event SerialErrorReceivedEventHandler ErrorReceived; #pragma warning restore CS0067 // ----SECTION: inherited properties from Stream class ------------* // These six properites are required for SerialStream to inherit from the abstract Stream class. // Note four of them are always true or false, and two of them throw exceptions, so these // are not usefully queried by applications which know they have a SerialStream, etc... public override bool CanRead { get { return (_handle != null); } } public override bool CanSeek { get { return false; } } public override bool CanTimeout { get { return (_handle != null); } } public override bool CanWrite { get { return (_handle != null); } } public override long Length { get { throw new NotSupportedException(SR.NotSupported_UnseekableStream); } } public override long Position { get { throw new NotSupportedException(SR.NotSupported_UnseekableStream); } set { throw new NotSupportedException(SR.NotSupported_UnseekableStream); } } public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(SR.NotSupported_UnseekableStream); } public override void SetLength(long value) { throw new NotSupportedException(SR.NotSupported_UnseekableStream); } public override int ReadByte() { return ReadByte(ReadTimeout); } public override void Write(byte[] array, int offset, int count) { Write(array, offset, count, WriteTimeout); } ~SerialStream() { Dispose(false); } private static void CheckArrayArguments(byte[] array, int offset, int count) { ArgumentNullException.ThrowIfNull(array); if (offset < 0) throw new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_NeedNonNegNumRequired); if (count < 0) throw new ArgumentOutOfRangeException(nameof(count), SR.ArgumentOutOfRange_NeedNonNegNumRequired); if (array.Length - offset < count) throw new ArgumentException(SR.Argument_InvalidOffLen); } private void CheckHandle() { if (_handle == null) InternalResources.FileNotOpen(); } private void CheckReadWriteArguments(byte[] array, int offset, int count) { CheckArrayArguments(array, offset, count); CheckHandle(); } private void CheckWriteArguments() { if (_inBreak) throw new InvalidOperationException(SR.In_Break_State); CheckHandle(); } private void CheckWriteArguments(byte[] array, int offset, int count) { if (_inBreak) throw new InvalidOperationException(SR.In_Break_State); CheckReadWriteArguments(array, offset, count); } } }