using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.InteropServices; using System.Threading; using System.IO; using System.Net; using LLRP; using LLRP.DataType; using System.Diagnostics; using ReaderLibrary; namespace ReaderLibrary { public partial class SettingsForm : Form { private ReaderManager reader; private ReaderManager.ReaderConfig readerConfigStruct; private ReaderManager.InventoryConfig invConfigStruct; public SettingsForm(ReaderManager readerRef) { reader = readerRef; InitializeComponent(); } private void settings_Load_1(object sender, EventArgs e) { // set position of form base.Location = new Point(800, 250); if (reader.IsConnected()) { // reader is our handle to the physical reader. readerConfigStruct = reader.getReaderConfig(); invConfigStruct = reader.getInventoryConfig(); PopulateReaderModeOptions(); PopulateInvCmbBox(); ApplySettingsToGUI(reader.getInventoryConfig()); ApplySettingsToGUI(reader.getReaderConfig()); } else { Error.message("Reader must be connected"); this.Close(); } } #region Reader and Inventory Settings // Transfer custom settings from the gui to the reader public bool ApplySettingsToReader() { bool error = false; bool[] ants = new bool[4]; ants[0] = chkSettingsAnt1.Checked; ants[1] = chkSettingsAnt2.Checked; ants[2] = chkSettingsAnt3.Checked; ants[3] = chkSettingsAnt4.Checked; try { readerConfigStruct.antennaID = ants; readerConfigStruct.attenuation = (ushort)Convert.ToUInt16(txtSettingsAttenuation.Text); readerConfigStruct.channelIndex = (ushort)Convert.ToUInt16(txtSettingsChannelIdx.Text); readerConfigStruct.hopTableIndex = (ushort)Convert.ToUInt16(txtSettingsHopTableIdx.Text); //readerConfigStruct.periodicTriggerValue = (ushort)Convert.ToUInt16(txtSettingsPeriodicTriggerValue.Text); readerConfigStruct.readerSensitivity = (ushort)Convert.ToUInt16(txtSettingsReaderSensitivity.Text); readerConfigStruct.tagPopulation = (ushort)Convert.ToUInt16(txtSettingsTagPopulation.Text); readerConfigStruct.tagTransitTime = (ushort)Convert.ToUInt16(txtSettingsTagTransitTime.Text); readerConfigStruct.modeIndex = (ushort)((ReaderManager.ReaderMode)cmbSettingsMode.SelectedItem).GetModeIdentifier(); invConfigStruct.startTrigger = (LLRP.ENUM_ROSpecStartTriggerType)(cmbSettingsROStartTrigger.SelectedItem); invConfigStruct.stopTrigger = (LLRP.ENUM_ROSpecStopTriggerType)(cmbSettingsROStopTrigger.SelectedItem); invConfigStruct.AITriggerType = (LLRP.ENUM_AISpecStopTriggerType)(cmbSettingsAIStopTrigger.SelectedItem); invConfigStruct.reportTrigger = (LLRP.ENUM_ROReportTriggerType)(cmbSettingsReportTrigger.SelectedItem); invConfigStruct.reportN = (ushort)Convert.ToUInt16(txtNumReports.Text); invConfigStruct.numAttempts = (ushort)Convert.ToUInt16(txtSettingsNumAttempts.Text); invConfigStruct.numTags = (ushort)Convert.ToUInt16(txtSettingsNumTags.Text); invConfigStruct.duration = (ushort)Convert.ToUInt16(txtSettingsDuration.Text); invConfigStruct.AITimeout = (uint)Convert.ToUInt16(txtSettingsAITimeout.Text); } catch (Exception e) { error = true; Error.message("Parse error: " + e.ToString()); } try { reader.setReaderConfig(readerConfigStruct); reader.setInventoryConfig(invConfigStruct); //txtMessages.Text = "Config Set Successfully"; } catch (Exception e) { Error.message("Parse error: " + e.ToString()); } return error; // Transfer custom settings from the gui to the reader //AppendToDebugTextBox("Warning: Default Inventory settings are currently used."); //reader.SetDefaultInventoryConfig(); } // Transfer reader's settings to the GUI public void ApplySettingsToGUI(ReaderManager.ReaderConfig config) { bool[] ants = config.antennaID; chkSettingsAnt1.Checked = ants[0]; chkSettingsAnt2.Checked = ants[1]; chkSettingsAnt3.Checked = ants[2]; chkSettingsAnt4.Checked = ants[3]; txtSettingsAttenuation.Text = config.attenuation.ToString(); txtSettingsChannelIdx.Text = config.channelIndex.ToString(); txtSettingsHopTableIdx.Text = config.hopTableIndex.ToString(); for (int idx = 0; idx < cmbSettingsMode.Items.Count; idx++) { uint id = ((ReaderManager.ReaderMode)cmbSettingsMode.Items[idx]).GetModeIdentifier(); if (id == config.modeIndex) cmbSettingsMode.SelectedIndex = idx; } // todo: config.modeIndex; //txtSettingsPeriodicTriggerValue.Text = config.periodicTriggerValue.ToString(); txtSettingsReaderSensitivity.Text = config.readerSensitivity.ToString(); txtSettingsTagPopulation.Text = config.tagPopulation.ToString(); txtSettingsTagTransitTime.Text = config.tagTransitTime.ToString(); } // Transfer reader's settings to the GUI public void ApplySettingsToGUI(ReaderManager.InventoryConfig config) { // this sets the cmb box to show the new set values cmbSettingsROStartTrigger.SelectedItem = config.startTrigger; cmbSettingsROStopTrigger.SelectedItem = config.stopTrigger; cmbSettingsReportTrigger.SelectedItem = config.reportTrigger; cmbSettingsAIStopTrigger.SelectedItem = config.AITriggerType; txtNumReports.Text = config.reportN.ToString(); txtSettingsNumAttempts.Text = config.numAttempts.ToString(); txtSettingsNumTags.Text = config.numTags.ToString(); txtSettingsDuration.Text = config.duration.ToString(); txtSettingsAITimeout.Text = config.AITimeout.ToString(); } private void PopulateInvCmbBox() { cmbSettingsROStartTrigger.DataSource = Enum.GetValues(typeof(LLRP.ENUM_ROSpecStartTriggerType)); cmbSettingsROStopTrigger.DataSource = Enum.GetValues(typeof(LLRP.ENUM_ROSpecStopTriggerType)); cmbSettingsReportTrigger.DataSource = Enum.GetValues(typeof(LLRP.ENUM_ROReportTriggerType)); cmbSettingsAIStopTrigger.DataSource = Enum.GetValues(typeof(LLRP.ENUM_AISpecStopTriggerType)); } public void PopulateReaderModeOptions() { cmbSettingsMode.Items.Clear(); ReaderManager.ReaderMode[] modes = reader.GetReaderModulationModes(); if (modes == null) return; for (int i = 0; i < modes.Length && modes[i] != null; i++) cmbSettingsMode.Items.Add(modes[i]); } #endregion private void groupBox1_Enter(object sender, EventArgs e) { } private void btnSettingsDefault_Click(object sender, EventArgs e) { reader.SetDefaultReaderConfig(); ApplySettingsToGUI(reader.getReaderConfig()); reader.SetDefaultInventoryConfig(); ApplySettingsToGUI(reader.getInventoryConfig()); PopulateInvCmbBox(); } private void btnCancel_Click(object sender, EventArgs e) { // only hides it this.Close(); } private void btnSettingsApply_Click(object sender, EventArgs e) { bool error = ApplySettingsToReader(); reader.setReaderConfig(readerConfigStruct); reader.setInventoryConfig(invConfigStruct); //ApplySettingsToGUI(reader.getInventoryConfig()); //ApplySettingsToGUI(reader.getReaderConfig()); if (reader.IsInventoryRunning()) { Error.message("Inventory needs to be restarted, for setting change to apply"); } if (!error) { this.Close(); } } private void cmbSettingsROStartTrigger_SelectedIndexChanged(object sender, EventArgs e) { } } #region Message Box public class Error { public static int message(string msg) { MessageBox.Show(msg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } } #endregion }