//----------------------------------------------------------------------- // // Copyright © 2012 Nils Hammar. All rights reserved. // //----------------------------------------------------------------------- /* * Software to access vehicle information via the OBD-II connector. * * Copyright © 2012 Nils Hammar * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Alternative licensing is possible, see the licensing document. * * The above text may not be removed or modified. */ namespace ObdSimulator.Data { using System; using System.Windows.Forms; /// /// Aux Input Status. /// public partial class AuxInputStatus : UserControl { /// /// Gets Payload data. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays", Justification = "Reviewed, intentional")] public byte[] bytes { get; private set; } /// /// Basic view. /// private bool basic; /// /// Initializes a new instance of the class. /// /// PID for status data. /// Heading text for panel. /// 'true' if basic mode. public AuxInputStatus(byte pid, string heading, bool basic) { this.basic = basic; this.InitializeComponent(); this.groupBox1.Text = heading; this.bytes = new byte[] { pid, 0x00, 0x00 }; } /// /// Provide data to present. /// /// Payload data. public void setData(byte[] payload) { if (payload != null) { /* * Make the reserved bits invisible. */ this.a4CB.Visible = false; this.a5CB.Visible = false; this.a6CB.Visible = false; this.a7CB.Visible = false; this.b4CB.Visible = false; this.b5CB.Visible = false; this.b6CB.Visible = false; this.b7CB.Visible = false; this.lbl6.Visible = false; this.lbl7.Visible = false; this.lbl8.Visible = false; this.lbl9.Visible = false; this.lbl10.Visible = false; this.lbl11.Visible = false; if (this.basic) { this.lbl2.Visible = false; this.lbl3.Visible = false; this.lbl4.Visible = false; this.lbl5.Visible = false; this.lbl6.Visible = false; this.lbl7.Visible = false; this.lbl8.Visible = false; this.lbl9.Visible = false; this.lbl10.Visible = false; this.b0CB.Visible = false; this.b1CB.Visible = false; this.b2CB.Visible = false; this.b3CB.Visible = false; this.b4CB.Visible = false; this.b5CB.Visible = false; this.b6CB.Visible = false; this.b7CB.Visible = false; } this.a0CB.Checked = ((payload[PidParser.BYTE_A] & 0x01) != 0); this.a1CB.Checked = ((payload[PidParser.BYTE_A] & 0x02) != 0); this.a2CB.Checked = ((payload[PidParser.BYTE_A] & 0x04) != 0); this.a3CB.Checked = ((payload[PidParser.BYTE_A] & 0x08) != 0); this.a4CB.Checked = ((payload[PidParser.BYTE_A] & 0x10) != 0); this.a5CB.Checked = ((payload[PidParser.BYTE_A] & 0x20) != 0); this.a6CB.Checked = ((payload[PidParser.BYTE_A] & 0x40) != 0); this.a7CB.Checked = ((payload[PidParser.BYTE_A] & 0x80) != 0); this.b0CB.Checked = ((payload[PidParser.BYTE_B] & 0x01) != 0); this.b1CB.Checked = ((payload[PidParser.BYTE_B] & 0x02) != 0); this.b2CB.Checked = ((payload[PidParser.BYTE_B] & 0x04) != 0); this.b3CB.Checked = ((payload[PidParser.BYTE_B] & 0x08) != 0); this.b4CB.Checked = ((payload[PidParser.BYTE_B] & 0x10) != 0); this.b5CB.Checked = ((payload[PidParser.BYTE_B] & 0x20) != 0); this.b6CB.Checked = ((payload[PidParser.BYTE_B] & 0x40) != 0); this.b7CB.Checked = ((payload[PidParser.BYTE_B] & 0x80) != 0); } } /// /// Handle changed checkbox. /// /// Sending object. /// Event data. [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification = "Reviewed, intentional.")] private void cb_CheckedChanged(object sender, EventArgs e) { CheckBox cb = (CheckBox)sender; try { string name = cb.Name; int byteNum = -1; switch (name.Substring(0, 1).ToLowerInvariant()) { case "a": byteNum = PidParser.BYTE_A; break; case "b": byteNum = PidParser.BYTE_B; break; } if (byteNum >= 0) { int bit = Convert.ToInt32(name.Substring(1, 1)); if (cb.Checked) { this.bytes[byteNum + 1] |= (byte)(1 << bit); } else { this.bytes[byteNum + 1] &= (byte)(~(1 << bit)); } if (byteNum == 0) { this.textBox1.Text = this.bytes[byteNum + 1].ToString(); } else { this.textBox2.Text = this.bytes[byteNum + 1].ToString(); } } } catch { } } } }