/// <summary> /// Создаёт объект CAN-порта конкретного типа на основе /// строки с параметрами CAN-порта и возвращает инферфейс /// </summary> /// <param name="configPort">Описатель порта, полученный при /// вызове метода ToString() конкретного класса порта</param> /// <returns></returns> public static ICanPort Create(string configPort) { string[] pair; Dictionary <string, string> settings = new Dictionary <string, string>(); // Получаем из строки пары: [параметр:значение] string[] parameters = configPort.Split(';'); // Преобразуем пары в словарь foreach (string param in parameters) { pair = param.Split(':'); if (pair.Length != 2) { throw new InvalidCastException(); } settings.Add(pair[0].Trim(), pair[1].Trim()); } // Проверяем наличие всех необходимых ключей if (!(settings.ContainsKey("Manufacturer") && settings.ContainsKey("HardwareType") && settings.ContainsKey("PortName") && settings.ContainsKey("BitRate") && settings.ContainsKey("Mode") && settings.ContainsKey("FrameFormat"))) { throw new InvalidCastException(); } BaudRate bitRate = (BaudRate)Enum.Parse(typeof(BaudRate), settings["BitRate"]); FrameFormat frameFormat = (FrameFormat)Enum.Parse(typeof(FrameFormat), settings["FrameFormat"]); PortMode mode = (PortMode)Enum.Parse(typeof(PortMode), settings["Mode"]); // На основе полученных данных строим объект порта switch (settings["Manufacturer"].ToUpper()) { case "FASTWEL": { switch (settings["HardwareType"].ToUpper()) { case "NIM-351": { return((ICanPort) new Fastwel.NIM351.CanPort(settings["PortName"], bitRate, frameFormat, mode)); } default: { throw new NotSupportedException(""); } } //break; } case "IXXAT": { return((ICanPort) new IXXAT.CanPort(settings["PortName"], bitRate, frameFormat, mode)); } default: { throw new NotSupportedException(""); } } }
public ComposeServiceBuilder Ports(int target, int published, PortMode mode = PortMode.Host, string protocol = "tcp") { _config.Ports.Add(new PortsLongDefinition { Target = target, Published = published, Mode = mode, Protocol = protocol }); return(this); }
private void Clear() { fromXml = false; baudRate = 0.0; parity = System.IO.Ports.Parity.None; dataBits = 0; stopBits = System.IO.Ports.StopBits.None; portMode = SerialIO.PortMode.DOSMode_Default; handshake = System.IO.Ports.Handshake.None; }
//----------------------------------------------------------------------------------------- /// <summary> /// Строит и возвращает структуру режима работы порта NIM351 /// </summary> /// <param name="mode">Режим работы порта</param> /// <param name="frameFormat">Формат кадра</param> /// <param name="errorFrameEnable">Разрешает/запрещает передачу информационных сообщений</param> /// <returns></returns> public static CAN_OPMODE OpModeBuilder(PortMode mode, FrameFormat frameFormat, Boolean errorFrameEnable) { CAN_OPMODE result; String msg; result = CAN_OPMODE.CAN_OPMODE_INIT; switch (mode) { case PortMode.NORMAL: { break; } case PortMode.LISTEN_ONLY: { result |= CAN_OPMODE.CAN_OPMODE_LSTNONLY; break; } case PortMode.SELFTEST: { result |= CAN_OPMODE.CAN_OPMODE_SELFTEST; break; } case PortMode.SELFRECV: { result |= CAN_OPMODE.CAN_OPMODE_SELFRECV; break; } default: { msg = String.Format(Properties.ErrorMessages.NotSupportedValue, mode); throw new InvalidCastException(msg); } } switch (frameFormat) { case FrameFormat.StandardFrame: { result |= CAN_OPMODE.CAN_OPMODE_STANDARD; break; } case FrameFormat.ExtendedFrame: { result |= CAN_OPMODE.CAN_OPMODE_EXTENDED; break; } case FrameFormat.MixedFrame: { result |= (CAN_OPMODE.CAN_OPMODE_STANDARD | CAN_OPMODE.CAN_OPMODE_EXTENDED); break; } default: { msg = String.Format(Properties.ErrorMessages.NotSupportedValue, frameFormat); throw new InvalidCastException(msg); } } if (errorFrameEnable) { result |= CAN_OPMODE.CAN_OPMODE_ERRFRAME; } return(result); }
private void SetPortMode(PortMode value) { switch (value) { case PortMode.FirstAvailable: PortModeFirstAvailableRadioButton.Checked = true; break; case PortMode.Specific: PortModeSpecificRadioButton.Checked = true; break; } }
/// <summary> /// Конструктор для десериализации /// </summary> /// <param name="info"></param> /// <param name="context"></param> public CanPort(SerializationInfo info, StreamingContext context) { this._InputBufferMessages = new Queue <Frame>(100); // Инициализируем дескриптор устройства this._DeviceHandle = new SafeFileHandle(IntPtr.Zero, true); this._DeviceHandle.Close(); this._PortName = info.GetString("PortName"); this._BitRate = (BaudRate)info.GetValue("BitRate", typeof(BaudRate)); this._OpMode = (PortMode)info.GetValue("Mode", typeof(PortMode)); this._ErrorFrameEnable = info.GetBoolean("ErrorFrameEnable"); this._FrameFormat = (FrameFormat)info.GetValue("FrameFormat", typeof(FrameFormat)); this._Timeouts = (F_CAN_TIMEOUTS)info.GetValue("Timeouts", typeof(F_CAN_TIMEOUTS)); }
/// <summary> /// /// </summary> /// <param name="portName"></param> /// <param name="bitRate"></param> /// <param name="frameFormat"></param> /// <param name="mode"></param> public CanPort(String portName, BaudRate bitRate, FrameFormat frameFormat, PortMode mode) { // Инициализируем буфер входящих сообщений this._InputBufferMessages = new Queue <Frame>(100); // Инициализируем дескриптор устройства this._DeviceHandle = new SafeFileHandle(IntPtr.Zero, true); this._DeviceHandle.Close(); // Номер порта PortName = portName; _BitRate = bitRate; _FrameFormat = frameFormat; _OpMode = mode; // Структура таймаутов _Timeouts = new F_CAN_TIMEOUTS(); }
/// <summary> /// </summary> internal void Validate() { if (string.IsNullOrEmpty(ApplicationPath)) { throw new CassiniException(SR.ErrApplicationPathIsNull, ErrorField.ApplicationPath); } try { ApplicationPath = Path.GetFullPath(ApplicationPath); } catch { } if (!Directory.Exists(ApplicationPath)) { throw new CassiniException(SR.WebdevDirNotExist, ErrorField.ApplicationPath); } ApplicationPath = ApplicationPath.Trim('\"').TrimEnd('\\'); if (!string.IsNullOrEmpty(VirtualPath)) { VirtualPath = VirtualPath.Trim('\"'); VirtualPath = VirtualPath.Trim('/'); VirtualPath = "/" + VirtualPath; } else { VirtualPath = "/"; } if (!VirtualPath.StartsWith("/")) { VirtualPath = "/" + VirtualPath; } if (AddHost && string.IsNullOrEmpty(HostName)) { throw new CassiniException(SR.ErrInvalidHostname, ErrorField.HostName); } IPAddress = ParseIP(IPMode, IPv6, IPAddress).ToString(); if (VisualStudio) // then STOP HERE. { // It is fortunate that in order to provide api parity with WebDev // we do not need to port scan. Visual Studio balks and refuses to // attach if we monkey around and open ports. Port = Port == 0 ? 80 : Port; PortMode = PortMode.Specific; return; } switch (PortMode) { case PortMode.FirstAvailable: if (PortRangeStart < 1) { throw new CassiniException(SR.ErrInvalidPortRangeValue, ErrorField.PortRangeStart); } if (PortRangeEnd < 1) { throw new CassiniException(SR.ErrInvalidPortRangeValue, ErrorField.PortRangeEnd); } if (PortRangeStart > PortRangeEnd) { throw new CassiniException(SR.ErrPortRangeEndMustBeEqualOrGreaterThanPortRangeSta, ErrorField.PortRange); } Port = CassiniNetworkUtils.GetAvailablePort(PortRangeStart, PortRangeEnd, System.Net.IPAddress.Parse(IPAddress), true); if (Port == 0) { throw new CassiniException(SR.ErrNoAvailablePortFound, ErrorField.PortRange); } break; case PortMode.Specific: if ((Port < 1) || (Port > 0xffff)) { throw new CassiniException(SR.ErrPortOutOfRange, ErrorField.Port); } // start waiting.... //TODO: design this hack away.... why am I waiting in a validation method? int now = Environment.TickCount; // wait until either 1) the specified port is available or 2) the specified amount of time has passed while (Environment.TickCount < now + WaitForPort && CassiniNetworkUtils.GetAvailablePort(Port, Port, System.Net.IPAddress.Parse(IPAddress), true) != Port) { Thread.Sleep(100); } // is the port available? if (CassiniNetworkUtils.GetAvailablePort(Port, Port, System.Net.IPAddress.Parse(IPAddress), true) != Port) { throw new CassiniException(SR.ErrPortIsInUse, ErrorField.Port); } break; default: throw new CassiniException(SR.ErrInvalidPortMode, ErrorField.None); } }
private void SetPortMode(PortMode value) { switch (value) { case PortMode.FirstAvailable: PortModeFirstAvailableRadioButton.Checked = true; break; case PortMode.Specific: PortModeSpecificRadioButton.Checked = true; break; } }
/// <summary> /// </summary> internal void Validate() { if (string.IsNullOrEmpty(ApplicationPath)) { throw new CassiniException(SR.ErrApplicationPathIsNull, ErrorField.ApplicationPath); } try { ApplicationPath = Path.GetFullPath(ApplicationPath); } catch { } if (!Directory.Exists(ApplicationPath)) { throw new CassiniException(SR.WebdevDirNotExist, ErrorField.ApplicationPath); } ApplicationPath = ApplicationPath.Trim('\"').TrimEnd('\\'); if (!string.IsNullOrEmpty(VirtualPath)) { VirtualPath = VirtualPath.Trim('\"'); VirtualPath = VirtualPath.Trim('/'); VirtualPath = "/" + VirtualPath; } else { VirtualPath = "/"; } if (!VirtualPath.StartsWith("/")) { VirtualPath = "/" + VirtualPath; } if (AddHost && string.IsNullOrEmpty(HostName)) { throw new CassiniException(SR.ErrInvalidHostname, ErrorField.HostName); } IPAddress = ParseIP(IPMode, IPv6, IPAddress).ToString(); if (VisualStudio) // then STOP HERE. { // It is fortunate that in order to provide api parity with WebDev // we do not need to port scan. Visual Studio balks and refuses to // attach if we monkey around and open ports. Port = Port == 0 ? 80 : Port; PortMode = PortMode.Specific; return; } switch (PortMode) { case PortMode.FirstAvailable: if (PortRangeStart < 1) { throw new CassiniException(SR.ErrInvalidPortRangeValue, ErrorField.PortRangeStart); } if (PortRangeEnd < 1) { throw new CassiniException(SR.ErrInvalidPortRangeValue, ErrorField.PortRangeEnd); } if (PortRangeStart > PortRangeEnd) { throw new CassiniException(SR.ErrPortRangeEndMustBeEqualOrGreaterThanPortRangeSta, ErrorField.PortRange); } Port = CassiniNetworkUtils.GetAvailablePort(PortRangeStart, PortRangeEnd, System.Net.IPAddress.Parse(IPAddress), true); if (Port == 0) { throw new CassiniException(SR.ErrNoAvailablePortFound, ErrorField.PortRange); } break; case PortMode.Specific: if ((Port < 1) || (Port > 0xffff)) { throw new CassiniException(SR.ErrPortOutOfRange, ErrorField.Port); } // start waiting.... //TODO: design this hack away.... why am I waiting in a validation method? int now = Environment.TickCount; // wait until either 1) the specified port is available or 2) the specified amount of time has passed while (Environment.TickCount < now + WaitForPort && CassiniNetworkUtils.GetAvailablePort(Port, Port, System.Net.IPAddress.Parse(IPAddress), true) != Port) { Thread.Sleep(100); } // is the port available? if (CassiniNetworkUtils.GetAvailablePort(Port, Port, System.Net.IPAddress.Parse(IPAddress), true) != Port) { throw new CassiniException(SR.ErrPortIsInUse, ErrorField.Port); } break; default: throw new CassiniException(SR.ErrInvalidPortMode, ErrorField.None); } }
/// <summary> /// End User set up mode end. /// <para>* Valid at the user setup mode.</para> /// </summary> /// <param name="device">GU256x128c device</param> public static void IoPortInputOutputSetting(this Gu256x128c device, byte n, PortMode mode) { device.WriteBytes(new byte[] { 0x1F, 0x28, 0x65, 0x02, 0x4F, 0x55, 0x54 }); }
/// <summary> /// Конструктор /// </summary> /// <param name="portName">Наименование порта (серийный номер порта)</param> public CanPort(String portName, BaudRate bitRate, FrameFormat frameFormat, PortMode mode) { IVciDeviceList deviceList; String serialNumber; Object pack; // Настраиваем поля this.PortName = portName; // Инициализируем входной буфер сообщений this._InputBufferMessages = new Queue<Frame>(100); // Инициализируем свойства порта this._FrameFormat = frameFormat; this._ErrorFrameEnable = true; ((ICanPort)this).Mode = mode; this._LowSpeedModeEnable = false; // Устанавливаем скорость по умолчанию this._CanBitRate = bitRate; // Получаем список доступных устройств deviceList = GetDeviceList(); // Находим нужное нам устройство и открываем его foreach (IVciDevice item in deviceList) { pack = (Object)item.UniqueHardwareId; serialNumber = GetSerialNumber(ref pack); if (serialNumber == this._SerialNumber) { // Устройство найдено this._CanDevice = item; break; } } }
/// <summary> /// Конструктор для десериализации /// </summary> /// <param name="info"></param> /// <param name="context"></param> public CanPort(SerializationInfo info, StreamingContext context) { this._InputBufferMessages = new Queue<Frame>(100); // Инициализируем дескриптор устройства this._DeviceHandle = new SafeFileHandle(IntPtr.Zero, true); this._DeviceHandle.Close(); this._PortName = info.GetString("PortName"); this._BitRate = (BaudRate)info.GetValue("BitRate", typeof(BaudRate)); this._OpMode = (PortMode)info.GetValue("Mode", typeof(PortMode)); this._ErrorFrameEnable = info.GetBoolean("ErrorFrameEnable"); this._FrameFormat = (FrameFormat)info.GetValue("FrameFormat", typeof(FrameFormat)); this._Timeouts = (F_CAN_TIMEOUTS)info.GetValue("Timeouts", typeof(F_CAN_TIMEOUTS)); }
/// <summary> /// /// </summary> /// <param name="portName"></param> /// <param name="bitRate"></param> /// <param name="frameFormat"></param> /// <param name="mode"></param> public CanPort(String portName, BaudRate bitRate, FrameFormat frameFormat, PortMode mode) { // Инициализируем буфер входящих сообщений this._InputBufferMessages = new Queue<Frame>(100); // Инициализируем дескриптор устройства this._DeviceHandle = new SafeFileHandle(IntPtr.Zero, true); this._DeviceHandle.Close(); // Номер порта PortName = portName; _BitRate = bitRate; _FrameFormat = frameFormat; _OpMode = mode; // Структура таймаутов _Timeouts = new F_CAN_TIMEOUTS(); }
/// <summary> /// Set input or output for general purpose I/O port. /// </summary> /// <param name="device">GU256x128c device</param> /// <param name="n">I/O port number</param> /// <param name="a">Set Input or Output</param> public static void IoPortInputOutputSetting(this Gu256x128c device, byte n, PortMode mode) { var a = (byte)mode; device.WriteBytes(new byte[] { 0x1F, 0x28, 0x70, 0x01, n, a }); }
//----------------------------------------------------------------------------------------- /// <summary> /// Строит и возвращает структуру режима работы порта NIM351 /// </summary> /// <param name="mode">Режим работы порта</param> /// <param name="frameFormat">Формат кадра</param> /// <param name="errorFrameEnable">Разрешает/запрещает передачу информационных сообщений</param> /// <returns></returns> public static CAN_OPMODE OpModeBuilder(PortMode mode, FrameFormat frameFormat, Boolean errorFrameEnable) { CAN_OPMODE result; String msg; result = CAN_OPMODE.CAN_OPMODE_INIT; switch (mode) { case PortMode.NORMAL: { break; } case PortMode.LISTEN_ONLY: { result |= CAN_OPMODE.CAN_OPMODE_LSTNONLY; break; } case PortMode.SELFTEST: { result |= CAN_OPMODE.CAN_OPMODE_SELFTEST; break; } case PortMode.SELFRECV: { result |= CAN_OPMODE.CAN_OPMODE_SELFRECV; break; } default: { msg = String.Format(Properties.ErrorMessages.NotSupportedValue, mode); throw new InvalidCastException(msg); } } switch (frameFormat) { case FrameFormat.StandardFrame: { result |= CAN_OPMODE.CAN_OPMODE_STANDARD; break; } case FrameFormat.ExtendedFrame: { result |= CAN_OPMODE.CAN_OPMODE_EXTENDED; break; } case FrameFormat.MixedFrame: { result |= (CAN_OPMODE.CAN_OPMODE_STANDARD | CAN_OPMODE.CAN_OPMODE_EXTENDED); break; } default: { msg = String.Format(Properties.ErrorMessages.NotSupportedValue, frameFormat); throw new InvalidCastException(msg); } } if (errorFrameEnable) { result |= CAN_OPMODE.CAN_OPMODE_ERRFRAME; } return result; }