using System; using System.Text; using System.Windows.Forms; using DataStreamInterface; namespace DataStreamInterfaceTest { public partial class DemoMainWnd : Form { IDataStreamMeter dataStreamMeter; ActivityLog activityLog; Unit timeUnits; Unit volumeUnits; int quantitiesCount; string[] quantityCaption; Unit[] quantityUnit; Int64 storedFramesCount; DataFrame[] transferredFrames; public DemoMainWnd() : this(null) { } public DemoMainWnd(IDataStreamMeter dataStreamMeter) { InitializeComponent(); this.dataStreamMeter = dataStreamMeter; activityLog = new ActivityLog(logsTextBox); framesListView.Columns.Add("ID", 100); framesListView.Columns.Add("Time", 100); framesListView.Columns.Add("Volume", 100); framesListView.Columns.Add("Additional quantities", 300); framesListView.ListViewItemSorter = new LviIDComparer(); } void ShowNoMeterInterfaceMessage() { MessageBox.Show("No datastream meter interface"); } private void getTimeUnitsButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { timeUnits = dataStreamMeter.GetTimeUnits(); activityLog.Print(string.Format("Time units are {0}", timeUnits)); } } private void getVolumeUnitsButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { volumeUnits = dataStreamMeter.GetVolumeUnits(); activityLog.Print(string.Format("Volume units are {0}", volumeUnits)); } } private void getQuantitiesCountButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { int quantitesCountOri = quantitiesCount; quantitiesCount = dataStreamMeter.GetQuantitiesCount(); activityLog.Print(string.Format("There are {0} additional quantites", quantitiesCount)); if (quantitesCountOri == 0) { quantityUnit = new Unit[quantitiesCount]; quantityCaption = new string[quantitiesCount]; for (int i = 0; i < quantitiesCount; i++) quantityCaption[i] = string.Empty; } else if (quantitiesCount != quantitesCountOri) { quantityUnit = new Unit[quantitiesCount]; quantityCaption = new string[quantitiesCount]; for (int i = 0; i < quantitiesCount; i++) quantityCaption[i] = string.Empty; activityLog.Print(string.Format("Quantities count changed during operation")); MessageBox.Show("Quantities count changed during operation", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } private void getQuantityCaptionButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { GetIntegerNumberDlg dlg = new GetIntegerNumberDlg(string.Format("Enter index {0} .. {1}", 0, quantitiesCount - 1), 0, quantitiesCount - 1); if (dlg.ShowDialog() == DialogResult.OK) { quantityCaption[dlg.Number] = dataStreamMeter.GetQuantityCaption(dlg.Number); activityLog.Print(string.Format("Caption of quantity #{0} is {1}", dlg.Number, quantityCaption[dlg.Number])); } } } private void getQuantityUnitsButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { GetIntegerNumberDlg dlg = new GetIntegerNumberDlg(string.Format("Enter index {0} .. {1}", 0, quantitiesCount - 1), 0, quantitiesCount - 1); if (dlg.ShowDialog() == DialogResult.OK) { quantityUnit[dlg.Number] = dataStreamMeter.GetQuantityUnits(dlg.Number); activityLog.Print(string.Format("Units of quantity #{0} are {1}", dlg.Number, quantityUnit[dlg.Number])); } } } private void openConnectionButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { string meterId; if (dataStreamMeter.OpenConnection(0, "no connection parameters", out meterId)) { activityLog.Print(string.Format("Connection established, meter ID is {0}", meterId)); } else { activityLog.Print("Failed to establish a connection"); } } } private void closeConnectionButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { if (dataStreamMeter.CloseConnection(0)) { framesListView.Items.Clear(); activityLog.Print("Connection closed"); } else { activityLog.Print("Failed to close the connection"); } } } private void DemoMainWnd_FormClosing(object sender, FormClosingEventArgs e) { if (dataStreamMeter == null) { dataStreamMeter.Shutdown(); } } private void getStateButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { int state; string parameter; if (dataStreamMeter.GetState(0, out state, out parameter)) { activityLog.Print(string.Format("Water meter state is {0} / {1}", state, parameter)); } else { activityLog.Print("Failed to obtain the water meter state"); } } } private void setStateButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { GetStateDlg dlg = new GetStateDlg(); if (dlg.ShowDialog() == DialogResult.OK) { if (dataStreamMeter.SetState(0, dlg.State, dlg.Parameter)) { activityLog.Print(string.Format("Water meter state set to {0} / {1}", dlg.State, dlg.Parameter)); } else { activityLog.Print(string.Format("Failed to set the water meter state to {0} / {1}", dlg.State, dlg.Parameter)); } } } } private void startMeasurementButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { if (dataStreamMeter.StartMeasurement(0)) { framesListView.Items.Clear(); activityLog.Print(string.Format("Measurement started")); } else { activityLog.Print("Failed to start a measurement"); } } } private void stopMeasurementButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { if (dataStreamMeter.StopMeasurement(0, out storedFramesCount)) { framesListView.Items.Clear(); activityLog.Print(string.Format("Measurement sopped, {0} frames acquired", storedFramesCount)); } else { activityLog.Print("Failed to stop the measurement"); } } } private void getFramesButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { GetFrameBoundariesDlg dlg = new GetFrameBoundariesDlg("Enter frames range boundaries", 0, storedFramesCount - 1); if (dlg.ShowDialog() != DialogResult.OK) return; DataFrame[] frames = dataStreamMeter.GetFrames(0, dlg.From, Convert.ToInt32(dlg.To - dlg.From + 1)); { foreach (var frame in frames) { if (frame != null) framesListView.Items.Add(GetListViewItem(frame)); } } } } private void getIDButton_Click(object sender, EventArgs e) { if (dataStreamMeter == null) ShowNoMeterInterfaceMessage(); else { GetDblValueDlg dlg = new GetDblValueDlg("Enter time in seconds"); if (dlg.ShowDialog() == DialogResult.OK) { Int64 id = dataStreamMeter.GetID(0, dlg.DblValue); activityLog.Print(string.Format("GetID({0}) returned {1}", dlg.DblValue, id)); } } } ListViewItem GetListViewItem(DataFrame frame) { ListViewItem lvi = new ListViewItem(frame.ID.ToString()); lvi.SubItems.Add(frame.Time.ToString()); lvi.SubItems.Add(frame.Volume.ToString()); StringBuilder sb = new StringBuilder(); foreach (var quantity in frame.Quantity) { sb.Append(quantity.ToString()); sb.Append(" "); } lvi.SubItems.Add(sb.ToString()); lvi.Tag = frame; return lvi; } } }