/// /// Copyright (c) 2015-2017 Sensus Metering Systems /// using System; using System.Globalization; using System.Net; using System.Windows.Forms; using Common; using TBF.Rig.Generic; using TBF.Resources; namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead { public partial class IperlHeadCfgCtrl : UserControl, IComponentCfgCtrl { public bool ShowMore { get { return false; } } IperlHeadCfg config; public IComponentCfg Config { get { return config as IComponentCfg; } set { config = value as IperlHeadCfg; Redraw(); } } public IperlHeadCfgCtrl() { InitializeComponent(); } private void WaterMeterCfgCtrl_Load(object sender, EventArgs e) { nameLabel.Text = Strings.Name; calibFactorNominalLabel.Text = GetLocalizedString("IperlCalibFactorNominal", "Default calibration factor:"); string calibFactorNominalTooltip = GetLocalizedString("IperlCalibFactorNominalTooltip", "Raw calibration factor representing 100 %. This value is used to calculate 'iPerl CalibFactor (%)' in the results configuration."); calibFactorNominalToolTip.SetToolTip(calibFactorNominalLabel, calibFactorNominalTooltip); calibFactorNominalToolTip.SetToolTip(calibFactorNominalTextBox, calibFactorNominalTooltip); classNameLabel.Text = config.Factory.ClassName; Redraw(); } public void Closing() { } void Redraw() { if (config == null) return; /// Control was not loaded, settings were not changed nameTextBox.Text = config.Name; radioButton1.Checked = config.UseTcpIP; radioButton2.Checked = !config.UseTcpIP; ipAddressTextBox.Text = (config.OptoIPAddress != null) ? config.OptoIPAddress : "0.0.0.0"; tcpipPortTextBox.Text = config.OptoTcpipPortNr.ToString(); headPortNrTextBox.Text = config.HeadCommunicationComPortNr.ToString(); optoSerialPortTextBox.Text = config.OptoComPortNr.ToString(); rfidPortNrTextBox.Text = config.RfidComPortNr.ToString(); muxBoardNrTextBox.Text = config.MuxBoardNr.ToString(); groupTextBox.Text = config.Group.ToString(); comboBoxCommunicationInterface.SelectedItem = config.CommunicationInterface.ToString(); double nominalCalibFactor = config.CalibFactorNominal > 0.0 ? config.CalibFactorNominal : IperlHead.DefaultCalibFactorNominal; calibFactorNominalTextBox.Text = nominalCalibFactor.ToString(CultureInfo.CurrentCulture); tabPage2.Controls.Add(new IperlHeadTestCtrl(config)); } public void Unlock() { nameTextBox.Enabled = true; radioButton1.Enabled = true; radioButton2.Enabled = true; ipAddressTextBox.Enabled = true; tcpipPortTextBox.Enabled = true; optoSerialPortTextBox.Enabled = true; rfidPortNrTextBox.Enabled = true; headPortNrTextBox.Enabled = true; muxBoardNrTextBox.Enabled = true; groupTextBox.Enabled = true; comboBoxCommunicationInterface.Enabled = true; calibFactorNominalTextBox.Enabled = true; } public CfgUpdateFlags VerifyCfg(ref string message) { CfgUpdateFlags flags = CfgUpdateFlags.None; int dummy; if (radioButton1.Checked) { IPAddress dummyIPAddress; if (!IPAddress.TryParse(ipAddressTextBox.Text, out dummyIPAddress)) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + "'IP address' is not valid"; } ushort sdummy; if (!ushort.TryParse(tcpipPortTextBox.Text, out sdummy)) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + "'TCP/IP port nr.' is not valid"; } } else { if (!int.TryParse(optoSerialPortTextBox.Text, out dummy) || dummy < 1 || dummy > 999) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + "'Opto serial port nr.' is not valid"; } } if (!int.TryParse(rfidPortNrTextBox.Text, out dummy) || dummy < 0 || dummy > 999) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + "'RFID serial port nr.' is not valid"; } if (!int.TryParse(headPortNrTextBox.Text, out dummy) || dummy < 0 || dummy > 999) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + "'Head communication serial port nr.' is not valid"; } if (!int.TryParse(muxBoardNrTextBox.Text, out dummy) || dummy < 1 || dummy > 4) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + string.Format(Strings.Invalid_0, muxBoardNrLabel.Text); } if (!int.TryParse(groupTextBox.Text, out dummy) || dummy < 1 || dummy > 10) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + string.Format(Strings.Invalid_0, groupLabel.Text); } double nominalCalibFactor; if (!TryParseDouble(calibFactorNominalTextBox.Text, out nominalCalibFactor) || nominalCalibFactor <= 0.0) { flags |= CfgUpdateFlags.Error; message += Environment.NewLine + string.Format(Strings.Invalid_0, calibFactorNominalLabel.Text); } return flags; } public CfgUpdateFlags UpdateCfg() { CfgUpdateFlags flags = CfgUpdateFlags.RestartRqrd; if (config == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed config.Name = nameTextBox.Text; if (radioButton1.Checked) { config.UseTcpIP = true; config.OptoIPAddress = ipAddressTextBox.Text; config.OptoTcpipPortNr = ushort.Parse(tcpipPortTextBox.Text); } else { config.UseTcpIP = false; config.OptoComPortNr = int.Parse(optoSerialPortTextBox.Text); } config.RfidComPortNr = int.Parse(rfidPortNrTextBox.Text); config.MuxBoardNr = int.Parse(muxBoardNrTextBox.Text); config.Group = int.Parse(groupTextBox.Text); config.CommunicationInterface = (CommunicationInterface)comboBoxCommunicationInterface.SelectedIndex; config.HeadCommunicationComPortNr = int.Parse(headPortNrTextBox.Text); double nominalCalibFactor; if (TryParseDouble(calibFactorNominalTextBox.Text, out nominalCalibFactor)) config.CalibFactorNominal = nominalCalibFactor; return flags; } private static bool TryParseDouble(string value, out double result) { return double.TryParse(value, NumberStyles.Float, CultureInfo.CurrentCulture, out result) || double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out result); } private static string GetLocalizedString(string resourceName, string fallback) { return Strings.ResourceManager.GetString(resourceName, Strings.Culture) ?? fallback; } } }