0% found this document useful (0 votes)
17 views281 pages

Code 2

Uploaded by

Waqas Javaid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views281 pages

Code 2

Uploaded by

Waqas Javaid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
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