//-----------------------------------------------------------------------
//
// 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
{
}
}
}
}