0% found this document useful (0 votes)
12 views

Code 2

Uploaded by

Waqas Javaid
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views

Code 2

Uploaded by

Waqas Javaid
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 281

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
//using System.Windows.Shapes;
using System.Runtime.InteropServices;
using MahApps.Metro;
using MahApps.Metro.Controls;
using MahApps.Metro.Controls.Dialogs;
using System.Windows.Interop;
using Microsoft.Win32;
using System.Diagnostics;
using System.ComponentModel;
using System.Threading;
using System.Windows.Threading;
using System.IO;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using System.Data;
using System.Data.OleDb;
using System.Reflection;
using System.Collections;
using System.Globalization;
using System.Net.NetworkInformation;
using System.Windows.Controls.Primitives;
using System.Xml.Linq;
using System.Windows.Shapes;
using Path = System.IO.Path;
using static System.Collections.Specialized.BitVector32;
using BasicElcentral_StartupProject;
using System.Collections.Specialized;
using System.Collections.Concurrent;
using System.Runtime.CompilerServices;
using System.Runtime.Remoting.Messaging;
using CAN_Master.Profile;
using System.Xml;
using System.Net.Http;
using System.Net;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using System.Windows.Interactivity;
using CAN_Master.Resources;
using System.Configuration;
using CAN_Master.Common;
using AutoUpdaterDotNET;
using CAN_Master.Models;
using CAN_Master.Handlers;
using CAN_Master.Helpers;
using log4net;
namespace CAN_Master
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : MetroWindow, INotifyPropertyChanged
{

enum LOG_COLORS
{
NORMAL = 0,
SUCCESS,
WARNING,
ERROR
};

enum LOG_TYPE
{
INFO = 0,
CODE,
DATA,
ERROR,
}

//Enumerated synchronization Communication States


private enum OpStages
{
opGenSettings,
opExtraDataBlocks,
opDataBlocks,
END,
}

public int version;


public int subVersion;
//New features for CAN-Master hardware configuration
//public ObservableCollection<byte> BTS0_TRIG_MSG_BYTES { get; set; }
//public ObservableCollection<byte> BTS0_TRIG_MSG_MASKS { get; set; }
//public ObservableCollection<byte> BTS1_TRIG_MSG_BYTES { get; set; }
//public ObservableCollection<byte> BTS1_TRIG_MSG_MASKS { get; set; }

// Source for each Message


public ObservableCollection<byte> CANBUS_MSG_SOURCE { get; set; }
// Message ID for every data string in trigger data bytes
public ObservableCollection<UInt32> CANBUS_MSG_IDS { get; set; }

//Data bytes for BTS0


public ObservableCollection<byte> BTS0_DATA_BYTES { get; set; }
//Data bytes for BTS1
public ObservableCollection<byte> BTS1_DATA_BYTES { get; set; }

//Data bytes for CAN Messages BIT0 to BIT15 | Total 16 bits


public ObservableCollection<byte> CMBIT0_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT1_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT2_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT3_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT4_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT5_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT6_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT7_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT8_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT9_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT10_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT11_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT12_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT13_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT14_DATA_BYTES { get; set; }
public ObservableCollection<byte> CMBIT15_DATA_BYTES { get; set; }
private Array OB_COLLECTION_ARRAY;

public ObservableCollection<SolidColorBrush> STATUS_BIT_COLOR { get; set; }

public List<string> CMB_OPERATION_LIST { get; set; } //Compare functions


list for bytes in the configuration section

private bool CONNECTED_ALREADY = false; //Let it be false since we set


it to true later when unit has been connected
//.
private static readonly ILog log =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
;

#region Declarations for USB Communication

[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]


public static extern int AHid_Init(int wnd, byte[] parm1);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Register(ref int pipe, uint vid, uint pid,
int mi, byte rep_id, byte rep_len, byte rep_type);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Deregister(int pipe);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Write(int pipe, byte[] buffer, uint to_write,
ref uint written);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Read(int pipe, byte[] buffer, uint to_read,
ref uint read);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Attached(int pipe, IntPtr wparam, IntPtr
lparam);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Request(int pipe);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Find(int pipe);
[DllImport("AHid.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AHid_Info();

const String msgStatusConnected = "Device connected";


const String msgStatusDisConnected = "Not connected";

//Constants.
const int WM_CREATE = 0x0001;
const int WM_DEVICECHANGE = 0x0219;
const int AHID_DATARECEIVED = 0x0465;
const int AHID_REP_TYPE_INT_IN = 0;
const int AHID_REP_TYPE_INT_OUT = 1;
const int AHID_REP_TYPE_FEATURE = 2;
const int AHID_OK = 0;
const int AHID_ATTACHED = 1;
const int AHID_REMOVED = 2;
const int AHID_NOT_LISTED = 3;
const int AHID_IO_ERROR = 4;
const int AHID_NOT_INITIALIZED = 5;
const int AHID_LICENSE_ERROR = 6;
const int AHID_OTHER_ERROR = 7;
const int AHID_WRONG_PARAMETER = 8;
public uint ElcentralVID = 0x03EB;
//public uint ElcentralPID = 0x2FE5;
public uint ElcentralPID = 0x2421;

//Variables.
private int _pipeOut;
private int _pipeIn;
//private uint _vid = 1003;
//private uint _pid = 9248;
//private byte _repID = 0;
private uint _repSize = 128;
private int _register;
private int _deregister;
private int _write;
public bool _connected = false;
//private bool _attached;
//private int licenseType;
internal UInt32 hwFirmwareVer = 0;

#endregion

#region USB Initializations

[DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", ExactSpelling =


true,
CharSet = CharSet.Unicode,
SetLastError = true)]
internal static extern IntPtr LoadLibrary(string path);

protected override void OnSourceInitialized(EventArgs e)


{
try
{
base.OnSourceInitialized(e);
HwndSource source = PresentationSource.FromVisual(this) as
HwndSource;
source.AddHook(WndProc);

//Load the path for the Ahid DLL USB library.


string path = System.IO.Path.Combine("", Environment.Is64BitProcess
? @"x64\" : @"x86\", @"AHid.dll");
IntPtr mod = LoadLibrary(path);
if (mod == IntPtr.Zero) throw new
System.ComponentModel.Win32Exception();

//Start to initialized the USB Hid Library


//License key for AHID v193.00
//byte[] parm1 = System.Text.Encoding.ASCII.GetBytes("SOLARIT-
AB_VAESTERAS_VAESTMANL04010968951F7FD42729607A9EC7C1E6EA763B724C5E63F868573F63E87E5
55367F975464063F97E555367F9754E536CE6");
//License key for AHID v194.02
byte[] parm1 =
System.Text.Encoding.ASCII.GetBytes("SolaritAB_AdminToolElcentral_VA66CA58A9DCFE5D4
E4CACECE161487142D566D726B7E43D848705360F560607F4BC4756B7D4EEF4D67774CDE53657E7DFC"
);
IntPtr windowHandle = new WindowInteropHelper(this).Handle;

if (AHid_Init(windowHandle.ToInt32(), parm1) != AHID_OK)


MessageBox.Show("Unable to Load USB HID drivers");

_register = AHid_Register(ref _pipeOut, (uint)1003, 9249, -1, 0,


(Byte)_repSize, AHID_REP_TYPE_INT_OUT);
//_register_dfu = AHid_Register(ref _pipeOut_dfu, (uint)1003,
12269, -1, 0, (Byte)_repSize, AHID_REP_TYPE_INT_OUT);
if (AHid_Find(_pipeOut) == AHID_OK || AHid_Find(_pipeOut) ==
AHID_ATTACHED)
{
_register = AHid_Register(ref _pipeIn, (uint)1003, 9249, -1, 0,
(Byte)_repSize, AHID_REP_TYPE_INT_IN);
_connected = true;
//_attached = true;
tbElcentralStatus.Text = "Device Connected.";
fetchInitialData();
}
else
{
_connected = false;
//_attached = false;
_deregister = AHid_Deregister(_pipeOut);
tbFirmware.Text = "NA";
_pipeOut = 0;
_pipeIn = 0;

tbElcentralStatus.Text = "Device not Connected.";


//lblConStatus.Content = TryFindResource("strNotConnected"); ;
customFlagDict.Clear();
}
}
catch (Exception Ex)
{
MessageBox.Show($"{Ex.Message}\n{Ex.ToString()}", "Source
Initialization Error");
}
}

//Do something when the Elcentral is plugged-in or removed


protected void Dlg_OnDeviceChange(IntPtr hwnd, int msg, IntPtr wParam,
IntPtr lParam, ref bool handled)
{
//try {
if (!_connected)
{
try
{
_register = AHid_Register(ref _pipeOut, (uint)1003, 9249, -1,
0, (Byte)_repSize, AHID_REP_TYPE_INT_OUT);
//_register_dfu = AHid_Register(ref _pipeOut_dfu, (uint)1003,
12269, -1, 0, (Byte)_repSize, AHID_REP_TYPE_INT_OUT);
if (AHid_Find(_pipeOut) == AHID_OK)
{
_register = AHid_Register(ref _pipeIn, (uint)1003, 9249, -
1, 0, (Byte)_repSize, AHID_REP_TYPE_INT_IN);
tbElcentralStatus.Text = "Device Connected.";
_connected = true;
//_attached = true;
Task.Delay(100);
fetchInitialData();
//if (tglAutoFetchFirmware.IsChecked == true)
//else { tbFirmware.Text = "-NA-"; }
//await Task.Delay(10);

//Enable the baud rate selection in the Scanner tab


cmbScanBaudCAN0.IsEnabled = true;
cmbScanBaudCAN1.IsEnabled = true;
}

else
{
_connected = false;
//_attached = false;
tbFirmware.Text = "NA";
_deregister = AHid_Deregister(_pipeOut);
//_deregister = AHid_Deregister(_pipeOut_dfu);
_pipeOut = 0;
_pipeIn = 0;

tbElcentralStatus.Text = "Device not Connected.";


//lblConStatus.Content =
(string)TryFindResource("strNotConnected");//msgStatusDisConnected;
customFlagDict.Clear();
//Enable the baud rate selection in the Scanner tab
cmbScanBaudCAN0.IsEnabled = true;
cmbScanBaudCAN1.IsEnabled = true;

}
}
catch (Exception Ex) { MessageBox.Show($"{Ex.Message}\
n{Ex.ToString()}", "USB Comm Error1"); }
}
else
{
try
{
int _state2 = AHid_Attached(_pipeOut, wParam, lParam);

if (_state2 == AHID_ATTACHED)
{
//_attached = true;
}
else if (_state2 == AHID_REMOVED)
{
//_attached = false;
_connected = false;
tbFirmware.Text = "NA";

_deregister = AHid_Deregister(_pipeOut);
_deregister = AHid_Deregister(_pipeIn);
//_deregister = AHid_Deregister(_pipeOut_dfu);
_pipeOut = 0;
_pipeIn = 0;

//Enable the baud rate selection in the Scanner tab


cmbScanBaudCAN0.IsEnabled = true;
cmbScanBaudCAN1.IsEnabled = true;
}
}
catch (Exception Ex) { MessageBox.Show($"{Ex.Message}\
n{Ex.ToString()}", "USB Comm Error2"); }
}
//}
//catch (Exception Ex)
//{
// //MessageBox.Show(Ex.Message, "OnDevChange Error");
//}
}

//Read incoming data.


protected void Dlg_OnDataReceived(IntPtr hwnd, int msg, IntPtr wParam,
IntPtr lParam, ref bool handled)
{
ReadUsbDataAsync();
}

private async Task ReadUsbDataAsync()


{
await Task.Run(() =>
{
unsafe
{
try
{
byte[] buffer = new byte[_repSize];
uint read = 0;
int result = AHid_Read(_pipeIn, buffer, _repSize, ref
read);
handleComingUsbData(buffer);
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message, "Data Receive Error");
}
}
});
}

IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool
handled)
{
// Handle messages...
switch (msg)
{
case WM_CREATE:
MessageBox.Show("Window is now Created");
break;
case WM_DEVICECHANGE:
Dlg_OnDeviceChange(hwnd, msg, wParam, lParam, ref handled);
break;
case AHID_DATARECEIVED:
Dlg_OnDataReceived(hwnd, msg, wParam, lParam, ref handled);
break;
default:
break;
}
return IntPtr.Zero;
}

#endregion

#region Communication routines

//=========== Clean method for writing data to Elcentral


private void writeUsbHid(Byte[] buffer)
{
if ((_connected))//&&(licenseType>0))
{
try
{
uint written = 0;
unsafe
{
_write = AHid_Write(_pipeOut, buffer, _repSize, ref
written);
}
}
catch { }
}
}

//=========== Method for first time Data from Elcentral (ie Firmware and
Friendly ID)
private async void fetchInitialData()
{
Byte[] buffer = new Byte[_repSize];

//buffer[0] = (Byte)'$';
//buffer[1] = 1; //Function Code to connect the Elcentral Unit
//buffer[2] = 0;
//buffer[3] = 0;

//writeUsbHid(buffer);

// Thread.Sleep(100);
await Task.Delay(100);

buffer[0] = (Byte)'$';
buffer[1] = (Byte)'5'; //Function code for firmware type
buffer[2] = (Byte)1; //Function code for firmware type

writeUsbHid(buffer);

//Turn ON - OFF Elcentral IOs in Administrator/Test Mode


private void turnIO(int _id = 0, int _outputState = 0)
{
Byte[] buffer = new Byte[_repSize];
buffer[0] = (Byte)'$';
buffer[1] = (Byte)'2'; //Activate IO Code byte
buffer[2] = (Byte)_outputState; //Output State, Turn ON (1) or OFF
(0)
buffer[3] = (Byte)_id; //Number of the Output to be
activated (0 - 7)

writeUsbHid(buffer);
}

////Save Friendly Unit ID


//private void saveUnitID(String unitIDStr)
//{
// Byte[] buffer = new Byte[_repSize];
// System.Text.Encoding.UTF8.GetBytes(unitIDStr.ToCharArray(), 0,
unitIDStr.Length, buffer, 4);
// //System.Buffer.BlockCopy(unitIDStr.ToCharArray(), 0, buffer, 4,
unitIDStr.Length);

// buffer[0] = (Byte)'$';
// buffer[1] = (Byte)'3'; //Access EEPROM Code byte
// buffer[2] = 6; //code for Write Unit ID
// buffer[3] = (Byte)unitIDStr.Length; //Length of the String

// writeUsbHid(buffer);

// //MessageBox.Show(System.Text.Encoding.UTF8.GetString(buffer, 4,
unitIDStr.Length));
// //MessageBox.Show(buffer[3].ToString() + (char)(buffer[4]));
//}

#endregion

public delegate Point GetPosition(IInputElement element);


int rowIndex = -1;

ObservableCollection<DataGridItem> dataGridItems = new


ObservableCollection<DataGridItem>();

ObservableCollection<DataGridItem> removedDataGridItems = new


ObservableCollection<DataGridItem>();

ExportItem exportedItem = new ExportItem();

public static object lockObject = new object();

SessionHelper _sessionHelper = new SessionHelper();


public Session _sessionUser = new Session();
public MainWindow()
{

Session session = Task.Run(async () => await


_sessionHelper.GetLocalSession()).Result;
_sessionHelper.Init(session);

//logging
log4net.Config.XmlConfigurator.Configure();
CarData carData = Task.Run(async () => await
_sessionHelper.GetLocalCarData()).Result;
_sessionHelper.Init(carData);

if (session == null)
RedirectToLoginWindow();

_sessionUser = session;
InitializeComponent();
#region Checking Internet Connectivity

CheckInternetConnection();
NetworkChange.NetworkAvailabilityChanged += NetworkAvailabilityChanged;

#endregion
MetroMain.Title = Constants.Application_Title + " ---- " +
session.UserName;
MetroMain.Title = carData != null ? MetroMain.Title + " ---- " +
carData.CarModel.model : MetroMain.Title;
BindingOperations.EnableCollectionSynchronization(dataGridItems,
lockObject);

InitializeGridHandlers();

Assembly systemAssembly =
System.Reflection.Assembly.GetExecutingAssembly();
//Get the current version
Version applicationVersion = systemAssembly.GetName().Version;
//tbGUIversion.Text = $"GUI Ver: {applicationVersion.Major}.
{applicationVersion.Minor}";
tbGUIversion.Text = $"GUI Ver: {applicationVersion.ToString(3)}";

accountUserName.Text = session?.UserName ?? string.Empty;


AutoUpdateHelper.CheckForUpdates(systemAssembly);

//Comparison function list


CMB_OPERATION_LIST = new List<string>
{
"log: AND",
"log: OR",
"cmp: ≥ TRIG",
"cmp: ≤ TRIG",
};

BTS0_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0, 0,


0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
BTS0_DATA_BYTES.CollectionChanged += (sender, e) =>
BTS_TRIG_MSG_BYTES_CollectionChanged(sender, e, 0);
BTS1_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
BTS1_DATA_BYTES.CollectionChanged += (sender, e) =>
BTS_TRIG_MSG_BYTES_CollectionChanged(sender, e, 1);
CMBIT0_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT0_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 2);
CMBIT1_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT1_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 3);
CMBIT2_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT2_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 4);
CMBIT3_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT3_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 5);
CMBIT4_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT4_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 6);
CMBIT5_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT5_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 7);
CMBIT6_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT6_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 8);
CMBIT7_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT7_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 9);
CMBIT8_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT8_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 10);
CMBIT9_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT9_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 11);
CMBIT10_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT10_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 12);
CMBIT11_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT11_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 13);
CMBIT12_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT12_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 14);
CMBIT13_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT13_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 15);
CMBIT14_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT14_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 16);
CMBIT15_DATA_BYTES = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
CMBIT15_DATA_BYTES.CollectionChanged += (sender, e) =>
CMBIT_DATA_BYTES_CollectionChanged(sender, e, 17);

CANBUS_MSG_IDS = new ObservableCollection<UInt32> { 0, 0, 0, 0, 0, 0,


0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //SUM: BTS = 2 IDs, CANBits = 16 IDs
CANBUS_MSG_IDS.CollectionChanged += (sender, e) =>
CANBUS_MSG_IDS_SOURCE_CollectionChanged(sender, e, "MSG ID");
CANBUS_MSG_SOURCE = new ObservableCollection<byte> { 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //SUM: BTS = 2 Src, CANBits = 16 Srcs
CANBUS_MSG_SOURCE.CollectionChanged += (sender, e) =>
CANBUS_MSG_IDS_SOURCE_CollectionChanged(sender, e, "MSG Source");

CANBUS_MSG_IDS_COPY = new ObservableCollection<UInt32> { 0, 0, 0, 0, 0,


0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //SUM: BTS = 2 IDs, CANBits = 16 IDs
CANBUS_MSG_SOURCE_COPY = new ObservableCollection<byte> { 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; //SUM: BTS = 2 Src, CANBits = 16
Srcs

SolidColorBrush dbr = Brushes.Black;


STATUS_BIT_COLOR = new ObservableCollection<SolidColorBrush> { dbr,
dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr, dbr
};

//BTS0_DATA_BYTES_COPY = new ObservableCollection<byte> { 0, 0, 0, 0,


0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0 };

OB_COLLECTION_ARRAY = new[] { BTS0_DATA_BYTES, BTS1_DATA_BYTES,


CMBIT0_DATA_BYTES, CMBIT1_DATA_BYTES,
CMBIT2_DATA_BYTES, CMBIT3_DATA_BYTES,
CMBIT4_DATA_BYTES, CMBIT5_DATA_BYTES,
CMBIT6_DATA_BYTES, CMBIT7_DATA_BYTES,
CMBIT8_DATA_BYTES, CMBIT9_DATA_BYTES,
CMBIT10_DATA_BYTES, CMBIT11_DATA_BYTES,
CMBIT12_DATA_BYTES, CMBIT13_DATA_BYTES,
CMBIT14_DATA_BYTES, CMBIT15_DATA_BYTES };

this.DataContext = this;
ContentRendered += MainWindow_ContentRendered;

private void MainWindow_ContentRendered(object sender, EventArgs e)


{
WindowState = WindowState.Maximized; // Set the window state to
Maximized after rendering
}

private void NetworkAvailabilityChanged(object sender,


NetworkAvailabilityEventArgs e)
{
Dispatcher.Invoke(() => CheckInternetConnection());
}

private void CheckInternetConnection()


{
if (IsInternetAvailable())
{
internetStatus.Text = "Internet Access";
}
else
{
internetStatus.Text = "No Internet";
}
}
private void InitializeGridHandlers()
{
try
{
//To drag and drop rows in scanner grid
gridList.PreviewMouseLeftButtonDown += new
MouseButtonEventHandler(GridList_PreviewMouseLeftButtonDown);
gridList.Drop += new DragEventHandler(GridList_Drop);
}
catch (Exception e)
{
ExceptionHandler.DebugException(e);
}

}
// Method to access a collection by variable name
public ObservableCollection<byte> GetCollectionByName(string name)
{
// Use reflection to find the property by name
PropertyInfo property = this.GetType().GetProperty(name);

// Check if property exists and is of type ObservableCollection<byte>


if (property != null && property.PropertyType ==
typeof(ObservableCollection<byte>))
{
// Get the value of the property and return it
return (ObservableCollection<byte>)property.GetValue(this);
}
else
{
// Handle case where the property with the given name doesn't exist
or is not of the correct type
return null; // or throw an exception, return a default collection,
etc.
}
}
private void CANBUS_MSG_IDS_SOURCE_CollectionChanged(object sender,
System.Collections.Specialized.NotifyCollectionChangedEventArgs e, string
collectionName)
{
var col = collectionName;
int index = e.NewStartingIndex;
var zerByte = "zeroByte_0_7_";
var zerByteIndex = $"{zerByte}{index + 1}";
var zeroByteMenu = (MenuItem)this.FindName(zerByteIndex);
var id = CANBUS_MSG_IDS[index];
var source = CANBUS_MSG_SOURCE[index];
var boolValue = false;
if (index < 2)
{
var bts = $"BTS{index}_DATA_BYTES";
//var asd = (ObservableCollection<byte>)this.FindName(bts);
var btsCollection = GetCollectionByName(bts);
//var aaaa = BTS0_DATA_BYTES;
boolValue = btsCollection.Take(16).Any(b => b > 0);
}
else
{
var idx = index - 2;
var cmBit = $"CMBIT{idx}_DATA_BYTES";
var cmBitCollection = GetCollectionByName(cmBit);
boolValue = cmBitCollection.Take(16).Any(b => b > 0);
//var bts = $"CMBIT{idx}_DATA_BYTES".Take(16).Any(b => b > 0);
}
zeroByteMenu.Foreground = (id > 0 || source > 0 || boolValue) ?
Brushes.Orange : Brushes.White;
}

private void BTS_TRIG_MSG_BYTES_CollectionChanged(object sender,


System.Collections.Specialized.NotifyCollectionChangedEventArgs e, int location)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action ==
NotifyCollectionChangedAction.Remove || e.Action ==
NotifyCollectionChangedAction.Replace)
{
var rbPref = "radBts";
var rbCMPref = "radCMBit";
var sepratorKey = "B";
var sepratorKeyIgnore = "I";
int index = e.NewStartingIndex;
int ind = index < 8 ? index : (index - 8);

var col = location;


//int index = e.NewStartingIndex;
var zerByte = "zeroByte_0_7_";
var zerByteIndex = $"{zerByte}{col + 1}";
var zeroByteMenu = (MenuItem)this.FindName(zerByteIndex);
var id = CANBUS_MSG_IDS[col];
var source = CANBUS_MSG_SOURCE[col];
var boolValue = false;
var bts = $"BTS{col}_DATA_BYTES";
var btsCollection = GetCollectionByName(bts);
boolValue = btsCollection.Take(16).Any(b => b > 0);
if (index < 16)
{
//var dataMask = BTS0_DATA_BYTES[ind];
//var dataTrig = BTS0_DATA_BYTES[ind + 8];
var dataMask = btsCollection[ind];
var dataTrig = btsCollection[ind + 8];
//var tabIndex = "0";
var rbName = $"{rbPref}{col}{sepratorKey}{ind}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if ((dataMask != 0) || (dataTrig != 0))
{
ChangeTextBlockColor(rbIgnore, Brushes.Orange);
}
else if (dataMask == 0 && dataTrig == 0)
{
ChangeTextBlockColor(rbIgnore, Brushes.White);
}
}
zeroByteMenu.Foreground = (id > 0 || source > 0 || boolValue) ?
Brushes.Orange : Brushes.White;
#region Commented Code
//// Check if the sender is BTS0_DATA_BYTES
//if (sender == BTS0_DATA_BYTES && index < 16)
//{
// //bool btsValue = BTS0_DATA_BYTES.Take(16).Any(b => b > 0);
// //zeroByte_0_7_1.Foreground = btsValue ? Brushes.Orange :
Brushes.White;
// var dataMask = BTS0_DATA_BYTES[ind];
// var dataTrig = BTS0_DATA_BYTES[ind + 8];
// var tabIndex = "0";
// var rbName = $"{rbPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if(dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//// Check if the sender is BTS1_DATA_BYTES
//else if (sender == BTS1_DATA_BYTES && index < 16)
//{
// bool btsValue = BTS1_DATA_BYTES.Take(16).Any(b => b > 0);
// zeroByte_0_7_2.Foreground = btsValue ? Brushes.Orange :
Brushes.White;
// var dataMask = BTS1_DATA_BYTES[ind];
// var dataTrig = BTS1_DATA_BYTES[ind + 8];
// var tabIndex = "1";
// var rbName = $"{rbPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
#endregion
}

return;
}

private void CMBIT_DATA_BYTES_CollectionChanged(object sender,


System.Collections.Specialized.NotifyCollectionChangedEventArgs e, int location)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action ==
NotifyCollectionChangedAction.Remove || e.Action ==
NotifyCollectionChangedAction.Replace)
{
var rbCMPref = "radCMBit";
var sepratorKey = "B";
var sepratorKeyIgnore = "I";
int index = e.NewStartingIndex;
int ind = index < 8 ? index : (index - 8);

var col = location;


var colIndex = location - 2;
//int index = e.NewStartingIndex;
var zerByte = "zeroByte_0_7_";
var zerByteIndex = $"{zerByte}{col + 1}";
var zeroByteMenu = (MenuItem)this.FindName(zerByteIndex);
var id = CANBUS_MSG_IDS[col];
var source = CANBUS_MSG_SOURCE[col];
var boolValue = false;
var cmBit = $"CMBIT{colIndex}_DATA_BYTES";
var cmBitCollection = GetCollectionByName(cmBit);
boolValue = cmBitCollection.Take(16).Any(b => b > 0);
if (index < 16)
{
var dataMask = cmBitCollection[ind];
var dataTrig = cmBitCollection[ind + 8];
//var tabIndex = "0";
var rbName = $"{rbCMPref}{colIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if ((dataMask != 0) || (dataTrig != 0))
{
ChangeTextBlockColor(rbIgnore, Brushes.Orange);
}
else if (dataMask == 0 && dataTrig == 0)
{
ChangeTextBlockColor(rbIgnore, Brushes.White);
//zeroByte_0_7_1.Foreground = Brushes.White;
}
}

zeroByteMenu.Foreground = (id > 0 || source > 0 || boolValue) ?


Brushes.Orange : Brushes.White;
#region CMBIT values
//if (sender == CMBIT0_DATA_BYTES && index < 16)
//{
// //var cmbit =
(ObservableCollection<byte>)this.FindName("CMBIT0_DATA_BYTES");
// var dataMask = CMBIT0_DATA_BYTES[ind];
// var dataTrig = CMBIT0_DATA_BYTES[ind + 8];
// var tabIndex = "0";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// //zeroByte_0_7_1.Foreground = Brushes.White;
// }
// //zeroByte_0_7_1.Foreground = Brushes.Orange;
//}
//else if (sender == CMBIT1_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT1_DATA_BYTES[ind];
// var dataTrig = CMBIT1_DATA_BYTES[ind + 8];
// var tabIndex = "1";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT2_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT2_DATA_BYTES[ind];
// var dataTrig = CMBIT2_DATA_BYTES[ind + 8];
// var tabIndex = "2";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT3_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT3_DATA_BYTES[ind];
// var dataTrig = CMBIT3_DATA_BYTES[ind + 8];
// var tabIndex = "3";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT4_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT4_DATA_BYTES[ind];
// var dataTrig = CMBIT4_DATA_BYTES[ind + 8];
// var tabIndex = "4";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT5_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT5_DATA_BYTES[ind];
// var dataTrig = CMBIT5_DATA_BYTES[ind + 8];
// var tabIndex = "5";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT6_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT6_DATA_BYTES[ind];
// var dataTrig = CMBIT6_DATA_BYTES[ind + 8];
// var tabIndex = "6";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT7_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT7_DATA_BYTES[ind];
// var dataTrig = CMBIT7_DATA_BYTES[ind + 8];
// var tabIndex = "7";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT8_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT8_DATA_BYTES[ind];
// var dataTrig = CMBIT8_DATA_BYTES[ind + 8];
// var tabIndex = "8";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT9_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT9_DATA_BYTES[ind];
// var dataTrig = CMBIT9_DATA_BYTES[ind + 8];
// var tabIndex = "9";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT10_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT10_DATA_BYTES[ind];
// var dataTrig = CMBIT10_DATA_BYTES[ind + 8];
// var tabIndex = "10";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT11_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT11_DATA_BYTES[ind];
// var dataTrig = CMBIT11_DATA_BYTES[ind + 8];
// var tabIndex = "11";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT12_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT12_DATA_BYTES[ind];
// var dataTrig = CMBIT12_DATA_BYTES[ind + 8];
// var tabIndex = "12";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT13_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT13_DATA_BYTES[ind];
// var dataTrig = CMBIT13_DATA_BYTES[ind + 8];
// var tabIndex = "13";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT14_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT14_DATA_BYTES[ind];
// var dataTrig = CMBIT14_DATA_BYTES[ind + 8];
// var tabIndex = "14";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
//else if (sender == CMBIT15_DATA_BYTES && index < 16)
//{
// var dataMask = CMBIT15_DATA_BYTES[ind];
// var dataTrig = CMBIT15_DATA_BYTES[ind + 8];
// var tabIndex = "15";
// var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{ind}
{sepratorKeyIgnore}";
// var rbIgnore = (RadioButton)this.FindName(rbName);
// if ((dataMask != null && dataMask != 0) || (dataTrig != null
&& dataTrig != 0))
// {
// ChangeTextBlockColor(rbIgnore, Brushes.Orange);
// }
// else if (dataMask == 0 && dataTrig == 0)
// {
// ChangeTextBlockColor(rbIgnore, Brushes.White);
// }
//}
#endregion
}

return;
}

//Filter the text in the TextBox


#region Filters for Textbox showing different number formats
private void tbxDecData_PreviewTextInput(object sender,
TextCompositionEventArgs e)
{
try
{
Regex _regex = new Regex("[^0-9]"); //regex that matches disallowed
text

//if (!char.IsLetterOrDigit(e.Text, e.Text.Length - 1) && (e.Text !


= "-"))
//{
// e.Handled = true;
//}
if (_regex.IsMatch(e.Text))
{
e.Handled = true;
}
else
{
var tbDec = sender as System.Windows.Controls.TextBox;
UInt16 ab = System.Convert.ToUInt16(tbDec.Text + e.Text);
if (ab >= 256)
{
e.Handled = true;
tbDec.Text = "255";
tbDec.CaretIndex = tbDec.Text.Length;

}
}
}
catch (Exception)
{
//MessageBox.Show(Ex.Message, "Error on Filter");
}
}
private void tbxDecIDData_PreviewTextInput(object sender,
TextCompositionEventArgs e)
{
try
{
Regex _regex = new Regex("[^0-9]"); //regex that matches disallowed
text

//if (!char.IsLetterOrDigit(e.Text, e.Text.Length - 1) && (e.Text !


= "-"))
//{
// e.Handled = true;
//}
if (_regex.IsMatch(e.Text))
{
e.Handled = true;
}
else
{
var tbDec = sender as System.Windows.Controls.TextBox;
UInt32 ab = System.Convert.ToUInt32(tbDec.Text + e.Text);
if (ab >= 536870911)
{
e.Handled = true;
tbDec.Text = "536870911";
tbDec.CaretIndex = tbDec.Text.Length;

}
}
}
catch (Exception)
{
//MessageBox.Show(Ex.Message, "Error on Filter");
}
}

/**
* Check for Binary format conditions
*/
private void tbxBinary_PreviewTextInput(object sender,
TextCompositionEventArgs e)
{
try
{
Regex _regex = new Regex("[^0-1]"); //regex that matches disallowed
text

//if (!char.IsLetterOrDigit(e.Text, e.Text.Length - 1) && (e.Text !


= "-"))
//{
// e.Handled = true;
//}
if (_regex.IsMatch(e.Text))
{
e.Handled = true;
}

var tbBin = sender as System.Windows.Controls.TextBox;

if (tbBin.Text.Length < 8)
{
UInt16 ab = System.Convert.ToUInt16(tbBin.Text + e.Text, 2);
if (ab >= 256)
{
e.Handled = true;
tbBin.Text = "11111111";
tbBin.CaretIndex = tbBin.Text.Length;

}
}
else
{
e.Handled = true;
}
}
catch (Exception)
{
//MessageBox.Show(Ex.Message, "Error on Filter");
}
}

/**
* Detect the text changes and fix them
*/
private void tbxSampleBin_PreviewKeyDown(object sender, KeyEventArgs e)
{
try
{
var tbxBin = sender as System.Windows.Controls.TextBox;
int carIdx = tbxBin.CaretIndex;

if ((e.Key == Key.Space) || (e.Key == Key.Delete))


{
e.Handled = true;
}
else if ((e.Key == Key.Back) && (tbxBin.Text.Length > 0) &&
(tbxBin.CaretIndex > 0))
{
string abText = tbxBin.Text.Remove(carIdx - 1, 1);
tbxBin.Text = abText.Insert(carIdx - 1, "0");
tbxBin.CaretIndex = carIdx - 1;
e.Handled = true;
}
else if ((tbxBin.CaretIndex < tbxBin.Text.Length) && ((e.Key ==
Key.NumPad0) || (e.Key == Key.D0) || (e.Key == Key.NumPad1) || (e.Key == Key.D1)))
{
string abText = tbxBin.Text;
//Adjust the Text Length of the Textbox
if (tbxBin.Text.Length < 8)
{
carIdx = 8 - tbxBin.Text.Length;
while (abText.Length < 8)
{
abText = "0" + abText;//tbxBin.Text.Insert(0, "0");
}

}
abText = abText.Remove(carIdx, 1);
if ((e.Key == Key.D1) || (e.Key == Key.NumPad1)) abText =
abText.Insert(carIdx, "1");
else if ((e.Key == Key.D0) || (e.Key == Key.NumPad0)) abText =
abText.Insert(carIdx, "0");
e.Handled = true;
tbxBin.Text = abText;
tbxBin.CaretIndex = carIdx + 1;
}

//else if (((e.Key == Key.NumPad1) || (e.Key == Key.D1)) &&


(tbxBin.CaretIndex > 0) && (tbxBin.Text.Length > 0) && (tbxBin.Text[0] == '0'))
//{
// string abText = tbxBin.Text.Substring(1, tbxBin.Text.Length -
1);
// tbxBin.Text = abText.Insert(carIdx-1, "1");
//}
}
catch { }
}

/**
* Check for Hexadecimal format conditions
*/
private void tbxHexData_PreviewTextInput(object sender,
TextCompositionEventArgs e)
{
try
{
Regex _regex = new Regex("[^0-9A-F]", RegexOptions.IgnoreCase);
//regex that matches disallowed text
var tbxHex = sender as System.Windows.Controls.TextBox;

//if (!char.IsLetterOrDigit(e.Text, e.Text.Length - 1) && (e.Text !


= "-"))
//{
// e.Handled = true;
//}
if (_regex.IsMatch(e.Text))
{
e.Handled = true;
}

else if (tbxHex.Text.Length < 3)


{
int carIdx = tbxHex.CaretIndex;
string abText = tbxHex.Text;
abText = abText.Remove(carIdx, 1);
abText = abText.Insert(carIdx, e.Text);
tbxHex.Text = abText;

UInt16 ab = System.Convert.ToUInt16(tbxHex.Text, 16);


if (ab >= 256)
{
tbxHex.Text = "FF";
tbxHex.CaretIndex = tbxHex.Text.Length;

tbxHex.CaretIndex = carIdx + 1;
e.Handled = true;

}
else
{
e.Handled = true;
}
}
catch (Exception)
{
//MessageBox.Show(Ex.Message, "Error on Filter");
}
}

/**
* Detect the text changes and fix them
*/
private void tbxSampleHex_PreviewKeyDown(object sender, KeyEventArgs e)
{
var tbxHex = sender as System.Windows.Controls.TextBox;
int carIdx = tbxHex.CaretIndex;

if ((e.Key == Key.Space) || (e.Key == Key.Delete))


{
e.Handled = true;
}
else if ((e.Key == Key.Back) && (tbxHex.Text.Length > 0) &&
(tbxHex.CaretIndex > 0))
{
string abText = tbxHex.Text.Remove(carIdx - 1, 1);
tbxHex.Text = abText.Insert(carIdx - 1, "0");
tbxHex.CaretIndex = carIdx - 1;
e.Handled = true;
}
//else if ((tbxHex.CaretIndex < tbxHex.Text.Length) && ((e.Key ==
Key.NumPad0) || (e.Key == Key.D0) || (e.Key == Key.NumPad1) || (e.Key == Key.D1)))
//{
// string abText = tbxBin.Text;
// //Adjust the Text Length of the Textbox
// if (tbxBin.Text.Length < 8)
// {
// carIdx = 8 - tbxBin.Text.Length;
// while (abText.Length < 8)
// {
// abText = "0" + abText;//tbxBin.Text.Insert(0, "0");
// }

// }
// abText = abText.Remove(carIdx, 1);
// if ((e.Key == Key.D1) || (e.Key == Key.NumPad1)) abText =
abText.Insert(carIdx, "1");
// else if ((e.Key == Key.D0) || (e.Key == Key.NumPad0)) abText =
abText.Insert(carIdx, "0");
// e.Handled = true;
// tbxBin.Text = abText;
// tbxBin.CaretIndex = carIdx + 1;
//}

//else if (((e.Key == Key.NumPad1) || (e.Key == Key.D1)) &&


(tbxBin.CaretIndex > 0) && (tbxBin.Text.Length > 0) && (tbxBin.Text[0] == '0'))
//{
// string abText = tbxBin.Text.Substring(1, tbxBin.Text.Length - 1);
// tbxBin.Text = abText.Insert(carIdx-1, "1");
//}
}

/**
* Check for Hex Canbus ID format conditions
*/
private void tbxHexID_PreviewTextInput(object sender,
TextCompositionEventArgs e)
{
try
{
Regex _regex = new Regex("[^0-9A-F]", RegexOptions.IgnoreCase);
//regex that matches disallowed text
var tbxHex = sender as System.Windows.Controls.TextBox;

//if (!char.IsLetterOrDigit(e.Text, e.Text.Length - 1) && (e.Text !


= "-"))
//{
// e.Handled = true;
//}
if (_regex.IsMatch(e.Text))
{
e.Handled = true;
}
else if (tbxHex.Text.Length < 9)
{
int carIdx = tbxHex.CaretIndex;
string abText = tbxHex.Text;
abText = abText.Remove(carIdx, 1);
abText = abText.Insert(carIdx, e.Text);
tbxHex.Text = abText;

UInt32 ab = System.Convert.ToUInt32(tbxHex.Text, 16);


if (ab >= 536870911)
{
tbxHex.Text = "1FFFFFFF";
tbxHex.CaretIndex = tbxHex.Text.Length;

tbxHex.CaretIndex = carIdx + 1;
e.Handled = true;

}
else
{
e.Handled = true;
}
}
catch (Exception)
{
//MessageBox.Show(Ex.Message, "Error on Filter");
}
}

#endregion End of Filters on Textboxes

#region LOGGER
//Method to log data on logger
private void logDataNow(string logData, LOG_COLORS logColor =
LOG_COLORS.NORMAL, LOG_TYPE logType = LOG_TYPE.INFO)
{
try
{
Brush foregroundBrush = Brushes.Gainsboro;

if (logColor == LOG_COLORS.SUCCESS)
{
if (logType == LOG_TYPE.DATA) { foregroundBrush = Brushes.Cyan;
}
else { foregroundBrush = Brushes.LimeGreen; }
}
else if (logColor == LOG_COLORS.WARNING) { foregroundBrush =
Brushes.Yellow; }
else if (logColor == LOG_COLORS.ERROR) { foregroundBrush =
Brushes.Red; }

Paragraph para = new Paragraph();

para.Inlines.Add(new
Run("----------------------------------------------------"));
para.Inlines.Add(new Run($"\r> {DateTime.Now}" + "\r\n"));

Run run = new Run((String.IsNullOrEmpty(logData) ? "> No Data to


log" : $"> {logData}"));
if (logType == LOG_TYPE.DATA)
{
//run.FontFamily = new FontFamily("Lucida Sans Unicode");
//run.FontWeight = FontWeights.Bold;
}
run.Foreground = foregroundBrush;
para.Inlines.Add(run);

para.Inlines.Add(new Run("\
r----------------------------------------------------"));

run.Foreground = foregroundBrush; // ((logType == 0)?


Brushes.WhiteSmoke : Brushes.Yellow);
mainRTB.Document.Blocks.Add(para);

svLog.ScrollToBottom();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message, "Log error:");
}
}
#endregion

#region Data Sync Timer Code


private bool isExportSettingsPressed = false;
private bool isSignalSelected = false;
private bool isClearButtonClicked = false;
private bool undoButtonPressedBeforeExport = false;
private bool isFetchFromCloud = false;
private void tglDataSync_IsCheckedChanged(object sender, EventArgs e)
{
try
{
if (tglDataSync.IsChecked == true)
{
if (is_scanner_running)
{
btnStartStop_Click(null, null); // If scanner is running,
turn it OFF
}
if (isSignalSelected)
{
if (isExportSettingsPressed)
{
startDataSyncTimer();
}
else
{
this.ShowMessageAsync("Export Settings", "Please Export
Settings First for the Fetched Signal!!", MessageDialogStyle.Affirmative);
tglDataSync.IsChecked = false;
}
}
else if (undoButtonPressedBeforeExport || isClearButtonClicked)
{
this.ShowMessageAsync("Export Settings", "You've Cleared a
Signal, Please Export Settings First!!", MessageDialogStyle.Affirmative);
tglDataSync.IsChecked = false;
}
else if (exportBytesFromScannerToConfig)
{
this.ShowMessageAsync("Export Settings", "You've Exported
Bytes From Scanner, Please Export Settings First!!",
MessageDialogStyle.Affirmative);
tglDataSync.IsChecked = false;
}
else
{
startDataSyncTimer();
}
}
else
{
if (dataSyncTimer != null)
{
isSignalSelected = false;
dataSyncTimer.Stop();
dataSyncTimer = null;
SolidColorBrush dbr = Brushes.Black;
for (int i = 0; i <= 17; i++)
{
STATUS_BIT_COLOR[i] = dbr;
Button thumbLikeButton =
(Button)this.FindName($"thumbLike{i}");
if (thumbLikeButton != null)
{
if (STATUS_BIT_COLOR[i] == Brushes.Black)
{
thumbLikeButton.IsEnabled = false;
}
}
}
}
}
}
catch(Exception ex)
{
log.Error("General Status Toggle Button" + ex.Message);
}

/* Start Data Sync Timer */


internal DispatcherTimer dataSyncTimer = null;
private void startDataSyncTimer()
{
dataSyncTimer = new DispatcherTimer();
dataSyncTimer.Interval = TimeSpan.FromMilliseconds(100);
dataSyncTimer.Tick += dataSyncTimer_Tick;
dataSyncTimer.Start();
}

private void dataSyncTimer_Tick(object sender, EventArgs e)


{
try
{
if ((_connected) && (uploadTimer == null) && (downloadTimer ==
null))
{
Byte[] buffer = new Byte[64];

buffer[0] = (Byte)'$';
buffer[1] = (Byte)'1'; //Retrieve
Active Status data

//Send the Data to the unit


writeUsbHid(buffer);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Data Sync Timer Exception");
var timer = sender as DispatcherTimer;
timer.Stop();
timer = null;
tglDataSync.IsChecked = false; //Set toggle switch to OFF.
}
}
#endregion

#region Upload / Download Firmware, EEPROM and Serial + HW Rev + Type Info

private int dataBlockCount = 0;


private int extraDataBlockCount = 0;
private int inProgress = 0;

//Read back the serial number


private void readBackSerialNumber()
{
try
{
if (_connected)
{
byte[] buffer = new byte[32];

buffer[0] = (byte)'$';
buffer[1] = (byte)'3'; //Access EEPROM Code
byte
buffer[2] = 101; //code for Read Serial
Number
writeUsbHid(buffer);
}

}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message, "Serial Read error:");
}
}

//Read back the Firmware


private void readBackFirmware()
{
try
{
if (_connected)
{
byte[] buffer = new byte[32];
buffer[0] = (byte)'$';
buffer[1] = (Byte)'5'; //Function code for firmware
type
writeUsbHid(buffer);
}

}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message, "Firmware Version Read error:");
}
}

#endregion Upload / Download Firmware and Serial + HW Rev + Type Info

#region Timer Uploading Code

//Method to start uploading


internal DispatcherTimer uploadTimer = null;
internal DispatcherTimer serialUpTimer = null;
internal string uploadMessages = null;
protected ProgressDialogController uploadController = null;
OpStages uploadStage = 0;
private async void startUploading()
{
if(tglDataSync.IsChecked == true)
{
if(dataSyncTimer != null)
{
tglDataSync.IsChecked = false;
}
}
//start setup for sync controller
var progSettings = new MetroDialogSettings()
{
NegativeButtonText = "Cancel",
AnimateShow = false,
AnimateHide = false,
ColorScheme = MetroDialogColorScheme.Inverted,
};

//Prepare Progress Dialog


string msgTitle = "Export Settings";
string msgContent = "Exporting configuration data to the CAN Master
unit.";
uploadMessages = "Exporting configuration data to the CAN Master
unit.";
uploadController = await this.ShowProgressAsync(msgTitle, msgContent,
settings: progSettings);
uploadController.SetIndeterminate();
uploadController.SetCancelable(true);
uploadController.Canceled += uploadController_Canceled;
uploadController.Minimum = 0;
uploadController.Maximum = 18;

dataBlockCount = 0;
//inProgress = 1;
uploadStage = 0;
//Clear the Logger if Auto Clear is checked
//if (tglAutoClearLog.IsChecked == true)
//{
// mainRTB.Document.Blocks.Clear();
//}

uploadTimer = new DispatcherTimer();


uploadTimer.Interval = TimeSpan.FromMilliseconds(100);
uploadTimer.Tick += uploadTimer_Tick;
uploadTimer.Start();
}

//If the synchronization process is cancelled


private async void uploadController_Canceled(object sender, EventArgs e)
{
if (uploadTimer != null)
{
uploadTimer.Stop();
uploadTimer = null;
}

logDataNow($"Uploading cancelled!", LOG_COLORS.WARNING, LOG_TYPE.INFO);

await uploadController.CloseAsync();
uploadController = null;
}

//Upload Timer Tick routine


#region uploadTimer_Tick
bool[] bit_isFetched = new bool[18];
bool[] car_fetchedData = new bool[19];
//replica of method
private async void uploadTimer_Tick(object sender, EventArgs e)
{
if (uploadStage == OpStages.opGenSettings)
{
try
{
Byte[] buffer = new Byte[64];
int idx = dataBlockCount;

buffer[0] = (Byte)'$';
buffer[1] = (Byte)'3'; //Access EEPROM
buffer[2] = (Byte)1; //Write CAN
Ports Data to the EEPROM
buffer[3] = (Byte)0; //Block Number
| Each block is 64 bytes | Block 0 belongs to General settings like CAN ports
config and Power settings

//buffer[4] = (Byte)cmbBaudCAN0.SelectedIndex; //Baudrate of


CAN Port 0
if (cmbBaudCAN0.SelectedItem != null)
{
UInt16 can0_baudrate = UInt16.Parse(new
string(cmbBaudCAN0.SelectedItem.ToString().SkipWhile(c => !
char.IsDigit(c)).TakeWhile(c => char.IsDigit(c)).ToArray()));
byte[] can0_baudrate_arr =
BitConverter.GetBytes(can0_baudrate);
//if the conversion was in Big Endian, change it to little
endian
if (!BitConverter.IsLittleEndian)
Array.Reverse(can0_baudrate_arr);
Array.Copy(can0_baudrate_arr, 0, buffer, 4, 2);
//Store converted values into the buffer

//Set the flags | for example the power enable


buffer[6] = (tglEnCanvPwr.IsChecked == true) ? (byte)1 :
(byte)0;
}
else
{
buffer[4] = (Byte)0; // cmbBaudCAN0.SelectedIndex;
//Baudrate byte0 of CAN Port 0
buffer[5] = (Byte)0; // cmbBaudCAN0.SelectedIndex;
//Baudrate byte1 of CAN Port 0
}

//Set Power Saving Options for CAN-V side


buffer[7] = (cbCMCanvPwrDown.IsChecked == true) ? (byte)1 :
(byte)0;
buffer[7] |= (cbCMCanvWakeupDRB.IsChecked == true) ? (byte)2 :
(byte)0;
buffer[7] |= (cbCMCanvWakeupOnRegMsg.IsChecked == true) ?
(byte)4 : (byte)0;

//buffer[14] = (Byte)cmbBaudCAN1.SelectedIndex; //Baudrate of


CAN Port 1
if (cmbBaudCAN1.SelectedItem != null)
{
UInt16 can1_baudrate = UInt16.Parse(new
string(cmbBaudCAN1.SelectedItem.ToString().SkipWhile(c => !
char.IsDigit(c)).TakeWhile(c => char.IsDigit(c)).ToArray()));
byte[] can1_baudrate_arr =
BitConverter.GetBytes(can1_baudrate);
//if the conversion was in Big Endian, change it to little
endian
if (!BitConverter.IsLittleEndian)
Array.Reverse(can1_baudrate_arr);
Array.Copy(can1_baudrate_arr, 0, buffer, 14,
2); //Store converted values into the buffer
}
else
{
//If the selected item is null then we don't use it.
buffer[14] = (Byte)0; // cmbBaudCAN1.SelectedIndex;
//Baudrate byte0 of CAN Port 1
buffer[15] = (Byte)0; // cmbBaudCAN1.SelectedIndex;
//Baudrate byte1 of CAN Port 1
}

//Set Power Saving Options for CAN-1 side


buffer[16] = (cbDRBAcceptSleepReq.IsChecked == true) ?
(byte)1 : (byte)0;
buffer[16] |= (cbDRBAcceptWakepReq.IsChecked == true) ? (byte)2
: (byte)0;
buffer[16] |= (cbDRBSendSleepReq.IsChecked == true) ? (byte)4 :
(byte)0;
//buffer[16] |= (cbDRBSendWakepReq.IsChecked == true) ? (byte)8
: (byte)0;

//Set Power saving settings bits and Bytes


//buffer[24] = (tsPMgr.IsChecked == true) ? (byte)1 : (byte)0;
//Power saving enable bit
buffer[24] = (((buffer[7] & 0x01) == 1) || ((buffer[16] & 0x01)
== 1)) ? (byte)1 : (byte)0; //Power saving enable bit

UInt16 tempVal = (UInt16)nudPwrInactTimer.Value; //Get the


Inactivity timer value
byte[] inActTimerBytes = BitConverter.GetBytes(tempVal);
//if the conversion was in Big Endian, change it to little
endian
if (!BitConverter.IsLittleEndian)
Array.Reverse(inActTimerBytes);
Array.Copy(inActTimerBytes, 0, buffer, 25, 2); //Store
converted values into the buffer

//We are not using the following Setting yet


//buffer[27] = (byte)nudPwrCMPos.Value; //Use CM
postion for fall asleep

//Send the Data to the unit


writeUsbHid(buffer);

uploadStage++;
}
catch (Exception ex)
{
log.Error("EXPORT - Gen Settings - ERROR" + ex.Message);
}

else if (uploadStage == OpStages.opExtraDataBlocks)


{
try
{
//exportextra

Byte[] buffer = new Byte[64];


int idx = extraDataBlockCount;

var cmbSignalType = "cmbSignalType";


var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}
{idx}");
int baudRate = cmbScanBaudCAN0.SelectedIndex;
CarData carData = await SessionHelper.CheckLocalCarData();
if (carData != null)
{
CarData_isFetched = true;
}

string carMakeId =
((GetMakeNames)comboCar.SelectedValue).id.ToString();
string carModelId =
((GetModelNames)comboCarModel.SelectedValue).id.ToString();
string engineId =
((EngineType)comboEngineType.SelectedValue)?.Id.ToString() != null ?
((EngineType)comboEngineType.SelectedValue).Id.ToString() : null;
string gearId =
((GearBox)comboGearBox.SelectedItem)?.Id.ToString() != null ?
((GearBox)comboGearBox.SelectedItem).Id.ToString() : null;
string wheelDriveId =
((WheelDrive)comboWheelDrive.SelectedItem)?.Id.ToString() != null ?
((WheelDrive)comboWheelDrive.SelectedItem).Id.ToString() : null;
string year = comboYear?.SelectedValue?.ToString();

buffer[0] = (Byte)'$';
buffer[1] = (Byte)'3'; //Access EEPROM
buffer[2] = (Byte)5;
buffer[3] = (Byte)idx;

bool[] fetched_members = { BTS0_isFetched, BTS1_isFetched,


CM0_isFetched, CM1_isFetched, CM2_isFetched, CM3_isFetched,
CM4_isFetched, CM5_isFetched,
CM6_isFetched, CM7_isFetched, CM8_isFetched, CM9_isFetched, CM10_isFetched,
CM11_isFetched, CM12_isFetched,
CM13_isFetched, CM14_isFetched, CM15_isFetched, CarData_isFetched};
if (idx <= 17)
{
if (fetched_members[idx])
{
string[] signalTypeNames = { "BT0", "BT1", "CM1",
"CM2", "CM3", "CM4", "CM5", "CM6", "CM7", "CM8", "CM9", "CM10", "CM11", "CM12",
"CM13", "CM15", "CM16", "CM17" };
int id = idx;
string signalTypeName = signalTypeNames[Math.Min(idx,
signalTypeNames.Length - 1)];

string signalId = _selectedSignalIds[idx].ToString() ??


"";
//string signalId =
((SignalFilter)cmbSignal.SelectedItem).Id.ToString() != null ?
((SignalFilter)cmbSignal.SelectedItem).Id.ToString() :
_selectedSignalIds[idx]?.ToString();
buffer[4] = (byte)(fetched_members[idx] ? 1 : 0);

int encodedSignalId =
System.Text.Encoding.UTF8.GetBytes(signalId.ToCharArray(), 0, signalId.Length,
buffer, 6);

buffer[5] = (byte)encodedSignalId;
}
}
else if (idx == 18 && CarData_isFetched)
{
string combinedString = $"{carMakeId}-{carModelId}-{year}-
{gearId}-{engineId}-{wheelDriveId}-{baudRate}";
int encodedCarData =
System.Text.Encoding.UTF8.GetBytes(combinedString.ToCharArray(), 0,
combinedString.Length, buffer, 6);
buffer[5] = (byte)encodedCarData;
//writeUsbHid(buffer);
}

writeUsbHid(buffer);
if (++extraDataBlockCount >= 19) uploadStage++;
}
catch (Exception ex)
{
log.Error("EXPORT - Extra Data Blocks - ERROR" + ex.Message);
}

}
//Upload general configuration data related to BTS and CAN messages
else if (uploadStage == OpStages.opDataBlocks)
{
Byte[] buffer = new Byte[64];
int idx = dataBlockCount;
buffer[0] = (Byte)'$';
buffer[1] = (Byte)'3'; //Access EEPROM
buffer[2] = (Byte)3; //Write CAN Msg Data to
the EEPROM
buffer[3] = (Byte)idx; //Block Number | Each
block is 64 bytes | Block 0 and 1 belongs to BTS0 and BTS1 respectively.

bool[] fetched_members = { BTS0_isFetched, BTS1_isFetched,


CM0_isFetched, CM1_isFetched, CM2_isFetched, CM3_isFetched,
CM4_isFetched, CM5_isFetched,
CM6_isFetched, CM7_isFetched, CM8_isFetched, CM9_isFetched, CM10_isFetched,
CM11_isFetched, CM12_isFetched,
CM13_isFetched, CM14_isFetched, CM15_isFetched};

//if (BTS0_isFetched || BTS1_isFetched || CM0_isFetched ||


CM1_isFetched || CM2_isFetched || CM3_isFetched || CM4_isFetched || CM5_isFetched
|| CM6_isFetched || CM7_isFetched || CM8_isFetched || CM9_isFetched ||
CM10_isFetched
// || CM11_isFetched || CM12_isFetched || CM13_isFetched ||
CM13_isFetched || CM14_isFetched || CM15_isFetched)
if (fetched_members[idx] == true)
{
try
{
buffer[4] = (Byte)CANBUS_MSG_SOURCE_COPY[idx]; //CAN
Port Number 0 or 1

// get the msg id from hidden collection


byte[] msgIDs =
BitConverter.GetBytes(CANBUS_MSG_IDS_COPY[idx]);
if (!BitConverter.IsLittleEndian) Array.Reverse(msgIDs);
Array.Copy(msgIDs, 0, buffer, 5, 4);

var format = MSG_FORMAT_COPY.Where(x => x.Key ==


idx).FirstOrDefault();
buffer[34] = (format.Value == "EXT") ? (byte)1 : (byte)0;
buffer[35] = (byte)0x01; //Add the flag for indicating the
fetched signal

//if any signal is already fetched from cloud then


//use idx conditon to iterate and find ignore status of
specific tab
if (BTS0_isFetched && idx == 0)
{
for (int i = 0; i < 8; i++)
{
try
{
//checking if mask(0 - 7) and trigger (8 - 15)
are set 0, then it consider as ignore
if (BTS0_DATA_BYTES_COPY[i] == 0 &&
BTS0_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (BTS1_isFetched && idx == 1)


{
for (int i = 0; i < 8; i++)
{
try
{
if (BTS1_DATA_BYTES_COPY[i] == 0 &&
BTS1_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM0_isFetched && idx == 2)


{

for (int i = 0; i < 8; i++)


{
try
{
//checking if mask(0 - 7) and trigger(8 - 15)
are set 0, then it consider as ignore
if (CMBIT0_DATA_BYTES_COPY[i] == 0 &&
CMBIT0_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
if (CM1_isFetched && idx == 3)
{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT1_DATA_BYTES_COPY[i] == 0 &&
CMBIT1_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}

if (CM2_isFetched && idx == 4)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT2_DATA_BYTES_COPY[i] == 0 &&
CMBIT2_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM3_isFetched && idx == 5)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT3_DATA_BYTES_COPY[i] == 0 &&
CMBIT3_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
if (CM4_isFetched && idx == 6)
{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT4_DATA_BYTES_COPY[i] == 0 &&
CMBIT4_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM5_isFetched && idx == 7)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT5_DATA_BYTES_COPY[i] == 0 &&
CMBIT5_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM6_isFetched && idx == 8)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT6_DATA_BYTES_COPY[i] == 0 &&
CMBIT6_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM7_isFetched && idx == 9)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT7_DATA_BYTES_COPY[i] == 0 &&
CMBIT7_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM8_isFetched && idx == 10)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT8_DATA_BYTES_COPY[i] == 0 &&
CMBIT8_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM9_isFetched && idx == 11)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT9_DATA_BYTES_COPY[i] == 0 &&
CMBIT9_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM10_isFetched && idx == 12)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT10_DATA_BYTES_COPY[i] == 0 &&
CMBIT10_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM11_isFetched && idx == 13)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT11_DATA_BYTES_COPY[i] == 0 &&
CMBIT11_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM12_isFetched && idx == 14)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT12_DATA_BYTES_COPY[i] == 0 &&
CMBIT12_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM13_isFetched && idx == 15)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT13_DATA_BYTES_COPY[i] == 0 &&
CMBIT13_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM14_isFetched && idx == 16)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT14_DATA_BYTES_COPY[i] == 0 &&
CMBIT14_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

if (CM15_isFetched && idx == 17)


{
for (int i = 0; i < 8; i++)
{
try
{
if (CMBIT15_DATA_BYTES_COPY[i] == 0 &&
CMBIT15_DATA_BYTES_COPY[i + 8] == 0)
{
buffer[9] |= (byte)(1 << i);
}
}
catch (Exception)
{

}
}
}

//Temporary copy of observable collection array | Each


block contains bytes for Mask, Data bits and Compare logic
var tabs_all_copy = new[] { BTS0_DATA_BYTES_COPY,
BTS1_DATA_BYTES_COPY,
CMBIT0_DATA_BYTES_COPY,
CMBIT1_DATA_BYTES_COPY, CMBIT2_DATA_BYTES_COPY, CMBIT3_DATA_BYTES_COPY,
CMBIT4_DATA_BYTES_COPY,
CMBIT5_DATA_BYTES_COPY, CMBIT6_DATA_BYTES_COPY, CMBIT7_DATA_BYTES_COPY,
CMBIT8_DATA_BYTES_COPY,
CMBIT9_DATA_BYTES_COPY, CMBIT10_DATA_BYTES_COPY, CMBIT11_DATA_BYTES_COPY,
CMBIT12_DATA_BYTES_COPY,
CMBIT13_DATA_BYTES_COPY, CMBIT14_DATA_BYTES_COPY, CMBIT15_DATA_BYTES_COPY };
var tabs = tabs_all_copy[idx] as
ObservableCollection<byte>;
try
{
for (int j = 0; j < 24; j++) { buffer[j + 10] =
tabs[j]; }
}
catch (Exception)
{
//MessageBox.Show(ex.Message, "Error in data
preparation");
}
}
catch (Exception ex)
{
log.Error("Export - DataBlocks - ERROR" + ex.Message);
}

else
{
buffer[4] = (Byte)CANBUS_MSG_SOURCE[idx]; //CAN Port Number
0 or 1
buffer[35] = (byte)0x00; //Remove the flag for indicating the
fetched signal

//Here we convert uint(32 bit) CAN Message ID values to bytes


byte[] msgID = BitConverter.GetBytes(CANBUS_MSG_IDS[idx]);
//if the conversion was in Big Endian, change it to little
endian
if (!BitConverter.IsLittleEndian) Array.Reverse(msgID);
Array.Copy(msgID, 0, buffer, 5, 4); //Store converted
values into the buffer

//Active Bytes to be compared. | BITwise representation | bit0


represents = Byte0 and so on..
buffer[9] = 0;
//Calculate for BTS
if (idx <= 1)
{
for (int j = 0; j < 8; j++) { buffer[9] |=
(((this.FindName($"radBts{idx}B{j}I") as RadioButton).IsChecked == true) ? (byte)(1
<< j) : (byte)0); }
//Append the Message format info
buffer[34] = (((this.FindName($"radBts{idx}MsgTyE") as
RadioButton).IsChecked == true) ? (byte)1 : (byte)0);
}
//Calculate for general CAN signal bits
else if (idx <= 17)
{
for (int j = 0; j < 8; j++) { buffer[9] |=
(((this.FindName($"radCMBit{(idx - 2)}B{j}I") as RadioButton).IsChecked == true) ?
(byte)(1 << j) : (byte)0); }
//Append the Message format info
buffer[34] = (((this.FindName($"radCMBit{idx - 2}MsgTyE")
as RadioButton).IsChecked == true) ? (byte)1 : (byte)0);
}
//var tobs = OB_COLLECTION_ARRAY[i] as
ObservableCollection<byte>;
//Temporary copy of observable collection array | Each block
contains bytes for Mask, Data bits and Compare logic
var tobs_all = new[] { BTS0_DATA_BYTES, BTS1_DATA_BYTES,
CMBIT0_DATA_BYTES, CMBIT1_DATA_BYTES,
CMBIT2_DATA_BYTES, CMBIT3_DATA_BYTES,
CMBIT4_DATA_BYTES, CMBIT5_DATA_BYTES,
CMBIT6_DATA_BYTES, CMBIT7_DATA_BYTES,
CMBIT8_DATA_BYTES, CMBIT9_DATA_BYTES,
CMBIT10_DATA_BYTES, CMBIT11_DATA_BYTES,
CMBIT12_DATA_BYTES, CMBIT13_DATA_BYTES,
CMBIT14_DATA_BYTES, CMBIT15_DATA_BYTES };

var tobs = tobs_all[idx] as ObservableCollection<byte>;


for (int j = 0; j < 24; j++) { buffer[j + 10] = tobs[j]; }

////Data for Mask, Trigger and Logical Function


//if (i == 0)
//{
// for (int j = 0; j < 24; j++) { buffer[j + 10] =
BTS0_DATA_BYTES[j]; }
//}
//else if (i == 1)
//{
// for (int j = 0; j < 24; j++) { buffer[j + 10] =
BTS1_DATA_BYTES[j]; }
//}
//else
//{
// var tObc = this.FindName($"CMBIT{(i - 2)}_DATA_BYTES") as
ObservableCollection<byte>;
// for (int j = 0; j < 24; j++) { buffer[j + 10] = tObc[j]; }
//}

//Send the Data to the unit


writeUsbHid(buffer);

if (++dataBlockCount >= 18) uploadStage++;

uploadMessages = $"Exporting configuration data to the CAN Master


unit.\nBlocks Written: {dataBlockCount}";
uploadController.SetMessage(uploadMessages);
uploadController.SetProgress(dataBlockCount);

#region OBS data


//int res = updateFirmware();
//if ((res == 0) || (res == -1))
//{
// var timer = sender as DispatcherTimer;
// timer.Stop();
// timer = null;
// inProgress = 0;
// dataBlockCount = 0;

// if (tglSwAutoProgram.IsChecked == false)
// {

// await Task.Delay(2000);
// await uploadController.CloseAsync();
// uploadController = null;
// }
// else
// {
// uploadController.SetProgress(1);
// uploadMessages = $"Firmware - DONE!\nUploading serial
number: {tbSerialNumber.Text}";
// uploadController.SetMessage(uploadMessages);
// if (!string.IsNullOrEmpty(tbEEPROMPath.Text))
// {
// await Task.Delay(1000);
// }
// else
// {
// await Task.Delay(5000);
// }
// //Start Next Timer for uploading the serial number
// serialNumSent = false;
// vn5CalibrationRequested = false;
// vn5CalibrationError = false;
// serialUpTimer = new DispatcherTimer();
// serialUpTimer.Interval = TimeSpan.FromMilliseconds(1000);
// serialUpTimer.Tick += serialUpTimer_Tick;
// serialUpTimer.Start();
// }
//}
#endregion

}
else //When the attempts are over
{
//var test = new[] { BTS0_DATA_BYTES, BTS1_DATA_BYTES,
// CMBIT0_DATA_BYTES, CMBIT1_DATA_BYTES,
CMBIT2_DATA_BYTES, CMBIT3_DATA_BYTES,
// CMBIT4_DATA_BYTES, CMBIT5_DATA_BYTES,
CMBIT6_DATA_BYTES, CMBIT7_DATA_BYTES,
// CMBIT8_DATA_BYTES, CMBIT9_DATA_BYTES,
CMBIT10_DATA_BYTES, CMBIT11_DATA_BYTES,
// CMBIT12_DATA_BYTES,
CMBIT13_DATA_BYTES, CMBIT14_DATA_BYTES, CMBIT15_DATA_BYTES };
//var test =
//var tObc = BTS0_DATA_BYTES as ObservableCollection<byte>;
Byte[] buffer = new Byte[64];

//Restart the CAN master unit


buffer[0] = (Byte)'$';
buffer[1] = (Byte)'8'; //Restart Command
buffer[2] = (Byte)1; //Restart Main Unit

//Send the Data to the unit


writeUsbHid(buffer);
var timer = sender as DispatcherTimer;
timer.Stop();
uploadTimer = null;
dataBlockCount = 0;
extraDataBlockCount = 0;
await uploadController.CloseAsync();
uploadController = null;

uploadStage = 0;
}
}

private async void PromptUserForImport()


{
var importDlgSettings = new MetroDialogSettings()
{
AffirmativeButtonText = "Import",
NegativeButtonText = "Cancel",
AnimateShow = false,
AnimateHide = false,
ColorScheme = MetroDialogColorScheme.Inverted,
};

var result = await this.ShowMessageAsync(


"Import Settings",
"Do you want to import configuration data from CAN Master unit?",
MessageDialogStyle.AffirmativeAndNegative,
importDlgSettings);

if (result == MessageDialogResult.Affirmative)
{
// Import button clicked, call your import method
startImporting();
}
}

#endregion

#endregion

#region Timer Downloading Code


public bool save_values { get; set; }
//Method to start downloading
internal DispatcherTimer downloadTimer = null;
internal string importMessages = null;
protected ProgressDialogController importController = null;
private OpStages importStage = 0;
private async void startImporting()
{
//if ((tbSelectedFWBuildFor.Text.Contains("1612-4")) &&
(cmbDeviceType.SelectedIndex == 0))
//{
// MessageBox.Show("Firmware and the slected Device do not match.",
"Firmware mismatch!", MessageBoxButton.OK, MessageBoxImage.Warning);
// return;
//}

//start setup for sync controller


var importDlgSettings = new MetroDialogSettings()
{
NegativeButtonText = "Cancel",
AnimateShow = false,
AnimateHide = false,
ColorScheme = MetroDialogColorScheme.Inverted,
};

//Prepare Progress Dialog


string msgTitle = "Import Settings";
string msgContent = "Importing configuration data from the CAN Master
unit.";
importMessages = "Importing configuration data from the CAN Master
unit.";
importController = await this.ShowProgressAsync(msgTitle, msgContent,
settings: importDlgSettings);
importController.SetIndeterminate();
importController.SetCancelable(true);
importController.Canceled += importController_Canceled;
importController.Minimum = 0;
importController.Maximum = 18;

dataBlockCount = 0;
extraDataBlockCount = 0;
importStage = 0;

//Clear the Logger if Auto Clear is checked


//if (tglAutoClearLog.IsChecked == true)
//{
// mainRTB.Document.Blocks.Clear();
//}

downloadTimer = new DispatcherTimer();


downloadTimer.Interval = TimeSpan.FromMilliseconds(100);
downloadTimer.Tick += importTimer_Tick;
downloadTimer.Start();

//If the synchronization process is cancelled


private async void importController_Canceled(object sender, EventArgs e)
{
if (downloadTimer != null)
{
downloadTimer.Stop();
downloadTimer = null;
}

logDataNow($"Configuration import cancelled!", LOG_COLORS.WARNING,


LOG_TYPE.INFO);

await importController.CloseAsync();
importController = null;
}

//Upload Timer Tick routine


private async void importTimer_Tick(object sender, EventArgs e)
{
if (importStage == OpStages.opGenSettings)
{
try
{
Byte[] buffer = new Byte[64];
int idx = dataBlockCount;

buffer[0] = (Byte)'$';
buffer[1] = (Byte)'3'; //Access EEPROM
buffer[2] = (Byte)2; //Read CAN
Ports Data from the EEPROM
buffer[3] = (Byte)0; //Block Number
| Each block is 64 bytes | Block 0 belongs to CAN ports config

//Send the Data to the unit


writeUsbHid(buffer);

importStage++;
}
catch (Exception ex)
{
log.Error("opGenSettings - ERROR" + ex.Message);
}
}
if (importStage == OpStages.opExtraDataBlocks)
{
try
{
Byte[] buffer = new Byte[64];

buffer[0] = (Byte)'$';
buffer[1] = (Byte)'3'; //Access EEPROM
buffer[2] = (Byte)6; //Read CAN
Extra Data from the EEPROM
buffer[3] = (Byte)extraDataBlockCount;
//Block Number | Each block is 64 bytes | Block 0 belongs to CAN ports config

//Send the Data to the unit


writeUsbHid(buffer);

if (++extraDataBlockCount >= 19) importStage++;


}
catch (Exception ex)
{
log.Error("opExtraDataBlocks - ERROR" + ex.Message);
}
}
else if (importStage == OpStages.opDataBlocks)
{
try
{
Byte[] buffer = new Byte[_repSize];
buffer[0] = (Byte)'$';
buffer[1] = (Byte)'3'; //Access EEPROM
buffer[2] = (Byte)4; //Read CAN Msg Data from EEPROM
buffer[3] = (Byte)dataBlockCount; //Incremental data block
id from 0 to 17 | 2 BTS blocks and 16 CAN MSG bits block

writeUsbHid(buffer);
if (++dataBlockCount >= 18) importStage++;
importMessages = $"Importing configuration data from the CAN
Master unit.\nBlocks Read: {dataBlockCount}";
importController.SetMessage(importMessages);
importController.SetProgress(dataBlockCount);
}
catch (Exception ex)
{
log.Error("opDataBlocks - ERROR" + ex.Message);
}

}
else //When the attempts are over
{
var timer = sender as DispatcherTimer;
timer.Stop();
downloadTimer = null;
dataBlockCount = 0;
extraDataBlockCount = 0;
importStage = 0;
await importController.CloseAsync();
importController = null;
}
}

#endregion
CarModel carModel = new CarModel();
bool[] fetched_members = new bool[18];
String signalIdString = null;
String carMakeIdString = null;
String carModelString = null;
String engineIdString = null;
String wheelDriveIdString = null;
String gearBoxIdString = null;
String yearString = null;
String baudRateString = null;
private Dictionary<int, GetSignalByIdResponse> signalDetailsCache = new
Dictionary<int, GetSignalByIdResponse>();
Dictionary<int, string> idToBufferPosition = new Dictionary<int, string>();
Dictionary<string, int?> vehicleDataIds = new Dictionary<string, int?>();
private async Task<CarData> CreateCarData()
{
try
{
var getCarMake = (GetMakeNames)comboCar?.SelectedValue;
var carMake = new CarMake
{
id = getCarMake.id,
make = getCarMake.make,
};

var getCarModel = (GetModelNames)comboCarModel?.SelectedValue;

carModel = new CarModel


{
id = getCarModel.id,
model = getCarModel.model ?? null,
};
var carDataValues = new CarData()
{
CarMake = carMake,
CarModel = carModel,
Year = comboYear.SelectedValue != null ?
(int)comboYear.SelectedValue : (int?)null,
Registration = textRegistration.Text,
EngineType = (EngineType)comboEngineType?.SelectedValue,
GearBox = (GearBox)comboGearBox?.SelectedValue,
WheelDrive = (WheelDrive)comboWheelDrive?.SelectedValue
};

CarData car = _sessionHelper.Init(carDataValues);


await _sessionHelper.CreateLocalCarData(car);
await GetSignalReportListing();

CarSignals signalFilter = new CarSignals();


int baudRateIdx = int.TryParse(baudRateString, out var
parsedBaudIdx) ? parsedBaudIdx : 1;
Session prevSession = await SessionHelper.CheckLocalSession();
if (prevSession != null)
{
prevSession.CanVIndex = baudRateIdx;
cmbScanBaudCAN0.SelectedIndex = baudRateIdx;
await _sessionHelper.CreateLocalSession(prevSession);
}
MetroMain.Title = MetroMain.Title = Constants.Application_Title + "
---- " + _sessionUser.UserName + " ---- " + car.CarModel.model;
return car;
}
catch (Exception ex)
{
log.Error("ERROR - While creating car data" + ex.Message);
throw;
}
}
private bool[] fetched_signals;

#region Handle the Incoming USB data


//Receive the Data from Elcentral Units
private async void handleComingUsbData(byte[] buffer)
{
try
{
//string tStr = BitConverter.ToString(buffer, 0, buffer.Length);
//logDataNow($"Received USB Data (Hex):\n{tStr.Replace('-', ' ')}",
LOG_COLORS.SUCCESS, LOG_TYPE.INFO);
var test = buffer[62];
var test2 = buffer[61];
subVersion = buffer[61];
version = buffer[62];
//When Settings Data is received
if (buffer[0] == (byte)'#')
{
// Received the Firmware Information
if ((buffer[1] == (byte)'5') && (buffer[2] == (byte)1))
{
int fw_str_length = buffer[3];
var index = 5;
var index1 = fw_str_length + 4;
var index2 = fw_str_length + 15;
string tStr = System.Text.Encoding.UTF8.GetString(buffer,
5, fw_str_length - 1); //Extract String from bytes | -1 is used to ignore the
first # character.
string tBuildDate =
System.Text.Encoding.UTF8.GetString(buffer, fw_str_length + 4, 11); //Extract
Date String from bytes
string tBuildTime =
System.Text.Encoding.UTF8.GetString(buffer, fw_str_length + 15, 8); //Extract
Time String from bytes
tbBuildStamp.Text = $"(Build Stamp: {tBuildDate} |
{tBuildTime})";
tbFirmware.Text = "\"" + tStr + "\""; //
System.Text.Encoding.UTF8.GetString(buffer, 1, 20);//Extract String from bytes
logDataNow($"Firmware Version: {tStr} ({tBuildDate} |
{tBuildTime})", LOG_COLORS.SUCCESS, LOG_TYPE.INFO);
/*
* buffer[51] = FW_BUILT_MINOR
* buffer[52] = FW_BUILT_MAJOR
*/
if ((buffer[62] < 2) || ((buffer[62] == 2) && (buffer[61] <
40)))
{
MessageBox.Show("The firmware in the CAN Master unit is
not compatible with this software. Please update the CAN Master firmware version to
2v40!", "Incompatible Firmware", MessageBoxButton.OK, MessageBoxImage.Exclamation);

}
else if (CONNECTED_ALREADY == false) //Request for the data
import
{
CONNECTED_ALREADY = true;
Button_Import_Settings_Clicked(this, null);
}
}
// Received the Serial Number Information
if ((buffer[1] == (byte)'3') && (buffer[2] == (byte)101))
{
int ean_str_length = buffer[3];
string tStr = System.Text.Encoding.UTF8.GetString(buffer,
4, ean_str_length); //Extract String from bytes.
logDataNow($"Serial Number: {tStr}", LOG_COLORS.SUCCESS,
LOG_TYPE.INFO);
}
//Accessed the EEPROM | Read CAN Ports config data blocks
else if ((buffer[1] == (byte)'3') && (buffer[2] == (byte)2))
{
try
{
//Settings for CAN Port 0
//cmbBaudCAN0.SelectedIndex = buffer[4];
UInt16 can0_baudrate = BitConverter.ToUInt16(buffer,
4);
//Didn't work! //cmbBaudCAN0.SelectedIndex =
cmbBaudCAN0.FindString($"{can0_baudrate}");
//Works but LONG! //var cmbItem =
cmbBaudCAN0.Items.OfType<ComboBoxItem>().FirstOrDefault(x =>
x.Content.ToString().Contains($"{can0_baudrate}".ToString()));
//cmbBaudCAN0.SelectedIndex =
cmbBaudCAN0.Items.IndexOf(cmbItem);

cmbBaudCAN0.SelectedIndex =
cmbBaudCAN0.Items.IndexOf(cmbBaudCAN0.Items.OfType<ComboBoxItem>().FirstOrDefault(x
=> x.Content.ToString().Contains($"{can0_baudrate}".ToString())));
if (cmbBaudCAN0.SelectedIndex == -1)
cmbBaudCAN0.SelectedIndex = 4;
//Retrieve the flags | for example the power enable
tglEnCanvPwr.IsChecked = ((buffer[6] & 0x01) == 0x01) ?
true : false;

//Settings for CAN Port 1


//cmbBaudCAN1.SelectedIndex = buffer[14];
UInt16 can1_baudrate = BitConverter.ToUInt16(buffer,
14);
cmbBaudCAN1.SelectedIndex =
cmbBaudCAN1.Items.IndexOf(cmbBaudCAN1.Items.OfType<ComboBoxItem>().FirstOrDefault(x
=> x.Content.ToString().Contains($"{can1_baudrate}".ToString())));
if (cmbBaudCAN1.SelectedIndex == -1)
cmbBaudCAN1.SelectedIndex = 4;

//Read back the Power Settings


//tsPMgr.IsChecked = ((buffer[24] & 0x01) == 0x01) ?
true : false;
nudPwrInactTimer.Value = BitConverter.ToUInt16(buffer,
25); //Inactivity Timer
//nudPwrCMPos.Value = BitConverter.ToUInt16(buffer,
27); //CM POsition for using it to sleep

cbCMCanvPwrDown.IsChecked = ((buffer[7] & 0x01) ==


0x01) ? true : false;
cbCMCanvWakeupDRB.IsChecked = ((buffer[7] & 0x02) ==
0x02) ? true : false;
cbCMCanvWakeupOnRegMsg.IsChecked = ((buffer[7] & 0x04)
== 0x04) ? true : false;

cbDRBAcceptSleepReq.IsChecked = ((buffer[16] & 0x01) ==


0x01) ? true : false;
cbDRBAcceptWakepReq.IsChecked = ((buffer[16] & 0x02) ==
0x02) ? true : false;
cbDRBSendSleepReq.IsChecked = ((buffer[16] & 0x04) ==
0x04) ? true : false;
//cbDRBSendWakepReq.IsChecked = ((buffer[16] & 0x08) ==
0x08) ? true : false;
}
catch (Exception ex)
{
log.Error("Error occurred while reading CAN Ports
config data.", ex);
}

}
//Accessed the EEPROM | Read CAN Master config data blocks
else if ((buffer[1] == (byte)'3') && (buffer[2] == (byte)4))
{
try
{
int idx = buffer[3];
if (idx > 19) return; //Return if received data is
out of range

CANBUS_MSG_SOURCE[idx] = buffer[4];
//CAN Port Number 0 or 1
CANBUS_MSG_IDS[idx] = BitConverter.ToUInt32(buffer, 5);
//CAN Msg ID

//Retrieve the Ignore Bytes


for (int j = 0; j < 8; j++)
{
if (idx <= 1) //If index is related to the BTS
data
{
if (((1 << j) & buffer[9]) == (1 << j))
(this.FindName($"radBts{idx}B{j}I") as RadioButton).IsChecked = true;
else (this.FindName($"radBts{idx}B{j}B") as
RadioButton).IsChecked = true;
}
else //Data is related to the CAN message bits
{
if (((1 << j) & buffer[9]) == (1 << j))
(this.FindName($"radCMBit{(idx - 2)}B{j}I") as RadioButton).IsChecked = true;
else (this.FindName($"radCMBit{(idx -
2)}B{j}B") as RadioButton).IsChecked = true;
}
}

var tobs_all = new[] { BTS0_DATA_BYTES,


BTS1_DATA_BYTES,
CMBIT0_DATA_BYTES, CMBIT1_DATA_BYTES,
CMBIT2_DATA_BYTES, CMBIT3_DATA_BYTES,
CMBIT4_DATA_BYTES, CMBIT5_DATA_BYTES,
CMBIT6_DATA_BYTES, CMBIT7_DATA_BYTES,
CMBIT8_DATA_BYTES, CMBIT9_DATA_BYTES,
CMBIT10_DATA_BYTES, CMBIT11_DATA_BYTES,
CMBIT12_DATA_BYTES, CMBIT13_DATA_BYTES,
CMBIT14_DATA_BYTES, CMBIT15_DATA_BYTES };

var tobs = tobs_all[idx] as ObservableCollection<byte>;


//Data for Mask, Trigger and Logical Function
for (int j = 0; j < 24; j++)
{
if (j < 16) tobs[j] = buffer[j + 10];
else if (buffer[j + 10] > 10) tobs[j] = 1;
else tobs[j] = buffer[j + 10];

}
string format = string.Empty;
string canPort = string.Empty;
//Set the Message format bit
if (idx <= 1)
{
if (buffer[34] == 1)
(this.FindName($"radBts{idx}MsgTyE") as RadioButton).IsChecked = true;
else (this.FindName($"radBts{idx}MsgTyS") as
RadioButton).IsChecked = true;
}
else if (idx <= 17)
{
if (buffer[34] == 1) (this.FindName($"radCMBit{idx
- 2}MsgTyE") as RadioButton).IsChecked = true;
else { (this.FindName($"radCMBit{idx - 2}MsgTyS")
as RadioButton).IsChecked = true; }
}

uint canMsgId = CANBUS_MSG_IDS[idx];


var toggle = "toggle";
ToggleButton toggleButton =
(ToggleButton)FindName($"{toggle}{idx}");
if (SystemInformationHelper.CheckInternet())
{
if (bit_isFetched[idx])
{
byte canPortSource = CANBUS_MSG_SOURCE[idx];
canPort = canPortSource == 1 ? "CAN-V" : "CAN-
D";
byte canFormat = buffer[34];
format = canFormat == 0 ? "STD" : "EXT";
var fetchTasks = new List<Task>();
try
{
foreach (var idKeyValue in
idToBufferPosition)
{
fetchTasks.Add(Task.Run(async () =>
{
string id = idKeyValue.Value;
int bufferPosition =
idKeyValue.Key;
int signalId = Convert.ToInt32(id);
GetSignalByIdResponse signalValues;
try
{
//if (!
signalDetailsCache.TryGetValue(signalId, out signalValues))
//{
// signalValues = await
GetSignalDetailsById(signalId);
//
signalDetailsCache[signalId] = signalValues;
//}
signalValues = await
GetSignalDetailsById(signalId);

Application.Current.Dispatcher.Invoke(() =>
{

SetValueToUI(bufferPosition, canPort, canMsgId, format, signalValues.Description,


signalValues.SignalType, toggleButton);
});
}
catch (Exception ex)
{
log.Error("Error occurred while
fetching signal details by id when importing", ex);
}
}));

}
}
catch (Exception ex)
{
log.Error("Id to buffer position", ex);
}

await Task.WhenAll(fetchTasks);
}
}
else
{
if (bit_isFetched[idx])
{
SetValueToUI(idx, canPort, canMsgId, format,
"Please connect to internet", "Please connect to internet", toggleButton);
}
}
}
catch (Exception ex)
{
log.Error("Error occurred while reading signal data
from buffer", ex);
}

}
//Accessed EPROM | Read CAN Master Extra Data
else if ((buffer[1] == (byte)'3') && (buffer[2] == (byte)6))
{
string decodedString =
System.Text.Encoding.UTF8.GetString(buffer, 6, buffer[5]); //Extract String from
bytes }
string[] parts = decodedString.Split('-');

//importextra
int idx = buffer[3];
if (idx > 19) return;
var fetchedSignalData = buffer[4];
if (idx <= 17)
{
if (fetchedSignalData == 1)
{
//string[] signalBlockNames = { "BT0", "BT1",
"CM1", "CM2", "CM3", "CM4", "CM5", "CM6", "CM7", "CM8", "CM9", "CM10", "CM11",
"CM12", "CM13", "CM14", "CM15", "CM16" };
//if (idx < signalBlockNames.Length)
//{
// if (parts.Length > 0)
// {
// signalIdString = parts[0]; // Assuming
signal ID is at zero index
// idToBufferPosition[idx] = signalIdString;
// bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
// }
//}
if (idx == 0)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
BTS0_isFetched = true;
}
}
if (idx == 1)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
BTS1_isFetched = true;
}
}
if (idx == 2)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM0_isFetched = true;
}
}
if (idx == 3)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM1_isFetched = true;
}
}
if (idx == 4)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM2_isFetched = true;
}
}
if (idx == 5)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM3_isFetched = true;
}
}
if (idx == 6)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM4_isFetched = true;
}
}
if (idx == 7)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM5_isFetched = true;
}
}
if (idx == 8)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM6_isFetched = true;
}
}
if (idx == 9)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM7_isFetched = true;
}
}
if (idx == 10)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM8_isFetched = true;
}
}
if (idx == 11)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM9_isFetched = true;
}
}
if (idx == 12)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM10_isFetched = true;
}
}
if (idx == 13)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM11_isFetched = true;
}
}
if (idx == 14)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM12_isFetched = true;
}
}
if (idx == 15)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM13_isFetched = true;
}
}
if (idx == 16)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM14_isFetched = true;
}
}
if (idx == 17)
{
if (parts.Length > 0)
{
signalIdString = parts[0]; // Assuming
signal ID is at zero index
idToBufferPosition[idx] = signalIdString;
bit_isFetched[idx] =
Convert.ToBoolean(fetchedSignalData);
CM15_isFetched = true;
}
}
foreach (var kvp in idToBufferPosition)
{
// Try to parse the string value to an integer
if (int.TryParse(kvp.Value, out int
parsedValue))
{
// If parsing is successful, store the
integer value in _selectedSignalIds
_selectedSignalIds[kvp.Key] = parsedValue;
}
else
{
_selectedSignalIds[kvp.Key] = 0;
}
}
}
}
else
{
carMakeIdString = parts[0]; //CarMakeId is at
the 0 index
carModelString = parts[1]; //CarModelId is at
the 1st index
yearString = parts[2]; //Year is at 2nd
index
gearBoxIdString = parts[3]; //GearBox is at the
3rd index
engineIdString = parts[4]; //EngineType is at
the 4th index
wheelDriveIdString = parts[5]; //WheelDrive is at
the 5th index
baudRateString = parts[6]; //BaudRate is at
the 6th index

for (int i = 0; i < parts.Length; i++)


{
if (!vehicleDataIds.ContainsKey(i.ToString()))
{
if (int.TryParse(parts[i], out int
parsedValue))
{
vehicleDataIds.Add(i.ToString(),
parsedValue);
}
else
{
vehicleDataIds.Add(i.ToString(), null);
}
}
}

await GetCarMakes(decodedString);
await Task.Delay(1000);
try
{
await CreateCarData();
}
catch (Exception)
{

}
}

}
else if ((buffer[1] == 'R') && (buffer[2] == 0))
{
//buffer[2] is used for sync data page | We are only using
page 0 so far.
try
{
for (int i = 0; i <= 7; i++)
{
byte res = (byte)(buffer[4] & (1 << i));
SolidColorBrush dbr_inactive = Brushes.Black;
SolidColorBrush dbr_active = Brushes.LimeGreen;
//STATUS_BIT_COLOR
if (i < 2)
{
if ((byte)(buffer[3] & (1 << i)) > 0)
{
STATUS_BIT_COLOR[i] = Brushes.Orange;
Button thumbLikeButton =
(Button)this.FindName($"thumbLike{i}");
if (thumbLikeButton != null)
{
thumbLikeButton.IsEnabled = true;
}
}
//else if (isClearButtonClicked ||
isUndoButtonClicked)
//{
// STATUS_BIT_COLOR[i] = dbr_inactive;
//}
else { STATUS_BIT_COLOR[i] = dbr_inactive; }
}

if ((byte)(buffer[4] & (1 << i)) > 0)


{
STATUS_BIT_COLOR[i + 2] = dbr_active;
Button thumbLikeButton =
(Button)this.FindName($"thumbLike{i + 2}");
if (thumbLikeButton != null)
{
thumbLikeButton.IsEnabled = true;
}
}
//else if (isClearButtonClicked ||
isUndoButtonClicked)
//{
// STATUS_BIT_COLOR[i] = dbr_inactive;
//}
else
{
STATUS_BIT_COLOR[i + 2] = dbr_inactive;
}

if ((buffer[5] & (1 << i)) > 0)


{
STATUS_BIT_COLOR[i + 10] = dbr_active;
Button thumbLikeButton =
(Button)this.FindName($"thumbLike{i + 10}");
if (thumbLikeButton != null)
{
thumbLikeButton.IsEnabled = true;
}
}
//else if (isClearButtonClicked ||
isUndoButtonClicked)
//{
// STATUS_BIT_COLOR[i] = dbr_inactive;
//}
else { STATUS_BIT_COLOR[i + 10] = dbr_inactive; }
}
}
catch (Exception ex)
{
log.Error("IMPORT - Status Bit Color - ERROR" +
ex.Message);
}
}
//Check for Scanner mode data
else if ((buffer[1] == 'C'))
{
try
{
byte can_port = buffer[2]; // 0 = CAN-V and 1 = CAN
byte can_type = buffer[3]; //CAN Message type | Normal
or Request
UInt32 can_id = BitConverter.ToUInt32(buffer, 4);
byte can_format = buffer[8];// o = std and 1 = ext
byte can_dlc = buffer[9];
string can_data = BitConverter.ToString(buffer, 10, 8);

//Application.Current.Dispatcher.Invoke((Action)delegate
//{
// AppendListToGrid(can_id, can_port, can_format,
can_data);
//});

Application.Current.Dispatcher.BeginInvoke((Action)delegate
{
AppendListToGrid(can_id, can_port, can_format,
can_data);
});
}catch(Exception ex)
{
log.Error("ERROR - Scanner Mode Data - Import" +
ex.Message);
}

//logDataNow($"CAN SCAN (Hex):\n ID:{can_id.ToString("X8")}


Fmt:{((can_format==0)? "STD":"EXT")} Port:{can_port} | Data:{can_data.Replace('-',
' ')}", LOG_COLORS.SUCCESS, LOG_TYPE.INFO);
}
}
//Received the acknowledement for the scanner mode
else if ((buffer[0] == '$') && (buffer[1] == '0'))
{
if (buffer[2] == 1)
{
//Disable the baud rate selection in the Scanner tab
cmbScanBaudCAN0.IsEnabled = false;
cmbScanBaudCAN1.IsEnabled = false;

btnStartStopScanner.SetResourceReference(Button.StyleProperty,
"AccentedGreenSquareButtonStyle");
}
else
{
//Enable the baud rate selection in the Scanner tab
cmbScanBaudCAN0.IsEnabled = true;
cmbScanBaudCAN1.IsEnabled = true;
}
}

//if ((buffer[0] == 'E'))


//{
// if (buffer[1] == 0xFF)
// {
// logDataNow("No serial number found in the unit",
LOG_COLORS.WARNING, LOG_TYPE.INFO);
// }
// else
// {
// string tStr =
(System.Text.Encoding.UTF8.GetString(buffer, 3, buffer[2])).Replace("\0",
string.Empty);
// logDataNow($"Serial Number [{((buffer[1] == 1) ? "LOCKED"
: "USER")}]: {tStr}\r> Hardware Rev: {buffer[19]} {((buffer[21]==1)? "- T1" : "-
N")}", LOG_COLORS.SUCCESS, LOG_TYPE.INFO);
// }
//}

//else if ((buffer[0] == (byte)'X') && (buffer[1] == (byte)42))


//{
// LOG_COLORS errCode = LOG_COLORS.SUCCESS;
// string tStr = "";

// if (buffer[31] == 1)
// {
// errCode = LOG_COLORS.ERROR;
// vn5CalibrationError = true;
// //tStr = $"Err: Check Input Voltage! (VIN < 11V)\r\n>
Previouly Saved VN5 Offset Data:\r\n ";
// tStr = $"Err: Check Input Voltage! (VIN < 11V)";
// }
// else
// {

// tStr += "VN5 Offset Data:\r\n ";

// UInt16[] offsetValues = new UInt16[] { 0, 0, 0, 0, 0, 0,


0, 0 };
// for (int i = 0; i < 8; i++)
// {
// offsetValues[i] = BitConverter.ToUInt16(buffer, (i *
2) + 2);
// tStr += String.Format("[{0}] ", offsetValues[i]);

// if (offsetValues[i] >= 100)


// {
// errCode = LOG_COLORS.ERROR;
// vn5CalibrationError = true;
// }
// }
// }

// logDataNow($"{tStr}", errCode, LOG_TYPE.DATA);

//}
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message, "Data receive error");
log.Error("Data recieve error", Ex);
}
}
#endregion End of Handle the Incoming USB data
public void LogTest()
{
int number1 = 3000;
int number2 = 0;
try
{
Console.WriteLine(number1 / number2);
}
catch (DivideByZeroException)
{
log.Error("Division of {0} by zero.");
}
}
//INotifier property change event
public event PropertyChangedEventHandler PropertyChanged;

//Clear Log button is pressed.


private void btnClearLog_Click(object sender, RoutedEventArgs e)
{
//tbLog.Text = "> LOG";
//tbLog = new Paragraph();
//flowDoc.Blocks.Clear();
mainRTB.Document.Blocks.Clear();
}

#region CONFIGURATION MENU BUTTONS

//Enter Bootloader
private void btnEnterBoot_Click(object sender, RoutedEventArgs e)
{
try
{

//Request the device to enter DFU


Byte[] buffer = new Byte[] { (Byte)'$', (Byte)'6', (Byte)100, };
writeUsbHid(buffer);

}
catch { }
}

/// <summary>
/// Import the Settings from the CAN Master Unit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Import_Settings_Clicked(object sender, RoutedEventArgs
e)
{
try
{
if (_connected)
{
fetchInitialData();
Task.Delay(100);
PromptUserForImport();
//startImporting();
customFlagDict.Clear();
undoButtonPressedBeforeExport = false;
//Byte[] buffer = new Byte[_repSize];
//buffer[0] = (Byte)'$';
//buffer[1] = (Byte)'3';
//buffer[2] = (Byte)3;
//buffer[3] = (Byte)0; //First Data set | BTS0

//writeUsbHid(buffer);
//Thread.Sleep(100);

//buffer[3] = (Byte)1; //Secode Data set | BTS1


//writeUsbHid(buffer);
//Thread.Sleep(100);

//buffer[3] = (Byte)2; //CM Bits Set0


//writeUsbHid(buffer);
//Thread.Sleep(100);

//buffer[3] = (Byte)17; //CM Bits Set15


//writeUsbHid(buffer);
//Thread.Sleep(100);

}
}

catch (Exception ex)


{
log.Error("Import Settings - ERROR" + ex.Message);
}
}

/// <summary>
/// Export the Settings to the CAN Master Unit
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Export_Settings_Clicked(object sender, RoutedEventArgs
e)
{
try
{
if (_connected)
{
startUploading();
isExportSettingsPressed = true;
undoButtonPressedBeforeExport = false;
isClearButtonClicked = false;
exportBytesFromScannerToConfig = false;
}
}
catch (Exception ex)
{
log.Error("Export Settings - ERROR" + ex.Message);
}
}

//Update the General Settings header CAN-V text whenever the baudrate is
changed.
private void cmbBaudCAN0_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
//string(cmbBaudCAN0.SelectedItem.ToString().SkipWhile(c => !
char.IsDigit(c)).TakeWhile(c => char.IsDigit(c)).ToArray());
//ComboBoxItem cbi = (ComboBoxItem)cmbBaudCAN0.SelectedItem;
tbGSCanvBaud.Text = $"CAN-V
[ {((ComboBoxItem)cmbBaudCAN0.SelectedItem).Content.ToString()} ]";

var selecteIndex = cmbBaudCAN0.SelectedIndex + 1;


if (cmbScanBaudCAN0 != null)
{
cmbScanBaudCAN0.SelectedIndex = selecteIndex;
}

//Update the General Settings header CAN-DRB text whenever the baudrate is
changed.
private void cmbBaudCAN1_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{
tbGSCandrbBaud.Text = $"CAN-DRB
[ {((ComboBoxItem)cmbBaudCAN1.SelectedItem).Content.ToString()} ]";

var selecteIndex = cmbBaudCAN1.SelectedIndex + 1;


if (cmbScanBaudCAN1 != null)
{
cmbScanBaudCAN1.SelectedIndex = selecteIndex;
}
}

//When the Power Configuration Checkboxes are checked


private void cbCM_PwrConf_Checked(object sender, RoutedEventArgs e)
{
//Change the Text on the General Settings header to match the state of
the configuration
if ((cbCMCanvPwrDown.IsChecked == true) ||
(cbDRBAcceptSleepReq.IsChecked == true))
{
//Change the Text on the General Settings header to match the state
of the configuration
tbGSPwrEn.Text = "Power Saving Enabled";
}
else
{
//Change the Text on the General Settings header to match the state
of the configuration
tbGSPwrEn.Text = "Power Saving Disabled";
}

//When the Power Configuration Checkboxes are unchecked


private void cbCM_PwrConf_UnChecked(object sender, RoutedEventArgs e)
{
//Check if even single Power Saving related checkbox is checked?
if ((cbCMCanvPwrDown.IsChecked == true) ||
(cbDRBAcceptSleepReq.IsChecked == true))
{
//Change the Text on the General Settings header to match the state
of the configuration
tbGSPwrEn.Text = "Power Saving Enabled";
}
else
{
//Change the Text on the General Settings header to match the state
of the configuration
tbGSPwrEn.Text = "Power Saving Disabled";
}
}

#endregion end of CONFIGURATION MENU BUTTONS

#region Scanner Tab

public class AsyncObservableCollection<T> : ObservableCollection<T>


{
private SynchronizationContext _synchronizationContext =
SynchronizationContext.Current;

public AsyncObservableCollection()
{
}

public AsyncObservableCollection(IEnumerable<T> list)


: base(list)
{
}

protected override void


OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
if (SynchronizationContext.Current == _synchronizationContext)
{
// Execute the CollectionChanged event on the current thread
RaiseCollectionChanged(e);
}
else
{
// Raises the CollectionChanged event on the creator thread
_synchronizationContext.Send(RaiseCollectionChanged, e);
}
}

private void RaiseCollectionChanged(object param)


{
// We are in the creator thread, call the base implementation
directly
base.OnCollectionChanged((NotifyCollectionChangedEventArgs)param);
}

protected override void OnPropertyChanged(PropertyChangedEventArgs e)


{
if (SynchronizationContext.Current == _synchronizationContext)
{
// Execute the PropertyChanged event on the current thread
RaisePropertyChanged(e);
}
else
{
// Raises the PropertyChanged event on the creator thread
_synchronizationContext.Send(RaisePropertyChanged, e);
}
}

private void RaisePropertyChanged(object param)


{
// We are in the creator thread, call the base implementation
directly
base.OnPropertyChanged((PropertyChangedEventArgs)param);
}
}
public class FilterValue : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}

public string _ID;


public string ID
{
get { return _ID; }
set
{
if (value != _ID)
_ID = value;

OnPropertyChanged();
}
}

public UInt32 _BinaryId;


public UInt32 BinaryId
{
get { return _BinaryId; }
set
{
if (value != _BinaryId)
_BinaryId = value;

OnPropertyChanged();

}
}

public bool _isCheck;


public bool isCheck
{
get { return _isCheck; }
set
{
if (value != _isCheck)
_isCheck = value;

OnPropertyChanged();
}
}

ConcurrentDictionary<string, bool> dictionary = new


ConcurrentDictionary<string, bool>();

//Flag to keep note of the triggered state of the scanner


private bool is_scanner_running = false;

ObservableCollection<FilterValue> filterValues = new


ObservableCollection<FilterValue>();

private bool is_AutoHide = false;


private int startInt = 0;
private int endInt = 0;

public void AppendListToGrid(uint can_Id, byte can_port, byte can_format,


string hexValues)
{

Task.Factory.StartNew(() =>
{
List<string> singleByte = hexValues.Split('-').ToList();
string hexId = can_Id.ToString("X");
ObservableCollection<bool> defaultBytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX);
var incomingData = new DataGridItem
{
//RollNo = 1,
Delta = "1254".ToString(),
BinaryId = can_Id,
ID = hexId,
TimeStamp = DateTime.Now.ToString(),
UpdatedTime = DateTime.Now,
//MessageFormat = (can_format == 0) ? "29" : "11", // 29 is
Standard and 11 is Extended message
MessageFormat = (can_format == 0) ? "11" : "29", // 11 is
Standard and 29 is Extended message
Port = (can_port == 1) ? "CAN" : "CAN-V",
Zero = singleByte[0],
zeroByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[0].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
One = singleByte[1],
oneByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[1].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
Two = singleByte[2],
twoByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[2].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
Three = singleByte[3],
threeByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[3].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
Four = singleByte[4],
fourByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[4].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
Five = singleByte[5],
fiveByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[5].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
Six = singleByte[6],
sixByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[6].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
Seven = singleByte[7],
sevenByte = { ByteCollection =
ExtensionHelper.BitDataCollection(singleByte[7].ToString()), BytesSelected =
ExtensionHelper.BitDataCollection(Constants.DEFAULT_ZERO_HEX) },
HideItem = false
};

lock (lockObject)
{
if (!dictionary.ContainsKey(incomingData.ID))
{
dictionary.TryAdd(incomingData.ID, true);
filterList(incomingData.ID, can_Id);
}
//Updating Rows Serial Numbers.
var updatedGrid = dataGridItems.Where(a => !
a.HideItem).ToList();
updatedGrid.ForEach(o => o.RollNo =
(updatedGrid.IndexOf(updatedGrid.FirstOrDefault(z => z.ID == o.ID)) + 1));
if (dataGridItems.Count > 0 && dataGridItems != null)
{

var existingRow = dataGridItems.Where(x => x != null &&


x.ID == incomingData.ID).FirstOrDefault();
bool byteChanged = false;
List<bool> byteChangedList = new List<bool>();
if (existingRow != null)
{

//existingRow.RollNo = 1;
existingRow.Delta = incomingData.Delta;
existingRow.TimeStamp = DateTime.Now.ToString();
existingRow.Port = incomingData.Port;
existingRow.MessageFormat = incomingData.MessageFormat;
existingRow.Zero = incomingData.Zero;
existingRow.zeroByte.ByteCollection =
incomingData.zeroByte.ByteCollection;
existingRow.zeroByte.OnByteChanged(byteChangedList);
existingRow.One = incomingData.One;
existingRow.oneByte.ByteCollection =
incomingData.oneByte.ByteCollection;
existingRow.oneByte.OnByteChanged(byteChangedList);
existingRow.Two = incomingData.Two;
existingRow.twoByte.ByteCollection =
incomingData.twoByte.ByteCollection;
existingRow.twoByte.OnByteChanged(byteChangedList);
existingRow.Three = incomingData.Three;
existingRow.threeByte.ByteCollection =
incomingData.threeByte.ByteCollection;
existingRow.threeByte.OnByteChanged(byteChangedList);
existingRow.Four = incomingData.Four;
existingRow.fourByte.ByteCollection =
incomingData.fourByte.ByteCollection;
existingRow.fourByte.OnByteChanged(byteChangedList);
existingRow.Five = incomingData.Five;
existingRow.fiveByte.ByteCollection =
incomingData.fiveByte.ByteCollection;
existingRow.fiveByte.OnByteChanged(byteChangedList);
existingRow.Six = incomingData.Six;
existingRow.sixByte.ByteCollection =
incomingData.sixByte.ByteCollection;
existingRow.sixByte.OnByteChanged(byteChangedList);
existingRow.Seven = incomingData.Seven;
existingRow.sevenByte.ByteCollection =
incomingData.sevenByte.ByteCollection;
existingRow.sevenByte.OnByteChanged(byteChangedList);

if (byteChangedList.Any(x => x == true))


existingRow.UpdatedTime = incomingData.UpdatedTime;
}
else
{
var hiddenRow = removedDataGridItems.ToList().Where(x
=> x != null && x.ID == incomingData.ID).FirstOrDefault();
if (hiddenRow == null) dataGridItems.Add(incomingData);
}
}
else
{
dataGridItems.Add(incomingData);
}
}

Dispatcher.BeginInvoke(new Action(delegate ()
{
double timer = 0;
if (nudSecToHide.Value != null)
{
autoHide.IsEnabled = true;
}
autoHideBtn.IsEnabled = true;

//onchecked authide
if (autoHide.IsChecked == true && nudSecToHide.Value != null)
{
is_AutoHide = true;
timer = (double)nudSecToHide.Value;
var existingRows = dataGridItems.ToList().Where(x => !
removedDataGridItems.Contains(x) && !x.ForceHide &&
DateTime.Now.Subtract(x.UpdatedTime).Seconds > timer).ToList();

foreach (var existingRow in existingRows)


{
var existingFilterId = filterValues.Where(x => x.ID ==
existingRow.ID).FirstOrDefault();
//existingFilterId.isCheck = false;
//existingRow.HideItem = true;

//Auto hiding here


HandleFilterChanges(existingRow, existingFilterId,
isChecked: false, removeFromAutoHide: false, forceHide: false);
removedDataGridItems.Add(existingRow);

filterGridList.ItemsSource = filterValues;
}

var removedRows = dataGridItems.ToList().Where(a =>


removedDataGridItems.Contains(a) && DateTime.Now.Subtract(a.UpdatedTime).Seconds <=
timer).ToList();
foreach (var existingRow in removedRows)
{
var existingFilterId = filterValues.Where(x => x.ID ==
existingRow.ID).FirstOrDefault();
//existingFilterId.isCheck = true;
//existingRow.HideItem = false;
//Removing from auto hide here
HandleFilterChanges(existingRow, existingFilterId,
isChecked: true, removeFromAutoHide: true, forceHide: false);

filterGridList.ItemsSource = filterValues;
}
}

//On Filter by ID:


if (filterGridCheck.IsChecked == true)
{
if (startInt > 0 && endInt > 0)
{
var filteredDataGrid = dataGridItems.ToList().Where(o
=> o.BinaryId >= startInt && o.BinaryId <= endInt);
gridList.ItemsSource = filteredDataGrid;

}
}
else
{
gridList.ItemsSource = dataGridItems;

}
}));
});
}

private async void btnStartStop_Click(object sender, RoutedEventArgs e)


{
try
{
if (tglDataSync.IsChecked == true && dataSyncTimer != null)
{
tglDataSync.IsChecked = false; //Turn the general status OFF
if it is ON while scanner is running.
}

CarData carData = await SessionHelper.CheckLocalCarData();


if (carData == null || comboCar.SelectedIndex == -1 ||
comboCarModel.SelectedIndex == -1)
{
await this.ShowMessageAsync("Vehicle!!!", "Please Select
Vehicle First", MessageDialogStyle.Affirmative);
return;
//tabConMain.SelectedIndex = 2;
}
//e.Handled = true;
Byte[] buffer = new Byte[64];
buffer[0] = (Byte)'$';
buffer[1] = (Byte)'0'; //Interact with CAN Scanner

buffer[2] = (Byte)((is_scanner_running == false) ? 1 : 0);


//Write Data

//buffer[3] = (Byte)cmbScanBaudCAN0.SelectedIndex;

//buffer[4] = (Byte)cmbScanBaudCAN1.SelectedIndex;

if ((cmbScanBaudCAN0.SelectedItem != null) &&


(cmbScanBaudCAN0.SelectedIndex > 0))
{
UInt16 can0_baudrate = UInt16.Parse(new
string(cmbScanBaudCAN0.SelectedItem.ToString().SkipWhile(c => !
char.IsDigit(c)).TakeWhile(c => char.IsDigit(c)).ToArray()));
byte[] can0_baudrate_arr =
BitConverter.GetBytes(can0_baudrate);
//if the conversion was in Big Endian, change it to little
endian
if (!BitConverter.IsLittleEndian)
Array.Reverse(can0_baudrate_arr);
Array.Copy(can0_baudrate_arr, 0, buffer, 3, 2); //Store
converted values into the buffer
}
else
{
buffer[3] = (Byte)0; // cmbBaudCAN0.SelectedIndex;
//Baudrate byte0 of CAN Port 0
buffer[4] = (Byte)0; // cmbBaudCAN0.SelectedIndex;
//Baudrate byte1 of CAN Port 0
}

if ((cmbScanBaudCAN1.SelectedItem != null) &&


(cmbScanBaudCAN1.SelectedIndex > 0))
{
UInt16 can1_baudrate = UInt16.Parse(new
string(cmbScanBaudCAN1.SelectedItem.ToString().SkipWhile(c => !
char.IsDigit(c)).TakeWhile(c => char.IsDigit(c)).ToArray()));
byte[] can1_baudrate_arr =
BitConverter.GetBytes(can1_baudrate);
//if the conversion was in Big Endian, change it to little
endian
if (!BitConverter.IsLittleEndian)
Array.Reverse(can1_baudrate_arr);
Array.Copy(can1_baudrate_arr, 0, buffer, 5, 2); //Store
converted values into the buffer
}
else
{
buffer[5] = (Byte)0; // cmbBaudCAN0.SelectedIndex;
//Baudrate byte0 of CAN Port 0
buffer[6] = (Byte)0; // cmbBaudCAN0.SelectedIndex;
//Baudrate byte1 of CAN Port 0
}

is_scanner_running = !is_scanner_running;

if (!is_scanner_running)
{
btnStartStopScanner.SetResourceReference(Button.StyleProperty,
"AccentedSquareButtonStyle");
StoreCanIDs();
}

writeUsbHid(buffer);
}
catch(Exception ex)
{
log.Error("ERROR - Scanner start/Stop" + ex.Message);
}
}

private void columnHeader_Click(object sender, RoutedEventArgs args)


{
var columnHeader = sender as DataGridColumnHeader;
if (columnHeader != null && columnHeader.Content.ToString().ToLower()
== Constants.CONSTANT_NAME_ID.ToLower())
{
Task.Factory.StartNew(() =>
{
ApplySorting(columnHeader);
});
}
}

private string sortBy = Constants.ASCENDING;

private void ApplySorting(DataGridColumnHeader columnHeader)


{
Application.Current.Dispatcher.BeginInvoke(new Action(delegate ()
{
if (sortBy.Contains(Constants.ASCENDING))
{
dataGridItems.Sort(a => a.BinaryId, SortBy.Descending);
filterValues.Sort(a => a.BinaryId, SortBy.Descending);
sortBy = Constants.DESCENDING;
}
else
{
dataGridItems.Sort(a => a.BinaryId, SortBy.Ascending);
filterValues.Sort(a => a.BinaryId, SortBy.Ascending);
sortBy = Constants.ASCENDING;
}
}));
}
private void btnClearSignals_Click(object sender, RoutedEventArgs args)
{
// Clear all button clicked, all rows will be removed and add a fresh
ones.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
dataGridItems.Clear();
dictionary.Clear();
filterValues.Clear();
removedDataGridItems.Clear();
autoHide.IsChecked = false;
}));
}

private async void btnImport_Click(object sender, RoutedEventArgs e)


{
OpenFileDialog choofdlog = new OpenFileDialog();
choofdlog.Filter = "All Files (*.*)|*.*";
if (choofdlog.ShowDialog() == true)
{
gridList.ItemsSource = null;
gridList.Items.Clear();
gridList.Items.Refresh();

string sFileName = choofdlog.FileName;


string path = System.IO.Path.GetFullPath(choofdlog.FileName);

DataGridItem dataGridItem = new DataGridItem();


string[] arrayGridItem;

System.Data.DataTable dt = new System.Data.DataTable();


dt.Columns.Add("Delta", typeof(string));
dt.Columns.Add("ID", typeof(UInt32));
dt.Columns.Add("Time Stamp", typeof(string));
dt.Columns.Add("Port", typeof(string));
dt.Columns.Add("Message Type", typeof(string));
dt.Columns.Add("Zero", typeof(string));
dt.Columns.Add("One", typeof(string));
dt.Columns.Add("Two", typeof(string));
dt.Columns.Add("Three", typeof(string));
dt.Columns.Add("Four", typeof(string));
dt.Columns.Add("Five", typeof(string));
dt.Columns.Add("Six", typeof(string));
dt.Columns.Add("Seven", typeof(string));

using (StreamReader sr = new StreamReader(path))


{
while (!sr.EndOfStream)
{
arrayGridItem = sr.ReadLine().Split(',');
dataGridItem.Delta = arrayGridItem[0];
dataGridItem.ID = arrayGridItem[1];
dataGridItem.TimeStamp = arrayGridItem[2];
dataGridItem.MessageFormat = arrayGridItem[3];
dataGridItem.Port = arrayGridItem[4];
dataGridItem.Zero = arrayGridItem[5];
dataGridItem.One = arrayGridItem[6];
dataGridItem.Two = arrayGridItem[7];
dataGridItem.Three = arrayGridItem[8];
dataGridItem.Four = arrayGridItem[9];
dataGridItem.Five = arrayGridItem[10];
dataGridItem.Six = arrayGridItem[11];
dataGridItem.Seven = arrayGridItem[12];

dt.Rows.Add(arrayGridItem);
}

DataView dv = new DataView(dt);


gridList.ItemsSource = dv;
}
}
}

private void btnExport_Click(object sender, RoutedEventArgs e)


{
ExportToExcel(gridList);
}

//change the order of Bytes column on scanner tab


private void btnMSB_Click(object sender, RoutedEventArgs e)
{
Zero.DisplayIndex = 12;
One.DisplayIndex = 11;
Two.DisplayIndex = 10;
Three.DisplayIndex = 9;
Four.DisplayIndex = 8;
Five.DisplayIndex = 7;
Six.DisplayIndex = 6;
Seven.DisplayIndex = 5;
}

//change the order of Bytes column on scanner tab


private void btnLSB_Click(object sender, RoutedEventArgs e)
{
Zero.DisplayIndex = 5;
One.DisplayIndex = 6;
Two.DisplayIndex = 7;
Three.DisplayIndex = 8;
Four.DisplayIndex = 9;
Five.DisplayIndex = 10;
Six.DisplayIndex = 11;
Seven.DisplayIndex = 12;
}

private void btnRecord_Click(object sender, RoutedEventArgs e)


{
e.Handled = true;
}

//ID on the filter section is checked


private void OnCheckedId(object sender, RoutedEventArgs e)
{
is_AutoHide = false;
CheckBox chk = (CheckBox)sender;
var selectedValue = (FilterValue)chk.DataContext;
int currentIndex = filterValues.IndexOf(selectedValue);
var existingRow = dataGridItems.Where(x => x.ID ==
selectedValue.ID).FirstOrDefault();
if (existingRow != null)
{
//existingRow.HideItem = false;
//selectedValue.isCheck = true;
//removedDataGridItems.Remove(existingRow);
HandleFilterChanges(existingRow, selectedValue, isChecked: true,
removeFromAutoHide: true, forceHide: true);
}

//ID on the filter section is unchecked


private void OnUnCheckedId(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
var selectedValue = (FilterValue)chk.DataContext;

var existingRow = dataGridItems.Where(x => x.ID ==


selectedValue.ID).FirstOrDefault();
if (existingRow != null)
{
//existingRow.HideItem = true;
//selectedValue.isCheck = false;
//removedDataGridItems.Remove(existingRow);
HandleFilterChanges(existingRow, selectedValue, isChecked: false,
removeFromAutoHide: true, forceHide: true);
}
}

public void ExportToExcel(DataGrid dg)


{
try
{
dg.SelectionMode = DataGridSelectionMode.Extended;
dg.SelectAllCells();

Clipboard.Clear();
ApplicationCommands.Copy.Execute(null, dg);

var saveFileDialog = new SaveFileDialog


{
//FileName = filename != "" ? filename : "gpmfca-
exportedDocument",
DefaultExt = ".csv",
Filter = "Common Seprated Documents (.csv)|*.csv"
};

if (saveFileDialog.ShowDialog() == true)
{
var clip2 = Clipboard.GetText();
File.WriteAllText(saveFileDialog.FileName, clip2.Replace('\t',
','), Encoding.UTF8);
Process.Start(saveFileDialog.FileName);
}

dg.UnselectAllCells();
dg.SelectionMode = DataGridSelectionMode.Single;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Clipboard.Clear();
}
}

public void filterList(string Id, UInt32 binaryId)


{
var newData = new FilterValue
{
ID = Id,
BinaryId = binaryId,
isCheck = true
};

Dispatcher.BeginInvoke(new Action(delegate ()
{

filterValues.Add(newData);
filterGridList.ItemsSource = filterValues;

}));
}

private static bool[] ConvertByteToBoolArray(byte b)


{
// prepare the return result
bool[] result = new bool[8];

// check each bit in the byte. if 1 set to true, if 0 set to false


for (int i = 0; i < 8; i++)
result[i] = (b & (1 << i)) != 0;

// reverse the array


Array.Reverse(result);

return result;
}

void GridList_Drop(object sender, DragEventArgs e)


{
// When item is drag and dropped into the grid.
Dispatcher.BeginInvoke(new Action(delegate ()
{
DragDropAction(sender, e);
}));
}

void GridList_PreviewMouseLeftButtonDown(object sender,


MouseButtonEventArgs e)
{
try
{
rowIndex = GetCurrentRowIndex(e.GetPosition);
if (rowIndex < 0)
return;
gridList.SelectedIndex = rowIndex;
DataGridItem selectedEmp = gridList.Items[rowIndex] as
DataGridItem;
if (selectedEmp == null)
return;
DragDropEffects dragdropeffects = DragDropEffects.Move;
if (DragDrop.DoDragDrop(gridList, selectedEmp, dragdropeffects)
!= DragDropEffects.None)
{
gridList.SelectedItem = selectedEmp;
}
}
catch (Exception ex)
{
ExceptionHandler.DebugException(ex);
}

}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
DataGridCell cell = (DataGridCell)sender as DataGridCell;
DataGridItem item = (DataGridItem)cell.DataContext as DataGridItem;
item.IsSelected = !item.IsSelected;
if (item.IsSelected)
{
var index = dataGridItems.IndexOf(item);
dataGridItems.Move(index, 0);
filterValues.Move(index, 0);
rowIndex = -1;
if (!is_scanner_running)
{
var updatedGrid = dataGridItems.Where(a => !
a.HideItem).ToList();
updatedGrid.ForEach(o => o.RollNo =
(updatedGrid.IndexOf(updatedGrid.FirstOrDefault(z => z.ID == o.ID)) + 1));
}
//dataGridItems.Move(rowIndex, 0);
//filterValues.Move(rowIndex, 0);
// Move the selected item to the top of the DataGrid
//var selectedItem = (DataGridItem)gridList.SelectedItem;
//if (selectedItem != null)
//{
// gridList.Items.Remove(selectedItem);
// gridList.Items.Insert(0, selectedItem);
//}

//int indexOf = dataGridItems.IndexOf(item);


//int indexOf2 = rowIndex;

//gridList.Items.SortDescriptions.Clear();
//// Move the selected item to the top
}

void DragDropAction(object sender, DragEventArgs e)


{
try
{
gridList.Items.SortDescriptions.Clear();
int index = this.GetCurrentRowIndex(e.GetPosition);

if (rowIndex < 0 || index < 0 || rowIndex == index || (index ==


gridList.Items.Count - 1))
return;
dataGridItems.Move(rowIndex, index);
filterValues.Move(rowIndex, index);
if (!is_scanner_running)
{
var updatedGrid = dataGridItems.Where(a => !
a.HideItem).ToList();
updatedGrid.ForEach(o => o.RollNo =
(updatedGrid.IndexOf(updatedGrid.FirstOrDefault(z => z.ID == o.ID)) + 1));
}

}
catch (Exception ex)
{
ExceptionHandler.DebugException(ex);
}
}
private bool GetMouseTargetRow(Visual theTarget, GetPosition position)
{
if (theTarget == null) return false;
Rect rect = VisualTreeHelper.GetDescendantBounds(theTarget);
Point point = position((IInputElement)theTarget);
return rect.Contains(point);
}

private DataGridRow GetRowItem(int index)


{
if (gridList.ItemContainerGenerator.Status
!= GeneratorStatus.ContainersGenerated)
return null;
return gridList.ItemContainerGenerator.ContainerFromIndex(index)
as DataGridRow;
}

private int GetCurrentRowIndex(GetPosition pos)


{
int curIndex = -1;
for (int i = 0; i < gridList.Items.Count; i++)
{
DataGridRow itm = GetRowItem(i);
if (GetMouseTargetRow(itm, pos))
{
curIndex = i;
break;
}
}
return curIndex;
}

private static byte ConvertBoolArrayToByte(bool[] source)


{
byte result = 0;
// This assumes the array never contains more than 8 elements!
int index = 8 - source.Length;
// Loop through the array
foreach (bool b in source)
{
// if the element is 'true' set the bit at that position
if (b)
result |= (byte)(1 << (7 - index));

index++;
}

return result;
}

private static bool CheckIfCurrentBitIsAlreadyExist(bool[] previousArray,


bool[] currentArray, int index)
{
var prev = previousArray.ElementAt(index);
var curr = currentArray.ElementAt(index);

if (prev == curr)
return true;
else
return false;
}

private static bool IsSelectBitChanged(bool[] previousArray, bool[]


currentArray, int index)
{
var prev = previousArray.ElementAt(index);
var curr = currentArray.ElementAt(index);

if (prev != curr)
return true;
else
return false;
}
private void ResetControlsForIdx(int idx)
{
ToggleButton tBtn = (ToggleButton)FindName($"toggle{idx}");
if (tBtn != null)
{
tBtn.IsChecked = true;
//Undo_Checked_Clicked(tBtn, new RoutedEventArgs());
}
}
private async void Output1_Click(object sender, RoutedEventArgs e)
{
ExportRequest param = new ExportRequest()
{
BitDataBytes = BTS0_DATA_BYTES,
ChkboxName = "cbBts0Msg_custom",
TabIndex = 0,
RadioBtnPrefix = "radBts",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radBts0MsgTyS,
RadioBtnExtendedMsgType = radBts0MsgTyE,
CanMsgIdIndex = 0,
CanMsgSourceIndex = 0,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode

//List<bool> objList = new List<bool>();


//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

////var bitValue = (selectedCollection.ByteCollection[bitIndex] == true


? 1 : 0);
//var bitValue = selectedCollection.ByteCollection[bitIndex];
//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)BTS0_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)BTS0_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);
//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);
//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//var isExportedToMask = false;


//var isExportedToTrigger = false;

//// custom checkbox make as uncheck before updating


//var chkName = "cbBts0Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 0;
//var rbPref = "radBts";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[0];

//bool mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radBts0MsgTyS.IsChecked = true;

//else
// radBts0MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[0] == 0 || (CANBUS_MSG_IDS[0] == canId &&
BTS0_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[0] = (byte)portValue;
// CANBUS_MSG_IDS[0] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// BTS0_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// BTS0_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[0] == canId && BTS0_DATA_BYTES[byteNumber] !=
0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab UT-1",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// BTS0_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// BTS0_DATA_BYTES[triggerNumber] = (bitValue == true) ? (byte)
(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}

////replace previous data with new one


//else if (CANBUS_MSG_IDS[0] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab UT-
1", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[0] = (byte)portValue;
// CANBUS_MSG_IDS[0] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// BTS0_DATA_BYTES[i] = (byte)0;
// BTS0_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// BTS0_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// BTS0_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void Output2_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = BTS1_DATA_BYTES,
ChkboxName = "cbBts1Msg_custom",
TabIndex = 1,
RadioBtnPrefix = "radBts",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radBts1MsgTyS,
RadioBtnExtendedMsgType = radBts1MsgTyE,
CanMsgIdIndex = 1,
CanMsgSourceIndex = 1,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
//Commented code for every position. Will remove after customer
feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

////var bitValue = (selectedCollection.ByteCollection[bitIndex] == true


? 1 : 0);
//var bitValue = selectedCollection.ByteCollection[bitIndex];
//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)BTS1_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)BTS1_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbBts1Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 1;
//var rbPref = "radBts";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[1];

//bool mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radBts1MsgTyS.IsChecked = true;

//else
// radBts1MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[1] == 0 || (CANBUS_MSG_IDS[1] == canId &&
BTS1_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[1] = (byte)portValue;
// CANBUS_MSG_IDS[1] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// BTS1_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// BTS1_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[1] == canId && BTS1_DATA_BYTES[byteNumber] !=
0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab UT-2",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// BTS1_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// BTS1_DATA_BYTES[triggerNumber] = (bitValue == true) ? (byte)
(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[1] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab UT-
2", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[1] = (byte)portValue;
// CANBUS_MSG_IDS[1] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// BTS1_DATA_BYTES[i] = (byte)0;
// BTS1_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// BTS1_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// BTS1_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void CM1_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT0_DATA_BYTES,
ChkboxName = "cbCM0Msg_custom",
TabIndex = 0,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit0MsgTyS,
RadioBtnExtendedMsgType = radCMBit0MsgTyE,
CanMsgIdIndex = 2,
CanMsgSourceIndex = 2,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

////var bitValue = (selectedCollection.ByteCollection[bitIndex] == true


? 1 : 0);
//var bitValue = selectedCollection.ByteCollection[bitIndex];
//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)CMBIT0_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)CMBIT0_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbCM0Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);

//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 0;
//var rbPref = "radCMBit";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[2];

//var mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radCMBit0MsgTyS.IsChecked = true;
//else
// radCMBit0MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[2] == 0 || (CANBUS_MSG_IDS[2] == canId &&
CMBIT0_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[2] = (byte)portValue;
// CANBUS_MSG_IDS[2] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// CMBIT0_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// CMBIT0_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[2] == canId &&
CMBIT0_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 1",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT0_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// CMBIT0_DATA_BYTES[triggerNumber] = (bitValue == true) ?
(byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[2] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 1", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[2] = (byte)portValue;
// CANBUS_MSG_IDS[2] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// CMBIT0_DATA_BYTES[i] = (byte)0;
// CMBIT0_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// CMBIT0_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// CMBIT0_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// radCMBit0MsgTyE.IsChecked = (canFormat == "STD") ? false :
true;
// }
//}
#endregion
}

private async void CM2_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT1_DATA_BYTES,
ChkboxName = "cbCM1Msg_custom",
TabIndex = 1,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit1MsgTyS,
RadioBtnExtendedMsgType = radCMBit1MsgTyE,
CanMsgIdIndex = 3,
CanMsgSourceIndex = 3,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

//var bitValue = selectedCollection.ByteCollection[bitIndex];


//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)CMBIT1_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)CMBIT1_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbCM1Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}
//int tabIndex = 1;
//var rbPref = "radCMBit";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[3];

//var mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radCMBit1MsgTyS.IsChecked = true;
//else
// radCMBit1MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[3] == 0 || (CANBUS_MSG_IDS[3] == canId &&
CMBIT1_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[3] = (byte)portValue;
// CANBUS_MSG_IDS[3] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// CMBIT1_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// CMBIT1_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[3] == canId &&
CMBIT1_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 2",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT1_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// CMBIT1_DATA_BYTES[triggerNumber] = (bitValue == true) ?
(byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[3] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 2", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[3] = (byte)portValue;
// CANBUS_MSG_IDS[3] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// CMBIT1_DATA_BYTES[i] = (byte)0;
// CMBIT1_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// CMBIT1_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// CMBIT1_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void CM3_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT2_DATA_BYTES,
ChkboxName = "cbCM2Msg_custom",
TabIndex = 2,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit2MsgTyS,
RadioBtnExtendedMsgType = radCMBit2MsgTyE,
CanMsgIdIndex = 4,
CanMsgSourceIndex = 4,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

//var bitValue = selectedCollection.ByteCollection[bitIndex];


//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)CMBIT2_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)CMBIT2_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbCM2Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 2;
//var rbPref = "radCMBit";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[4];


//var mesgFormat = (canFormat == "STD") ? true : false;
//if (mesgFormat)
// radCMBit2MsgTyS.IsChecked = true;
//else
// radCMBit2MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[4] == 0 || (CANBUS_MSG_IDS[4] == canId &&
CMBIT2_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[4] = (byte)portValue;
// CANBUS_MSG_IDS[4] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// CMBIT2_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// CMBIT2_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[4] == canId &&
CMBIT2_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 3",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT2_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// CMBIT2_DATA_BYTES[triggerNumber] = (bitValue == true) ?
(byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[4] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 3", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[4] = (byte)portValue;
// CANBUS_MSG_IDS[4] = canId;
// //reset data bytes 0 -7
// for (int i = 0; i < 8; i++)
// {
// CMBIT2_DATA_BYTES[i] = (byte)0;
// CMBIT2_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// CMBIT2_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// CMBIT2_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void CM4_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT3_DATA_BYTES,
ChkboxName = "cbCM3Msg_custom",
TabIndex = 3,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit3MsgTyS,
RadioBtnExtendedMsgType = radCMBit3MsgTyE,
CanMsgIdIndex = 5,
CanMsgSourceIndex = 5,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
//Commented code for every position. Will remove after customer
feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);
//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

//var bitValue = selectedCollection.ByteCollection[bitIndex];


//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)CMBIT3_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)CMBIT3_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbCM3Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 3;
//var rbPref = "radCMBit";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[5];

//var mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radCMBit3MsgTyS.IsChecked = true;
//else
// radCMBit3MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[5] == 0 || (CANBUS_MSG_IDS[5] == canId &&
CMBIT3_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[5] = (byte)portValue;
// CANBUS_MSG_IDS[5] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// CMBIT3_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// CMBIT3_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[5] == canId &&
CMBIT3_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 4",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT3_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// CMBIT3_DATA_BYTES[triggerNumber] = (bitValue == true) ?
(byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[5] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 4", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[5] = (byte)portValue;
// CANBUS_MSG_IDS[5] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// CMBIT3_DATA_BYTES[i] = (byte)0;
// CMBIT3_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// CMBIT3_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// CMBIT3_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void CM5_Click(object sender, RoutedEventArgs e)


{

ExportRequest param = new ExportRequest()


{
BitDataBytes = CMBIT4_DATA_BYTES,
ChkboxName = "cbCM4Msg_custom",
TabIndex = 4,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit4MsgTyS,
RadioBtnExtendedMsgType = radCMBit4MsgTyE,
CanMsgIdIndex = 6,
CanMsgSourceIndex = 6,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

//var bitValue = selectedCollection.ByteCollection[bitIndex];


//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();
//int triggerNumber = byteNumber + 8;
//byte previousMaskByte = (byte)CMBIT4_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)CMBIT4_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbCM4Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 4;
//var rbPref = "radCMBit";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};

//var prevMsgId = CANBUS_MSG_IDS[6];

//var mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radCMBit4MsgTyS.IsChecked = true;
//else
// radCMBit4MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[6] == 0 || (CANBUS_MSG_IDS[6] == canId &&
CMBIT4_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[6] = (byte)portValue;
// CANBUS_MSG_IDS[6] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// CMBIT4_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// CMBIT4_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[6] == canId &&
CMBIT4_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 5",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT4_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// CMBIT4_DATA_BYTES[triggerNumber] = (bitValue == true) ?
(byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[6] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 5", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[6] = (byte)portValue;
// CANBUS_MSG_IDS[6] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// CMBIT4_DATA_BYTES[i] = (byte)0;
// CMBIT4_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// CMBIT4_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// CMBIT4_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void CM6_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT5_DATA_BYTES,
ChkboxName = "cbCM5Msg_custom",
TabIndex = 5,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit5MsgTyS,
RadioBtnExtendedMsgType = radCMBit5MsgTyE,
CanMsgIdIndex = 7,
CanMsgSourceIndex = 7,
};
ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode
//List<bool> objList = new List<bool>();
//MenuItem chk = (MenuItem)sender;
//var selectedData = (DataGridItem)chk.DataContext;
//uint canId = Convert.ToUInt32(selectedData.ID, 16);
//var canPort = selectedData.Port;
//var canFormat = selectedData.MessageFormat;

//var splitData = chk.Name.Split('_').ToList();


//var byteName = splitData[0];
//var byteNumber = Convert.ToInt32(splitData[1]);
//int bitIndex = Convert.ToInt32(splitData[2]);

//var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
//var hexval = dictionary.Where(x => x.Key ==
byteName).FirstOrDefault();
//var selectedCollection = (dynamic)hexval.Value;

//var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
//var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

//var bitValue = selectedCollection.ByteCollection[bitIndex];


//var portValue = (canPort == "CAN-V") ? 1 : 0;

//bool[] boolArray = new bool[8];


//boolArray[bitIndex] = bitValue;
//bool[] currentBoolArray = boolArray.Reverse().ToArray();

//int triggerNumber = byteNumber + 8;


//byte previousMaskByte = (byte)CMBIT5_DATA_BYTES[byteNumber];
//byte prevTriggerByte = (byte)CMBIT5_DATA_BYTES[triggerNumber];

//byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

//bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


//bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

//int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


//var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

//bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


//bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

//bool[] changeBitTriggerBoolArray = new bool[8];


//changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
//changeBitTriggerBoolArray[bitIndex] = bitValue;

//var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;
//bool isSelectBitChange = false;
//bool[] _boolArray = new bool[8];

//// custom checkbox make as uncheck before updating


//var chkName = "cbCM5Msg_custom";
//var customCheckBox = (CheckBox)this.FindName(chkName);
//if (customCheckBox.IsChecked == true)
//{
// customCheckBox.IsChecked = false;
//}

////if the value has changed at same bit position of the same byte
//isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

////in case of selected bit is false ,would convert to true to append


in mask
//if (!bitValue)
//{
// _boolArray[bitIndex] = true;
// bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
// _currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
//}

//int tabIndex = 5;
//var rbPref = "radCMBit";
//var sepratorKey = "B";
//var sepratorIgnore = "I";

//var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}


{byteNumber}{sepratorKey}";
//var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

//var dialogSettings = new MetroDialogSettings()


//{
// ColorScheme = MetroDialogColorScheme.Inverted,
//};
//var prevMsgId = CANBUS_MSG_IDS[7];

//var mesgFormat = (canFormat == "STD") ? true : false;


//if (mesgFormat)
// radCMBit5MsgTyS.IsChecked = true;
//else
// radCMBit5MsgTyE.IsChecked = true;

////move as new or with existing id at new place(byte position)


//if (CANBUS_MSG_IDS[7] == 0 || (CANBUS_MSG_IDS[7] == canId &&
CMBIT5_DATA_BYTES[byteNumber] == 0))
//{
// CANBUS_MSG_SOURCE[7] = (byte)portValue;
// CANBUS_MSG_IDS[7] = canId;

// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;

// //if the bit export value is false then set it to true for mask
// CMBIT5_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
// CMBIT5_DATA_BYTES[triggerNumber] = currentMaskByte;
//}

////if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[7] == canId &&
CMBIT5_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 6",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT5_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
// CMBIT5_DATA_BYTES[triggerNumber] = (bitValue == true) ?
(byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
////replace previous data with new one
//else if (CANBUS_MSG_IDS[7] != canId)
//{
// var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 6", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

// if (result == MessageDialogResult.Affirmative)
// {
// CANBUS_MSG_SOURCE[7] = (byte)portValue;
// CANBUS_MSG_IDS[7] = canId;

// //reset data bytes 0 -7


// for (int i = 0; i < 8; i++)
// {
// CMBIT5_DATA_BYTES[i] = (byte)0;
// CMBIT5_DATA_BYTES[i + 8] = (byte)0;
// var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{i}{sepratorIgnore}";
// var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
// prevRadioBtnByte.IsChecked = true;
// }

// //set the bit value at index


// CMBIT5_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
// CMBIT5_DATA_BYTES[triggerNumber] = currentMaskByte;
// //if byte value exported true then click compare radio button
// radioBtnCompare.IsChecked = true;
// }
//}
#endregion
}

private async void CM7_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT6_DATA_BYTES,
ChkboxName = "cbCM6Msg_custom",
TabIndex = 6,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit6MsgTyS,
RadioBtnExtendedMsgType = radCMBit6MsgTyE,
CanMsgIdIndex = 8,
CanMsgSourceIndex = 8,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;

//Commented code for every position. Will remove after customer


feedback.
#region CommentedCode
/*List<bool> objList = new List<bool>();
MenuItem chk = (MenuItem)sender;
var selectedData = (DataGridItem)chk.DataContext;
uint canId = Convert.ToUInt32(selectedData.ID, 16);
var canPort = selectedData.Port;
var canFormat = selectedData.MessageFormat;

var splitData = chk.Name.Split('_').ToList();


var byteName = splitData[0];
var byteNumber = Convert.ToInt32(splitData[1]);
int bitIndex = Convert.ToInt32(splitData[2]);

var dictionary =
selectedData.GetType().GetProperties().ToDictionary(property => property.Name,
property => property.GetValue(selectedData));
var hexval = dictionary.Where(x => x.Key == byteName).FirstOrDefault();
var selectedCollection = (dynamic)hexval.Value;

var comingArray =
(ObservableCollection<bool>)selectedCollection.ByteCollection;
var comingByte = ConvertBoolArrayToByte(comingArray.ToArray());

var bitValue = selectedCollection.ByteCollection[bitIndex];


var portValue = (canPort == "CAN-V") ? 1 : 0;

bool[] boolArray = new bool[8];


boolArray[bitIndex] = bitValue;
bool[] currentBoolArray = boolArray.Reverse().ToArray();

int triggerNumber = byteNumber + 8;


byte previousMaskByte = (byte)CMBIT6_DATA_BYTES[byteNumber];
byte prevTriggerByte = (byte)CMBIT6_DATA_BYTES[triggerNumber];

byte currentMaskByte = ConvertBoolArrayToByte(currentBoolArray);

bool[] maskBoolArray = ConvertByteToBoolArray(previousMaskByte);


bool[] prevMaskBoolArray = maskBoolArray.Reverse().ToArray();

int keyIndex = Array.FindIndex(currentBoolArray, w => w == bitValue);


var previousBitValue = prevMaskBoolArray.ElementAt(keyIndex);

bool[] triggerBoolArray = ConvertByteToBoolArray(prevTriggerByte);


bool[] prevTriggerBoolArray = triggerBoolArray.Reverse().ToArray();

bool[] changeBitTriggerBoolArray = new bool[8];


changeBitTriggerBoolArray = prevTriggerBoolArray.Select(x =>
x).ToArray();
changeBitTriggerBoolArray[bitIndex] = bitValue;

var updatedTriggerByte =
ConvertBoolArrayToByte(changeBitTriggerBoolArray.Reverse().ToArray());

byte _currentByte = 0;
bool isBitAlreadyExist = false;
bool isSelectBitChange = false;
bool[] _boolArray = new bool[8];

// custom checkbox make as uncheck before updating


var chkName = "cbCM6Msg_custom";
var customCheckBox = (CheckBox)this.FindName(chkName);
if (customCheckBox.IsChecked == true)
{
customCheckBox.IsChecked = false;
}
//if the value has changed at same bit position of the same byte
isSelectBitChange = IsSelectBitChanged(prevTriggerBoolArray,
_boolArray, bitIndex);

//in case of selected bit is false ,would convert to true to append in


mask
if (!bitValue)
{
_boolArray[bitIndex] = true;
bool[] _currentMaskBoolArray = _boolArray.Reverse().ToArray();
_currentByte = ConvertBoolArrayToByte(_currentMaskBoolArray);

//if current bit is already exist at own postion


isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, _boolArray, bitIndex);
}
else
{
isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, boolArray, bitIndex);
}

int tabIndex = 6;
var rbPref = "radCMBit";
var sepratorKey = "B";
var sepratorIgnore = "I";

var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}{byteNumber}


{sepratorKey}";
var radioBtnCompare = (RadioButton)this.FindName(selectedRadioButton);

var dialogSettings = new MetroDialogSettings()


{
ColorScheme = MetroDialogColorScheme.Inverted,
};

var prevMsgId = CANBUS_MSG_IDS[8];

var mesgFormat = (canFormat == "STD") ? true : false;


if (mesgFormat)
radCMBit6MsgTyS.IsChecked = true;
else
radCMBit6MsgTyE.IsChecked = true;

//move as new or with existing id at new place(byte position)


if (CANBUS_MSG_IDS[8] == 0 || (CANBUS_MSG_IDS[8] == canId &&
CMBIT6_DATA_BYTES[byteNumber] == 0))
{
CANBUS_MSG_SOURCE[8] = (byte)portValue;
CANBUS_MSG_IDS[8] = canId;

//if byte value exported true then click compare radio button
radioBtnCompare.IsChecked = true;

//if the bit export value is false then set it to true for mask
CMBIT6_DATA_BYTES[byteNumber] = (bitValue == true) ?
currentMaskByte : _currentByte;
CMBIT6_DATA_BYTES[triggerNumber] = currentMaskByte;
}

//if bit export with the same id at own position as update


else if (CANBUS_MSG_IDS[8] == canId && CMBIT6_DATA_BYTES[byteNumber] !=
0)
{
if (isBitAlreadyExist)
{
var result = await MetroMain.ShowMessageAsync("Do you want to
move the data?", "Selected bit is already exist with same id at tab CM Position 7",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
if (result == MessageDialogResult.Affirmative)
{
radioBtnCompare.IsChecked = true;
}
}

else
{
CMBIT6_DATA_BYTES[byteNumber] = (bitValue == true) ? (byte)
(currentMaskByte + previousMaskByte) : (byte)(_currentByte + previousMaskByte);
CMBIT6_DATA_BYTES[triggerNumber] = (bitValue == true) ? (byte)
(currentMaskByte + prevTriggerByte) : prevTriggerByte;
radioBtnCompare.IsChecked = true;
}

}
//replace previous data with new one
else if (CANBUS_MSG_IDS[8] != canId)
{
var result = await MetroMain.ShowMessageAsync("Do you want to
replace the data?", $"Another bit is already exist with id {prevMsgId} at tab CM
Position 7", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

if (result == MessageDialogResult.Affirmative)
{
CANBUS_MSG_SOURCE[8] = (byte)portValue;
CANBUS_MSG_IDS[8] = canId;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT6_DATA_BYTES[i] = (byte)0;
CMBIT6_DATA_BYTES[i + 8] = (byte)0;
var prevRadioButton = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorIgnore}";
var prevRadioBtnByte =
(RadioButton)this.FindName(prevRadioButton);
prevRadioBtnByte.IsChecked = true;
}

//set the bit value at index


CMBIT6_DATA_BYTES[byteNumber] = (bitValue == true ?
currentMaskByte : _currentByte);
CMBIT6_DATA_BYTES[triggerNumber] = currentMaskByte;
//if byte value exported true then click compare radio button
radioBtnCompare.IsChecked = true;
}
}*/
#endregion
}

private async void CM8_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT7_DATA_BYTES,
ChkboxName = "cbCM7Msg_custom",
TabIndex = 7,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit7MsgTyS,
RadioBtnExtendedMsgType = radCMBit7MsgTyE,
CanMsgIdIndex = 9,
CanMsgSourceIndex = 9,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM9_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT8_DATA_BYTES,
ChkboxName = "cbCM8Msg_custom",
TabIndex = 8,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit8MsgTyS,
RadioBtnExtendedMsgType = radCMBit8MsgTyE,
CanMsgIdIndex = 10,
CanMsgSourceIndex = 10,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
//Commented code for every position. Will remove after customer
feedback.
}

private async void CM10_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT9_DATA_BYTES,
ChkboxName = "cbCM9Msg_custom",
TabIndex = 9,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit9MsgTyS,
RadioBtnExtendedMsgType = radCMBit9MsgTyE,
CanMsgIdIndex = 11,
CanMsgSourceIndex = 11,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM11_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT10_DATA_BYTES,
ChkboxName = "cbCM10Msg_custom",
TabIndex = 10,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit10MsgTyS,
RadioBtnExtendedMsgType = radCMBit10MsgTyE,
CanMsgIdIndex = 12,
CanMsgSourceIndex = 12,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM12_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT11_DATA_BYTES,
ChkboxName = "cbCM11Msg_custom",
TabIndex = 11,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit11MsgTyS,
RadioBtnExtendedMsgType = radCMBit11MsgTyE,
CanMsgIdIndex = 13,
CanMsgSourceIndex = 13,
};
ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM13_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT12_DATA_BYTES,
ChkboxName = "cbCM12Msg_custom",
TabIndex = 12,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit12MsgTyS,
RadioBtnExtendedMsgType = radCMBit12MsgTyE,
CanMsgIdIndex = 14,
CanMsgSourceIndex = 14,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM14_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT13_DATA_BYTES,
ChkboxName = "cbCM13Msg_custom",
TabIndex = 13,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit13MsgTyS,
RadioBtnExtendedMsgType = radCMBit13MsgTyE,
CanMsgIdIndex = 15,
CanMsgSourceIndex = 15,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM15_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT14_DATA_BYTES,
ChkboxName = "cbCM14Msg_custom",
TabIndex = 14,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit14MsgTyS,
RadioBtnExtendedMsgType = radCMBit14MsgTyE,
CanMsgIdIndex = 16,
CanMsgSourceIndex = 16,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}

private async void CM16_Click(object sender, RoutedEventArgs e)


{
ExportRequest param = new ExportRequest()
{
BitDataBytes = CMBIT15_DATA_BYTES,
ChkboxName = "cbCM15Msg_custom",
TabIndex = 15,
RadioBtnPrefix = "radCMBit",
SeparatorKey = "B",
SepratorIgnore = "I",
RadioBtnStandardMsgType = radCMBit15MsgTyS,
RadioBtnExtendedMsgType = radCMBit15MsgTyE,
CanMsgIdIndex = 17,
CanMsgSourceIndex = 17,
};

ExportBytesToConfiguration(param);
if (isFetchFromCloud)
{
ResetControlsForIdx(param.CanMsgIdIndex);
}
return;
}
private bool exportBytesFromScannerToConfig = false;
/// <summary>
/// Generic method to execute export process with required parameters such
as:
/// <list type="bullet">
/// <item><description>Message Indexes</description></item>
/// <item><description>Byte Data Collections</description></item>
/// <item><description>Radio Button references, etc</description></item>
/// </list>
/// </summary>
/// <param name="request"></param>
private async void ExportBytesToConfiguration(ExportRequest request)
{
exportBytesFromScannerToConfig = true;
isExportSettingsPressed = false;
var sourceIndex = request.CanMsgSourceIndex;
var idIndex = request.CanMsgIdIndex;
if (exportedItem.HasSelectedBits)
{
var dataGridItem = dataGridItems.ToList().FirstOrDefault(a => a.ID
== exportedItem.HexCanId);

if (dataGridItem != null)
{
var canPort = dataGridItem.Port;
var canFormat = dataGridItem.MessageFormat;
uint canId = Convert.ToUInt32(dataGridItem.ID, 16);
var portValue = ExtensionHelper.GetCanPortInteger(canPort);

foreach (var selectItem in exportedItem.SelectedItems)


{

var byteNumber = selectItem.ByteNumber;


var selectionList = selectItem.SelectedBytes;
bool[] maskArray = new bool[8];
bool[] triggerArray = new bool[8];

//previous values of mask bytes and trigger values


int triggerNumber = byteNumber + 8;
byte previousMaskByte =
(byte)request.BitDataBytes[byteNumber];
byte prevTriggerByte =
(byte)request.BitDataBytes[triggerNumber];

var alreadyExists = new List<bool>();

// custom checkbox make as uncheck before updating


var chkName = request.ChkboxName;
var customCheckBox = (CheckBox)this.FindName(chkName);
if (customCheckBox.IsChecked == true)
{
customCheckBox.IsChecked = false;
}

for (int index = 0; index < selectionList.Count; index++)


{
if (!selectionList[index])
continue;

//getting original collectionByte against byteNumber


var collectionByte =
dataGridItem.GetSpecificCollectionBytes(byteNumber);
var bitValue = collectionByte[index];

//As per requirement of the client,


//We need to add selected bit value,
//if index is selected then its value should always be
1 in trigger as well.
//Dated: 8-June-23
//previous logic:
//triggerArray[index] = bitValue;
//current byte values
triggerArray[index] = selectionList[index];
////if the value has changed at same bit position of
the same byte
////isSelectBitChange =
IsSelectBitChanged(prevTriggerBoolArray, _boolArray, bitIndex);

////in case of selected bit is false ,would convert to


true to append in mask

//bool[] maskBoolArray =
ConvertByteToBoolArray(previousMaskByte);
//bool[] prevMaskBoolArray =
maskBoolArray.Reverse().ToArray();

//byte _currentByte = 0;
//bool isBitAlreadyExist = false;

//if (!bitValue)
//{
// triggerArray[bitIndex] = true;
// bool[] _currentMaskBoolArray =
triggerArray.Reverse().ToArray();
// _currentByte =
ConvertBoolArrayToByte(_currentMaskBoolArray);

// //if current bit is already exist at own postion


// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, triggerArray, bitIndex);

//}
//else
//{
// isBitAlreadyExist =
CheckIfCurrentBitIsAlreadyExist(prevMaskBoolArray, maskArray, bitIndex);
//}
//alreadyExists.Add(isBitAlreadyExist);

maskArray = selectionList.ToArray();

byte maskByte =
ConvertBoolArrayToByte(maskArray.Reverse().ToArray());
byte triggerByte =
ConvertBoolArrayToByte(triggerArray.Reverse().ToArray());

int tabIndex = request.TabIndex;


var rbPref = request.RadioBtnPrefix;
var sepratorKey = request.SeparatorKey;
var sepratorIgnore = request.SepratorIgnore;

//radCMBit0B7I -> Ignore Radio Button Name Example


//radCMBit0B7B -> Compare Radio Button Name Example
var selectedRadioButton = $"{rbPref}{tabIndex}{sepratorKey}
{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);

var dialogSettings = new MetroDialogSettings()


{
ColorScheme = MetroDialogColorScheme.Inverted,
};

//var mesgFormat = (canFormat == "STD") ? true : false;


var mesgFormat = (canFormat == "11") ? true : false;
if (mesgFormat)
request.RadioBtnStandardMsgType.IsChecked = true;
else
request.RadioBtnExtendedMsgType.IsChecked = true;

//replace previous data with new one


if (CANBUS_MSG_IDS[idIndex] != 0 && CANBUS_MSG_IDS[idIndex]
!= canId)
{
var prevMsgId = CANBUS_MSG_IDS[idIndex];

var result = await MetroMain.ShowMessageAsync("Do you


want to replace the data?", $"Another bit is already exist with id {prevMsgId} at
tab CM Position 1", MessageDialogStyle.AffirmativeAndNegative, settings:
dialogSettings);

if (result == MessageDialogResult.Affirmative)
{
CANBUS_MSG_SOURCE[sourceIndex] = (byte)portValue;
CANBUS_MSG_IDS[idIndex] = canId;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
request.BitDataBytes[i] = (byte)0;
request.BitDataBytes[i + 8] = (byte)0;

//check ignore radio buttons


var prevIgnoreRadioButton = $"{rbPref}
{tabIndex}{sepratorKey}{i}{sepratorIgnore}";
var prevIgnoreRadioBtnByte =
(RadioButton)this.FindName(prevIgnoreRadioButton);
prevIgnoreRadioBtnByte.IsChecked = true;

//ChangeTextBlockColor(prevIgnoreRadioBtnByte,
Brushes.White);
//var prevCompareRadioButton = $"{rbPref}
{tabIndex}{sepratorKey}{i}{sepratorKey}";
//var prevCompareRadioBtnByte =
(RadioButton)this.FindName(prevCompareRadioButton);
//prevCompareRadioBtnByte.IsChecked = false;
}

//set the bit value at index


request.BitDataBytes[byteNumber] = maskByte;
request.BitDataBytes[triggerNumber] = triggerByte;
//if byte value exported true then click compare
radio button
radioBtnCompare.IsChecked = true;
request.RadioBtnExtendedMsgType.IsChecked =
(canFormat == "11") ? false : true;
}
else return;
}

//move as new or with existing id at new place(byte


position)
if (CANBUS_MSG_IDS[idIndex] == 0 ||
(CANBUS_MSG_IDS[idIndex] == canId && request.BitDataBytes[byteNumber] == 0))
{
CANBUS_MSG_SOURCE[sourceIndex] = (byte)portValue;
CANBUS_MSG_IDS[idIndex] = canId;

//if byte value exported true then click compare radio


button
radioBtnCompare.IsChecked = true;

request.BitDataBytes[byteNumber] = maskByte;
request.BitDataBytes[triggerNumber] = triggerByte;

//if bit export with the same id at own position as update


//else if (CANBUS_MSG_IDS[2] == canId &&
CMBIT0_DATA_BYTES[byteNumber] != 0)
//{
// if (isBitAlreadyExist)
// {
// var result = await MetroMain.ShowMessageAsync("Do
you want to move the data?", "Selected bit is already exist with same id at tab CM
Position 1", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
// if (result == MessageDialogResult.Affirmative)
// {
// radioBtnCompare.IsChecked = true;
// }
// }

// else
// {
// CMBIT0_DATA_BYTES[byteNumber] = (bitValue ==
true) ? (byte)(currentMaskByte + previousMaskByte) : (byte)(_currentByte +
previousMaskByte);
// CMBIT0_DATA_BYTES[triggerNumber] = (bitValue ==
true) ? (byte)(currentMaskByte + prevTriggerByte) : prevTriggerByte;
// radioBtnCompare.IsChecked = true;
// }

//}
}
}
}
else
{
var result = await MetroMain.ShowMessageAsync("Export Selection",
"No bits are selected! Please select bits for export.",
MessageDialogStyle.Affirmative);
}
}

Dictionary<string, uint> messageIdDict = new Dictionary<string, uint>();


Dictionary<string, byte> messageSourceDict = new Dictionary<string,
byte>();
Dictionary<string, bool> messageFormatDict = new Dictionary<string,
bool>();
Dictionary<string, bool> customFlagDict = new Dictionary<string, bool>();

Dictionary<string, uint> msgIdInputDict = new Dictionary<string, uint>();


Dictionary<string, byte> msgSourceInputDict = new Dictionary<string,
byte>();
Dictionary<string, bool> msgFormatInputDict = new Dictionary<string,
bool>();

private async void CustomBT_Checked(object sender, RoutedEventArgs e)


{
var pref = "msgBtsId_";
CheckBox chk = (CheckBox)sender;
string tabIndex = new String(chk.Name.Where(Char.IsDigit).ToArray());
var textBoxName = $"{pref}{tabIndex}";

var rbPref = "radBts";


var rbPost = "MsgTy";
var sepratorS = "S";
var sepratorE = "E";

var rbStandardName = $"{rbPref}{tabIndex}{rbPost}{sepratorS}";


var rbExtendedName = $"{rbPref}{tabIndex}{rbPost}{sepratorE}";
var rbStandard = (RadioButton)this.FindName(rbStandardName);
var rbExtended = (RadioButton)this.FindName(rbExtendedName);

var inputId = msgIdInputDict.Where(x => x.Key ==


textBoxName).FirstOrDefault();
var inputSource = msgSourceInputDict.Where(x => x.Key ==
textBoxName).FirstOrDefault();
var inputFormatStandard = msgFormatInputDict.Where(x => x.Key ==
rbStandardName).FirstOrDefault();
var msgId = CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)];

var dialogSettings = new MetroDialogSettings()


{
ColorScheme = MetroDialogColorScheme.Inverted,
};

MessageDialogResult result = new MessageDialogResult();


var isFlagOn = customFlagDict.Where(x => x.Key ==
textBoxName).FirstOrDefault();

if (!isFlagOn.Value && (isFlagOn.Key != null || msgId > 0) && !


isFetchingProfile)
{
result = await MetroMain.ShowMessageAsync("Do you want to change
Message Id?", "It is going to be reset", MessageDialogStyle.AffirmativeAndNegative,
settings: dialogSettings);
}

if (result == MessageDialogResult.Affirmative || isFlagOn.Value || !


isFetchingProfile)
{
if (!customFlagDict.Where(x => x.Key == textBoxName).Any())
{
customFlagDict.Add(textBoxName, true);
}

messageIdDict.Add(textBoxName,
CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)]);
messageSourceDict.Add(textBoxName,
CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)]);
messageFormatDict.Add(rbStandardName, (bool)rbStandard.IsChecked);

//check if previouly updated by user


if (inputId.Value > 0)
CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)] =
Convert.ToUInt32(inputId.Value);

else
CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)] = 0;

if (inputSource.Value > 0)
CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)] =
inputSource.Value;

else
CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)] = 0;

if (inputFormatStandard.Key != null)
{
if (inputFormatStandard.Value == false) //prev selected option
is not 'standard'
{
if (rbExtended.IsChecked == false)
rbExtended.IsChecked = true; //it would be 'extended'
definitely
}

else if (inputFormatStandard.Value == true)


{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}
}
else
{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}
}
}

private async void CustomBT_Unchecked(object sender, RoutedEventArgs e)


{
var pref = "msgBtsId_";
CheckBox chk = (CheckBox)sender;

string tabIndex = new String(chk.Name.Where(Char.IsDigit).ToArray());


var name = $"{pref}{tabIndex}";
var idTextBox = (TextBox)this.FindName(name);

var rbPref = "radBts";


var rbPost = "MsgTy";
var sepratorS = "S";
var sepratorE = "E";

var rbStandardName = $"{rbPref}{tabIndex}{rbPost}{sepratorS}";


var rbExtendedName = $"{rbPref}{tabIndex}{rbPost}{sepratorE}";
var rbStandard = (RadioButton)this.FindName(rbStandardName);
var rbExtended = (RadioButton)this.FindName(rbExtendedName);

var msgId = messageIdDict.Where(x => x.Key == name).FirstOrDefault();


var msgSource = messageSourceDict.Where(x => x.Key ==
name).FirstOrDefault();
var msgFormatStandard = messageFormatDict.Where(x => x.Key ==
rbStandardName).FirstOrDefault();

var inputId = CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)];


var inputSource = CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)];
var inputFormat = rbStandard.IsChecked;

//save user input id


if (!msgIdInputDict.Where(x => x.Key == name && x.Value ==
inputId).Any())
{
// if user update prev input
if (msgIdInputDict.Where(x => x.Key == name && x.Value !=
inputId).Any())
{
var existingId = msgIdInputDict.Where(x => x.Key == name &&
x.Value != inputId).FirstOrDefault();
msgIdInputDict[existingId.Key] = inputId;
}
else
{
msgIdInputDict.Add(name, inputId);
}
}

//save user selected source


if (!msgSourceInputDict.Where(x => x.Key == name && x.Value ==
inputSource).Any())
{
//update if pre selected source changed
if (msgSourceInputDict.Where(x => x.Key == name && x.Value !=
inputSource).Any())
{
var existingSource = msgSourceInputDict.Where(x => x.Key ==
name && x.Value != inputSource).FirstOrDefault();
msgSourceInputDict[existingSource.Key] = inputSource;
}
else
{
msgSourceInputDict.Add(name, inputSource);
}
}

//save user selected msg format


if (!msgFormatInputDict.Where(x => x.Key == rbStandardName && x.Value
== inputFormat).Any())
{
if (msgFormatInputDict.Where(x => x.Key == rbStandardName &&
x.Value != inputFormat).Any())
{
var existingFormat = msgFormatInputDict.Where(x => x.Key ==
rbStandardName && x.Value != inputFormat).FirstOrDefault();
msgFormatInputDict[existingFormat.Key] = (bool)inputFormat;
}
else
{
msgFormatInputDict.Add(rbStandardName,
(bool)rbStandard.IsChecked);
}
}

//update DEC id with previous id


CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)] = msgSource.Value;
CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)] = msgId.Value;

if (msgFormatStandard.Key != null)
{
if (msgFormatStandard.Value == false) //prev selected option is
not 'standard'
{
if (rbExtended.IsChecked == false)
rbExtended.IsChecked = true; //it would be 'extended'
definitely
}

else if (msgFormatStandard.Value == true)


{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}
}
else
{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}

if (msgId.Key != null)
messageIdDict.Remove(msgId.Key);

if (msgSource.Key != null)
messageSourceDict.Remove(msgSource.Key);

if (msgFormatStandard.Key != null)
messageFormatDict.Remove(msgFormatStandard.Key);
}

private async void CustomCM_Checked(object sender, RoutedEventArgs e)


{
var pref = "msgCMId_";
CheckBox chk = (CheckBox)sender;
string tabIndex = new String(chk.Name.Where(Char.IsDigit).ToArray());
var textBoxName = $"{pref}{tabIndex}";
// var msgIdTextBox = (TextBox)this.FindName(textBoxName);

var rbPref = "radCMBit";


var rbPost = "MsgTy";
var sepratorS = "S";
var sepratorE = "E";

var rbStandardName = $"{rbPref}{tabIndex}{rbPost}{sepratorS}";


var rbExtendedName = $"{rbPref}{tabIndex}{rbPost}{sepratorE}";
var rbStandard = (RadioButton)this.FindName(rbStandardName);
var rbExtended = (RadioButton)this.FindName(rbExtendedName);

var inputId = msgIdInputDict.Where(x => x.Key ==


textBoxName).FirstOrDefault();
var inputSource = msgSourceInputDict.Where(x => x.Key ==
textBoxName).FirstOrDefault();
var inputFormatStandard = msgFormatInputDict.Where(x => x.Key ==
rbStandardName).FirstOrDefault();
var msgId = CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)];
var tabIndexCan = Convert.ToInt32(tabIndex) + 2;

var dialogSettings = new MetroDialogSettings()


{
ColorScheme = MetroDialogColorScheme.Inverted,
};
MessageDialogResult result = new MessageDialogResult();
var isFlagOn = customFlagDict.Where(x => x.Key ==
textBoxName).FirstOrDefault();

if (!isFlagOn.Value && (isFlagOn.Key != null || msgId > 0) && !


isFetchingProfile)
{
result = await MetroMain.ShowMessageAsync("Do you want to change
Message Id?", "It is going to be reset", MessageDialogStyle.AffirmativeAndNegative,
settings: dialogSettings);
}

if (result == MessageDialogResult.Affirmative || isFlagOn.Value || !


isFetchingProfile)
{
if (!customFlagDict.Where(x => x.Key == textBoxName).Any())
{
customFlagDict.Add(textBoxName, true);
}

messageIdDict.Add(textBoxName, CANBUS_MSG_IDS[tabIndexCan]);
messageSourceDict.Add(textBoxName, CANBUS_MSG_SOURCE[tabIndexCan]);
messageFormatDict.Add(rbStandardName, (bool)rbStandard.IsChecked);

//check if previouly updated by user


if (inputId.Value > 0)
CANBUS_MSG_IDS[tabIndexCan] = Convert.ToUInt32(inputId.Value);

else
CANBUS_MSG_IDS[tabIndexCan] = 0;

if (inputSource.Value > 0)
CANBUS_MSG_SOURCE[tabIndexCan] = inputSource.Value;

else
CANBUS_MSG_SOURCE[tabIndexCan] = 0;
if (inputFormatStandard.Key != null)
{
if (inputFormatStandard.Value == false) //prev selected option
is not 'standard'
{
if (rbExtended.IsChecked == false)
rbExtended.IsChecked = true; //it would be 'extended'
definitely
}

else if (inputFormatStandard.Value == true)


{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}

}
else
{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}

private async void CustomCM_Unchecked(object sender, RoutedEventArgs e)


{
var pref = "msgCMId_";
CheckBox chk = (CheckBox)sender;

string tabIndex = new String(chk.Name.Where(Char.IsDigit).ToArray());


var name = $"{pref}{tabIndex}";
var idTextBox = (TextBox)this.FindName(name);

var rbPref = "radCMBit";


var rbPost = "MsgTy";
var sepratorS = "S";
var sepratorE = "E";

var rbStandardName = $"{rbPref}{tabIndex}{rbPost}{sepratorS}";


var rbExtendedName = $"{rbPref}{tabIndex}{rbPost}{sepratorE}";
var rbStandard = (RadioButton)this.FindName(rbStandardName);
var rbExtended = (RadioButton)this.FindName(rbExtendedName);

var msgId = messageIdDict.Where(x => x.Key == name).FirstOrDefault();


var msgSource = messageSourceDict.Where(x => x.Key ==
name).FirstOrDefault();
var msgFormatStandard = messageFormatDict.Where(x => x.Key ==
rbStandardName).FirstOrDefault();
var tabIndexCan = Convert.ToInt32(tabIndex) + 2;

var inputId = CANBUS_MSG_IDS[tabIndexCan];


var inputSource = CANBUS_MSG_SOURCE[tabIndexCan];
var inputFormat = rbStandard.IsChecked;
//save user input id
if (!msgIdInputDict.Where(x => x.Key == name && x.Value ==
inputId).Any())
{
// if user update prev input
if (msgIdInputDict.Where(x => x.Key == name && x.Value !=
inputId).Any())
{
var existingId = msgIdInputDict.Where(x => x.Key == name &&
x.Value != inputId).FirstOrDefault();
msgIdInputDict[existingId.Key] = inputId;
}
else
{
msgIdInputDict.Add(name, inputId);
}
}

//save user selected source


if (!msgSourceInputDict.Where(x => x.Key == name && x.Value ==
inputSource).Any())
{
//update if pre selected source changed
if (msgSourceInputDict.Where(x => x.Key == name && x.Value !=
inputSource).Any())
{
var existingSource = msgSourceInputDict.Where(x => x.Key ==
name && x.Value != inputSource).FirstOrDefault();
msgSourceInputDict[existingSource.Key] = inputSource;
}
else
{
msgSourceInputDict.Add(name, inputSource);
}
}

//save user selected msg format


if (!msgFormatInputDict.Where(x => x.Key == rbStandardName && x.Value
== inputFormat).Any())
{
if (msgFormatInputDict.Where(x => x.Key == rbStandardName &&
x.Value != inputFormat).Any())
{
var existingFormat = msgFormatInputDict.Where(x => x.Key ==
rbStandardName && x.Value != inputFormat).FirstOrDefault();
msgFormatInputDict[existingFormat.Key] = (bool)inputFormat;
}
else
{
msgFormatInputDict.Add(rbStandardName,
(bool)rbStandard.IsChecked);
}
}

//update DEC id with previous id


CANBUS_MSG_SOURCE[tabIndexCan] = msgSource.Value;
CANBUS_MSG_IDS[tabIndexCan] = msgId.Value;

if (msgFormatStandard.Key != null)
{
if (msgFormatStandard.Value == false) //prev selected option is
not 'standard'
{
if (rbExtended.IsChecked == false)
rbExtended.IsChecked = true; //it would be 'extended'
definitely
}

else if (msgFormatStandard.Value == true)


{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}
}
else
{
if (rbStandard.IsChecked == false)
rbStandard.IsChecked = true;
}

if (msgId.Key != null)
messageIdDict.Remove(msgId.Key);

if (msgSource.Key != null)
messageSourceDict.Remove(msgSource.Key);

if (msgFormatStandard.Key != null)
messageFormatDict.Remove(msgFormatStandard.Key);
}

/**
* Sending connectivity status on window loaded
*/
public async void MetroMain_Loaded(object sender, RoutedEventArgs e)
{
await FetchedSignalTypes();
if (SystemInformationHelper.CheckInternet())
{
await GetCarModels();
}
else
{
//Car carBrands = await SessionHelper.CheckLocalCarBrands();
//if (carBrands != null)
//{
// var carMakeCollection = new
ObservableCollection<GetMakeNames>(carBrands.getMakeNames);
// this.comboCar.ItemsSource = carMakeCollection;

// //Model carModels = await


SessionHelper.CheckLocalCarModels();
// //if(carModels != null)
// //{
// // var carModelCollection = new
ObservableCollection<GetModelNames>(carModels.getModelNames);

// // var selectedItem =
(GetMakeNames)comboCar.SelectedValue;
// // this.comboCarModel.ItemsSource =
carModelCollection.Where(o => o.makeId == selectedItem.id);
// //}
//}

}
Session session = await SessionHelper.CheckLocalSession();
if (session != null)
{
await GetCarMakes();

cmbScanBaudCAN0.SelectedIndex = session.CanVIndex ?? 1;
//cmbBaudCAN0.SelectedIndex = session.CanVIndex ?? 1;
cmbScanBaudCAN1.SelectedIndex = session.CanIndex ?? 1;
await ConnectivityStatus(true, session.Token);
}
}

/**
* Making sure to turn OFF the scanner mode when closing.
*/
private void Window_Closing(object sender, CancelEventArgs e)
{
Byte[] buffer = new Byte[64];
buffer[0] = (Byte)'$';
buffer[1] = (Byte)'0'; //Interact with CAN Scanner

buffer[2] = (Byte)0; //stop Write Data


buffer[3] = (Byte)cmbScanBaudCAN0.SelectedIndex;
buffer[4] = (Byte)cmbScanBaudCAN1.SelectedIndex;
writeUsbHid(buffer);

e.Cancel = true;
if (SystemInformationHelper.CheckInternet())
{
Session session = Task.Run(() =>
SessionHelper.CheckLocalSession().GetAwaiter().GetResult()).GetAwaiter().GetResult(
);
if (session != null)
{
Task.Run(() => ConnectivityStatus(false,
session.Token).GetAwaiter().GetResult()).GetAwaiter().GetResult();
}
}
Task.Run(() =>
StoreCanIDs().GetAwaiter().GetResult()).GetAwaiter().GetResult();
e.Cancel = false;
}

private void btnSettings_Click(object sender, RoutedEventArgs e)


{
flyoutSettings.IsOpen = !flyoutSettings.IsOpen;
}

private void flyoutSettings_ClosingFinished(object sender, RoutedEventArgs


e)
{
}
#endregion

#region Signal Report


//Temporary msg source
public ObservableCollection<byte> CANBUS_MSG_SOURCE_COPY { get; set; }

//Temporary Message ID
public ObservableCollection<UInt32> CANBUS_MSG_IDS_COPY { get; set; }
public Dictionary<int, string> MSG_FORMAT_COPY { get; set; } = new
Dictionary<int, string>();
public Dictionary<int, string> CAN_PORT_COPY { get; set; } = new
Dictionary<int, string>();

//Temporary Data bytes for BTS section


public ObservableCollection<byte> BTS0_DATA_BYTES_COPY { get; set; } = new
ObservableCollection<byte>();
public ObservableCollection<byte> BTS1_DATA_BYTES_COPY { get; set; } = new
ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT0_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT1_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT2_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT3_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT4_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT5_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT6_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT7_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT8_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT9_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT10_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT11_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT12_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT13_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT14_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();
public ObservableCollection<byte> CMBIT15_DATA_BYTES_COPY { get; set; } =
new ObservableCollection<byte>();

protected ProgressDialogController profileController = null;

//Profile for different settings of CAN Master


private Profile.Profile eProfile = new Xml();
private Profile.Profile settingsFile = new Xml();
private Profile.Profile userNotesFile = new Xml();
public bool isFetchingProfile = false;
private async void Button_SaveProfile_Clicked(object sender,
RoutedEventArgs e)
{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "CAN Master Profiles|*.cmf|All files|*.*";
//Provide the default filename for the dialog box with Friendly name
and the serial number
saveDialog.FileName = "profile.cmf";

if ((saveDialog.ShowDialog() == true))
{
//start setup for profile controller
var dialogSettings = new MetroDialogSettings()
{
AnimateShow = false,
AnimateHide = false
};

//Prepare Progress Dialog


string msgTitle = "Saving Profile";
string msgContent = "Please wait while the settings are being saved
in to the profile.";
profileController = await this.ShowProgressAsync(msgTitle,
msgContent, settings: dialogSettings);
profileController.SetIndeterminate();
profileController.Minimum = 0;
profileController.Maximum = 100;

await Task.Delay(100);
profileController.SetProgress(20);

try
{
var customBtsPref = "cbBts";
var customPref = "cbCM";
var customPost = "Msg_custom";

eProfile.Name = (saveDialog.FileName);
eProfile.SetValue("CAN_Master_Profile", "DATE",
DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
eProfile.SetValue("CAN_Master_Profile", "FIRMWARE",
tbFirmware.Text);
eProfile.SetValue("CAN_Master_Profile", "GUI_VER",
$"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}
");

//CAN 0 General Settings


eProfile.SetValue("General_Settings", "Can_0_Baud",
cmbBaudCAN0.SelectedIndex);

int powerToggleBtn = tglEnCanvPwr.IsChecked == true ? 1 : 0;


eProfile.SetValue("General_Settings", "Can_0_OutputPower",
powerToggleBtn);

int can0PowerDownCheck = cbCMCanvPwrDown.IsChecked == true ?


1 : 0;
eProfile.SetValue("General_Settings", "Can_0_AutoPowerDown",
can0PowerDownCheck);
eProfile.SetValue("General_Settings",
"Can_0_AutoPowerDown_Timer", nudPwrInactTimer.Value);

int can0WakeUpDRB = cbCMCanvWakeupDRB.IsChecked == true ? 1 :


0;
eProfile.SetValue("General_Settings", "Can_0_WakeUp_DRB",
can0WakeUpDRB);

int can0WakeUpDRBonRegMsg = cbCMCanvWakeupOnRegMsg.IsChecked ==


true ? 1 : 0;
eProfile.SetValue("General_Settings", "Can_0_WakeUp_DRB_onMsg",
can0WakeUpDRBonRegMsg);

//CAN 1 General Settings


eProfile.SetValue("General_Settings", "Can_1_Baud",
cmbBaudCAN1.SelectedIndex);

int can1AcceptSleep = cbDRBAcceptSleepReq.IsChecked == true ? 1


: 0;
eProfile.SetValue("General_Settings",
"Can_1_Accept_Sleep_Call", can1AcceptSleep);

int can1AcceptWakeUp = cbDRBAcceptWakepReq.IsChecked == true ?


1 : 0;
eProfile.SetValue("General_Settings",
"Can_1_Accept_WakeUp_Call", can1AcceptWakeUp);

int can1SendSleep = cbDRBSendSleepReq.IsChecked == true ? 1 :


0;
eProfile.SetValue("General_Settings", "Can_1_Send_Sleep_Call",
can1SendSleep);

//High Side Switches


#region BTS0
eProfile.SetValue("BTS0", "Source", CANBUS_MSG_SOURCE[0]);
eProfile.SetValue("BTS0", "Message_ID", CANBUS_MSG_IDS[0]);
var selectedFormat0 = radBts0MsgTyS.IsChecked == true ? "STD" :
"EXT";
eProfile.SetValue("BTS0", "Format", selectedFormat0);
eProfile.SetValue("BTS0", "Byte_0_Mask", BTS0_DATA_BYTES[0]);
eProfile.SetValue("BTS0", "Byte_1_Mask", BTS0_DATA_BYTES[1]);
eProfile.SetValue("BTS0", "Byte_2_Mask", BTS0_DATA_BYTES[2]);
eProfile.SetValue("BTS0", "Byte_3_Mask", BTS0_DATA_BYTES[3]);
eProfile.SetValue("BTS0", "Byte_4_Mask", BTS0_DATA_BYTES[4]);
eProfile.SetValue("BTS0", "Byte_5_Mask", BTS0_DATA_BYTES[5]);
eProfile.SetValue("BTS0", "Byte_6_Mask", BTS0_DATA_BYTES[6]);
eProfile.SetValue("BTS0", "Byte_7_Mask", BTS0_DATA_BYTES[7]);
eProfile.SetValue("BTS0", "Byte_0_Trigger",
BTS0_DATA_BYTES[8]);
eProfile.SetValue("BTS0", "Byte_1_Trigger",
BTS0_DATA_BYTES[9]);
eProfile.SetValue("BTS0", "Byte_2_Trigger",
BTS0_DATA_BYTES[10]);
eProfile.SetValue("BTS0", "Byte_3_Trigger",
BTS0_DATA_BYTES[11]);
eProfile.SetValue("BTS0", "Byte_4_Trigger",
BTS0_DATA_BYTES[12]);
eProfile.SetValue("BTS0", "Byte_5_Trigger",
BTS0_DATA_BYTES[13]);
eProfile.SetValue("BTS0", "Byte_6_Trigger",
BTS0_DATA_BYTES[14]);
eProfile.SetValue("BTS0", "Byte_7_Trigger",
BTS0_DATA_BYTES[15]);

//Logical Functions
eProfile.SetValue("BTS0", "Byte_0_LogicFunction",
BTS0_DATA_BYTES[16]);
eProfile.SetValue("BTS0", "Byte_1_LogicFunction",
BTS0_DATA_BYTES[17]);
eProfile.SetValue("BTS0", "Byte_2_LogicFunction",
BTS0_DATA_BYTES[18]);
eProfile.SetValue("BTS0", "Byte_3_LogicFunction",
BTS0_DATA_BYTES[19]);
eProfile.SetValue("BTS0", "Byte_4_LogicFunction",
BTS0_DATA_BYTES[20]);
eProfile.SetValue("BTS0", "Byte_5_LogicFunction",
BTS0_DATA_BYTES[21]);
eProfile.SetValue("BTS0", "Byte_6_LogicFunction",
BTS0_DATA_BYTES[22]);
eProfile.SetValue("BTS0", "Byte_7_LogicFunction",
BTS0_DATA_BYTES[23]);
#endregion

#region BTS1
eProfile.SetValue("BTS1", "Source", CANBUS_MSG_SOURCE[1]);
eProfile.SetValue("BTS1", "Message_ID", CANBUS_MSG_IDS[1]);
var selectedFormat1 = radBts1MsgTyS.IsChecked == true ? "STD" :
"EXT";
eProfile.SetValue("BTS1", "Format", selectedFormat1);
eProfile.SetValue("BTS1", "Byte_0_Mask", BTS1_DATA_BYTES[0]);
eProfile.SetValue("BTS1", "Byte_1_Mask", BTS1_DATA_BYTES[1]);
eProfile.SetValue("BTS1", "Byte_2_Mask", BTS1_DATA_BYTES[2]);
eProfile.SetValue("BTS1", "Byte_3_Mask", BTS1_DATA_BYTES[3]);
eProfile.SetValue("BTS1", "Byte_4_Mask", BTS1_DATA_BYTES[4]);
eProfile.SetValue("BTS1", "Byte_5_Mask", BTS1_DATA_BYTES[5]);
eProfile.SetValue("BTS1", "Byte_6_Mask", BTS1_DATA_BYTES[6]);
eProfile.SetValue("BTS1", "Byte_7_Mask", BTS1_DATA_BYTES[7]);
eProfile.SetValue("BTS1", "Byte_0_Trigger",
BTS1_DATA_BYTES[8]);
eProfile.SetValue("BTS1", "Byte_1_Trigger",
BTS1_DATA_BYTES[9]);
eProfile.SetValue("BTS1", "Byte_2_Trigger",
BTS1_DATA_BYTES[10]);
eProfile.SetValue("BTS1", "Byte_3_Trigger",
BTS1_DATA_BYTES[11]);
eProfile.SetValue("BTS1", "Byte_4_Trigger",
BTS1_DATA_BYTES[12]);
eProfile.SetValue("BTS1", "Byte_5_Trigger",
BTS1_DATA_BYTES[13]);
eProfile.SetValue("BTS1", "Byte_6_Trigger",
BTS1_DATA_BYTES[14]);
eProfile.SetValue("BTS1", "Byte_7_Trigger",
BTS1_DATA_BYTES[15]);

//Logical Functions
eProfile.SetValue("BTS1", "Byte_0_LogicFunction",
BTS1_DATA_BYTES[16]);
eProfile.SetValue("BTS1", "Byte_1_LogicFunction",
BTS1_DATA_BYTES[17]);
eProfile.SetValue("BTS1", "Byte_2_LogicFunction",
BTS1_DATA_BYTES[18]);
eProfile.SetValue("BTS1", "Byte_3_LogicFunction",
BTS1_DATA_BYTES[19]);
eProfile.SetValue("BTS1", "Byte_4_LogicFunction",
BTS1_DATA_BYTES[20]);
eProfile.SetValue("BTS1", "Byte_5_LogicFunction",
BTS1_DATA_BYTES[21]);
eProfile.SetValue("BTS1", "Byte_6_LogicFunction",
BTS1_DATA_BYTES[22]);
eProfile.SetValue("BTS1", "Byte_7_LogicFunction",
BTS1_DATA_BYTES[23]);
#endregion

//custom option save


for (int index = 0; index < 2; index++)
{
var customChkName0 = $"{customBtsPref}{index}{customPost}";
var customCheckBox0 =
(CheckBox)this.FindName(customChkName0);

eProfile.SetValue($"BTS{index}", "Custom",
customCheckBox0.IsChecked);
}

//CAN Message Bits


#region CM Position1
eProfile.SetValue("CM_Position_1", "Source",
CANBUS_MSG_SOURCE[2]);
eProfile.SetValue("CM_Position_1", "Message_ID",
CANBUS_MSG_IDS[2]);
var selectedFormat2 = radCMBit0MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_1", "Format", selectedFormat2);
eProfile.SetValue("CM_Position_1", "Byte_0_Mask",
CMBIT0_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_1", "Byte_1_Mask",
CMBIT0_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_1", "Byte_2_Mask",
CMBIT0_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_1", "Byte_3_Mask",
CMBIT0_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_1", "Byte_4_Mask",
CMBIT0_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_1", "Byte_5_Mask",
CMBIT0_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_1", "Byte_6_Mask",
CMBIT0_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_1", "Byte_7_Mask",
CMBIT0_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_1", "Byte_0_Trigger",
CMBIT0_DATA_BYTES[8]);
eProfile.SetValue("CM_Position_1", "Byte_1_Trigger",
CMBIT0_DATA_BYTES[9]);
eProfile.SetValue("CM_Position_1", "Byte_2_Trigger",
CMBIT0_DATA_BYTES[10]);
eProfile.SetValue("CM_Position_1", "Byte_3_Trigger",
CMBIT0_DATA_BYTES[11]);
eProfile.SetValue("CM_Position_1", "Byte_4_Trigger",
CMBIT0_DATA_BYTES[12]);
eProfile.SetValue("CM_Position_1", "Byte_5_Trigger",
CMBIT0_DATA_BYTES[13]);
eProfile.SetValue("CM_Position_1", "Byte_6_Trigger",
CMBIT0_DATA_BYTES[14]);
eProfile.SetValue("CM_Position_1", "Byte_7_Trigger",
CMBIT0_DATA_BYTES[15]);

//Logical Functions
eProfile.SetValue("CM_Position_1", "Byte_0_LogicFunction",
CMBIT0_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_1", "Byte_1_LogicFunction",
CMBIT0_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_1", "Byte_2_LogicFunction",
CMBIT0_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_1", "Byte_3_LogicFunction",
CMBIT0_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_1", "Byte_4_LogicFunction",
CMBIT0_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_1", "Byte_5_LogicFunction",
CMBIT0_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_1", "Byte_6_LogicFunction",
CMBIT0_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_1", "Byte_7_LogicFunction",
CMBIT0_DATA_BYTES[23]);
#endregion

#region CM Position 2
eProfile.SetValue("CM_Position_2", "Source",
CANBUS_MSG_SOURCE[3]);
eProfile.SetValue("CM_Position_2", "Message_ID",
CANBUS_MSG_IDS[3]);
var selectedFormat3 = radCMBit1MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_2", "Format", selectedFormat3);
eProfile.SetValue("CM_Position_2", "Byte_0_Mask",
CMBIT1_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_2", "Byte_0_Trigger",
CMBIT1_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_1_Mask",
CMBIT1_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_2", "Byte_1_Trigger",
CMBIT1_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_2_Mask",
CMBIT1_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_2", "Byte_2_Trigger",
CMBIT1_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_3_Mask",
CMBIT1_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_2", "Byte_3_Trigger",
CMBIT1_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_4_Mask",
CMBIT1_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_2", "Byte_4_Trigger",
CMBIT1_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_5_Mask",
CMBIT1_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_2", "Byte_5_Trigger",
CMBIT1_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_6_Mask",
CMBIT1_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_2", "Byte_6_Trigger",
CMBIT1_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_2", "Byte_7_Mask",
CMBIT1_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_2", "Byte_7_Trigger",
CMBIT1_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_2", "Byte_0_LogicFunction",
CMBIT1_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_2", "Byte_1_LogicFunction",
CMBIT1_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_2", "Byte_2_LogicFunction",
CMBIT1_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_2", "Byte_3_LogicFunction",
CMBIT1_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_2", "Byte_4_LogicFunction",
CMBIT1_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_2", "Byte_5_LogicFunction",
CMBIT1_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_2", "Byte_6_LogicFunction",
CMBIT1_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_2", "Byte_7_LogicFunction",
CMBIT1_DATA_BYTES[23]);
#endregion

#region CM Position 3
eProfile.SetValue("CM_Position_3", "Source",
CANBUS_MSG_SOURCE[4]);
eProfile.SetValue("CM_Position_3", "Message_ID",
CANBUS_MSG_IDS[4]);
var selectedFormat4 = radCMBit2MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_3", "Format", selectedFormat4);
eProfile.SetValue("CM_Position_3", "Byte_0_Mask",
CMBIT2_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_3", "Byte_0_Trigger",
CMBIT2_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_1_Mask",
CMBIT2_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_3", "Byte_1_Trigger",
CMBIT2_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_2_Mask",
CMBIT2_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_3", "Byte_2_Trigger",
CMBIT2_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_3_Mask",
CMBIT2_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_3", "Byte_3_Trigger",
CMBIT2_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_4_Mask",
CMBIT2_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_3", "Byte_4_Trigger",
CMBIT2_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_5_Mask",
CMBIT2_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_3", "Byte_5_Trigger",
CMBIT2_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_6_Mask",
CMBIT2_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_3", "Byte_6_Trigger",
CMBIT2_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_3", "Byte_7_Mask",
CMBIT2_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_3", "Byte_7_Trigger",
CMBIT2_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_3", "Byte_0_LogicFunction",
CMBIT2_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_3", "Byte_1_LogicFunction",
CMBIT2_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_3", "Byte_2_LogicFunction",
CMBIT2_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_3", "Byte_3_LogicFunction",
CMBIT2_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_3", "Byte_4_LogicFunction",
CMBIT2_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_3", "Byte_5_LogicFunction",
CMBIT2_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_3", "Byte_6_LogicFunction",
CMBIT2_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_3", "Byte_7_LogicFunction",
CMBIT2_DATA_BYTES[23]);
#endregion

#region CM Position 4
eProfile.SetValue("CM_Position_4", "Source",
CANBUS_MSG_SOURCE[5]);
eProfile.SetValue("CM_Position_4", "Message_ID",
CANBUS_MSG_IDS[5]);
var selectedFormat5 = radCMBit3MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_4", "Format", selectedFormat5);
eProfile.SetValue("CM_Position_4", "Byte_0_Mask",
CMBIT3_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_4", "Byte_0_Trigger",
CMBIT3_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_1_Mask",
CMBIT3_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_4", "Byte_1_Trigger",
CMBIT3_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_2_Mask",
CMBIT3_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_4", "Byte_2_Trigger",
CMBIT3_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_3_Mask",
CMBIT3_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_4", "Byte_3_Trigger",
CMBIT3_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_4_Mask",
CMBIT3_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_4", "Byte_4_Trigger",
CMBIT3_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_5_Mask",
CMBIT3_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_4", "Byte_5_Trigger",
CMBIT3_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_6_Mask",
CMBIT3_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_4", "Byte_6_Trigger",
CMBIT3_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_4", "Byte_7_Mask",
CMBIT3_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_4", "Byte_7_Trigger",
CMBIT3_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_4", "Byte_0_LogicFunction",
CMBIT3_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_4", "Byte_1_LogicFunction",
CMBIT3_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_4", "Byte_2_LogicFunction",
CMBIT3_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_4", "Byte_3_LogicFunction",
CMBIT3_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_4", "Byte_4_LogicFunction",
CMBIT3_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_4", "Byte_5_LogicFunction",
CMBIT3_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_4", "Byte_6_LogicFunction",
CMBIT3_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_4", "Byte_7_LogicFunction",
CMBIT3_DATA_BYTES[23]);
#endregion

#region CM Position 5
eProfile.SetValue("CM_Position_5", "Source",
CANBUS_MSG_SOURCE[6]);
eProfile.SetValue("CM_Position_5", "Message_ID",
CANBUS_MSG_IDS[6]);
var selectedFormat6 = radCMBit4MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_5", "Format", selectedFormat6);
eProfile.SetValue("CM_Position_5", "Byte_0_Mask",
CMBIT4_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_5", "Byte_0_Trigger",
CMBIT4_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_1_Mask",
CMBIT4_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_5", "Byte_1_Trigger",
CMBIT4_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_2_Mask",
CMBIT4_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_5", "Byte_2_Trigger",
CMBIT4_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_3_Mask",
CMBIT4_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_5", "Byte_3_Trigger",
CMBIT4_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_4_Mask",
CMBIT4_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_5", "Byte_4_Trigger",
CMBIT4_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_5_Mask",
CMBIT4_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_5", "Byte_5_Trigger",
CMBIT4_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_6_Mask",
CMBIT4_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_5", "Byte_6_Trigger",
CMBIT4_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_5", "Byte_7_Mask",
CMBIT4_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_5", "Byte_7_Trigger",
CMBIT4_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_5", "Byte_0_LogicFunction",
CMBIT4_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_5", "Byte_1_LogicFunction",
CMBIT4_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_5", "Byte_2_LogicFunction",
CMBIT4_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_5", "Byte_3_LogicFunction",
CMBIT4_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_5", "Byte_4_LogicFunction",
CMBIT4_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_5", "Byte_5_LogicFunction",
CMBIT4_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_5", "Byte_6_LogicFunction",
CMBIT4_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_5", "Byte_7_LogicFunction",
CMBIT4_DATA_BYTES[23]);
#endregion

#region CM Position 6
eProfile.SetValue("CM_Position_6", "Source",
CANBUS_MSG_SOURCE[7]);
eProfile.SetValue("CM_Position_6", "Message_ID",
CANBUS_MSG_IDS[7]);
var selectedFormat7 = radCMBit5MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_6", "Format", selectedFormat7);
eProfile.SetValue("CM_Position_6", "Byte_0_Mask",
CMBIT5_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_6", "Byte_0_Trigger",
CMBIT5_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_1_Mask",
CMBIT5_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_6", "Byte_1_Trigger",
CMBIT5_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_2_Mask",
CMBIT5_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_6", "Byte_2_Trigger",
CMBIT5_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_3_Mask",
CMBIT5_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_6", "Byte_3_Trigger",
CMBIT5_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_4_Mask",
CMBIT5_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_6", "Byte_4_Trigger",
CMBIT5_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_5_Mask",
CMBIT5_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_6", "Byte_5_Trigger",
CMBIT5_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_6_Mask",
CMBIT5_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_6", "Byte_6_Trigger",
CMBIT5_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_6", "Byte_7_Mask",
CMBIT5_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_6", "Byte_7_Trigger",
CMBIT5_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_6", "Byte_0_LogicFunction",
CMBIT5_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_6", "Byte_1_LogicFunction",
CMBIT5_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_6", "Byte_2_LogicFunction",
CMBIT5_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_6", "Byte_3_LogicFunction",
CMBIT5_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_6", "Byte_4_LogicFunction",
CMBIT5_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_6", "Byte_5_LogicFunction",
CMBIT5_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_6", "Byte_6_LogicFunction",
CMBIT5_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_6", "Byte_7_LogicFunction",
CMBIT5_DATA_BYTES[23]);
#endregion

#region CM Position 7
eProfile.SetValue("CM_Position_7", "Source",
CANBUS_MSG_SOURCE[8]);
eProfile.SetValue("CM_Position_7", "Message_ID",
CANBUS_MSG_IDS[8]);
var selectedFormat8 = radCMBit6MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_7", "Format", selectedFormat8);
eProfile.SetValue("CM_Position_7", "Byte_0_Mask",
CMBIT6_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_7", "Byte_0_Trigger",
CMBIT6_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_1_Mask",
CMBIT6_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_7", "Byte_1_Trigger",
CMBIT6_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_2_Mask",
CMBIT6_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_7", "Byte_2_Trigger",
CMBIT6_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_3_Mask",
CMBIT6_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_7", "Byte_3_Trigger",
CMBIT6_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_4_Mask",
CMBIT6_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_7", "Byte_4_Trigger",
CMBIT6_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_5_Mask",
CMBIT6_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_7", "Byte_5_Trigger",
CMBIT6_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_6_Mask",
CMBIT6_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_7", "Byte_6_Trigger",
CMBIT6_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_7", "Byte_7_Mask",
CMBIT6_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_7", "Byte_7_Trigger",
CMBIT6_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_7", "Byte_0_LogicFunction",
CMBIT6_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_7", "Byte_1_LogicFunction",
CMBIT6_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_7", "Byte_2_LogicFunction",
CMBIT6_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_7", "Byte_3_LogicFunction",
CMBIT6_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_7", "Byte_4_LogicFunction",
CMBIT6_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_7", "Byte_5_LogicFunction",
CMBIT6_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_7", "Byte_6_LogicFunction",
CMBIT6_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_7", "Byte_7_LogicFunction",
CMBIT6_DATA_BYTES[23]);
#endregion

#region CM Position 8
eProfile.SetValue("CM_Position_8", "Source",
CANBUS_MSG_SOURCE[9]);
eProfile.SetValue("CM_Position_8", "Message_ID",
CANBUS_MSG_IDS[9]);
var selectedFormat9 = radCMBit7MsgTyS.IsChecked == true ? "STD"
: "EXT";
eProfile.SetValue("CM_Position_8", "Format", selectedFormat9);
eProfile.SetValue("CM_Position_8", "Byte_0_Mask",
CMBIT7_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_8", "Byte_0_Trigger",
CMBIT7_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_1_Mask",
CMBIT7_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_8", "Byte_1_Trigger",
CMBIT7_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_2_Mask",
CMBIT7_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_8", "Byte_2_Trigger",
CMBIT7_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_3_Mask",
CMBIT7_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_8", "Byte_3_Trigger",
CMBIT7_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_4_Mask",
CMBIT7_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_8", "Byte_4_Trigger",
CMBIT7_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_5_Mask",
CMBIT7_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_8", "Byte_5_Trigger",
CMBIT7_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_6_Mask",
CMBIT7_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_8", "Byte_6_Trigger",
CMBIT7_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_8", "Byte_7_Mask",
CMBIT7_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_8", "Byte_7_Trigger",
CMBIT7_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_8", "Byte_0_LogicFunction",
CMBIT7_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_8", "Byte_1_LogicFunction",
CMBIT7_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_8", "Byte_2_LogicFunction",
CMBIT7_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_8", "Byte_3_LogicFunction",
CMBIT7_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_8", "Byte_4_LogicFunction",
CMBIT7_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_8", "Byte_5_LogicFunction",
CMBIT7_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_8", "Byte_6_LogicFunction",
CMBIT7_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_8", "Byte_7_LogicFunction",
CMBIT7_DATA_BYTES[23]);
#endregion

await Task.Delay(100);
profileController.SetProgress(50);

#region CM Position 9
eProfile.SetValue("CM_Position_9", "Source",
CANBUS_MSG_SOURCE[10]);
eProfile.SetValue("CM_Position_9", "Message_ID",
CANBUS_MSG_IDS[10]);
var selectedFormat10 = radCMBit8MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_9", "Format", selectedFormat10);
eProfile.SetValue("CM_Position_9", "Byte_0_Mask",
CMBIT8_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_9", "Byte_0_Trigger",
CMBIT8_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_1_Mask",
CMBIT8_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_9", "Byte_1_Trigger",
CMBIT8_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_2_Mask",
CMBIT8_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_9", "Byte_2_Trigger",
CMBIT8_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_3_Mask",
CMBIT8_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_9", "Byte_3_Trigger",
CMBIT8_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_4_Mask",
CMBIT8_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_9", "Byte_4_Trigger",
CMBIT8_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_5_Mask",
CMBIT8_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_9", "Byte_5_Trigger",
CMBIT8_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_6_Mask",
CMBIT8_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_9", "Byte_6_Trigger",
CMBIT8_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_9", "Byte_7_Mask",
CMBIT8_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_9", "Byte_7_Trigger",
CMBIT8_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_9", "Byte_0_LogicFunction",
CMBIT8_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_9", "Byte_1_LogicFunction",
CMBIT8_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_9", "Byte_2_LogicFunction",
CMBIT8_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_9", "Byte_3_LogicFunction",
CMBIT8_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_9", "Byte_4_LogicFunction",
CMBIT8_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_9", "Byte_5_LogicFunction",
CMBIT8_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_9", "Byte_6_LogicFunction",
CMBIT8_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_9", "Byte_7_LogicFunction",
CMBIT8_DATA_BYTES[23]);
#endregion

#region CM Position 10
eProfile.SetValue("CM_Position_10", "Source",
CANBUS_MSG_SOURCE[11]);
eProfile.SetValue("CM_Position_10", "Message_ID",
CANBUS_MSG_IDS[11]);
var selectedFormat11 = radCMBit9MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_10", "Format",
selectedFormat11);
eProfile.SetValue("CM_Position_10", "Byte_0_Mask",
CMBIT9_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_10", "Byte_0_Trigger",
CMBIT9_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_1_Mask",
CMBIT9_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_10", "Byte_1_Trigger",
CMBIT9_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_2_Mask",
CMBIT9_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_10", "Byte_2_Trigger",
CMBIT9_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_3_Mask",
CMBIT9_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_10", "Byte_3_Trigger",
CMBIT9_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_4_Mask",
CMBIT9_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_10", "Byte_4_Trigger",
CMBIT9_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_5_Mask",
CMBIT9_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_10", "Byte_5_Trigger",
CMBIT9_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_6_Mask",
CMBIT9_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_10", "Byte_6_Trigger",
CMBIT9_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_10", "Byte_7_Mask",
CMBIT9_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_10", "Byte_7_Trigger",
CMBIT9_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_10", "Byte_0_LogicFunction",
CMBIT9_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_10", "Byte_1_LogicFunction",
CMBIT9_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_10", "Byte_2_LogicFunction",
CMBIT9_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_10", "Byte_3_LogicFunction",
CMBIT9_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_10", "Byte_4_LogicFunction",
CMBIT9_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_10", "Byte_5_LogicFunction",
CMBIT9_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_10", "Byte_6_LogicFunction",
CMBIT9_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_10", "Byte_7_LogicFunction",
CMBIT9_DATA_BYTES[23]);
#endregion

#region CM Position 11
eProfile.SetValue("CM_Position_11", "Source",
CANBUS_MSG_SOURCE[12]);
eProfile.SetValue("CM_Position_11", "Message_ID",
CANBUS_MSG_IDS[12]);
var selectedFormat12 = radCMBit10MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_11", "Format",
selectedFormat12);
eProfile.SetValue("CM_Position_11", "Byte_0_Mask",
CMBIT10_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_11", "Byte_0_Trigger",
CMBIT10_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_1_Mask",
CMBIT10_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_11", "Byte_1_Trigger",
CMBIT10_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_2_Mask",
CMBIT10_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_11", "Byte_2_Trigger",
CMBIT10_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_3_Mask",
CMBIT10_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_11", "Byte_3_Trigger",
CMBIT10_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_4_Mask",
CMBIT10_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_11", "Byte_4_Trigger",
CMBIT10_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_5_Mask",
CMBIT10_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_11", "Byte_5_Trigger",
CMBIT10_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_6_Mask",
CMBIT10_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_11", "Byte_6_Trigger",
CMBIT10_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_11", "Byte_7_Mask",
CMBIT10_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_11", "Byte_7_Trigger",
CMBIT10_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_11", "Byte_0_LogicFunction",
CMBIT10_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_11", "Byte_1_LogicFunction",
CMBIT10_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_11", "Byte_2_LogicFunction",
CMBIT10_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_11", "Byte_3_LogicFunction",
CMBIT10_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_11", "Byte_4_LogicFunction",
CMBIT10_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_11", "Byte_5_LogicFunction",
CMBIT10_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_11", "Byte_6_LogicFunction",
CMBIT10_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_11", "Byte_7_LogicFunction",
CMBIT10_DATA_BYTES[23]);
#endregion

#region CM Position 12
eProfile.SetValue("CM_Position_12", "Source",
CANBUS_MSG_SOURCE[13]);
eProfile.SetValue("CM_Position_12", "Message_ID",
CANBUS_MSG_IDS[13]);
eProfile.SetValue("CM_Position_12", "Source",
CANBUS_MSG_SOURCE[13]);
eProfile.SetValue("CM_Position_12", "Message_ID",
CANBUS_MSG_IDS[13]);
var selectedFormat13 = radCMBit11MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_12", "Format",
selectedFormat13);
eProfile.SetValue("CM_Position_12", "Byte_0_Mask",
CMBIT11_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_12", "Byte_0_Trigger",
CMBIT11_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_1_Mask",
CMBIT11_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_12", "Byte_1_Trigger",
CMBIT11_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_2_Mask",
CMBIT11_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_12", "Byte_2_Trigger",
CMBIT11_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_3_Mask",
CMBIT11_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_12", "Byte_3_Trigger",
CMBIT11_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_4_Mask",
CMBIT11_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_12", "Byte_4_Trigger",
CMBIT11_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_5_Mask",
CMBIT11_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_12", "Byte_5_Trigger",
CMBIT11_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_6_Mask",
CMBIT11_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_12", "Byte_6_Trigger",
CMBIT11_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_12", "Byte_7_Mask",
CMBIT11_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_12", "Byte_7_Trigger",
CMBIT11_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_12", "Byte_0_LogicFunction",
CMBIT11_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_12", "Byte_1_LogicFunction",
CMBIT11_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_12", "Byte_2_LogicFunction",
CMBIT11_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_12", "Byte_3_LogicFunction",
CMBIT11_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_12", "Byte_4_LogicFunction",
CMBIT11_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_12", "Byte_5_LogicFunction",
CMBIT11_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_12", "Byte_6_LogicFunction",
CMBIT11_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_12", "Byte_7_LogicFunction",
CMBIT11_DATA_BYTES[23]);
#endregion

#region CM Position 13
eProfile.SetValue("CM_Position_13", "Source",
CANBUS_MSG_SOURCE[14]);
eProfile.SetValue("CM_Position_13", "Message_ID",
CANBUS_MSG_IDS[14]);
var selectedFormat14 = radCMBit12MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_13", "Format",
selectedFormat14);
eProfile.SetValue("CM_Position_13", "Byte_0_Mask",
CMBIT12_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_13", "Byte_0_Trigger",
CMBIT12_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_1_Mask",
CMBIT12_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_13", "Byte_1_Trigger",
CMBIT12_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_2_Mask",
CMBIT12_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_13", "Byte_2_Trigger",
CMBIT12_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_3_Mask",
CMBIT12_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_13", "Byte_3_Trigger",
CMBIT12_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_4_Mask",
CMBIT12_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_13", "Byte_4_Trigger",
CMBIT12_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_5_Mask",
CMBIT12_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_13", "Byte_5_Trigger",
CMBIT12_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_6_Mask",
CMBIT12_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_13", "Byte_6_Trigger",
CMBIT12_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_13", "Byte_7_Mask",
CMBIT12_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_13", "Byte_7_Trigger",
CMBIT12_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_13", "Byte_0_LogicFunction",
CMBIT12_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_13", "Byte_1_LogicFunction",
CMBIT12_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_13", "Byte_2_LogicFunction",
CMBIT12_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_13", "Byte_3_LogicFunction",
CMBIT12_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_13", "Byte_4_LogicFunction",
CMBIT12_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_13", "Byte_5_LogicFunction",
CMBIT12_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_13", "Byte_6_LogicFunction",
CMBIT12_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_13", "Byte_7_LogicFunction",
CMBIT12_DATA_BYTES[23]);
#endregion

await Task.Delay(100);
profileController.SetProgress(80);

#region CM Position 14
eProfile.SetValue("CM_Position_14", "Source",
CANBUS_MSG_SOURCE[15]);
eProfile.SetValue("CM_Position_14", "Message_ID",
CANBUS_MSG_IDS[15]);
var selectedFormat15 = radCMBit13MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_14", "Format",
selectedFormat15);
eProfile.SetValue("CM_Position_14", "Byte_0_Mask",
CMBIT13_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_14", "Byte_0_Trigger",
CMBIT13_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_1_Mask",
CMBIT13_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_14", "Byte_1_Trigger",
CMBIT13_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_2_Mask",
CMBIT13_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_14", "Byte_2_Trigger",
CMBIT13_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_3_Mask",
CMBIT13_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_14", "Byte_3_Trigger",
CMBIT13_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_4_Mask",
CMBIT13_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_14", "Byte_4_Trigger",
CMBIT13_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_5_Mask",
CMBIT13_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_14", "Byte_5_Trigger",
CMBIT13_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_6_Mask",
CMBIT13_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_14", "Byte_6_Trigger",
CMBIT13_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_14", "Byte_7_Mask",
CMBIT13_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_14", "Byte_7_Trigger",
CMBIT13_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_14", "Byte_0_LogicFunction",
CMBIT13_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_14", "Byte_1_LogicFunction",
CMBIT13_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_14", "Byte_2_LogicFunction",
CMBIT13_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_14", "Byte_3_LogicFunction",
CMBIT13_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_14", "Byte_4_LogicFunction",
CMBIT13_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_14", "Byte_5_LogicFunction",
CMBIT13_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_14", "Byte_6_LogicFunction",
CMBIT13_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_14", "Byte_7_LogicFunction",
CMBIT13_DATA_BYTES[23]);
#endregion

#region CM Position 15
eProfile.SetValue("CM_Position_15", "Source",
CANBUS_MSG_SOURCE[16]);
eProfile.SetValue("CM_Position_15", "Message_ID",
CANBUS_MSG_IDS[16]);
var selectedFormat16 = radCMBit14MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_15", "Format",
selectedFormat16);
eProfile.SetValue("CM_Position_15", "Byte_0_Mask",
CMBIT14_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_15", "Byte_0_Trigger",
CMBIT14_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_1_Mask",
CMBIT14_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_15", "Byte_1_Trigger",
CMBIT14_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_2_Mask",
CMBIT14_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_15", "Byte_2_Trigger",
CMBIT14_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_3_Mask",
CMBIT14_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_15", "Byte_3_Trigger",
CMBIT14_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_4_Mask",
CMBIT14_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_15", "Byte_4_Trigger",
CMBIT14_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_5_Mask",
CMBIT14_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_15", "Byte_5_Trigger",
CMBIT14_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_6_Mask",
CMBIT14_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_15", "Byte_6_Trigger",
CMBIT14_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_15", "Byte_7_Mask",
CMBIT14_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_15", "Byte_7_Trigger",
CMBIT14_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_15", "Byte_0_LogicFunction",
CMBIT14_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_15", "Byte_1_LogicFunction",
CMBIT14_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_15", "Byte_2_LogicFunction",
CMBIT14_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_15", "Byte_3_LogicFunction",
CMBIT14_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_15", "Byte_4_LogicFunction",
CMBIT14_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_15", "Byte_5_LogicFunction",
CMBIT14_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_15", "Byte_6_LogicFunction",
CMBIT14_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_15", "Byte_7_LogicFunction",
CMBIT14_DATA_BYTES[23]);
#endregion
#region CM Position 16
eProfile.SetValue("CM_Position_16", "Source",
CANBUS_MSG_SOURCE[17]);
eProfile.SetValue("CM_Position_16", "Message_ID",
CANBUS_MSG_IDS[17]);
var selectedFormat17 = radCMBit15MsgTyS.IsChecked == true ?
"STD" : "EXT";
eProfile.SetValue("CM_Position_16", "Format",
selectedFormat17);
eProfile.SetValue("CM_Position_16", "Byte_0_Mask",
CMBIT15_DATA_BYTES[0]);
eProfile.SetValue("CM_Position_16", "Byte_0_Trigger",
CMBIT15_DATA_BYTES[0 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_1_Mask",
CMBIT15_DATA_BYTES[1]);
eProfile.SetValue("CM_Position_16", "Byte_1_Trigger",
CMBIT15_DATA_BYTES[1 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_2_Mask",
CMBIT15_DATA_BYTES[2]);
eProfile.SetValue("CM_Position_16", "Byte_2_Trigger",
CMBIT15_DATA_BYTES[2 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_3_Mask",
CMBIT15_DATA_BYTES[3]);
eProfile.SetValue("CM_Position_16", "Byte_3_Trigger",
CMBIT15_DATA_BYTES[3 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_4_Mask",
CMBIT15_DATA_BYTES[4]);
eProfile.SetValue("CM_Position_16", "Byte_4_Trigger",
CMBIT15_DATA_BYTES[4 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_5_Mask",
CMBIT15_DATA_BYTES[5]);
eProfile.SetValue("CM_Position_16", "Byte_5_Trigger",
CMBIT15_DATA_BYTES[5 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_6_Mask",
CMBIT15_DATA_BYTES[6]);
eProfile.SetValue("CM_Position_16", "Byte_6_Trigger",
CMBIT15_DATA_BYTES[6 + 8]);
eProfile.SetValue("CM_Position_16", "Byte_7_Mask",
CMBIT15_DATA_BYTES[7]);
eProfile.SetValue("CM_Position_16", "Byte_7_Trigger",
CMBIT15_DATA_BYTES[7 + 8]);

//Logical Functions
eProfile.SetValue("CM_Position_16", "Byte_0_LogicFunction",
CMBIT15_DATA_BYTES[16]);
eProfile.SetValue("CM_Position_16", "Byte_1_LogicFunction",
CMBIT15_DATA_BYTES[17]);
eProfile.SetValue("CM_Position_16", "Byte_2_LogicFunction",
CMBIT15_DATA_BYTES[18]);
eProfile.SetValue("CM_Position_16", "Byte_3_LogicFunction",
CMBIT15_DATA_BYTES[19]);
eProfile.SetValue("CM_Position_16", "Byte_4_LogicFunction",
CMBIT15_DATA_BYTES[20]);
eProfile.SetValue("CM_Position_16", "Byte_5_LogicFunction",
CMBIT15_DATA_BYTES[21]);
eProfile.SetValue("CM_Position_16", "Byte_6_LogicFunction",
CMBIT15_DATA_BYTES[22]);
eProfile.SetValue("CM_Position_16", "Byte_7_LogicFunction",
CMBIT15_DATA_BYTES[23]);
#endregion

//custom option save


var customIndex = 0;
for (int tab = 1; tab < 17; tab++)
{
var customChkName = $"{customPref}{customIndex}
{customPost}";
var customCheckBox =
(CheckBox)this.FindName(customChkName);

eProfile.SetValue($"CM_Position_{tab}", "Custom",
customCheckBox.IsChecked);
customIndex++;
}

//Vehicle Settings
//var carMake = comboCar.Items;
//var allItems = comboCar.Items.SourceCollection;
//var carList = comboCar.Items.Cast<GetMakeNames>().ToList();
//var carMAkeT = carList.FindIndex(o => o.make == "Honda");
CarData carData = await SessionHelper.CheckLocalCarData();
if (carData != null)
{
//eProfile.SetValue("Vehicle_Settings", "tester", carData);

//var selectedCarMake =
(GetMakeNames)comboCar.Items.CurrentItem;
//var selectedMake = selectedCarMake.make;
var selectedMake = (GetMakeNames)comboCar.SelectedValue;
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarMakeId, selectedMake.id);
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarMakeName, selectedMake.make);

var selectedCarModel =
(GetModelNames)comboCarModel.SelectedValue;
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarModelId, selectedCarModel.id);
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarModelName, selectedCarModel.model);

var selectedYear = comboYear.SelectedValue;


eProfile.SetValue(Constants.VehicleSettings,
Constants.CarYear, selectedYear);

var selectedWheelDrive =
(WheelDrive)comboWheelDrive.SelectedValue;
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarWheelId, selectedWheelDrive?.Id);
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarWheelName, selectedWheelDrive?.Name);

var selectedGearBox = (GearBox)comboGearBox.SelectedValue;


eProfile.SetValue(Constants.VehicleSettings,
Constants.CarGearBoxId, selectedGearBox?.Id);
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarGearBoxName, selectedGearBox?.Name);
var selectedEngineType =
(EngineType)comboEngineType.SelectedValue;
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarEngineTypeId, selectedEngineType?.Id);
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarEngineTypeName, selectedEngineType?.Name);

var registration = textRegistration.Text;


if (!string.IsNullOrEmpty(registration))
eProfile.SetValue(Constants.VehicleSettings,
Constants.CarRegistrationNumber, registration);

//Complete the saving profile progress


profileController.SetProgress(100);
await Task.Delay(500);
await profileController.CloseAsync();
profileController = null;

}
catch (Exception ex)
{
//Stop the profile await controller if this is still visible
if (profileController != null)
{
await profileController.CloseAsync();
profileController = null;
}

await this.ShowMessageAsync("Exception Occured", ex.Message);


}

}
}

private async void Button_FetchProfile_Clicked(object sender,


RoutedEventArgs e)
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "CAN Master Profiles|*.cmf|All files|*.*";

if ((openDialog.ShowDialog() == true))
{
eProfile.Name = openDialog.FileName;

//start setup for profile controller


var dialogSettings = new MetroDialogSettings()
{
AnimateShow = false,
AnimateHide = false
};

//Prepare Progress Dialog


var msgTitle = "Reading Profile";
var msgContent = "Please wait while the settings from the user
profile are being fetched.";
profileController = await this.ShowProgressAsync(msgTitle,
msgContent, settings: dialogSettings);
profileController.SetIndeterminate();

profileController.Minimum = 0;
profileController.Maximum = 100;

try
{
isFetchingProfile = true;
int ver = eProfile.GetValue("CAN_Master_Profile", "GUI_VER", -
1);
var firmware = eProfile.GetValue("CAN_Master_Profile",
"FIRMWARE");

var mySettings = new MetroDialogSettings()


{
AffirmativeButtonText = "Yes",
NegativeButtonText = "No",
};

var baud0 = eProfile.GetValue("General_Settings",


"Can_0_Baud");
var canBaud0 =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_0_Baud"));
var canOP0 = eProfile.GetValue("General_Settings",
"Can_0_OutputPower");
var baud1 = eProfile.GetValue("General_Settings",
"Can_1_Baud");
var canBaud1 =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_1_Baud"));

var powerToggleBtn =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_0_OutputPower"));
var can0PowerDownCheck =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_0_AutoPowerDown"));
var can0PowerTimer =
Convert_ObjtoByte(eProfile.GetValue("General_Settings",
"Can_0_AutoPowerDown_Timer"));
var can0WakeUpDRB =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_0_WakeUp_DRB"));
var can0WakeUpDRBonRegMsg =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_0_WakeUp_DRB_onMsg"));

var can1AcceptSleep =
Convert_ObjtoByte(eProfile.GetValue("General_Settings",
"Can_1_Accept_Sleep_Call"));
var can1AcceptWakeUp =
Convert_ObjtoByte(eProfile.GetValue("General_Settings",
"Can_1_Accept_WakeUp_Call"));
var can1SendSleep =
Convert_ObjtoByte(eProfile.GetValue("General_Settings", "Can_1_Send_Sleep_Call"));
cmbBaudCAN0.SelectedIndex = canBaud0;
cmbBaudCAN1.SelectedIndex = canBaud1;

tglEnCanvPwr.IsChecked = powerToggleBtn == 1;
cbCMCanvPwrDown.IsChecked = can0PowerDownCheck == 1;
nudPwrInactTimer.Value = cbCMCanvPwrDown.IsChecked == true ?
can0PowerTimer : 0;
cbCMCanvWakeupDRB.IsChecked = can0WakeUpDRB == 1;
cbCMCanvWakeupOnRegMsg.IsChecked = can0WakeUpDRBonRegMsg == 1;

cbDRBAcceptSleepReq.IsChecked = can1AcceptSleep == 1;
cbDRBAcceptWakepReq.IsChecked = can1AcceptWakeUp == 1;
cbDRBSendSleepReq.IsChecked = can1SendSleep == 1;

int tabIndex = 0;
var rbPref = "radBts";
var rbCMPref = "radCMBit";
var sepratorKey = "B";
var sepratorKeyIgnore = "I";

var customBtsPref = "cbBts";


var customPref = "cbCM";
var customPost = "Msg_custom";

var isAlreadyExist = false;


//updating all source and ids
for (int index = 0; index < 18; index++)
{
if (CANBUS_MSG_IDS[index] > 0)
{
isAlreadyExist = true;
break;
}
}

MessageDialogResult result = new MessageDialogResult();


var dialogSetting = new MetroDialogSettings()
{
ColorScheme = MetroDialogColorScheme.Inverted,
};

if (isAlreadyExist)
{
result = await MetroMain.ShowMessageAsync("Do you want to
fetch profile?", "It is going to be reset",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSetting);
}

if (result == MessageDialogResult.Affirmative || !
isAlreadyExist)
{
await Task.Delay(100);
profileController.SetProgress(10);

//updating all source and ids


for (int index = 0; index < 18; index++)
{
CANBUS_MSG_SOURCE[index] = 0;
CANBUS_MSG_IDS[index] = 0;
}

#region BTS0

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
BTS0_DATA_BYTES[i] = (byte)0;
BTS0_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

CANBUS_MSG_SOURCE[0] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Source"));
CANBUS_MSG_IDS[0] =
Convert_ObjtoUInt32(eProfile.GetValue("BTS0", "Message_ID"));

var format0 = eProfile.GetValue("BTS0",


"Format").ToString();
if (format0 == "STD")
{
if (radBts0MsgTyS.IsChecked == false)
radBts0MsgTyS.IsChecked = true;
}
else
{
if (radBts0MsgTyE.IsChecked == false)
radBts0MsgTyE.IsChecked = true;
}

BTS0_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_0_Mask"));
BTS0_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_1_Mask"));
BTS0_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_2_Mask"));
BTS0_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_3_Mask"));
BTS0_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_4_Mask"));
BTS0_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_5_Mask"));
BTS0_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_6_Mask"));
BTS0_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_7_Mask"));
BTS0_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_0_Trigger"));
BTS0_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_1_Trigger"));
BTS0_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_2_Trigger"));
BTS0_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_3_Trigger"));
BTS0_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_4_Trigger"));
BTS0_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_5_Trigger"));
BTS0_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_6_Trigger"));
BTS0_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_7_Trigger"));

//Get Logical Function Values


BTS0_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_0_LogicFunction"));
BTS0_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_1_LogicFunction"));
BTS0_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_2_LogicFunction"));
BTS0_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_3_LogicFunction"));
BTS0_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_4_LogicFunction"));
BTS0_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_5_LogicFunction"));
BTS0_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_6_LogicFunction"));
BTS0_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("BTS0", "Byte_7_LogicFunction"));
var listofByte0 = ListOfByteNumber(BTS0_DATA_BYTES);

foreach (var byteNumber in listofByte0)


{
var selectedRadioButton = $"{rbPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}
#endregion

#region BTS1

tabIndex = 1;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
BTS1_DATA_BYTES[i] = (byte)0;
BTS1_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

CANBUS_MSG_SOURCE[1] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Source"));
CANBUS_MSG_IDS[1] =
Convert_ObjtoUInt32(eProfile.GetValue("BTS1", "Message_ID"));

var format1 = eProfile.GetValue("BTS1",


"Format").ToString();
if (format1 == "STD")
{
if (radBts1MsgTyS.IsChecked == false)
radBts1MsgTyS.IsChecked = true;
}
else
{
if (radBts1MsgTyE.IsChecked == false)
radBts1MsgTyE.IsChecked = true;
}

BTS1_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_0_Mask"));
BTS1_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_1_Mask"));
BTS1_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_2_Mask"));
BTS1_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_3_Mask"));
BTS1_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_4_Mask"));
BTS1_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_5_Mask"));
BTS1_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_6_Mask"));
BTS1_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_7_Mask"));
BTS1_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_0_Trigger"));
BTS1_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_1_Trigger"));
BTS1_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_2_Trigger"));
BTS1_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_3_Trigger"));
BTS1_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_4_Trigger"));
BTS1_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_5_Trigger"));
BTS1_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_6_Trigger"));
BTS1_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_7_Trigger"));

//Get Logical Function Values


BTS1_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_0_LogicFunction"));
BTS1_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_1_LogicFunction"));
BTS1_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_2_LogicFunction"));
BTS1_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_3_LogicFunction"));
BTS1_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_4_LogicFunction"));
BTS1_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_5_LogicFunction"));
BTS1_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_6_LogicFunction"));
BTS1_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("BTS1", "Byte_7_LogicFunction"));
var listofByte1 = ListOfByteNumber(BTS1_DATA_BYTES);

foreach (var byteNumber in listofByte1)


{
var selectedRadioButton = $"{rbPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}
#endregion

//updating custom option


for (int index = 0; index < 2; index++)
{
var isCustom =
Convert.ToBoolean(eProfile.GetValue($"BTS{index}", "Custom"));
var name = $"{customBtsPref}{index}{customPost}";
var customChk = (CheckBox)this.FindName(name);

if (customChk.IsChecked == false && isCustom)


customChk.IsChecked = true;

else if (customChk.IsChecked == true && !isCustom)


customChk.IsChecked = false;
}

#region CM Position 1

tabIndex = 0;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT0_DATA_BYTES[i] = (byte)0;
CMBIT0_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format2 = eProfile.GetValue("CM_Position_1",


"Format").ToString();
if (format2 == "STD")
{
if (radCMBit0MsgTyS.IsChecked == false)
radCMBit0MsgTyS.IsChecked = true;
}
else
{
if (radCMBit0MsgTyE.IsChecked == false)
radCMBit0MsgTyE.IsChecked = true;
}
CANBUS_MSG_SOURCE[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Source"));
CANBUS_MSG_IDS[2] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_1", "Message_ID"));
CMBIT0_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_0_Mask"));
CMBIT0_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_1_Mask"));
CMBIT0_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_2_Mask"));
CMBIT0_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_3_Mask"));
CMBIT0_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_4_Mask"));
CMBIT0_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_5_Mask"));
CMBIT0_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_6_Mask"));
CMBIT0_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_7_Mask"));
CMBIT0_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_0_Trigger"));
CMBIT0_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_1_Trigger"));
CMBIT0_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_2_Trigger"));
CMBIT0_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_3_Trigger"));
CMBIT0_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_4_Trigger"));
CMBIT0_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_5_Trigger"));
CMBIT0_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_6_Trigger"));
CMBIT0_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT0_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_0_LogicFunction"));
CMBIT0_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_1_LogicFunction"));
CMBIT0_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_2_LogicFunction"));
CMBIT0_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_3_LogicFunction"));
CMBIT0_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_4_LogicFunction"));
CMBIT0_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_5_LogicFunction"));
CMBIT0_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_6_LogicFunction"));
CMBIT0_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_1", "Byte_7_LogicFunction"));

var listofByte2 = ListOfByteNumber(CMBIT0_DATA_BYTES);

foreach (var byteNumber in listofByte2)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

await Task.Delay(100);
profileController.SetProgress(50);
#endregion

#region CM Position 2

tabIndex = 1;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT1_DATA_BYTES[i] = (byte)0;
CMBIT1_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format3 = eProfile.GetValue("CM_Position_2",


"Format").ToString();
if (format3 == "STD")
{
if (radCMBit1MsgTyS.IsChecked == false)
radCMBit1MsgTyS.IsChecked = true;
}
else
{
if (radCMBit1MsgTyE.IsChecked == false)
radCMBit1MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Source"));
CANBUS_MSG_IDS[3] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_2", "Message_ID"));
CMBIT1_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_0_Mask"));
CMBIT1_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_1_Mask"));
CMBIT1_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_2_Mask"));
CMBIT1_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_3_Mask"));
CMBIT1_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_4_Mask"));
CMBIT1_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_5_Mask"));
CMBIT1_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_6_Mask"));
CMBIT1_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_7_Mask"));
CMBIT1_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_0_Trigger"));
CMBIT1_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_1_Trigger"));
CMBIT1_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_2_Trigger"));
CMBIT1_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_3_Trigger"));
CMBIT1_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_4_Trigger"));
CMBIT1_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_5_Trigger"));
CMBIT1_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_6_Trigger"));
CMBIT1_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT1_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_0_LogicFunction"));
CMBIT1_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_1_LogicFunction"));
CMBIT1_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_2_LogicFunction"));
CMBIT1_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_3_LogicFunction"));
CMBIT1_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_4_LogicFunction"));
CMBIT1_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_5_LogicFunction"));
CMBIT1_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_6_LogicFunction"));
CMBIT1_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_2", "Byte_7_LogicFunction"));

var listofByte3 = ListOfByteNumber(CMBIT1_DATA_BYTES);

foreach (var byteNumber in listofByte3)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

await Task.Delay(100);
profileController.SetProgress(30);
#region CM Position 3

tabIndex = 2;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT2_DATA_BYTES[i] = (byte)0;
CMBIT2_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format4 = eProfile.GetValue("CM_Position_3",


"Format").ToString();
if (format4 == "STD")
{
if (radCMBit2MsgTyS.IsChecked == false)
radCMBit2MsgTyS.IsChecked = true;
}
else
{
if (radCMBit2MsgTyE.IsChecked == false)
radCMBit2MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Source"));
CANBUS_MSG_IDS[4] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_3", "Message_ID"));
CMBIT2_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_0_Mask"));
CMBIT2_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_1_Mask"));
CMBIT2_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_2_Mask"));
CMBIT2_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_3_Mask"));
CMBIT2_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_4_Mask"));
CMBIT2_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_5_Mask"));
CMBIT2_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_6_Mask"));
CMBIT2_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_7_Mask"));
CMBIT2_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_0_Trigger"));
CMBIT2_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_1_Trigger"));
CMBIT2_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_2_Trigger"));
CMBIT2_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_3_Trigger"));
CMBIT2_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_4_Trigger"));
CMBIT2_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_5_Trigger"));
CMBIT2_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_6_Trigger"));
CMBIT2_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT2_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_0_LogicFunction"));
CMBIT2_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_1_LogicFunction"));
CMBIT2_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_2_LogicFunction"));
CMBIT2_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_3_LogicFunction"));
CMBIT2_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_4_LogicFunction"));
CMBIT2_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_5_LogicFunction"));
CMBIT2_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_6_LogicFunction"));
CMBIT2_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_3", "Byte_7_LogicFunction"));

var listofByte4 = ListOfByteNumber(CMBIT2_DATA_BYTES);

foreach (var byteNumber in listofByte4)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 4

tabIndex = 3;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT3_DATA_BYTES[i] = (byte)0;
CMBIT3_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format5 = eProfile.GetValue("CM_Position_4",


"Format").ToString();
if (format5 == "STD")
{
if (radCMBit3MsgTyS.IsChecked == false)
radCMBit3MsgTyS.IsChecked = true;
}
else
{
if (radCMBit3MsgTyE.IsChecked == false)
radCMBit3MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Source"));
CANBUS_MSG_IDS[5] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_4", "Message_ID"));
CMBIT3_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_0_Mask"));
CMBIT3_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_1_Mask"));
CMBIT3_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_2_Mask"));
CMBIT3_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_3_Mask"));
CMBIT3_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_4_Mask"));
CMBIT3_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_5_Mask"));
CMBIT3_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_6_Mask"));
CMBIT3_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_7_Mask"));
CMBIT3_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_0_Trigger"));
CMBIT3_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_1_Trigger"));
CMBIT3_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_2_Trigger"));
CMBIT3_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_3_Trigger"));
CMBIT3_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_4_Trigger"));
CMBIT3_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_5_Trigger"));
CMBIT3_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_6_Trigger"));
CMBIT3_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT3_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_0_LogicFunction"));
CMBIT3_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_1_LogicFunction"));
CMBIT3_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_2_LogicFunction"));
CMBIT3_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_3_LogicFunction"));
CMBIT3_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_4_LogicFunction"));
CMBIT3_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_5_LogicFunction"));
CMBIT3_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_6_LogicFunction"));
CMBIT3_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_4", "Byte_7_LogicFunction"));

var listofByte5 = ListOfByteNumber(CMBIT3_DATA_BYTES);

foreach (var byteNumber in listofByte5)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 5

tabIndex = 4;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT4_DATA_BYTES[i] = (byte)0;
CMBIT4_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format6 = eProfile.GetValue("CM_Position_5",


"Format").ToString();
if (format6 == "STD")
{
if (radCMBit4MsgTyS.IsChecked == false)
radCMBit4MsgTyS.IsChecked = true;
}
else
{
if (radCMBit4MsgTyE.IsChecked == false)
radCMBit4MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Source"));
CANBUS_MSG_IDS[6] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_5", "Message_ID"));
CMBIT4_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_0_Mask"));
CMBIT4_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_1_Mask"));
CMBIT4_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_2_Mask"));
CMBIT4_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_3_Mask"));
CMBIT4_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_4_Mask"));
CMBIT4_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_5_Mask"));
CMBIT4_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_6_Mask"));
CMBIT4_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_7_Mask"));
CMBIT4_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_0_Trigger"));
CMBIT4_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_1_Trigger"));
CMBIT4_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_2_Trigger"));
CMBIT4_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_3_Trigger"));
CMBIT4_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_4_Trigger"));
CMBIT4_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_5_Trigger"));
CMBIT4_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_6_Trigger"));
CMBIT4_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT4_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_0_LogicFunction"));
CMBIT4_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_1_LogicFunction"));
CMBIT4_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_2_LogicFunction"));
CMBIT4_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_3_LogicFunction"));
CMBIT4_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_4_LogicFunction"));
CMBIT4_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_5_LogicFunction"));
CMBIT4_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_6_LogicFunction"));
CMBIT4_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_5", "Byte_7_LogicFunction"));

var listofByte6 = ListOfByteNumber(CMBIT4_DATA_BYTES);

foreach (var byteNumber in listofByte6)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 6

tabIndex = 5;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT5_DATA_BYTES[i] = (byte)0;
CMBIT5_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format7 = eProfile.GetValue("CM_Position_6",


"Format").ToString();
if (format7 == "STD")
{
if (radCMBit5MsgTyS.IsChecked == false)
radCMBit5MsgTyS.IsChecked = true;
}
else
{
if (radCMBit5MsgTyE.IsChecked == false)
radCMBit5MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Source"));
CANBUS_MSG_IDS[7] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_6", "Message_ID"));
CMBIT5_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_0_Mask"));
CMBIT5_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_1_Mask"));
CMBIT5_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_2_Mask"));
CMBIT5_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_3_Mask"));
CMBIT5_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_4_Mask"));
CMBIT5_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_5_Mask"));
CMBIT5_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_6_Mask"));
CMBIT5_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_7_Mask"));
CMBIT5_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_0_Trigger"));
CMBIT5_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_1_Trigger"));
CMBIT5_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_2_Trigger"));
CMBIT5_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_3_Trigger"));
CMBIT5_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_4_Trigger"));
CMBIT5_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_5_Trigger"));
CMBIT5_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_6_Trigger"));
CMBIT5_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT5_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_0_LogicFunction"));
CMBIT5_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_1_LogicFunction"));
CMBIT5_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_2_LogicFunction"));
CMBIT5_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_3_LogicFunction"));
CMBIT5_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_4_LogicFunction"));
CMBIT5_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_5_LogicFunction"));
CMBIT5_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_6_LogicFunction"));
CMBIT5_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_6", "Byte_7_LogicFunction"));

var listofByte7 = ListOfByteNumber(CMBIT5_DATA_BYTES);

foreach (var byteNumber in listofByte7)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

await Task.Delay(100);
profileController.SetProgress(50);

#region CM Position 7

tabIndex = 6;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT6_DATA_BYTES[i] = (byte)0;
CMBIT6_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format8 = eProfile.GetValue("CM_Position_7",


"Format").ToString();
if (format8 == "STD")
{
if (radCMBit6MsgTyS.IsChecked == false)
radCMBit6MsgTyS.IsChecked = true;
}
else
{
if (radCMBit6MsgTyE.IsChecked == false)
radCMBit6MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Source"));
CANBUS_MSG_IDS[8] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_7", "Message_ID"));
CMBIT6_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_0_Mask"));
CMBIT6_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_1_Mask"));
CMBIT6_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_2_Mask"));
CMBIT6_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_3_Mask"));
CMBIT6_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_4_Mask"));
CMBIT6_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_5_Mask"));
CMBIT6_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_6_Mask"));
CMBIT6_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_7_Mask"));
CMBIT6_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_0_Trigger"));
CMBIT6_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_1_Trigger"));
CMBIT6_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_2_Trigger"));
CMBIT6_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_3_Trigger"));
CMBIT6_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_4_Trigger"));
CMBIT6_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_5_Trigger"));
CMBIT6_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_6_Trigger"));
CMBIT6_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT6_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_0_LogicFunction"));
CMBIT6_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_1_LogicFunction"));
CMBIT6_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_2_LogicFunction"));
CMBIT6_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_3_LogicFunction"));
CMBIT6_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_4_LogicFunction"));
CMBIT6_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_5_LogicFunction"));
CMBIT6_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_6_LogicFunction"));
CMBIT6_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_7", "Byte_7_LogicFunction"));

var listofByte8 = ListOfByteNumber(CMBIT6_DATA_BYTES);

foreach (var byteNumber in listofByte8)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 8

tabIndex = 7;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT7_DATA_BYTES[i] = (byte)0;
CMBIT7_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format9 = eProfile.GetValue("CM_Position_8",


"Format").ToString();
if (format9 == "STD")
{
if (radCMBit7MsgTyS.IsChecked == false)
radCMBit7MsgTyS.IsChecked = true;
}
else
{
if (radCMBit7MsgTyE.IsChecked == false)
radCMBit7MsgTyE.IsChecked = true;
}
CANBUS_MSG_SOURCE[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Source"));
CANBUS_MSG_IDS[9] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_8", "Message_ID"));
CMBIT7_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_0_Mask"));
CMBIT7_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_1_Mask"));
CMBIT7_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_2_Mask"));
CMBIT7_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_3_Mask"));
CMBIT7_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_4_Mask"));
CMBIT7_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_5_Mask"));
CMBIT7_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_6_Mask"));
CMBIT7_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_7_Mask"));
CMBIT7_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_0_Trigger"));
CMBIT7_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_1_Trigger"));
CMBIT7_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_2_Trigger"));
CMBIT7_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_3_Trigger"));
CMBIT7_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_4_Trigger"));
CMBIT7_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_5_Trigger"));
CMBIT7_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_6_Trigger"));
CMBIT7_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT7_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_0_LogicFunction"));
CMBIT7_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_1_LogicFunction"));
CMBIT7_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_2_LogicFunction"));
CMBIT7_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_3_LogicFunction"));
CMBIT7_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_4_LogicFunction"));
CMBIT7_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_5_LogicFunction"));
CMBIT7_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_6_LogicFunction"));
CMBIT7_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_8", "Byte_7_LogicFunction"));

var listofByte9 = ListOfByteNumber(CMBIT7_DATA_BYTES);

foreach (var byteNumber in listofByte9)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 9

tabIndex = 8;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT8_DATA_BYTES[i] = (byte)0;
CMBIT8_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format10 = eProfile.GetValue("CM_Position_9",


"Format").ToString();
if (format10 == "STD")
{
if (radCMBit8MsgTyS.IsChecked == false)
radCMBit8MsgTyS.IsChecked = true;
}
else
{
if (radCMBit8MsgTyE.IsChecked == false)
radCMBit8MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Source"));
CANBUS_MSG_IDS[10] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_9", "Message_ID"));
CMBIT8_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_0_Mask"));
CMBIT8_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_1_Mask"));
CMBIT8_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_2_Mask"));
CMBIT8_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_3_Mask"));
CMBIT8_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_4_Mask"));
CMBIT8_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_5_Mask"));
CMBIT8_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_6_Mask"));
CMBIT8_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_7_Mask"));
CMBIT8_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_0_Trigger"));
CMBIT8_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_1_Trigger"));
CMBIT8_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_2_Trigger"));
CMBIT8_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_3_Trigger"));
CMBIT8_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_4_Trigger"));
CMBIT8_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_5_Trigger"));
CMBIT8_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_6_Trigger"));
CMBIT8_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT8_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_0_LogicFunction"));
CMBIT8_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_1_LogicFunction"));
CMBIT8_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_2_LogicFunction"));
CMBIT8_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_3_LogicFunction"));
CMBIT8_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_4_LogicFunction"));
CMBIT8_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_5_LogicFunction"));
CMBIT8_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_6_LogicFunction"));
CMBIT8_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_9", "Byte_7_LogicFunction"));

var listofByte10 = ListOfByteNumber(CMBIT8_DATA_BYTES);

foreach (var byteNumber in listofByte10)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 10

tabIndex = 9;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT9_DATA_BYTES[i] = (byte)0;
CMBIT9_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format11 = eProfile.GetValue("CM_Position_10",


"Format").ToString();
if (format11 == "STD")
{
if (radCMBit9MsgTyS.IsChecked == false)
radCMBit9MsgTyS.IsChecked = true;
}
else
{
if (radCMBit9MsgTyE.IsChecked == false)
radCMBit9MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Source"));
CANBUS_MSG_IDS[11] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_10", "Message_ID"));
CMBIT9_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_0_Mask"));
CMBIT9_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_1_Mask"));
CMBIT9_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_2_Mask"));
CMBIT9_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_3_Mask"));
CMBIT9_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_4_Mask"));
CMBIT9_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_5_Mask"));
CMBIT9_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_6_Mask"));
CMBIT9_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_7_Mask"));
CMBIT9_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_0_Trigger"));
CMBIT9_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_1_Trigger"));
CMBIT9_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_2_Trigger"));
CMBIT9_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_3_Trigger"));
CMBIT9_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_4_Trigger"));
CMBIT9_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_5_Trigger"));
CMBIT9_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_6_Trigger"));
CMBIT9_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT9_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_0_LogicFunction"));
CMBIT9_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_1_LogicFunction"));
CMBIT9_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_2_LogicFunction"));
CMBIT9_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_3_LogicFunction"));
CMBIT9_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_4_LogicFunction"));
CMBIT9_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_5_LogicFunction"));
CMBIT9_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_6_LogicFunction"));
CMBIT9_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_10", "Byte_7_LogicFunction"));

var listofByte11 = ListOfByteNumber(CMBIT9_DATA_BYTES);

foreach (var byteNumber in listofByte11)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 11

tabIndex = 10;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT10_DATA_BYTES[i] = (byte)0;
CMBIT10_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format12 = eProfile.GetValue("CM_Position_11",


"Format").ToString();
if (format12 == "STD")
{
if (radCMBit10MsgTyS.IsChecked == false)
radCMBit10MsgTyS.IsChecked = true;
}
else
{
if (radCMBit10MsgTyE.IsChecked == false)
radCMBit10MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Source"));
CANBUS_MSG_IDS[12] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_11", "Message_ID"));
CMBIT10_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_0_Mask"));
CMBIT10_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_1_Mask"));
CMBIT10_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_2_Mask"));
CMBIT10_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_3_Mask"));
CMBIT10_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_4_Mask"));
CMBIT10_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_5_Mask"));
CMBIT10_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_6_Mask"));
CMBIT10_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_7_Mask"));
CMBIT10_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_0_Trigger"));
CMBIT10_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_1_Trigger"));
CMBIT10_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_2_Trigger"));
CMBIT10_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_3_Trigger"));
CMBIT10_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_4_Trigger"));
CMBIT10_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_5_Trigger"));
CMBIT10_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_6_Trigger"));
CMBIT10_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT10_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_0_LogicFunction"));
CMBIT10_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_1_LogicFunction"));
CMBIT10_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_2_LogicFunction"));
CMBIT10_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_3_LogicFunction"));
CMBIT10_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_4_LogicFunction"));
CMBIT10_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_5_LogicFunction"));
CMBIT10_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_6_LogicFunction"));
CMBIT10_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_11", "Byte_7_LogicFunction"));

var listofByte12 = ListOfByteNumber(CMBIT10_DATA_BYTES);

foreach (var byteNumber in listofByte12)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

await Task.Delay(100);
profileController.SetProgress(70);

#region CM Position 12

tabIndex = 11;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT11_DATA_BYTES[i] = (byte)0;
CMBIT11_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format13 = eProfile.GetValue("CM_Position_12",


"Format").ToString();
if (format13 == "STD")
{
if (radCMBit11MsgTyS.IsChecked == false)
radCMBit11MsgTyS.IsChecked = true;
}
else
{
if (radCMBit11MsgTyE.IsChecked == false)
radCMBit11MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Source"));
CANBUS_MSG_IDS[13] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_12", "Message_ID"));
CMBIT11_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_0_Mask"));
CMBIT11_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_1_Mask"));
CMBIT11_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_2_Mask"));
CMBIT11_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_3_Mask"));
CMBIT11_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_4_Mask"));
CMBIT11_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_5_Mask"));
CMBIT11_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_6_Mask"));
CMBIT11_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_7_Mask"));
CMBIT11_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_0_Trigger"));
CMBIT11_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_1_Trigger"));
CMBIT11_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_2_Trigger"));
CMBIT11_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_3_Trigger"));
CMBIT11_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_4_Trigger"));
CMBIT11_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_5_Trigger"));
CMBIT11_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_6_Trigger"));
CMBIT11_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT11_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_0_LogicFunction"));
CMBIT11_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_1_LogicFunction"));
CMBIT11_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_2_LogicFunction"));
CMBIT11_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_3_LogicFunction"));
CMBIT11_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_4_LogicFunction"));
CMBIT11_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_5_LogicFunction"));
CMBIT11_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_6_LogicFunction"));
CMBIT11_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_12", "Byte_7_LogicFunction"));

var listofByte13 = ListOfByteNumber(CMBIT11_DATA_BYTES);

foreach (var byteNumber in listofByte13)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}
#endregion

#region CM Position 13

tabIndex = 12;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT12_DATA_BYTES[i] = (byte)0;
CMBIT12_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format14 = eProfile.GetValue("CM_Position_13",


"Format").ToString();
if (format14 == "STD")
{
if (radCMBit12MsgTyS.IsChecked == false)
radCMBit12MsgTyS.IsChecked = true;
}
else
{
if (radCMBit12MsgTyE.IsChecked == false)
radCMBit12MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Source"));
CANBUS_MSG_IDS[14] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_13", "Message_ID"));
CMBIT12_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_0_Mask"));
CMBIT12_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_1_Mask"));
CMBIT12_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_2_Mask"));
CMBIT12_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_3_Mask"));
CMBIT12_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_4_Mask"));
CMBIT12_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_5_Mask"));
CMBIT12_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_6_Mask"));
CMBIT12_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_7_Mask"));
CMBIT12_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_0_Trigger"));
CMBIT12_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_1_Trigger"));
CMBIT12_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_2_Trigger"));
CMBIT12_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_3_Trigger"));
CMBIT12_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_4_Trigger"));
CMBIT12_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_5_Trigger"));
CMBIT12_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_6_Trigger"));
CMBIT12_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT12_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_0_LogicFunction"));
CMBIT12_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_1_LogicFunction"));
CMBIT12_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_2_LogicFunction"));
CMBIT12_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_3_LogicFunction"));
CMBIT12_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_4_LogicFunction"));
CMBIT12_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_5_LogicFunction"));
CMBIT12_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_6_LogicFunction"));
CMBIT12_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_13", "Byte_7_LogicFunction"));

var listofByte14 = ListOfByteNumber(CMBIT12_DATA_BYTES);

foreach (var byteNumber in listofByte14)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 14

tabIndex = 13;

//reset data bytes 0 -7


for (int i = 0; i < 8; i++)
{
CMBIT13_DATA_BYTES[i] = (byte)0;
CMBIT13_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
var format15 = eProfile.GetValue("CM_Position_14",
"Format").ToString();
if (format15 == "STD")
{
if (radCMBit13MsgTyS.IsChecked == false)
radCMBit13MsgTyS.IsChecked = true;
}
else
{
if (radCMBit13MsgTyE.IsChecked == false)
radCMBit13MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Source"));
CANBUS_MSG_IDS[15] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_14", "Message_ID"));
CMBIT13_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_0_Mask"));
CMBIT13_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_1_Mask"));
CMBIT13_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_2_Mask"));
CMBIT13_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_3_Mask"));
CMBIT13_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_4_Mask"));
CMBIT13_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_5_Mask"));
CMBIT13_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_6_Mask"));
CMBIT13_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_7_Mask"));
CMBIT13_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_0_Trigger"));
CMBIT13_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_1_Trigger"));
CMBIT13_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_2_Trigger"));
CMBIT13_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_3_Trigger"));
CMBIT13_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_4_Trigger"));
CMBIT13_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_5_Trigger"));
CMBIT13_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_6_Trigger"));
CMBIT13_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT13_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_0_LogicFunction"));
CMBIT13_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_1_LogicFunction"));
CMBIT13_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_2_LogicFunction"));
CMBIT13_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_3_LogicFunction"));
CMBIT13_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_4_LogicFunction"));
CMBIT13_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_5_LogicFunction"));
CMBIT13_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_6_LogicFunction"));
CMBIT13_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_14", "Byte_7_LogicFunction"));

var listofByte15 = ListOfByteNumber(CMBIT13_DATA_BYTES);

foreach (var byteNumber in listofByte15)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 15

tabIndex = 14;

for (int i = 0; i < 8; i++)


{
CMBIT14_DATA_BYTES[i] = (byte)0;
CMBIT14_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format16 = eProfile.GetValue("CM_Position_15",


"Format").ToString();
if (format16 == "STD")
{
if (radCMBit14MsgTyS.IsChecked == false)
radCMBit14MsgTyS.IsChecked = true;
}
else
{
if (radCMBit14MsgTyE.IsChecked == false)
radCMBit14MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Source"));
CANBUS_MSG_IDS[16] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_15", "Message_ID"));
CMBIT14_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_0_Mask"));
CMBIT14_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_1_Mask"));
CMBIT14_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_2_Mask"));
CMBIT14_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_3_Mask"));
CMBIT14_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_4_Mask"));
CMBIT14_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_5_Mask"));
CMBIT14_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_6_Mask"));
CMBIT14_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_7_Mask"));
CMBIT14_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_0_Trigger"));
CMBIT14_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_1_Trigger"));
CMBIT14_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_2_Trigger"));
CMBIT14_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_3_Trigger"));
CMBIT14_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_4_Trigger"));
CMBIT14_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_5_Trigger"));
CMBIT14_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_6_Trigger"));
CMBIT14_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT14_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_0_LogicFunction"));
CMBIT14_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_1_LogicFunction"));
CMBIT14_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_2_LogicFunction"));
CMBIT14_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_3_LogicFunction"));
CMBIT14_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_4_LogicFunction"));
CMBIT14_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_5_LogicFunction"));
CMBIT14_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_6_LogicFunction"));
CMBIT14_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_15", "Byte_7_LogicFunction"));

var listofByte16 = ListOfByteNumber(CMBIT14_DATA_BYTES);

foreach (var byteNumber in listofByte16)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

#region CM Position 16

tabIndex = 15;

for (int i = 0; i < 8; i++)


{
CMBIT15_DATA_BYTES[i] = (byte)0;
CMBIT15_DATA_BYTES[i + 8] = (byte)0;
var rbName = $"{rbCMPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}

var format17 = eProfile.GetValue("CM_Position_16",


"Format").ToString();
if (format17 == "STD")
{
if (radCMBit15MsgTyS.IsChecked == false)
radCMBit15MsgTyS.IsChecked = true;
}
else
{
if (radCMBit15MsgTyE.IsChecked == false)
radCMBit15MsgTyE.IsChecked = true;
}

CANBUS_MSG_SOURCE[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Source"));
CANBUS_MSG_IDS[17] =
Convert_ObjtoUInt32(eProfile.GetValue("CM_Position_16", "Message_ID"));
CMBIT15_DATA_BYTES[0] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_0_Mask"));
CMBIT15_DATA_BYTES[1] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_1_Mask"));
CMBIT15_DATA_BYTES[2] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_2_Mask"));
CMBIT15_DATA_BYTES[3] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_3_Mask"));
CMBIT15_DATA_BYTES[4] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_4_Mask"));
CMBIT15_DATA_BYTES[5] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_5_Mask"));
CMBIT15_DATA_BYTES[6] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_6_Mask"));
CMBIT15_DATA_BYTES[7] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_7_Mask"));
CMBIT15_DATA_BYTES[8] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_0_Trigger"));
CMBIT15_DATA_BYTES[9] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_1_Trigger"));
CMBIT15_DATA_BYTES[10] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_2_Trigger"));
CMBIT15_DATA_BYTES[11] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_3_Trigger"));
CMBIT15_DATA_BYTES[12] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_4_Trigger"));
CMBIT15_DATA_BYTES[13] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_5_Trigger"));
CMBIT15_DATA_BYTES[14] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_6_Trigger"));
CMBIT15_DATA_BYTES[15] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_7_Trigger"));

//Get Logical Function Values


CMBIT15_DATA_BYTES[16] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_0_LogicFunction"));
CMBIT15_DATA_BYTES[17] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_1_LogicFunction"));
CMBIT15_DATA_BYTES[18] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_2_LogicFunction"));
CMBIT15_DATA_BYTES[19] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_3_LogicFunction"));
CMBIT15_DATA_BYTES[20] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_4_LogicFunction"));
CMBIT15_DATA_BYTES[21] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_5_LogicFunction"));
CMBIT15_DATA_BYTES[22] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_6_LogicFunction"));
CMBIT15_DATA_BYTES[23] =
Convert_ObjtoByte(eProfile.GetValue("CM_Position_16", "Byte_7_LogicFunction"));

var listofByte17 = ListOfByteNumber(CMBIT15_DATA_BYTES);

foreach (var byteNumber in listofByte17)


{
var selectedRadioButton = $"{rbCMPref}{tabIndex}
{sepratorKey}{byteNumber}{sepratorKey}";
var radioBtnCompare =
(RadioButton)this.FindName(selectedRadioButton);
if (radioBtnCompare.IsChecked == false)
{
radioBtnCompare.IsChecked = true;
}
}

#endregion

//updating custom option


var customIndex = 0;
for (int index = 1; index < 17; index++)
{
var isCustom =
Convert.ToBoolean(eProfile.GetValue($"CM_Position_{index}", "Custom"));
var name = $"{customPref}{customIndex}{customPost}";
var customChk = (CheckBox)this.FindName(name);

if (customChk.IsChecked == false && isCustom)


customChk.IsChecked = true;
else if (customChk.IsChecked == true && !isCustom)
customChk.IsChecked = false;

customIndex++;
}

//Getting Vehicle Values.


//var car = eProfile.GetValue("Vehicle_Settings",
"Car_Make");
object carMakeName =
eProfile.GetValue(Constants.VehicleSettings, Constants.CarMakeName);
if (carMakeName != null)
{
isCheckingMake = false;
isCheckingModel = false;
int carMakeId =
Convert.ToInt32(eProfile.GetValue(Constants.VehicleSettings, Constants.CarMakeId));
CarMake carMake = new CarMake
{
id = carMakeId,
make = carMakeName.ToString(),
};

object carModelName =
eProfile.GetValue(Constants.VehicleSettings, Constants.CarModelName);
int carModelId =
Convert.ToInt32(eProfile.GetValue(Constants.VehicleSettings,
Constants.CarModelId));
CarModel carModel = new CarModel
{
id = carModelId,
model = carModelName.ToString(),
};

int carYear =
Convert.ToInt32(eProfile.GetValue(Constants.VehicleSettings, Constants.CarYear));

object carEngineTypeName =
eProfile.GetValue(Constants.VehicleSettings, Constants.CarEngineTypeName);
int carEngineTypeId =
Convert.ToInt32(eProfile.GetValue(Constants.VehicleSettings,
Constants.CarEngineTypeId));
EngineType engineType = null;
if (carEngineTypeName != null)
{
engineType.Id = carEngineTypeId;
engineType.Name = carEngineTypeName.ToString();
}

object carGearBoxName =
eProfile.GetValue(Constants.VehicleSettings, Constants.CarGearBoxName);
int carGearBoxId =
Convert.ToInt32(eProfile.GetValue(Constants.VehicleSettings,
Constants.CarGearBoxId));
GearBox gearBox = null;
if (carGearBoxName != null)
{
gearBox.Id = carGearBoxId;
gearBox.Name = carGearBoxName.ToString();
}
object carWheelName =
eProfile.GetValue(Constants.VehicleSettings, Constants.CarWheelName);
int carWheelId =
Convert.ToInt32(eProfile.GetValue(Constants.VehicleSettings,
Constants.CarWheelId));
WheelDrive wheelDrive = null;
if (carWheelName != null)
{
wheelDrive.Id = carWheelId;
wheelDrive.Name = carWheelName.ToString();
};

var carRegistraion =
eProfile.GetValue(Constants.VehicleSettings, Constants.CarRegistrationNumber);

CarData carData = new CarData


{
CarMake = carMake,
CarModel = carModel,
Year = carYear == 0 ? (int?)null : carYear,
EngineType = engineType,
WheelDrive = wheelDrive,
GearBox = gearBox,
Registration = carRegistraion != null ?
carRegistraion.ToString() : "",
};
CarData car = _sessionHelper.Init(carData);
await _sessionHelper.CreateLocalCarData(car);
await GetCarMakes();
await Task.Delay(1000);
await GetSignalReportListing();
}

//Complete the profile await controller


await Task.Delay(100);
profileController.SetProgress(100);
await Task.Delay(1000);
await profileController.CloseAsync();
profileController = null;
}

isFetchingProfile = false;
}
catch (Exception ex)
{
//Stop the profile await controller if this is still visible
if (profileController != null)
{
await profileController.CloseAsync();
profileController = null;
}

await this.ShowMessageAsync("Exception Occured", ex.Message);


}
}
}

public static byte Convert_ObjtoByte(Object obj)


{
byte value = (byte)Convert.ToInt32(obj);
return value;
}

public static UInt32 Convert_ObjtoUInt32(Object obj)


{
UInt32 value = (UInt32)Convert.ToInt32(obj);
return value;
}

public static List<int> ListOfByteNumber(ObservableCollection<byte>


collection)
{
List<int> list = new List<int>();
var arrayLength = 16;
var index = 0;

//loop on all trigger of bytes 0 - 7


for (int i = 8; i < arrayLength; i++)
{
if (collection[i] > 0)
{
list.Add(index);
}
index++;
}
return list;
}

public class GetMakeNames


{
public int id { get; set; }
public string make { get; set; }
}

public class GetModelNames


{
public int id { get; set; }
public string model { get; set; }
public int makeId { get; set; }
}

public class Car


{
public List<GetMakeNames> getMakeNames { get; set; }
}

public class Model


{
public List<GetModelNames> getModelNames { get; set; } = new
List<GetModelNames>();
}

public class GetSignalTypeNames


{
public int id { get; set; }
public string name { get; set; }
}
public class SignalType
{
public List<GetSignalTypeNames> getSignalTypeNames { get; set; }
}

public class GetModelYears


{
public int carModelId { get; set; }
public int year { get; set; }
}

public class ModelYears


{
public List<GetModelYears> modelYears { get; set; } = new
List<GetModelYears>();
}

public class FetchSignal


{
public int page { get; set; } = 0;
public int size { get; set; } = 0;
public Dictionary<string, string>[] filterBy { get; set; } = new
Dictionary<string, string>[0];
}

public class SignalReportItem


{
public int Id { get; set; }
public int ApplicationUserId { get; set; } = 0;
public string CarMake { get; set; } = null;
public int CarMakeId { get; set; } = 0;
public string CarModel { get; set; } = null;
public int CarModelId { get; set; } = 0;
public int? Year { get; set; } = 0;
public int SignalTypeId { get; set; }
public string SignalTypeName { get; set; }
public string Registration { get; set; } = null;
public string Description { get; set; } = null;
public bool IsVerified { get; set; } = false;
public string FileName { get; set; }
public string FileURL { get; set; }
public string FileSize { get; set; }
public DateTime Date { get; set; }
public string Note1 { get; set; } = null;
public string Note2 { get; set; } = null;
public string Note3 { get; set; } = null;
public string Note4 { get; set; } = null;
public string BaudRate { get; set; } = null;
public string CANConnection { get; set; } = null;
public string SerialKey { get; set; } = null;
public string IPAddress { get; set; } = null;
public int LikeStatus { get; set; }
}

public class FetchSignalReponse


{
public int pageNumber { get; set; }
public int pageSize { get; set; }
public long totalRecords { get; set; }
public List<SignalReportItem> SignalReports { get; set; } = new
List<SignalReportItem>();
}

public class SignalLike


{
public int Id { get; set; }
}
public class IpInfo
{
[JsonProperty("ip")]
public string Ip { get; set; }

[JsonProperty("hostname")]
public string Hostname { get; set; }

[JsonProperty("city")]
public string City { get; set; }

[JsonProperty("region")]
public string Region { get; set; }

[JsonProperty("country")]
public string Country { get; set; }

[JsonProperty("loc")]
public string Loc { get; set; }

[JsonProperty("org")]
public string Org { get; set; }

[JsonProperty("postal")]
public string Postal { get; set; }
}

// method is used to get the user ip and access country location


public static string GetUserCountryByIp()
{
IpInfo ipInfo = new IpInfo();
try
{
string info = new
WebClient().DownloadString("https://api.myip.com/");
//string info = new
WebClient().DownloadString("http://ipinfo.io/");
ipInfo = JsonConvert.DeserializeObject<IpInfo>(info);
ipInfo.Ip = ipInfo.Ip;
}
catch (Exception)
{
ipInfo.Country = null;
}

return ipInfo.Ip;
}

public enum enAccessMode


{
Export = 1,
Import = 2
}

private async void SignalReport_Clicked(object sender, RoutedEventArgs e)


{
if (_connected)
{
SignalReport signalReport = new SignalReport(this);
signalReport.Owner = this;
signalReport.Show();
CarData carData = await SessionHelper.CheckLocalCarData();

Button btn = (Button)sender;


string tabIndex = new
String(btn.Name.Where(Char.IsDigit).ToArray());

//source value
var source = CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)];

//message Id
var msgId = CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)];

if (source == 0)
{

signalReport.Close();
await this.ShowMessageAsync("CAN Source!", "CAN Source can not
be NONE", MessageDialogStyle.Affirmative);
}
else if (msgId == 0)
{
signalReport.Close();
await this.ShowMessageAsync("Message ID!", "Message ID can not
be Zero.", MessageDialogStyle.Affirmative);
}
else if (!IsInternetAvailable())
{
signalReport.Close();
await this.ShowMessageAsync("Internet Disconnected", "Internet
is not available. Unable to call the API.", MessageDialogStyle.Affirmative);
}
else if (carData == null || comboCar.SelectedIndex == -1 ||
comboCarModel.SelectedIndex == -1)
{
signalReport.Close();
await this.ShowMessageAsync("Vehicle!!!", "Please Select
Vehicle First", MessageDialogStyle.Affirmative);
//tabConMain.SelectedIndex = 2;
}
else
{
try
{

var jwtToken = _sessionUser.Token;


signalReport.progressRing.Visibility = Visibility.Visible;
signalReport.Cancel0.IsEnabled = false;
signalReport.canConnection.IsEnabled = false;
signalReport.signalDescription.IsEnabled = false;

string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
//string carMakeNamesURL =
ConfigurationManager.AppSettings.Get("CarMakeNamesURL").ToString();
string signalTypesURL =
ConfigurationManager.AppSettings.Get("SignalTypesURL").ToString();

var httpClient = new HttpClient()


{
BaseAddress = new Uri(baseURL)
};
//ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
//var response = await
httpClient.GetAsync($"{carMakeNamesURL}{enAccessMode.Export}");

//signal Type
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
var signalResponse = await
httpClient.GetAsync($"{signalTypesURL}{enAccessMode.Export}");

if (signalResponse.IsSuccessStatusCode)
{
//var message = await
response.Content.ReadAsStringAsync();
//var carMakesNameList =
JsonConvert.DeserializeObject<Car>(message);
//var carMakeCollection = new
ObservableCollection<GetMakeNames>(carMakesNameList.getMakeNames);
//signalReport.cmbCar.ItemsSource = carMakeCollection;

//change options to previous state as it was before


//signalReport.cmbCar.SelectedIndex =
CarSelectionIndex;
//signalReport.note1.SelectedIndex =
EngineTypeSelectionIndex;
//signalReport.note2.SelectedIndex =
GearBoxSelectionIndex;
//signalReport.note3.SelectedIndex =
WheelDriveSelectionIndex;

var signalMessage = await


signalResponse.Content.ReadAsStringAsync();
var signalTypeList =
JsonConvert.DeserializeObject<SignalType>(signalMessage);
var signalTypeCollection = new
ObservableCollection<GetSignalTypeNames>(signalTypeList.getSignalTypeNames).Reverse
();
signalReport.cmbSignalType.ItemsSource =
signalTypeCollection;

//Button btn = (Button)sender;


//string tabIndex = new
String(btn.Name.Where(Char.IsDigit).ToArray());
////source value
//var source =
CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)];

////message Id
//var msgId =
CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)];

//to find radio button


var rbBTSPref = "radBts";
var rbPost = "MsgTy";
var sepratorS = "S";

var rbCANPref = "radCMBit";

var sepratorKey = "B";


var sepratorKeyIgnore = "I";

Dictionary<string, byte> bytesDict = new


Dictionary<string, byte>();

var rbBTSStandardName = string.Empty;


RadioButton rbBTSStandard = new RadioButton();

var rbCANStandardName = string.Empty;


RadioButton rbCANStandard = new RadioButton();

var tabName = string.Empty;


byte byteValue = 0;
int sourceValue = 1;

//every 'Signal Report' button has index with name, so


we check 'tabIndex' to get tab details
//check config tab name
if (tabIndex == "0")
{
tabName = "BTS 0";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = BTS0_DATA_BYTES[i];
var rbName = $"{rbBTSPref}{tabIndex}
{sepratorKey}{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbBTSStandardName = $"{rbBTSPref}0{rbPost}
{sepratorS}";
rbBTSStandard =
(RadioButton)this.FindName(rbBTSStandardName);
signalReport.Format.Text = (rbBTSStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[0];
}

if (tabIndex == "1")
{
tabName = "BTS 1";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = BTS1_DATA_BYTES[i];
var rbName = $"{rbBTSPref}{tabIndex}
{sepratorKey}{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbBTSStandardName = $"{rbBTSPref}1{rbPost}
{sepratorS}";
rbBTSStandard =
(RadioButton)this.FindName(rbBTSStandardName);
signalReport.Format.Text = (rbBTSStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[1];
}

if (tabIndex == "2")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 0";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT0_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}0{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[2];
}

if (tabIndex == "3")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 1";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT1_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}1{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[3];
}

if (tabIndex == "4")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 2";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT2_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}2{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[4];
}

if (tabIndex == "5")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 3";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT3_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}3{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[5];
}

if (tabIndex == "6")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 4";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT4_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}4{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[6];
}

if (tabIndex == "7")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 5";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT5_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}5{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[7];
}

if (tabIndex == "8")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 6";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT6_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}6{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[8];
}

if (tabIndex == "9")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 7";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT7_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}7{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[9];
}

if (tabIndex == "10")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 8";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT8_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}8{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[10];
}

if (tabIndex == "11")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 9";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT9_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}9{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[11];
}

if (tabIndex == "12")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 10";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT10_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}10{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[12];
}

if (tabIndex == "13")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 11";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT11_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}11{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[13];
}

if (tabIndex == "14")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 12";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT12_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}12{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[14];
}

if (tabIndex == "15")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 13";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT13_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}13{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[15];
}

if (tabIndex == "16")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 14";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT14_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}14{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[16];
}

if (tabIndex == "17")
{
var index = (Convert.ToInt32(tabIndex) -
2).ToString();
tabName = "CAN 15";
var j = 0;
for (int i = 0; i < 24; i++)
{
if (i == 8 || i == 16) j = 0;
byteValue = CMBIT15_DATA_BYTES[i];
var rbName = $"{rbCANPref}{index}{sepratorKey}
{j}{sepratorKeyIgnore}";
var rbIgnore =
(RadioButton)this.FindName(rbName);
var isIgnored = rbIgnore.IsChecked ?? true;
bytesDict.Add($"byte{i}", (!isIgnored ?
byteValue : (byte)0));
j++;
}
rbCANStandardName = $"{rbCANPref}15{rbPost}
{sepratorS}";
rbCANStandard =
(RadioButton)this.FindName(rbCANStandardName);
signalReport.Format.Text = (rbCANStandard.IsChecked
== true) ? "STD" : "EXT";
sourceValue = CANBUS_MSG_SOURCE[17];
}

List<string> canSource = new List<string>


{
"none",
"CAN-V",
"CAN-D",
};
signalReport.sourceCanBus.Text =
canSource[sourceValue];
signalReport.tabName.Text = $"- {tabName}
({canSource[sourceValue]}) ";
signalReport.MessageID.Text = msgId.ToString();
signalReport.MessageIDHex.Text = msgId.ToString("X");

//var a1 = bytesDict.ElementAt(16).Value;
//var aa1 = CMB_OPERATION_LIST[a1];

signalReport.Mask0.Text =
bytesDict.ElementAt(0).Value.ToString();
signalReport.Mask1.Text =
bytesDict.ElementAt(1).Value.ToString();
signalReport.Mask2.Text =
bytesDict.ElementAt(2).Value.ToString();
signalReport.Mask3.Text =
bytesDict.ElementAt(3).Value.ToString();
signalReport.Mask4.Text =
bytesDict.ElementAt(4).Value.ToString();
signalReport.Mask5.Text =
bytesDict.ElementAt(5).Value.ToString();
signalReport.Mask6.Text =
bytesDict.ElementAt(6).Value.ToString();
signalReport.Mask7.Text =
bytesDict.ElementAt(7).Value.ToString();

signalReport.Trigger0.Text =
bytesDict.ElementAt(8).Value.ToString();
signalReport.Trigger1.Text =
bytesDict.ElementAt(9).Value.ToString();
signalReport.Trigger2.Text =
bytesDict.ElementAt(10).Value.ToString();
signalReport.Trigger3.Text =
bytesDict.ElementAt(11).Value.ToString();
signalReport.Trigger4.Text =
bytesDict.ElementAt(12).Value.ToString();
signalReport.Trigger5.Text =
bytesDict.ElementAt(13).Value.ToString();
signalReport.Trigger6.Text =
bytesDict.ElementAt(14).Value.ToString();
signalReport.Trigger7.Text =
bytesDict.ElementAt(15).Value.ToString();

signalReport.Logic0.Text =
bytesDict.ElementAt(16).Value.ToString();
signalReport.Logic1.Text =
bytesDict.ElementAt(17).Value.ToString();
signalReport.Logic2.Text =
bytesDict.ElementAt(18).Value.ToString();
signalReport.Logic3.Text =
bytesDict.ElementAt(19).Value.ToString();
signalReport.Logic4.Text =
bytesDict.ElementAt(20).Value.ToString();
signalReport.Logic5.Text =
bytesDict.ElementAt(21).Value.ToString();
signalReport.Logic6.Text =
bytesDict.ElementAt(22).Value.ToString();
signalReport.Logic7.Text =
bytesDict.ElementAt(23).Value.ToString();

signalReport.progressRing.Visibility =
Visibility.Collapsed;
signalReport.Cancel0.IsEnabled = true;
signalReport.canConnection.IsEnabled = true;
signalReport.signalDescription.IsEnabled = true;

//signalReport.Logic0.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(16).Value];
//signalReport.Logic1.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(17).Value];
//signalReport.Logic2.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(18).Value];
//signalReport.Logic3.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(19).Value];
//signalReport.Logic4.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(20).Value];
//signalReport.Logic5.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(21).Value];
//signalReport.Logic6.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(22).Value];
//signalReport.Logic7.Text =
CMB_OPERATION_LIST[bytesDict.ElementAt(23).Value];
}
}
catch (Exception)
{
signalReport.Close();
await this.ShowMessageAsync("Error", "something went wrong
while fetching deatils", MessageDialogStyle.Affirmative);
}
}
}
else
{
await this.ShowMessageAsync("Device Not Found", "Please Connect
Device First", MessageDialogStyle.Affirmative);
}
}

public bool isCarChanged = false;


public bool isModelChanged = false;
public bool isSignalTypeChanged = false;

public class ListFileResponse


{
public string FileName { get; set; }
public string BlobSequenceNumber { get; set; }
public string FilePath { get; set; }
public string FileSize { get; set; }
}

public class FileDetails


{
public List<ListFileResponse> listFileResponse { get; set; }
}

public class SignalFilter : INotifyPropertyChanged


{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}

public int Id { get; set; }


public int? Year { get; set; }
public string FileName { get; set; }
public string FileURL { get; set; }
public string BaudRate { get; set; }
public bool isVerified { get; set; }
public string CANConnection { get; set; }
public string Description { get; set; }
public string SignalTypeName { get; set; }
public int LikeStatus { get; set; }
}

public ObservableCollection<SignalFilter> signalFilterCollection = new


ObservableCollection<SignalFilter>();

public static bool IsInternetAvailable()


{
try
{
using (var pinger = new Ping())
{
var reply = pinger.Send("google.com");
return reply.Status == IPStatus.Success;
}
}
catch (Exception)
{
return false;
}
}

public Dictionary<string, byte> GetByteValues()


{
Dictionary<string, byte> bytesDict = new Dictionary<string, byte>();
return bytesDict;
}

private async void FetchSignal_Clicked(object sender, RoutedEventArgs e)


{
if (_connected)
{
FetchPopup fetchPopup = new FetchPopup(this);
fetchPopup.Owner = this;
fetchPopup.Show();

Button btn = (Button)sender;


string tabIndex = new
String(btn.Name.Where(Char.IsDigit).ToArray());

fetchPopup.tabIndex.Content = tabIndex;

CarData carData = await SessionHelper.CheckLocalCarData();


if (!IsInternetAvailable())
{
//close the fetch signal screen before error
fetchPopup.Close();
await this.ShowMessageAsync("Internet Disconnected", "Internet
is not available. Unable to call the API.", MessageDialogStyle.Affirmative);
}
else if (carData == null || comboCar.SelectedIndex == -1 ||
comboCarModel.SelectedIndex == -1)
{
fetchPopup.Close();
await this.ShowMessageAsync("Vehicle!!!", "Please Select
Vehicle First", MessageDialogStyle.Affirmative);
//tabConMain.SelectedIndex = 2;
}
else
{
try
{

var jwtToken = _sessionUser.Token;


fetchPopup.progressRing.Visibility = Visibility.Visible;
string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
//string carMakeNamesURL =
ConfigurationManager.AppSettings.Get("CarMakeNamesURL").ToString();
string signalTypesURL =
ConfigurationManager.AppSettings.Get("SignalTypesURL").ToString();

var httpClient = new HttpClient()


{
BaseAddress = new Uri(baseURL)
};

//ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
//var response = await
httpClient.GetAsync($"{carMakeNamesURL}{enAccessMode.Import}");

//signal Type
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
//var signalResponse = await
httpClient.GetAsync($"{signalTypesURL}{enAccessMode.Export}");
var carModel = (GetModelNames)comboCarModel.SelectedItem;
//var year = comboYear.SelectedItem.ToString();
//var signalResponse = await
httpClient.GetAsync($"{signalTypesURL}{enAccessMode.Import}/{carModel.id}/{year}");
var signalResponse = await
httpClient.GetAsync($"{signalTypesURL}{enAccessMode.Import}/{carModel.id}");

if (signalResponse.IsSuccessStatusCode)
{
//var message = await
response.Content.ReadAsStringAsync();
//var carMakesNameList =
JsonConvert.DeserializeObject<Car>(message);
//var carMakeCollection = new
ObservableCollection<GetMakeNames>(carMakesNameList.getMakeNames);
//fetchPopup.cmbCar.ItemsSource = carMakeCollection;

var signalMessage = await


signalResponse.Content.ReadAsStringAsync();
var signalTypeList =
JsonConvert.DeserializeObject<SignalType>(signalMessage);
var signalTypeCollection = new
ObservableCollection<GetSignalTypeNames>(signalTypeList.getSignalTypeNames).Reverse
();
fetchPopup.cmbSignalType.ItemsSource =
signalTypeCollection;
fetchPopup.progressRing.Visibility =
Visibility.Collapsed;
}
}
catch (Exception)
{
fetchPopup.Close();
await this.ShowMessageAsync("Error", "something went wrong
while fetching details", MessageDialogStyle.Affirmative);
}
}
}
}

public async Task FetchedSignalTypes()


{
string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
string getSignalReportURL =
ConfigurationManager.AppSettings.Get("GetSignalReportURL").ToString();
int totalCount = 18;
if (!SystemInformationHelper.CheckInternet())
{
for (int i = 0; i < totalCount; i++)
{
var cmbSignalType = "cmbSignalType";
var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}{i}");
cmbSignal.IsEditable = true;
cmbSignal.IsReadOnly = true;
cmbSignal.Text = "No internet connected";
cmbSignal.ItemsSource = null;
}
return;
}
CarData carData = await SessionHelper.CheckLocalCarData();
for (int i = 0; i < totalCount; i++)
{
var cmbSignalType = "cmbSignalType";
var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}{i}");
var test = cmbSignal.SelectedItem;
cmbSignal.IsEditable = true;
cmbSignal.IsReadOnly = true;
cmbSignal.Text = carData != null ? "-- Select --" : "Please Select
Vehicle";
if (test == null)
{

}
cmbSignal.ItemsSource = null;
}
//cmbSignalType0.IsEditable = true;
//cmbSignalType0.IsReadOnly = true;
//cmbSignalType0.Text = "-- Select --";
if (carData == null)
{
//cmbSignalType0.Text = "Please Select Vehicle";

return;
//await this.ShowMessageAsync("Vehicle!!!", "Please Select Vehicle
First", MessageDialogStyle.Affirmative);
}

Dictionary<string, string>[] postData = new Dictionary<string,


string>[1];
postData[0] = new Dictionary<string, string>();
//postData[0].Add("carModelId", carModelId.ToString());
postData[0].Add("carModelId", carData.CarModel.id.ToString());
//postData[0].Add("year", year.ToString());
//postData[0].Add("year", carData.Year.ToString());
//postData[0].Add("signalTypeId", signalTypeId.ToString());

var filterBy = new FetchSignal


{
page = 1,
size = 100,
filterBy = postData
};

var json = JsonConvert.SerializeObject(filterBy);


var httpContent = new StringContent(json, Encoding.UTF8,
"application/json");

var jwtToken = _sessionUser.Token;


var httpClient = new HttpClient()
{
BaseAddress = new Uri(baseURL)
};

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
var response = await httpClient.PostAsync(getSignalReportURL,
httpContent);
if (response.IsSuccessStatusCode)
{
var message = await response.Content.ReadAsStringAsync();
var fileDetailResponse =
JsonConvert.DeserializeObject<FetchSignalReponse>(message);
//totalRecords = fileDetailResponse.totalRecords;
//int maxPage = (int)Math.Ceiling((double)totalRecords /
signalsPerPage);
//maxPages = maxPage;
var i = 1;
var signalFilters = new List<SignalFilter>();
// Sort Signal Reports by Signal Type
//fileDetailResponse.SignalReports.Sort((a, b) =>
string.Compare(a.SignalTypeName, b.SignalTypeName));
fileDetailResponse.SignalReports =
fileDetailResponse.SignalReports.OrderBy(o => o.SignalTypeId).ToList();

// Display Signal Type with incremental count


int count = 1;
string currentSignalType = "";

foreach (var item in fileDetailResponse.SignalReports)


{

if (item.SignalTypeName != currentSignalType)
{
currentSignalType = item.SignalTypeName;
count = 1;
}
SignalFilter signalFilter = new SignalFilter();
signalFilter.Id = item.Id;
signalFilter.FileName = item.FileName;
signalFilter.FileURL = item.FileURL;
signalFilter.BaudRate = item.BaudRate;
signalFilter.isVerified = item.IsVerified;
signalFilter.CANConnection = item.CANConnection;
signalFilter.Year = item.Year;
signalFilter.Description = item.Description;
signalFilter.LikeStatus = item.LikeStatus;
//signalFilter.SignalTypeName = item.SignalTypeName;
signalFilter.SignalTypeName = count != 1 ?
$"{item.SignalTypeName} ({count})" : item.SignalTypeName;
count++;
//this.signalFilterCollection.Add(signalFilter);
signalFilters.Add(signalFilter);
i++;
}
var signalTypeCollection = new
ObservableCollection<SignalFilter>(signalFilters);
//var signalTypeCollection = new
ObservableCollection<SignalFilter>(signalFilters).Reverse();
//cmbSignalType0.ItemsSource = signalTypeCollection;
for (int j = 0; j < totalCount; j++)
{
var cmbSignalType = "cmbSignalType";
var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}{j}");
cmbSignal.ItemsSource = signalTypeCollection; ;
}
}
}

public ObservableCollection<string> signalIdList = new


ObservableCollection<string>();

private void Undo_Unchecked_Clicked(object sender, RoutedEventArgs e)


{
ToggleButton tBtn = (ToggleButton)sender;
tBtn.Visibility = Visibility.Visible;
}

private void Undo_Checked_Clicked(object sender, RoutedEventArgs e)


{
if (sender is ToggleButton)
{
ToggleButton tBtn = (ToggleButton)sender;
try
{
// Extract the number from the button's name using Regex
Match match = Regex.Match(tBtn.Name, @"\d+");
if (match.Success)
{
//undoButtonPressedBeforeExport = true;
string extractedNumber = match.Value;
int idx = int.Parse(extractedNumber);
MSG_FORMAT_COPY.Remove(idx);
CAN_PORT_COPY.Remove(idx);

//Checking
var showHexBts = "cbShowHex_BTS";
var showHexCMBit = "cbShowHex_CMBit";
var showDecBts = "cbShowDec_BTS";
var showDecCMBit = "cbShowDec_CMBit";
var signalReportBtn = "btnSignalReport";
var fetchSignalBtn = "btnFetchSignal";
var clearAllBtn = "btnClear";
var seprator = "seprator";
var thumbLike = "thumbLike";

//btnClear0
CheckBox showHex = idx < 2 ?
(CheckBox)FindName($"{showHexBts}{idx}") : (CheckBox)FindName($"{showHexCMBit}{idx
- 2}");
showHex.Visibility = Visibility.Visible;

//CheckBox showDec = (CheckBox)FindName($"{showDecBts}


{idx}");
CheckBox showDec = idx < 2 ?
(CheckBox)FindName($"{showDecBts}{idx}") : (CheckBox)FindName($"{showDecCMBit}{idx
- 2}");
showDec.Visibility = Visibility.Visible;

Button signalReportBtnHide =
(Button)FindName($"{signalReportBtn}{idx}");
signalReportBtnHide.Visibility = Visibility.Visible;

//Button fetchSignalBtnHide =
(Button)FindName($"{fetchSignalBtn}{idx}");
//fetchSignalBtnHide.Visibility = Visibility.Visible;

var cmbSignalType = "cmbSignalType";


var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}
{idx}");

Button clearAllBtnHide = (Button)FindName($"{clearAllBtn}


{idx}");
clearAllBtnHide.Visibility = Visibility.Visible;
cmbSignal.SelectedItem = null;
cmbSignal.Text = "-- Select --";

if (idx < 18)


{
var thumbLikeVisibility =
(Button)FindName($"{thumbLike}{idx}");
if (thumbLikeVisibility != null)
{
thumbLikeVisibility.Visibility =
Visibility.Collapsed;
}
}

//when undo is pressed then the particular signal resets to


its default state.

if (bit_isFetched[idx])
{
undoButtonPressedBeforeExport = true;
if (tglDataSync.IsChecked == true)
{
if(dataSyncTimer != null)
{
tglDataSync.IsChecked = false;
isExportSettingsPressed = false;
}
}
foreach (var kvp in idToBufferPosition)
{
// Try to parse the string value to an integer
if (int.TryParse(kvp.Value, out int parsedValue))
{
// If parsing is successful, store the integer
value in _selectedSignalIds
_selectedSignalIds[kvp.Key] = parsedValue;
}
else
{
_selectedSignalIds[kvp.Key] = 0;
}
}

if (idx == 0)
{

for (int i = 0; i < 8; i++)


{
//Mask Values
BTS0_DATA_BYTES[i] = (byte)0;
//Trigger Values
BTS0_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
BTS0_DATA_BYTES[i + 8 + 8] = (byte)0;

CANBUS_MSG_IDS[idx] = 0;
CANBUS_MSG_SOURCE[idx] = 0;
BTS0_isFetched = false;
}
if (idx == 1)
{

for (int i = 0; i < 8; i++)


{
//Mask Values
BTS1_DATA_BYTES[i] = (byte)0;
//Trigger Values
BTS1_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
BTS1_DATA_BYTES[i + 8 + 8] = (byte)0;

CANBUS_MSG_IDS[idx] = 0;
CANBUS_MSG_SOURCE[idx] = 0;
BTS1_isFetched = false;
}
if (idx == 2)
{

for (int i = 0; i < 8; i++)


{
//Mask Values
CMBIT0_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT0_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT0_DATA_BYTES[i + 8 + 8] = (byte)0;

CANBUS_MSG_IDS[idx] = 0;
CANBUS_MSG_SOURCE[idx] = 0;
CM0_isFetched = false;
}
if (idx == 3)
{
//if (_selectedSignalIds.ContainsKey(idx))
//{
// _selectedSignalIds.Remove(idx);
//}
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT1_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT1_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT1_DATA_BYTES[i + 8 + 8] = (byte)0;

CANBUS_MSG_IDS[idx] = 0;
CANBUS_MSG_SOURCE[idx] = 0;
CM1_isFetched = false;
}
if (idx == 4)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT2_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT2_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT2_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM2_isFetched = false;
}
if (idx == 5)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT3_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT3_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT3_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM3_isFetched = false;
}
if (idx == 6)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT4_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT4_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT4_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM4_isFetched = false;
}
if (idx == 7)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT5_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT5_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT5_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM5_isFetched = false;
}
if (idx == 8)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT6_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT6_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT6_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM6_isFetched = false;
}
if (idx == 9)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT7_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT7_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT7_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM7_isFetched = false;
}
if (idx == 10)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT8_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT8_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT8_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM8_isFetched = false;
}
if (idx == 11)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT9_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT9_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT9_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM9_isFetched = false;
}
if (idx == 12)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT10_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT10_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT10_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM10_isFetched = false;
}
if (idx == 13)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT11_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT11_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT11_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM11_isFetched = false;
}
if (idx == 14)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT12_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT12_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT12_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM12_isFetched = false;
}
if (idx == 15)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT13_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT13_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT13_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM13_isFetched = false;
}
if (idx == 16)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT14_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT14_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT14_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM14_isFetched = false;
}
if (idx == 17)
{
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT15_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT15_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT15_DATA_BYTES[i + 8 + 8] = (byte)0;

}
CANBUS_MSG_SOURCE[idx] = 0;
CANBUS_MSG_IDS[idx] = 0;
CM15_isFetched = false;
}

}
//Separator sepratorHide = (Separator)FindName($"{seprator}
{idx}");
//sepratorHide.Visibility = Visibility.Visible;

//cmbSignalType0.IsEditable = true;
//cmbSignalType0.IsReadOnly = true;
//cmbSignalType0.SelectedItem = null;
//cmbSignalType0.Text = "-- Select --";
}
catch { MessageBox.Show("Could not remove the fetched signal from
the list", "Undo Failed", MessageBoxButton.OK, MessageBoxImage.Error); }

//Hide the Undo button


tBtn.Visibility = Visibility.Collapsed;
isSignalSelected = false;
}

//Remove the content from the respective buffers


}
public static int ExtractNumber(string input)
{
string pattern = @"\d+$";
Regex regex = new Regex(pattern);
Match match = regex.Match(input);
if (match.Success)
{
return int.Parse(match.Value);
}
else
{
throw new ArgumentException("The input string does not contain a
valid number.");
}
}
//to managed signal report selection state
public int CarSelectionIndex { get; set; } = 0;
public int ModelSelectionIndex { get; set; } = 0;
public int YearSelectionIndex { get; set; } = DateTime.Now.Year;
public int SignalSelectionIndex { get; set; } = 0;
public int EngineTypeSelectionIndex { get; set; } = 0;
public int GearBoxSelectionIndex { get; set; } = 0;
public int WheelDriveSelectionIndex { get; set; } = 0;

//flag for fetch signal status


public bool BTS0_isFetched { get; set; }
public bool BTS1_isFetched { get; set; }
public bool CM0_isFetched { get; set; }
public bool CM1_isFetched { get; set; }
public bool CM2_isFetched { get; set; }
public bool CM3_isFetched { get; set; }
public bool CM4_isFetched { get; set; }
public bool CM5_isFetched { get; set; }
public bool CM6_isFetched { get; set; }
public bool CM7_isFetched { get; set; }
public bool CM8_isFetched { get; set; }
public bool CM9_isFetched { get; set; }
public bool CM10_isFetched { get; set; }
public bool CM11_isFetched { get; set; }
public bool CM12_isFetched { get; set; }
public bool CM13_isFetched { get; set; }
public bool CM14_isFetched { get; set; }
public bool CM15_isFetched { get; set; }
public bool CM16_isFetched { get; set; }
public bool CarData_isFetched { get; set; }

#endregion

private async void btnHideAll_Click(object sender, RoutedEventArgs e)


{
await Task.Factory.StartNew(async () =>
{
var listItems = dataGridItems.ToList();
var filterItems = filterValues.ToList();
await Dispatcher.BeginInvoke((Action)async delegate
{
Task gridTask = Task.Run(() => listItems.ForEach(c =>
{ c.HideItem = true; c.ForceHide = true; c.UpdatedTime = DateTime.Now; }));
Task filterTask = Task.Run(() => filterItems.ForEach(c =>
c.isCheck = false));
//await Task.WhenAll(gridTask, filterTask);
removedDataGridItems.Clear();
});
});
}

private async void btnShowAll_Click(object sender, RoutedEventArgs e)


{
await Task.Factory.StartNew(async () =>
{
var listItems = dataGridItems.ToList();
var filterItems = filterValues.ToList();
await Dispatcher.BeginInvoke((Action)async delegate
{
Task gridTask = Task.Run(() => listItems.ForEach(c =>
{ c.HideItem = false; c.ForceHide = false; c.UpdatedTime = DateTime.Now; }));
Task filterTask = Task.Run(() => filterItems.ForEach(c =>
c.isCheck = true));
//await Task.WhenAll(gridTask, filterTask);
removedDataGridItems.Clear();
});
});
}

private void OnRowChecked(object sender, RoutedEventArgs e)


{
// OnRowChecked is triggered from the row checkbox clicked in grid
items.
// When we click the checkbox it means we need to remove the item from
the row and uncheck from filters as well.
try
{
DataGridCell cell = (DataGridCell)sender as DataGridCell;
DataGridItem item = (DataGridItem)cell.DataContext as DataGridItem;
var filterItem = filterValues.FirstOrDefault(a => a.ID == item.ID);

//filtering out from row checkbox.


HandleFilterChanges(item, filterItem, isChecked: false,
removeFromAutoHide: true, forceHide: true);

}
catch (Exception ex)
{
ExceptionHandler.DebugException(ex);
}
}

public async void BitsBorder_MouseLeftButtonDown(object sender,


MouseButtonEventArgs args)
{
try
{
Border border = (Border)sender;
bool selectAllBytes = false;

if (args.ClickCount == 2) selectAllBytes = true;

if (border != null)
{
DataGridItem item = (DataGridItem)border.DataContext;
await this.SelectBitsForExport(item, border.Tag.ToString(),
selectAllBytes);
}

}
catch (Exception e)
{
ExceptionHandler.DebugException(e);
}
}

public async void AllBytesSelectionEvent(object sender,


MouseButtonEventArgs args)
{
try
{
if (args.ClickCount >= 2)
{
TextBlock txtBlock = (TextBlock)sender;

if (txtBlock != null)
{
DataGridItem item = (DataGridItem)txtBlock.DataContext;
await this.SelectBitsForExport(item,
txtBlock.Tag.ToString(), selectAllBytes: true);
}
}
}
catch (Exception e)
{
ExceptionHandler.DebugException(e);
}
}

public async Task ResetExportItems(string prevCanId, string newCanId =


Constants.EMPTYSTRING)
{
var dataGrid = dataGridItems.FirstOrDefault(a => a.ID == prevCanId);

await Dispatcher.BeginInvoke(new Action(delegate ()


{
if (dataGrid != null)
{
dataGrid.ClearAllSelectedItems();
}

exportedItem.HexCanId = newCanId;
exportedItem.SelectedItems.Clear();
}));
}

/// <summary>
/// Manage and handle filtering data including manual filteration and auto
filteration.
/// </summary>
/// <param name="dataGridItem"></param>
/// <param name="filterValue"></param>
/// <param name="isChecked"></param>
/// <param name="removeFromAutoHide"></param>
public void HandleFilterChanges(DataGridItem dataGridItem, FilterValue
filterValue, bool isChecked, bool removeFromAutoHide = false, bool forceHide =
false)
{
var assd = rowIndex;
var id = dataGridItem.ID;
var roll = dataGridItem.RollNo;
dataGridItem.HideItem = isChecked ? false : true;
dataGridItem.ForceHide = forceHide ? dataGridItem.HideItem : forceHide;
filterValue.isCheck = isChecked;

if (isChecked) dataGridItem.UpdatedTime = DateTime.Now;

if (removeFromAutoHide)
{
removedDataGridItems.Remove(dataGridItem);
}
}

public void BtnExport_Click(object sender, RoutedEventArgs args)


{
try
{
Button btn = sender as Button;
ContextMenu contextMenu = btn.ContextMenu;
contextMenu.PlacementTarget = btn;
contextMenu.IsOpen = true;
args.Handled = true;
}
catch (Exception ex)
{
ExceptionHandler.DebugException(ex);
}
}

public async void btn_clearAllBitSelection(object sender, RoutedEventArgs


args)
{
await ResetExportItems(exportedItem.HexCanId, string.Empty);
}

public void UserAccountButton_Click(object sender, RoutedEventArgs args)


{
var addButton = sender as FrameworkElement;
if (addButton != null)
{
addButton.ContextMenu.IsOpen = true;
}
}

public async void BtnLogout_Click(object sender, RoutedEventArgs args)


{
if (SystemInformationHelper.CheckInternet())
{
Session session = await SessionHelper.CheckLocalSession();
if (session != null)
{
await Logout(session.Token);
comboCar.SelectedIndex = -1;
comboCarModel.SelectedIndex = -1;
comboYear.SelectedIndex = -1;
comboEngineType.SelectedIndex = -1;
comboGearBox.SelectedIndex = -1;
comboWheelDrive.SelectedIndex = -1;
//cmbScanBaudCAN0.SelectedIndex = 1;
otherCarMake.Visibility = Visibility.Hidden;
otherCarModel.Visibility = Visibility.Hidden;
//cmbScanBaudCAN1.SelectedIndex = 1;
textRegistration.Text = string.Empty;
signalListView.ItemsSource = null;
}
}
await _sessionHelper.RemoveLocalSession();
await _sessionHelper.RemoveLocalCarData();
await _sessionHelper.RemoveLocalCarBrands();
await _sessionHelper.RemoveLocalCarModels();
//MetroMain.Title = Constants.Application_Title;
RedirectToLoginWindow();
}
public void RemoveSignalTypes()
{
int totalCount = 3;
for (int i = 0; i < totalCount; i++)
{
var cmbSignalType = "cmbSignalType";
var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}{i}");
cmbSignal.ItemsSource = null;
}
}

public void autoHideBtn_Click(object sender, RoutedEventArgs e)


{
if (autoHide.IsChecked == false)
{
nudSecToHide.Value = nudSecToHide.Value == null ? 5 :
nudSecToHide.Value;
autoHide.IsChecked = true;
autoHideBtn.SetResourceReference(Button.StyleProperty,
"AccentedGreenSquareButtonStyle");
}
else
{
autoHide.IsChecked = false;
autoHideBtn.SetResourceReference(Button.StyleProperty,
"AccentedSquareButtonStyle");
}
}

public void autoHide_Checked(object sender, RoutedEventArgs e)


{
autoHideBtn.SetResourceReference(Button.StyleProperty,
"AccentedGreenSquareButtonStyle");
}

public void autoHide_Unchecked(object sender, RoutedEventArgs e)


{
autoHideBtn.SetResourceReference(Button.StyleProperty,
"AccentedSquareButtonStyle");
}
//Flag for Validations if Vehicle not found.
private bool isCheckingMake = false;
private bool isCheckingModel = false;
int? modelId = null;
public async Task GetCarMakes(string extraString = null)
{

//static data to fill drop down


var EngineTypes = new ObservableCollection<EngineType>()
{
new EngineType() {Id= 1, Name = "Petrol"},
new EngineType() {Id = 2, Name = "Diesel"},
new EngineType() {Id = 3, Name = "Electric"},
};
this.comboEngineType.ItemsSource = EngineTypes;
comboEngineType.IsEditable = true;
comboEngineType.IsReadOnly = true;
comboEngineType.Text = "-- Select --";

var GearBoxes = new ObservableCollection<GearBox>()


{
new GearBox(){Id = 1, Name = "Automatic"},
new GearBox(){Id = 2, Name = "Manual"}
};
this.comboGearBox.ItemsSource = GearBoxes;
comboGearBox.IsEditable = true;
comboGearBox.IsReadOnly = true;
comboGearBox.Text = "-- Select --";

var WheelDrives = new ObservableCollection<WheelDrive>()


{
new WheelDrive(){Id = 1, Name = "Front Wheel Drive"},
new WheelDrive(){Id = 2, Name = "Rear Wheel Drive"},
new WheelDrive(){Id = 3, Name = "Four Wheel Drive"}
};
this.comboWheelDrive.ItemsSource = WheelDrives;
comboWheelDrive.IsEditable = true;
comboWheelDrive.IsReadOnly = true;
comboWheelDrive.Text = "-- Select --";

var yearList = Enumerable.Range(1974, (DateTime.Now.Year - 1974 +


1)).Reverse().ToList();
var yearListSource = new ObservableCollection<int>(yearList);
this.comboYear.ItemsSource = yearListSource;
comboYear.IsEditable = true;
comboYear.IsReadOnly = true;
comboYear.Text = "-- Select --";

comboCar.IsEditable = true;
comboCar.IsReadOnly = true;
comboCar.Text = "-- Select --";

comboCarModel.IsEditable = true;
comboCarModel.IsReadOnly = true;
comboCarModel.Text = "-- Select --";

var carMakeCollection = new ObservableCollection<GetMakeNames>();


if (!IsInternetAvailable())
{
await this.ShowMessageAsync("Internet Disconnected", "Internet is
not available. Unable to call the API. (Locally)", MessageDialogStyle.Affirmative);
Car carBrands = await SessionHelper.CheckLocalCarBrands();
if (carBrands != null)
{
carMakeCollection = new
ObservableCollection<GetMakeNames>(carBrands.getMakeNames);
this.comboCar.ItemsSource = carMakeCollection;
}
}
else
{
try
{
var jwtToken = _sessionUser.Token;

string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
string carMakeNamesURL =
ConfigurationManager.AppSettings.Get("CarMakeNamesURL").ToString();
var httpClient = new HttpClient()
{
BaseAddress = new Uri(baseURL)
};
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
var response = await httpClient.GetAsync($"{carMakeNamesURL}
{enAccessMode.Export}");
if (response.IsSuccessStatusCode)
{
var message = await response.Content.ReadAsStringAsync();
var carMakesNameList =
JsonConvert.DeserializeObject<Car>(message);
carMakeCollection = new
ObservableCollection<GetMakeNames>(carMakesNameList.getMakeNames);
this.comboCar.ItemsSource = carMakeCollection;

//Creating Local for Car Brands


Car carBrands = _sessionHelper.Init(carMakesNameList);
await _sessionHelper.CreateLocalCarBrands(carBrands);

}
}
catch (Exception)
{
await this.ShowMessageAsync("Error", "something went wrong
while fetching details", MessageDialogStyle.Affirmative);
}
}

if (extraString != null)
{
int makeId = Convert.ToInt32(carMakeIdString);
modelId = Convert.ToInt32(carModelString);
int engineId = int.TryParse(engineIdString, out var
parsedValueEngine) ? parsedValueEngine : 0;
int wheelDriveId = int.TryParse(wheelDriveIdString, out var
parsedValue) ? parsedValue : 0;
int gearBoxId = int.TryParse(gearBoxIdString, out var
parsedValueGearBox) ? parsedValueGearBox : 0;
int year = int.TryParse(yearString, out var parsedValueYear) ?
parsedValueYear : -1;
importedCarData = true;
var indexOfCarMake =
carMakeCollection.IndexOf(carMakeCollection.FirstOrDefault(item => item.id ==
makeId));
if (indexOfCarMake == -1 && !isCheckingMake)
{
await this.ShowMessageAsync("No Make Found", "Selected Vehicle
Make is Remove or Changed. Please Select again.", MessageDialogStyle.Affirmative);
comboCarModel.ItemsSource = null;
isCheckingMake = true;
isCheckingModel = true;
}
comboCar.SelectedIndex = indexOfCarMake;
//await Task.Delay(1000);
var indexOfYear = yearListSource.IndexOf(year);
comboYear.SelectedIndex = indexOfYear;

var indexOfEngineType =
EngineTypes.IndexOf(EngineTypes.FirstOrDefault(item => item.Id == engineId));
comboEngineType.SelectedIndex = indexOfEngineType;
var selectedEngineTypeData =
(EngineType)comboEngineType.SelectedValue;

var indexOfGearBox =
GearBoxes.IndexOf(GearBoxes.FirstOrDefault(item => item.Id == gearBoxId));
comboGearBox.SelectedIndex = indexOfGearBox;
var selectedGearTypeData = (GearBox)comboGearBox.SelectedItem;

WheelDrive selectedWheelDrive = WheelDrives.FirstOrDefault(wd =>


wd.Id == wheelDriveId);
if (selectedWheelDrive != null)
{
comboWheelDrive.SelectedIndex =
WheelDrives.IndexOf(selectedWheelDrive);
var selectedWheelDrivesData = selectedWheelDrive;
}

return;
}

CarData carData = await SessionHelper.CheckLocalCarData();


if (carData != null && extraString == null)
{
var indexOfCarMake =
carMakeCollection.IndexOf(carMakeCollection.FirstOrDefault(item => item.make ==
carData.CarMake.make));
if (indexOfCarMake == -1 && !isCheckingMake)
{
await this.ShowMessageAsync("No Make Found", "Selected Vehicle
Make is Remove or Changed. Please Select again.", MessageDialogStyle.Affirmative);
comboCarModel.ItemsSource = null;
isCheckingMake = true;
isCheckingModel = true;
}
comboCar.SelectedIndex = indexOfCarMake;

if (carData.Year != null)
{
var indexOfYear = yearListSource.IndexOf((int)carData.Year);
comboYear.SelectedIndex = indexOfYear;
}
if (carData.EngineType != null)
{
var indexOfEngineType =
EngineTypes.IndexOf(EngineTypes.FirstOrDefault(item => item.Name ==
carData.EngineType.Name));
comboEngineType.SelectedIndex = indexOfEngineType;
}
if (carData.GearBox != null)
{
var indexOfGearBox =
GearBoxes.IndexOf(GearBoxes.FirstOrDefault(item => item.Name ==
carData.GearBox.Name));
comboGearBox.SelectedIndex = indexOfGearBox;
}

if (carData.WheelDrive != null)
{
var indexOfWheelDrive =
WheelDrives.IndexOf(WheelDrives.FirstOrDefault(item => item.Name ==
carData.WheelDrive.Name));
comboWheelDrive.SelectedIndex = indexOfWheelDrive;
}
textRegistration.Text = carData.Registration;
}
}

public async Task GetCarModels()


{
if (!IsInternetAvailable())
{
await this.ShowMessageAsync("Internet Disconnected", "Internet is
not available. Unable to call the API.", MessageDialogStyle.Affirmative);
}
else
{
try
{
var jwtToken = _sessionUser.Token;

string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
string getCarModelURL =
ConfigurationManager.AppSettings.Get("GetCarModelURL").ToString();

var httpClient = new HttpClient()


{
BaseAddress = new Uri(baseURL)
};
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
var response = await httpClient.GetAsync($"{getCarModelURL}
{enAccessMode.Export}/");

if (response.IsSuccessStatusCode)
{
var message = await response.Content.ReadAsStringAsync();
var carModelNameList =
JsonConvert.DeserializeObject<Model>(message);
var carModelList = new
ObservableCollection<GetModelNames>(carModelNameList.getModelNames);
//this.comboCar.ItemsSource = carMakeCollection;

Model carModels = _sessionHelper.Init(carModelNameList);


await _sessionHelper.CreateLocalCarModels(carModels);
}
}
catch (Exception)
{
await this.ShowMessageAsync("Error", "something went wrong
while fetching deatils", MessageDialogStyle.Affirmative);
}
}
}

public async Task<string> Logout(string jwtToken)


{
string response = string.Empty;
await Task.Delay(1000);
string apiBaseUrl =
ConfigurationManager.AppSettings.Get(Constants.BASE_URL).ToString();
string apiEndpoints =
ConfigurationManager.AppSettings.Get(Constants.LOGOUT_URL).ToString();
string mediaType = Constants.APPLICATION_JSON_FORMAT;
if (!string.IsNullOrEmpty(apiBaseUrl) && !
string.IsNullOrEmpty(apiEndpoints))
{
using (var httpClient = new HttpClient())
{
try
{
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Accept.Add(new
MediaTypeWithQualityHeaderValue(mediaType));
var requestUri = new Uri(apiBaseUrl + apiEndpoints);

var jsonObject = new


{
IPAddress =
SystemInformationHelper.GetLocalIPAddress(),
GUIVersion = SystemInformationHelper.GetGUIVersion()
};
var request = new UserLogoutRequest()
{
ProductId = Constants.PRODUCT_ID,
OtherDetails = JsonConvert.SerializeObject(jsonObject)
};
var requestBody = new
StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, mediaType);
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);

var httpResponse = await httpClient.PostAsync(requestUri,


requestBody);

if (httpResponse.IsSuccessStatusCode)
{
return "Success";
}
else
{
var contentStream = await
httpResponse.Content.ReadAsStringAsync();
var errorResponse =
JsonConvert.DeserializeObject<HttpErrorResponse>(contentStream);
response = errorResponse.Error;
}
}
catch (Exception e)
{
ExceptionHandler.DebugException(e, "LOGOUT - API - ERROR: "
+ e.Message);
response = Constants.SOMETHING_WENT_WRONG;
}
}
}
else response = Constants.SOMETHING_WENT_WRONG;
return response;
}

public async Task<string> ConnectivityStatus(bool status, string jwtToken)


{
string response = string.Empty;
await Task.Delay(1000);
string apiBaseUrl =
ConfigurationManager.AppSettings.Get(Constants.BASE_URL).ToString();
string apiEndpoints =
ConfigurationManager.AppSettings.Get(Constants.PRODUCT_CONN_STATUS).ToString();
string mediaType = Constants.APPLICATION_JSON_FORMAT;
if (!string.IsNullOrEmpty(apiBaseUrl) && !
string.IsNullOrEmpty(apiEndpoints))
{
using (var httpClient = new HttpClient())
{
try
{
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Accept.Add(new
MediaTypeWithQualityHeaderValue(mediaType));
var requestUri = new Uri(apiBaseUrl + apiEndpoints);

var jsonObject = new


{
IPAddress =
SystemInformationHelper.GetLocalIPAddress(),
GUIVersion = SystemInformationHelper.GetGUIVersion()
};
var request = new ProductConnectivityRequest()
{
ProductId = Constants.PRODUCT_ID,
Status = status
};
var requestBody = new
StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, mediaType);
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);

var httpResponse = await httpClient.PostAsync(requestUri,


requestBody);

if (httpResponse.IsSuccessStatusCode)
{
return "Success";
}
else
{
var contentStream = await
httpResponse.Content.ReadAsStringAsync();
var errorResponse =
JsonConvert.DeserializeObject<HttpErrorResponse>(contentStream);
response = errorResponse.Error;
}
}
catch (Exception e)
{
ExceptionHandler.DebugException(e, "CONNECTIVITY STATUS -
API - ERROR: " + e.Message);
response = Constants.SOMETHING_WENT_WRONG;
}
}
}
else response = Constants.SOMETHING_WENT_WRONG;

return response;
}

#region private methods

private void RedirectToLoginWindow()


{
LoginWindow loginWindow = new LoginWindow();
// pushing main window reference to the login window so that it will
not re-initialize the window.
// main cause is that again initializing is causing problems with
device connectivity.
loginWindow._mainWindow = this;
loginWindow.Show();

// in order to use the same object of main window, we will hide the
object here instead of close.
this.Hide();
}

private async Task SelectBitsForExport(DataGridItem item, string tag, bool


selectAllBytes = false)
{
try
{
int tagByteIndex = 0; // constant index used to fetch byte details
from sender attribute
int tagBitIndex = 1; // constant index used to fetch bit details
from sender attribute
if (!string.IsNullOrEmpty(exportedItem.HexCanId))
{
if (exportedItem.HexCanId != item.ID)
{
var result = await MetroMain.ShowMessageAsync("Bits
Selection",
"All the selection will be removed if you change the
row, Do you want to proceed?",
MessageDialogStyle.AffirmativeAndNegative);

if (result == MessageDialogResult.Affirmative)
{
await ResetExportItems(exportedItem.HexCanId, item.ID);
}
else return;
}
}
else exportedItem.HexCanId = item.ID;

string[] attributes = tag.Split('_');


int byteIndex = int.Parse(attributes[tagByteIndex]);
int bitIndex = int.Parse(attributes[tagBitIndex]);
var selectedBytes = item.GetSpecificSelectedBytes(byteIndex);
if (selectAllBytes)
{
// if double clicked, and true bits are more in count then will
be unselected all bits of the particular byte.
if (selectedBytes.Where(a => a).Count() > 1)
{
for (int i = 0; i < selectedBytes.Count; i++)
{
selectedBytes[i] = false;
}
}
else
{
// if double clicked, will be selected all bits of the
particular byte.
for (int i = 0; i < selectedBytes.Count; i++)
{
selectedBytes[i] = true;
}
}
}
else // else will update only 1 bit of the byte
selectedBytes[bitIndex] = !selectedBytes[bitIndex];

//assigning values to collection.


var selectedItem = exportedItem.SelectedItems.Where(a =>
a.ByteNumber == byteIndex).FirstOrDefault();
if (selectedItem == null)
exportedItem.SelectedItems.Add(new SelectedExportItem()
{ ByteNumber = byteIndex, SelectedBytes = selectedBytes });
else selectedItem.SelectedBytes = selectedBytes;
}
catch (Exception e)
{
ExceptionHandler.DebugException(e);
}
}

#endregion
public bool importedCarData { get; set; }
private async void tiCarSettings_PreviewMouseDown(object sender,
MouseButtonEventArgs e)
{

}
// Helper method to check if the element or its ancestor is the TabItem.
private bool IsTabItemOrDescendant(DependencyObject target,
DependencyObject originalSource)
{
if (target == null || originalSource == null)
return false;

if (target == originalSource)
return true;

return IsTabItemOrDescendant(VisualTreeHelper.GetParent(target),
originalSource);
}
GetModelNames getModel = new GetModelNames();
private async void Combo_Car_SelectionChanged(object sender,
SelectionChangedEventArgs e)
{

try
{
var selectedItem = (GetMakeNames)comboCar.SelectedValue;

if (selectedItem != null)
{
var carModelList = new ObservableCollection<GetModelNames>();
if (IsInternetAvailable())
{
var jwtToken = _sessionUser.Token;

string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
try
{
string getCarModelURL =
ConfigurationManager.AppSettings.Get("GetCarModelURL").ToString();

var httpClient = new HttpClient()


{
BaseAddress = new Uri(baseURL)
};
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
var response = await
httpClient.GetAsync($"{getCarModelURL}{enAccessMode.Export}/{selectedItem.id}");
response.EnsureSuccessStatusCode();
var message = await
response.Content.ReadAsStringAsync();
var carModelNameList =
JsonConvert.DeserializeObject<Model>(message);
carModelList = new
ObservableCollection<GetModelNames>(carModelNameList.getModelNames);
this.comboCarModel.ItemsSource = null;
this.comboCarModel.ItemsSource = carModelList;

}
catch (Exception)
{

}
else
{
await this.ShowMessageAsync("Internet Disconnected",
"Internet is not available. Getting Data from local Storage. (Locally)",
MessageDialogStyle.Affirmative);
Model carModels = await
SessionHelper.CheckLocalCarModels();
if (carModels != null)
{
carModelList = new
ObservableCollection<GetModelNames>(carModels.getModelNames.Where(o => o.makeId ==
selectedItem.id));
//var carModelCollection =
allCarModelCollection.Where(o => o.makeId == selectedItem.id);
this.comboCarModel.ItemsSource = null;
this.comboCarModel.ItemsSource = carModelList;
}
}
//Getting data of Car Model with Car Session.
CarData carData = await SessionHelper.CheckLocalCarData();
if (importedCarData)
{
var sessionCarMake = carData.CarMake;
var comboCarMake = (GetMakeNames)comboCar.SelectedItem;
var indexOfModel =
carModelList.IndexOf(carModelList.FirstOrDefault(o => o.id == modelId));
//var indexOfModel =
carModelList.IndexOf(carModelList.FirstOrDefault(o => o.model ==
carData.CarModel.model));
if (indexOfModel == -1 && !isCheckingModel &&
sessionCarMake.make == comboCarMake.make)
{
await this.ShowMessageAsync("No Model Found", "Selected
Vehicle Model is Remove or Changed, Please Select again.",
MessageDialogStyle.Affirmative);
isCheckingModel = true;
}
comboCarModel.SelectedIndex = indexOfModel;
importedCarData = false;
}
else if (carData != null && importedCarData == false)
{
var sessionCarMake = carData.CarMake;
var comboCarMake = (GetMakeNames)comboCar.SelectedItem;
var indexOfModel =
carModelList.IndexOf(carModelList.FirstOrDefault(o => o.model ==
carData.CarModel.model));
if (indexOfModel == -1 && !isCheckingModel &&
sessionCarMake.make == comboCarMake.make)
{
await this.ShowMessageAsync("No Model Found", "Selected
Vehicle Model is Remove or Changed, Please Select again.",
MessageDialogStyle.Affirmative);
isCheckingModel = true;
}
comboCarModel.SelectedIndex = indexOfModel;
}

//store last selected car


//this.CarSelectionIndex = comboCar.SelectedIndex;
if (selectedItem.make == "Other")
{
otherCarMake.Visibility = Visibility.Visible;
}
else
{
otherCarMake.Visibility = Visibility.Hidden;
otherCarModel.Visibility = Visibility.Hidden;
}
CheckSignalSerachButton();
newModelBtn.IsEnabled = true;
}
}
catch (Exception)
{
await this.ShowMessageAsync("Error", "something went wrong while
fetching car models.", MessageDialogStyle.Affirmative);
}
}

private void Combo_CarModel_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
var selectedItem = (GetModelNames)comboCarModel.SelectedValue;
if (selectedItem != null)
{
if (selectedItem.model == "Other")
{
otherCarModel.Visibility = Visibility.Visible;
}
else
{
otherCarModel.Visibility = Visibility.Hidden;
}
}
CheckSignalSerachButton();
}

Dictionary<string, BaudRate> baudRateMapping = new Dictionary<string,


BaudRate>
{
{ "Do Not Scan", BaudRate.DoNotScan },
{ "25 kbps", BaudRate.kbps25 },
{ "50 kbps", BaudRate.Kbps50 },
{ "75 kbps", BaudRate.Kbps75 },
{ "100 kbps", BaudRate.Kbps100 },
{ "125 kbps", BaudRate.Kbps125 },
{ "200 kbps", BaudRate.Kbps200 },
{ "250 kbps", BaudRate.Kbps250 },
{ "400 kbps", BaudRate.Kbps400 },
{ "500 kbps", BaudRate.Kbps500 },
{ "800 kbps", BaudRate.Kbps800 },
{ "1000 kbps", BaudRate.Kbps1000 }
};

private int signalsPerPage = 10;


private int currentPage = 1;
private int maxPages = 1;
private long totalRecords = 0;
public async Task GetSignalReportListing()
{
var jwtToken = _sessionUser.Token;
string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
string getSignalReportURL =
ConfigurationManager.AppSettings.Get("GetSignalReportURL").ToString();

int carMakeId = 0;
var selectedCar = (GetMakeNames)comboCar.SelectedValue;
carMakeId = selectedCar?.id ?? 0;

int carModelId = 0;
var selectedModel = (GetModelNames)comboCarModel.SelectedValue;
carModelId = selectedModel?.id ?? 0;

//var selectedYear = comboYear.SelectedValue;


//var year = selectedYear.year;

Dictionary<string, string>[] postData = new Dictionary<string,


string>[1];
postData[0] = new Dictionary<string, string>();
postData[0].Add("carModelId", carModelId.ToString());
//postData[0].Add("year", selectedYear.ToString());
var filterBy = new FetchSignal
{
page = currentPage,
size = signalsPerPage,
filterBy = postData
};

var json = JsonConvert.SerializeObject(filterBy);


var httpContent = new StringContent(json, Encoding.UTF8,
"application/json");

var httpClient = new HttpClient()


{
BaseAddress = new Uri(baseURL)
};

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);
var response = await httpClient.PostAsync(getSignalReportURL,
httpContent);
var signaleCollection = new ObservableCollection<CarSignals>();
if (response.IsSuccessStatusCode)
{
var message = await response.Content.ReadAsStringAsync();
var fileDetailResponse =
JsonConvert.DeserializeObject<FetchSignalReponse>(message);
totalRecords = fileDetailResponse.totalRecords;
int maxPage = (int)Math.Ceiling((double)totalRecords /
signalsPerPage);
maxPages = maxPage;
var i = 1;
foreach (var item in fileDetailResponse.SignalReports)
{
CarSignals signalFilter = new CarSignals();
signalFilter.Id = i;
signalFilter.FileName = item.FileName;
signalFilter.FileURL = item.FileURL;
signalFilter.BaudRate = item.BaudRate;
signalFilter.isVerified = item.IsVerified;
signalFilter.Status = item.IsVerified ? "Verified" : "Not
Verified";
signalFilter.CANConnection = item.CANConnection;
signalFilter.Description = item.Description;
signalFilter.SignalTypeName = item.SignalTypeName;
signalFilter.Year = item.Year;
//signalFilter.Date = item.Date;
signalFilter.Date = ConvertUtcToLocalTime(item.Date);
signaleCollection.Add(signalFilter);
Session prevSession = await SessionHelper.CheckLocalSession();
if (prevSession != null)
{
if
(baudRateMapping.TryGetValue(signalFilter.BaudRate.ToString(), out BaudRate
baudRateEnum))
//if (Enum.TryParse(signalFilter.BaudRate, out BaudRate
baudRateEnum))
{
prevSession.CanVIndex = (int)baudRateEnum;
}
cmbScanBaudCAN0.SelectedIndex = (int)baudRateEnum;
await _sessionHelper.CreateLocalSession(prevSession);
}
i++;
}
signalListView.ItemsSource = signaleCollection;
signalListView.Visibility = Visibility.Visible;
previous_btn.IsEnabled = currentPage > 1;
next_btn.IsEnabled = currentPage < maxPages;

}
}
public static DateTime ConvertUtcToLocalTime(DateTime dateTime)
{
return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.Local);
}
private async void signalSerach_BTN_Click(object sender, RoutedEventArgs e)
{
//start setup for profile controller
var dialogSettings = new MetroDialogSettings()
{
AnimateShow = false,
AnimateHide = false
};
//Prepare Progress Dialog
var msgTitle = "Vehicle";
var msgContent = "Saving Vehicle Data";
profileController = await this.ShowProgressAsync(msgTitle, msgContent,
settings: dialogSettings);
profileController.SetIndeterminate();

profileController.Minimum = 0;
profileController.Maximum = 100;
profileController.SetProgress(20);
var getCarMake = (GetMakeNames)comboCar.SelectedValue;
var carMake = new CarMake
{
id = getCarMake.id,
make = getCarMake.make,
};
profileController.SetProgress(40);
var getCarModel = (GetModelNames)comboCarModel.SelectedValue;
var carModel = new CarModel
{
id = getCarModel.id,
model = getCarModel.model,
};
profileController.SetProgress(60);
//var yearSlect = comboYear?.SelectedValue;
var carData = new CarData()
{
CarMake = carMake,
CarModel = carModel,
Year = comboYear.SelectedValue != null ?
(int)comboYear.SelectedValue : (int?)null,
//Year = yearSlect != null ? 0 : (int)null,
//Year = null,
Registration = textRegistration.Text,
EngineType = (EngineType)comboEngineType?.SelectedValue,
GearBox = (GearBox)comboGearBox?.SelectedValue,
WheelDrive = (WheelDrive)comboWheelDrive?.SelectedValue
};
profileController.SetProgress(80);
CarData car = _sessionHelper.Init(carData);
await _sessionHelper.CreateLocalCarData(car);
currentPage = 1;
await GetSignalReportListing();
profileController.SetProgress(100);
await profileController.CloseAsync();
profileController = null;
if (car != null)
{
await this.ShowMessageAsync("Vehicle!!!", "Vehicle Saved
Successfull", MessageDialogStyle.Affirmative);
isCheckingModel = false;
isCheckingMake = false;
MetroMain.Title = MetroMain.Title = Constants.Application_Title + "
---- " + _sessionUser.UserName + " ---- " + carData.CarModel.model;
}
else
{
await this.ShowMessageAsync("Error", "something went wrong while
fetching car models.", MessageDialogStyle.Affirmative);
}
}
public void CheckSignalSerachButton()
{
bool isSearchEnable = false;
bool isCarMake = comboCar.SelectedValue != null;
bool isCarMakeOther = true;
bool isCarModel = comboCarModel.SelectedValue != null;
bool isCarModelOther = true;
bool isCarYear = comboYear.SelectedValue != null;
bool isEngineType = comboEngineType.SelectedValue != null;
bool isGearBox = comboGearBox.SelectedValue != null;
bool isWheelDrive = comboWheelDrive.SelectedValue != null;
var carMake = (GetMakeNames)comboCar.SelectedValue;
isCarMakeOther = carMake != null && carMake.make == "Other" ? !
string.IsNullOrEmpty(otherCarMake.Text) : true;
var carModel = (GetModelNames)comboCarModel.SelectedValue;
isCarModelOther = carModel != null && carModel.model == "Other" ? !
string.IsNullOrEmpty(otherCarModel.Text) : true;
//if (isCarMake && isCarModel && isCarYear && isEngineType &&
isWheelDrive && isGearBox && isCarMakeOther && isCarModelOther)
//{
// isSearchEnable = true;
//}

if (isCarMake && isCarModel)


{
isSearchEnable = true;
}
signalSerach_BTN.IsEnabled = isSearchEnable;
}

private async void PreviousButton_Click(object sender, RoutedEventArgs e)


{
if (currentPage > 1)
{
currentPage--;
await GetSignalReportListing();
}
}

private async void NextButton_Click(object sender, RoutedEventArgs e)


{
if (currentPage < maxPages)
{
currentPage++;
await GetSignalReportListing();
}
}

private void Combo_Year_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
CheckSignalSerachButton();
}

private void Combo_GearBox_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
CheckSignalSerachButton();
}

private void Combo_EngineType_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
CheckSignalSerachButton();
}

private void Combo_WheelDrive_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
CheckSignalSerachButton();
}

private void OtherCarMake_Entered(object sender, TextChangedEventArgs e)


{
CheckSignalSerachButton();
}

private void OtherCarModel_Entered(object sender, TextChangedEventArgs e)


{
CheckSignalSerachButton();
}

private void CheckBox_Checked(object sender, RoutedEventArgs e)


{
//filterGridCheck.IsChecked = !filterGridCheck.IsChecked
if (filterGridCheck.IsChecked == true)
{
filterGrid.Visibility = Visibility.Visible;
}
else
{
filterGrid.Visibility = Visibility.Hidden;
// Initial State the values.
startHex.Text = null;
endhex.Text = null;
startInt = 0;
endInt = 0;
}
}

private async void ScannerFilterButton_Clicked(object sender,


RoutedEventArgs e)
{
//Converting Hex Values to Integer
var start = Convert.ToInt32(startHex.Text, 16);
var end = Convert.ToInt32(endhex.Text, 16);

if (start > end)


{
await this.ShowMessageAsync("Error", "End value must be grater",
MessageDialogStyle.Affirmative);
}
else
{
startInt = start;
endInt = end;
}
}
public void CheckFilterSignalButton()
{
bool isFilterEnable = false;
// Checking Start and End Values are not null , Empty or Invalid
bool isSttartHex = !string.IsNullOrEmpty(startHex.Text) &&
startHex.Background != Brushes.Red;
bool isEndHex = !string.IsNullOrEmpty(endhex.Text) && endhex.Background
!= Brushes.Red;
if (isSttartHex && isEndHex)
{
isFilterEnable = true;
}
scannerFilterBtn.IsEnabled = isFilterEnable;
}
private void HexTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = (TextBox)sender;

// Remove non-hex characters


string cleanedText = Regex.Replace(textBox.Text, "[^0-9A-Fa-f]", "");

// Update TextBox text


//int selectionStart = textBox.SelectionStart;
//textBox.Text = cleanedText;
//textBox.SelectionStart = selectionStart;
textBox.Text.ToUpper();
// Highlight Incorrect input
if (textBox.Text != cleanedText)
{
textBox.Background = Brushes.Red;
}
else
{
textBox.Background = SystemColors.ControlTextBrush;
}
//Enable or Disable Button
CheckFilterSignalButton();
}

private void TabItem_KeyDown(object sender, KeyEventArgs e)


{

var allowScroll = arrowScroll.IsChecked;


//if (e.Key == Key.Up || e.Key == Key.Down)
if ((e.Key == Key.Up || e.Key == Key.Down) && arrowScroll.IsChecked ==
true)
{
ScrollViewer scrollViewer = null;
//Lines to Scroll.
int toScroll = 0;
// Scroll Main Config Window After Start or Redirection.
if (tabConMain.SelectedIndex == 0 || tabConMain.SelectedIndex == -
1)
{
scrollViewer = configScrollerView;
toScroll = 5;
}
else if (tabConMain.SelectedIndex == 1)
{
// Get The Scroll Viewer Class for DataGrid
scrollViewer = FindVisualChild<ScrollViewer>(gridList);
toScroll = 1;
}
else
{
scrollViewer = null;
}
if (scrollViewer != null)
{
if (e.Key == Key.Up)
{
// Scroll Up

scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - toScroll);
e.Handled = true;
}
else if (e.Key == Key.Down)
{
// Scroll Down

scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + toScroll);
e.Handled = true;
}
}
}
}
private T FindVisualChild<T>(DependencyObject parent) where T :
DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child is T result)
return result;

T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
return null;
}

private async void cmbScanBaudCAN0_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
Session prevSession = await SessionHelper.CheckLocalSession();
if (prevSession != null)
{
prevSession.CanVIndex = cmbScanBaudCAN0.SelectedIndex;
//Session newSession = SessionHelper.Init(prevSession);
await _sessionHelper.CreateLocalSession(prevSession);
}

var selecteIndex = cmbScanBaudCAN0.SelectedIndex - 1;


if (selecteIndex >= 0)
{
cmbBaudCAN0.SelectedIndex = selecteIndex;
}
}

private async void cmbScanBaudCAN1_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
Session prevSession = await SessionHelper.CheckLocalSession();
if (prevSession != null)
{

prevSession.CanIndex = cmbScanBaudCAN1.SelectedIndex;
//Session newSession = SessionHelper.Init(prevSession);
await _sessionHelper.CreateLocalSession(prevSession);
}
var selecteIndex = cmbScanBaudCAN1.SelectedIndex - 1;
if (selecteIndex >= 0)
{
cmbBaudCAN1.SelectedIndex = selecteIndex;
}
}

private async void ClearBtn_Clicked(object sender, RoutedEventArgs e)


{
var dialogSettings = new MetroDialogSettings()
{
ColorScheme = MetroDialogColorScheme.Inverted,
};
var result = await MetroMain.ShowMessageAsync("Clear data.", "Are you
sure you want to Clear?", MessageDialogStyle.AffirmativeAndNegative, settings:
dialogSettings);
if (result == MessageDialogResult.Affirmative)
{
isClearButtonClicked = true;

if (tglDataSync.IsChecked == true)
{
if (dataSyncTimer != null)
{
tglDataSync.IsChecked = false; // When clear button is
pressed then general status is turned OFF
isExportSettingsPressed = false;
}
}
Button btn = (Button)sender;
string tabIndex = new
String(btn.Name.Where(Char.IsDigit).ToArray());

var rbPref = "radBts";


var rbCMPref = "radCMBit";
var sepratorKey = "B";
var sepratorKeyIgnore = "I";

var tabName = string.Empty;

CANBUS_MSG_SOURCE[Convert.ToInt32(tabIndex)] = 0;
CANBUS_MSG_IDS[Convert.ToInt32(tabIndex)] = 0;

//every 'Signal Report' button has index with name, so we check


'tabIndex' to get tab details
//check config tab name
if (tabIndex == "0")
{
tabName = "BTS 0";
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
BTS0_DATA_BYTES[i] = (byte)0;
//Trigger Values
BTS0_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
BTS0_DATA_BYTES[i + 8 + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "1")
{
tabName = "BTS 1";
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
BTS1_DATA_BYTES[i] = (byte)0;
//Trigger Values
BTS1_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
BTS1_DATA_BYTES[i + 8 + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "2")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT0_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT0_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT0_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "3")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT1_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT1_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT1_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "4")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT2_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT2_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT2_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "5")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT3_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT3_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT3_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "6")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT4_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT4_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT4_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "7")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT5_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT5_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT5_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "8")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT6_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT6_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT6_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "9")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT7_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT7_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT7_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "10")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT8_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT8_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT8_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "11")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT9_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT9_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT9_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "12")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT10_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT10_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT10_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "13")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT11_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT11_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT11_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "14")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT12_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT12_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT12_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "15")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT13_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT13_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT13_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "16")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT14_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT14_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT14_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == "17")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT15_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT15_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT15_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}

}
}

private async void MainTabControl_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
if (tabConMain.SelectedIndex == 2)
{
if (IsInternetAvailable())
{
await GetCarMakes();
await GetCarModels();
}
}
else if (tabConMain.SelectedIndex == 0)
{
if (IsInternetAvailable())
{
await FetchedSignalTypes();
}
}
}
}

private async void ClearByteBtn_Clicked(object sender, RoutedEventArgs e)


{
Button btn = (Button)sender;
string tabDigits = new String(btn.Name.Where(Char.IsDigit).ToArray());
//string tabIndex = btn.Name;
var tabIndex = tabDigits.Substring(1);

var rbPref = "radBts";


var rbCMPref = "radCMBit";
var sepratorKey = "B";
var sepratorKeyIgnore = "I";
var byteIndex = Convert.ToInt32(btn.CommandParameter);

var tabName = string.Empty;

if (tabIndex == "0")
{
tabName = "BTS 0";
//Mask Values
BTS0_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
BTS0_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
BTS0_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "1")
{
tabName = "BTS 1";
//Mask Values
BTS1_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
BTS1_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
BTS1_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "2")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();

//Mask Values
CMBIT0_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT0_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT0_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "3")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT1_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT1_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT1_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;

}
else if (tabIndex == "4")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT2_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT2_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT2_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "5")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT3_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT3_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT3_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "6")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT4_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT4_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT4_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "7")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT5_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT5_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT5_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "8")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT6_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT6_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT6_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "9")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT7_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT7_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT7_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "10")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT8_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT8_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT8_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "11")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT9_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT9_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT9_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "12")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT10_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT10_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT10_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "13")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT11_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT11_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT11_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "14")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT12_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT12_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT12_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "15")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT13_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT13_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT13_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "16")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT14_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT14_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT14_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
else if (tabIndex == "17")
{
tabName = "BTS 1";
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//Mask Values
CMBIT15_DATA_BYTES[byteIndex] = (byte)0;
//Trigger Values
CMBIT15_DATA_BYTES[byteIndex + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT15_DATA_BYTES[byteIndex + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{byteIndex}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}

private void ChangeTextBlockColor(RadioButton radioButton, Brush color)


{
// Find the parent Border of the TextBox
Border border = FindParent<Border>(radioButton);

// Change the background color of the Border


if (border != null)
{
// Find the parent Border of the TextBox
StackPanel stackPanel1 = FindParent<StackPanel>(border);
if (stackPanel1 != null)
{
Border border2 = FindFirstChild<Border>(stackPanel1);
if (border2 != null)
{
TextBlock textBlock = FindFirstChild<TextBlock>(border2);
if (textBlock != null)
{
textBlock.Foreground = color; // Change color to
whatever you want
}
}
}
}

private T FindParent<T>(DependencyObject child) where T : DependencyObject


{
DependencyObject parentObject = VisualTreeHelper.GetParent(child);

if (parentObject == null)
return null;

T parent = parentObject as T;
if (parent != null)
return parent;
else
return FindParent<T>(parentObject);
}
private T FindFirstChild<T>(DependencyObject parent) where T :
DependencyObject
{
if (parent == null)
return null;

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)


{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child != null && child is T)
{
return child as T;
}
else
{
T result = FindFirstChild<T>(child);
if (result != null)
return result;
}
}
return null;
}

private async void NewModel_BTN_Click(object sender, RoutedEventArgs e)


{
if (IsInternetAvailable())
{
AddNewModel addnewModel = new AddNewModel(this);
addnewModel.Owner = this;
addnewModel.Show();
//CarData carData = await SessionHelper.CheckLocalCarData();
}
}

private async Task StoreCanIDs()


{
CarData carData = await SessionHelper.CheckLocalCarData();
if (carData != null && dataGridItems.Count > 0)
{

//get file path from app.config


string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
string AddVehicleCanIdURL =
ConfigurationManager.AppSettings.Get("AddVehicleCanIdURL").ToString();
var jwtToken = _sessionUser.Token;
var canIds = dataGridItems.Where(x => x.Port == "CAN-V").Select(o
=> o.ID).ToList();
VehicleCanIdsDTO vehicleCanIds = new VehicleCanIdsDTO
{
CarModelId = carData.CarModel.id,
CanIds = canIds
};

HttpClient client = new HttpClient();

var httpClient = new HttpClient()


{
BaseAddress = new Uri(baseURL)
};

try
{
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", jwtToken);

var json = JsonConvert.SerializeObject(vehicleCanIds);


var httpContent = new StringContent(json, Encoding.UTF8,
"application/json");

ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
await httpClient.PostAsync(AddVehicleCanIdURL, httpContent);
//var serverResponse = await
httpClient.PostAsync(AddVehicleCanIdURL, httpContent);
//if (serverResponse.IsSuccessStatusCode)
//{
// var message = await
serverResponse.Content.ReadAsStringAsync();
//}
}
catch (Exception)
{

}
}

private Dictionary<int?, int> _selectedSignalIds = new Dictionary<int?,


int>();

private async void Config_SignalType_SelectionChanged(object sender,


SelectionChangedEventArgs e)
{
try
{
#region Switching toggle button off when signal is fetched
if (tglDataSync.IsChecked == true)
{
if (dataSyncTimer != null)
{
tglDataSync.IsChecked = false;
isExportSettingsPressed = false;
}
}

#endregion
ComboBox comboBox = sender as ComboBox; // Cast sender to ComboBox
if (comboBox != null)
{
// Get the selected item from the ComboBox
var selectedItem = (SignalFilter)comboBox.SelectedItem;

if (selectedItem != null)
{
Match match = Regex.Match(comboBox.Name, @"\d+");
if (match.Success)
{
string extractedNumber = match.Value;
int idx = int.Parse(extractedNumber);
_selectedSignalIds[idx] = selectedItem.Id;
}
var canDescription = selectedItem.Description;
//var signalName = signalTypeName.Content.ToString();
var signalName = selectedItem.SignalTypeName;

string tabIndex = new


String(comboBox.Name.Where(Char.IsDigit).ToArray());
var tabindex = Convert.ToInt32(tabIndex);
var toogle = "toggle";
ToggleButton toggleButton =
(ToggleButton)FindName($"{toogle}{tabindex}");

//return;
//var fileurl = signalFileURL.Content.ToString();
var fileurl = selectedItem.FileURL;
bool isVerified = false;

if (selectedItem.isVerified == true)
isVerified = true;

string info = new WebClient().DownloadString(fileurl);


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(info);

Dictionary<string, string> signalInfo = new


Dictionary<string, string>();

XmlNodeList entryNodes =
xmlDoc.SelectNodes("//Section/entry");
foreach (XmlNode entryNode in entryNodes)
{
var key = entryNode.Attributes["name"].Value;
var value = entryNode.InnerText;
signalInfo.Add(key, value);
}

string Mask = "Mask";


string Trigger = "Trigger";
string MessageID = "MessageID";
string Format = "Format";
string BaudRate = "BaudRate";
string Function = "Logic";
string CanSource = "CanSource";

var msgId = signalInfo.Single(x => x.Key == MessageID);


var format = signalInfo.Single(x => x.Key == Format).Value;
//var msgIdByte = Convert.ToByte(msgId.Value);
var msgIdByte = Convert.ToUInt32(msgId.Value);
string baudRate = signalInfo.Single(x => x.Key ==
BaudRate).Value;
string canPort = signalInfo.Single(x => x.Key ==
CanSource).Value;

byte[] byteArray = new byte[24];


var i = 0;
while (i < 8)
{
var getMask = signalInfo.Single(x => x.Key == $"{Mask}
{i}");
byteArray[i] = (Convert.ToByte(getMask.Value));

var getTrigger = signalInfo.Single(x => x.Key ==


$"{Trigger}{i}");
byteArray[i + 8] = (Convert.ToByte(getTrigger.Value));

var getFunction = signalInfo.Single(x => x.Key ==


$"{Function}{i}");
byteArray[i + 16] =
(Convert.ToByte(getFunction.Value));

i++;
}

if (cmbBaudCAN0.Text != baudRate)
{
//Prepare Progress Dialog
var msgTitle = "Buad rate is unmatched";
var msgContent = "Do you want to change baud rate?";

//MessageBoxResult result = MessageBox.Show(msgTitle,


msgContent, MessageBoxButton.OKCancel);
var result = await this.ShowMessageAsync(msgTitle,
msgContent, MessageDialogStyle.AffirmativeAndNegative);
//change the selection of combox box by matching string
if (result == MessageDialogResult.Affirmative)
{
int index = -1;
for (int j = 0; j < cmbBaudCAN0.Items.Count; j++)
{
ComboBoxItem item =
(ComboBoxItem)cmbBaudCAN0.Items[j];
if (item.Content.ToString() == baudRate)
{
index = j;
break;
}
}

if (index != -1)
{
cmbBaudCAN0.SelectedIndex = index;
}
}
}

//check if status is verified or not


if (!isVerified)
{
//Prepare Progress Dialog
var msgTitle = "You are fetching unverified signal.";
var msgContent = "Do you want to fetch signal?";

//MessageBoxResult result = MessageBox.Show(msgTitle,


msgContent, MessageBoxButton.OKCancel);
var result = await this.ShowMessageAsync(msgTitle,
msgContent, MessageDialogStyle.AffirmativeAndNegative);

//var result = await MetroMain.ShowMessageAsync("Do you


want to move the data?", "Selected bit is already exist with same id at tab CM
Position 8", MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);
if (result == MessageDialogResult.Affirmative)
{
SetValueToUI(tabindex, canPort, msgIdByte, format,
canDescription, signalName, toggleButton);
//this method map the byte array of incoming signal
from cloud to copy temporary collection
CloneSignalIntoCollection(tabindex, byteArray);
//if (tglDataSync.IsChecked == true)
//{
// if (dataSyncTimer != null)
// {
// await this.ShowMessageAsync("Message",
"Please Export the Fetched Signal!!!", MessageDialogStyle.Affirmative);
// }
// isExportSettingsPressed = false;
//}
}
}
else
{
SetValueToUI(tabindex, canPort, msgIdByte, format,
canDescription, signalName, toggleButton);

//this method map the byte array of incoming signal


from cloud to copy temporary collection
CloneSignalIntoCollection(tabindex, byteArray);

}
isSignalSelected = true;
isExportSettingsPressed = false;
}
}
foreach (var kvp in idToBufferPosition)
{
// Try to parse the string value to an integer
if (int.TryParse(kvp.Value, out int parsedValue))
{
// If parsing is successful, store the integer value in
_selectedSignalIds
_selectedSignalIds[kvp.Key] = parsedValue;
}
else
{
_selectedSignalIds[kvp.Key] = 0;
}
}
}
catch (Exception)
{

}
}
public void CloneSignalIntoCollection(int tabIndex, byte[] byteArray)
{

//BTS section
if (tabIndex == 0)
{
BTS0_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
BTS0_DATA_BYTES_COPY.Add(byteArray[index]);
}
//set flag for fetch signal
BTS0_isFetched = true;
}

if (tabIndex == 1)
{
BTS1_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
BTS1_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


BTS1_isFetched = true;
}

//CMBit section
if (tabIndex == 2)
{
CMBIT0_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT0_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM0_isFetched = true;
}

if (tabIndex == 3)
{
CMBIT1_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT1_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM1_isFetched = true;
}

if (tabIndex == 4)
{
CMBIT2_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT2_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM2_isFetched = true;
}

if (tabIndex == 5)
{
CMBIT3_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT3_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM3_isFetched = true;
}

if (tabIndex == 6)
{
CMBIT4_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT4_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM4_isFetched = true;
}

if (tabIndex == 7)
{
CMBIT5_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT5_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM5_isFetched = true;
}

if (tabIndex == 8)
{
CMBIT6_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT6_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM6_isFetched = true;
}

if (tabIndex == 9)
{
CMBIT7_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT7_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM7_isFetched = true;
}

if (tabIndex == 10)
{
CMBIT8_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT8_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM8_isFetched = true;
}

if (tabIndex == 11)
{
CMBIT9_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT9_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM9_isFetched = true;
}

if (tabIndex == 12)
{
CMBIT10_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT10_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM10_isFetched = true;
}

if (tabIndex == 13)
{
CMBIT11_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT11_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM11_isFetched = true;
}

if (tabIndex == 14)
{
CMBIT12_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT12_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM12_isFetched = true;
}

if (tabIndex == 15)
{
CMBIT13_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT13_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM13_isFetched = true;
}

if (tabIndex == 16)
{
CMBIT14_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT14_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM14_isFetched = true;
}

if (tabIndex == 17)
{
CMBIT15_DATA_BYTES_COPY.Clear();
for (int index = 0; index < byteArray.Length; index++)
{
CMBIT15_DATA_BYTES_COPY.Add(byteArray[index]);
}

//set flag for fetch signal


CM15_isFetched = true;
}
}

public async void AddSignalLike(object sender, RoutedEventArgs e)


{

}
public void SetValueToUI(int tabIndex, string canPort, uint msgIdByte,
string format, string canDescription, string signalName, ToggleButton toggleButton)
{
isFetchFromCloud = true;
toggleButton.Visibility = Visibility.Visible;
toggleButton.IsChecked = false;

CANBUS_MSG_IDS_COPY[tabIndex] = msgIdByte;
//msgFormat.Content = format;
//MSG_FORMAT_COPY.Add(tabIndex, msgFormat.Content.ToString());
MSG_FORMAT_COPY.Remove(tabIndex);
CAN_PORT_COPY.Remove(tabIndex);
MSG_FORMAT_COPY.Add(tabIndex, format);
CAN_PORT_COPY.Add(tabIndex, canPort);
CANBUS_MSG_SOURCE_COPY[tabIndex] = ((byte)(canPort.Equals("CAN-V") ?
1 : 2));

var tbDesc = "tbSignalDescription";


var tbSignal = "tbSignalType";
var showHexBts = "cbShowHex_BTS";
var showDecBts = "cbShowDec_BTS";
var showHexCMBit = "cbShowHex_CMBit";
var showDecCMBit = "cbShowDec_CMBit";
var signalReportBtn = "btnSignalReport";
var fetchSignalBtn = "btnFetchSignal";
var clearAllBtn = "btnClear";
var seprator = "seprator";
var thumbLike = "thumbLike";
var cmbSignalType = "cmbSignalType";
var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}{tabIndex}");

TextBlock signalDesc = (TextBlock)FindName($"{tbDesc}{tabIndex}");


signalDesc.Text = canDescription;

TextBlock signalType = (TextBlock)FindName($"{tbSignal}{tabIndex}");


signalType.Text = signalName;

CheckBox showHex = tabIndex < 2 ? (CheckBox)FindName($"{showHexBts}


{tabIndex}") : (CheckBox)FindName($"{showHexCMBit}{tabIndex - 2}");
//CheckBox showHex = (CheckBox)FindName($"{showHexBts}{tabIndex}");
showHex.Visibility = Visibility.Collapsed;

CheckBox showDec = tabIndex < 2 ? (CheckBox)FindName($"{showDecBts}


{tabIndex}") : (CheckBox)FindName($"{showDecCMBit}{tabIndex - 2}");
//CheckBox showDec = (CheckBox)FindName($"{showDecBts}{tabIndex}");
showDec.Visibility = Visibility.Collapsed;

Button signalReportBtnHide = (Button)FindName($"{signalReportBtn}


{tabIndex}");
signalReportBtnHide.Visibility = Visibility.Collapsed;

//Button fetchSignalBtnHide = (Button)FindName($"{fetchSignalBtn}


{tabIndex}");
//fetchSignalBtnHide.Visibility = Visibility.Collapsed;

Button clearAllBtnHide = (Button)FindName($"{clearAllBtn}{tabIndex}");


clearAllBtnHide.Visibility = Visibility.Collapsed;

if (tabIndex < 18)


{
Button thumblikeVisible = (Button)FindName($"{thumbLike}
{tabIndex}");
if (thumblikeVisible != null)
{
thumblikeVisible.Visibility = Visibility.Visible;
var signals = (SignalFilter)cmbSignal.SelectedValue;
if (signals != null)
{
if (thumblikeVisible.Visibility == Visibility.Visible &&
signals.LikeStatus == 1)
{
thumblikeVisible.Foreground = Brushes.Orange;
thumblikeVisible.IsEnabled = false;
}
else
{
thumblikeVisible.IsEnabled = false;
}
}
else
{
thumblikeVisible.IsEnabled = false;
}

}
}

//Separator sepratorHide = (Separator)FindName($"{seprator}


{tabIndex}");
//sepratorHide.Visibility = Visibility.Hidden;
}

private async Task<GetSignalByIdResponse> GetSignalDetailsById(int


signalId)
{
var response = new GetSignalByIdResponse();
string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
var httpClient = new HttpClient()
{
BaseAddress = new Uri(baseURL)
};
try
{
var getSignalByIdURL =
$"{baseURL}api/SignalReport/signal-report/{signalId}";

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Session session = await SessionHelper.CheckLocalSession();
var sessionUser = _sessionUser;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", session.Token);
var serverResponse = await httpClient.GetAsync(getSignalByIdURL);
if (serverResponse.IsSuccessStatusCode)
{
var signalDetailmessage = await
serverResponse.Content.ReadAsStringAsync();
var signalDetailResponse =
JsonConvert.DeserializeObject<GetSignalByIdResponse>(signalDetailmessage);
response.Id = signalDetailResponse.Id;
response.Description = signalDetailResponse.Description;
response.SignalType = signalDetailResponse.SignalType;
return response;

}
else
{
var contentStream = await
serverResponse.Content.ReadAsStringAsync();
var errorResponse =
JsonConvert.DeserializeObject<HttpErrorResponse>(contentStream);
await this.ShowMessageAsync("Message", errorResponse.Error,
MessageDialogStyle.Affirmative);
}
}

catch (Exception)
{
this.Close();
await this.ShowMessageAsync("Error", "Signal Details not Fetched",
MessageDialogStyle.Affirmative);
}
return response;
}

private async void LikeButton_Clicked(object sender, RoutedEventArgs e)


{
Button btn = (Button)sender;
string baseURL =
ConfigurationManager.AppSettings.Get("BaseURL").ToString();
string addSignalLikeURL =
ConfigurationManager.AppSettings.Get("AddSignalLikeURL").ToString();
var httpClient = new HttpClient()
{
BaseAddress = new Uri(baseURL)
};
try
{
Match match = Regex.Match(btn.Name, @"\d+");
if (match.Success)
{
string extractedNumber = match.Value;
int idx = int.Parse(extractedNumber);
MSG_FORMAT_COPY.Remove(idx);
CAN_PORT_COPY.Remove(idx);

var cmbSignalType = "cmbSignalType";


var cmbSignal = (ComboBox)this.FindName($"{cmbSignalType}
{idx}");

var signals = (SignalFilter)cmbSignal.SelectedValue;

var addSignalLike = new SignalLikeDTO()


{
SignalId = signals.Id,
IsLike = true
};

var json = JsonConvert.SerializeObject(addSignalLike);


var httpContent = new StringContent(json, Encoding.UTF8,
"application/json");

ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
Session session = await SessionHelper.CheckLocalSession();
var sessionUser = _sessionUser;
httpClient.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", session.Token);
var serverResponse = await
httpClient.PostAsync(addSignalLikeURL, httpContent);
if (serverResponse.IsSuccessStatusCode)
{
var signalLikeMessage = await
serverResponse.Content.ReadAsStringAsync();
var signalLikeResponse =
JsonConvert.DeserializeObject<AddSignalLikeResponse>(signalLikeMessage);
await this.ShowMessageAsync("Message", "Signal Report
Liked", MessageDialogStyle.Affirmative);
if (signalLikeResponse.IsLike == true)
{
btn.Foreground = Brushes.Orange;
btn.IsEnabled = false;
}
}
else
{
var contentStream = await
serverResponse.Content.ReadAsStringAsync();
var errorResponse =
JsonConvert.DeserializeObject<HttpErrorResponse>(contentStream);
await this.ShowMessageAsync("Message", errorResponse.Error,
MessageDialogStyle.Affirmative);
}
}
}
catch (Exception)
{
this.Close();
await this.ShowMessageAsync("Error", "something went wrong while
adding signal like", MessageDialogStyle.Affirmative);
}
}
private void ClearCMPosition(int tabIndex)
{
var rbPref = "radBts";
var rbCMPref = "radCMBit";
var sepratorKey = "B";
var sepratorKeyIgnore = "I";

CANBUS_MSG_SOURCE[tabIndex] = 0;
CANBUS_MSG_IDS[tabIndex] = 0;

if (tabIndex == 0)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
for (int i = 0; i < 8; i++)
{
BTS0_DATA_BYTES[i] = (byte)0;
BTS0_DATA_BYTES[i + 8] = (byte)0;
BTS0_DATA_BYTES[i + 8 + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 1)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
for (int i = 0; i < 8; i++)
{
BTS1_DATA_BYTES[i] = (byte)0;
BTS1_DATA_BYTES[i + 8] = (byte)0;
BTS1_DATA_BYTES[i + 8 + 8] = (byte)0;
var rbName = $"{rbPref}{tabIndex}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 2)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (tabIndex - 2).ToString();
for (int i = 0; i < 8; i++)
{
CMBIT0_DATA_BYTES[i] = (byte)0;
CMBIT0_DATA_BYTES[i + 8] = (byte)0;
CMBIT0_DATA_BYTES[i + 8 + 8] = (byte)0;
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 3)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT1_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT1_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT1_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 4)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT2_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT2_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT2_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 5)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT3_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT3_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT3_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 6)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT4_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT4_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT4_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 7)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT5_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT5_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT5_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 8)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT6_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT6_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT6_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 9)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT7_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT7_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT7_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 10)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT8_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT8_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT8_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 11)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT9_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT9_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT9_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 12)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT10_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT10_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT10_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 13)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT11_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT11_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT11_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 14)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT12_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT12_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT12_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 15)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT13_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT13_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT13_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 16)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT14_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT14_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT14_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
else if (tabIndex == 17)
{
if (isFetchFromCloud)
{
ToggleButton tBtn =
(ToggleButton)FindName($"toggle{tabIndex}");
if (tBtn != null)
{
tBtn.IsChecked = true;
}
}
var index = (Convert.ToInt32(tabIndex) - 2).ToString();
//reset data bytes 0 -7
for (int i = 0; i < 8; i++)
{
//Mask Values
CMBIT15_DATA_BYTES[i] = (byte)0;
//Trigger Values
CMBIT15_DATA_BYTES[i + 8] = (byte)0;
//Logical Operatior Indexes.
CMBIT15_DATA_BYTES[i + 8 + 8] = (byte)0;
//radCMBit0B7I
var rbName = $"{rbCMPref}{index}{sepratorKey}{i}
{sepratorKeyIgnore}";
var rbIgnore = (RadioButton)this.FindName(rbName);
if (rbIgnore.IsChecked == false)
rbIgnore.IsChecked = true;
}
}
}
private async void Button_ClearAll_Clicked(object sender, RoutedEventArgs
e)
{
var dialogSettings = new MetroDialogSettings()
{
ColorScheme = MetroDialogColorScheme.Inverted,
};

var result = await MetroMain.ShowMessageAsync("Clear All Data", "Are


you sure you want to Clear all CM positions?",
MessageDialogStyle.AffirmativeAndNegative, settings: dialogSettings);

if (result == MessageDialogResult.Affirmative)
{
isClearButtonClicked = true;
undoButtonPressedBeforeExport = true;
if (tglDataSync.IsChecked == true)
{
if (dataSyncTimer != null)
{
tglDataSync.IsChecked = false; // When clear button is
pressed then general status is turned OFF
isExportSettingsPressed = false;
}
}

for (int tabIndex = 0; tabIndex <= 17; tabIndex++)


{
ClearCMPosition(tabIndex);
}
}
}
}
#region Converters | Number Formats, Boolean to Visibility Converter
//Number type Converter
public class NumberSystemConverter : IValueConverter
{
Stack<object> stack = new Stack<object>();
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
object[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D",
"E", "F" };
try
{
UInt32 number = System.Convert.ToUInt32(value.ToString());
int para = System.Convert.ToUInt16(parameter.ToString());
if (number == 0)
{
if (para == 2) return $"{String.Format("{0:D8}", value)}";
else if (para == 16) return $"{String.Format("{0:D2}",
value)}";
else if (para == 32) return $"{String.Format("{0:D8}",
value)}";
else return 0;
}
UInt32 divisor = System.Convert.ToUInt32((para > 16) ? "16" :
parameter.ToString());
while (number > 0)
{
UInt32 remainder = number % divisor;
stack.Push(digits[remainder]);
number /= divisor;
}

if (para == 2)
{
while (stack.Count < 8) stack.Push(0);
}
else if (para == 16)
{
while (stack.Count < 2) stack.Push(0);
}
else if (para > 16)
{
while (stack.Count < 8) stack.Push(0);
}

StringBuilder builder = new StringBuilder();


while (stack.Count > 0)
{
builder.Append(stack.Pop().ToString());
}
//if (para == 2) return $"{String.Format("{0:D8}",
System.Convert.ToUInt16(builder.ToString()))}";
return builder.ToString();
}
catch (Exception)
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
//throw new NotImplementedException();
try
{
int para = System.Convert.ToUInt16(parameter.ToString());
if (para > 16)
{
return System.Convert.ToUInt32(value.ToString(),
16).ToString();
}
else
{
return System.Convert.ToUInt16(value.ToString(),
para).ToString();
}

}
catch (Exception)
{
return null;
}

}
}
public class HexToDecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
try
{
string hexValue = value.ToString();
int decValue = int.Parse(hexValue,
System.Globalization.NumberStyles.HexNumber);
return decValue;
}
catch (Exception ex)
{
ExceptionHandler.DebugException(ex);
return value;
}
}

public object ConvertBack(object value, Type targetType, object parameter,


CultureInfo culture)
{
throw new NotImplementedException();
}
}

public class BinaryConverter : IValueConverter


{
Stack<object> stack = new Stack<object>();
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
object[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D",
"E", "F" };
try
{
//int number = System.Convert.ToInt32(value.ToString());
//if (number == 0)
//{
// return 0;
//}
//int divisor = System.Convert.ToInt32(parameter.ToString());
//while (number > 0)
//{
// int remainder = number % divisor;
// stack.Push(digits[remainder]);
// number /= divisor;
//}
//StringBuilder builder = new StringBuilder();
//while (stack.Count > 0)
//{
// builder.Append(stack.Pop().ToString());
//}
//return builder.ToString();

int para = System.Convert.ToUInt16(parameter.ToString());


return System.Convert.ToUInt16(value.ToString(), para).ToString();
}
catch (Exception)
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
//try
//{
// int para = System.Convert.ToUInt16(parameter.ToString());
// return System.Convert.ToUInt16(value.ToString(),
para).ToString();
//}
//catch (Exception ex)
//{
// return null;
//}

}
}

public class BoolToOppositeBoolConverter : IValueConverter


{
#region IValueConverter Members

public object Convert(object value, Type targetType, object parameter,


System.Globalization.CultureInfo culture)
{
if (targetType != typeof(bool)) return false;
//throw new InvalidOperationException("The target must be a boolean");

return !(bool)value;
}

public object ConvertBack(object value, Type targetType, object parameter,


System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}

#endregion
}

public class BooleanToVisibilityConverterInverted : IValueConverter


{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
bool boolValue = (bool)value;
boolValue = (parameter != null) ? !boolValue : boolValue;
return boolValue ? Visibility.Collapsed : Visibility.Visible;
}

public object ConvertBack(object value, Type targetType, object parameter,


System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

#endregion End of Converters


}

You might also like