/// UpdateAlert (command) - Jacob Monger
 /// <summary>
 /// if valid updates setting, removes alert from alert list if flagged
 /// </summary>
 /// <param name="message"> user input</param>
 public void UpdateAlert(object message)
 {
     if (SelectedAlertsIndex != -1)
     {
         if (double.TryParse(message.ToString(), out double newValue))
         {
             if (AlertList[SelectedAlertsIndex].ThresholdToDisplay != null)
             {
                 AlertViewModelInstance.RemoveAlert(AlertList[SelectedAlertsIndex].AlertName);
             }
             String AlertName = AlertList[SelectedAlertsIndex].AlertName;
             Properties.Settings.Default[AlertName] = newValue;    //convert.ToDouble(null);
             Properties.Settings.Default.Save();
             AlertList.Remove(AlertList[SelectedAlertsIndex]);
             AlertList.Insert(SelectedAlertsIndex, new AlertListItemModel(AlertName));
         }
     }
 }
        /// ConnectToSerialPort (event)- Jacob Monger
        /// <summary>
        /// reads in data, logs data, checks if limits excided and update graphs
        /// </summary>
        /// <param name="sender"> sellected port </param>
        private void rx_data_event(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            SerialPort dataIn = sender as SerialPort; //serial port

            if (dataIn.IsOpen)
            {
                string data = "-";
                try
                {
                    data = dataIn.ReadLine(); //try to read in data
                }
                catch {}

                if (data.StartsWith("#"))
                {
                    double CurrentValue;
                    data = data.Remove(0, 1);                                            // remove #

                    if (1 == (int)Properties.Settings.Default.WriteToDataLog)            //is data loging enabled
                    {
                        if (!Directory.Exists(MyDocuments))                              //if folder isn't there
                        {
                            Directory.CreateDirectory(MyDocuments);                      // create
                        }
                        File.AppendAllText(DataLogPath, DateTime.Now + " ---> " + data); // create/ append to file
                    }

                    try
                    {
                        string[] variables = data.Split(','); //split up data

                        CurrentValue = Convert.ToDouble(variables[0]);
                        ECUViewModelInstance.Graph1Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("ECULeftTorqueDemand", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[1]);
                        ECUViewModelInstance.Graph2Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("ECURightTorqueDemand", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[2]);
                        ECUViewModelInstance.Graph3Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("ECUAcclerationDemand", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[3]);
                        ECUViewModelInstance.Graph4Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("ECUFrontBrakeDemand", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[4]);
                        KistlerViewModelInstance.Graph1Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("KistlerVelX", CurrentValue);
                        if (GaugeTab) //only up date graphs if active tab
                        {
                            DashboardViewModelInstance.KistlerVelX = CurrentValue;
                        }

                        CurrentValue = Convert.ToDouble(variables[5]);
                        KistlerViewModelInstance.Graph2Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("KistlerVelY", CurrentValue);
                        if (GaugeTab)
                        {
                            DashboardViewModelInstance.KistlerVelY = CurrentValue;
                        }

                        CurrentValue = Convert.ToDouble(variables[6]);
                        KistlerViewModelInstance.Graph3Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("KistlerAcclerationX", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[7]);
                        KistlerViewModelInstance.Graph4Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("KistlerAcclerationX", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[8]);
                        LeftInverterViewModelInstance.Graph1Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("LeftInverterSpeed", CurrentValue);
                        if (GaugeTab)
                        {
                            DashboardViewModelInstance.LeftInverterSpeed = CurrentValue;
                        }

                        CurrentValue = Convert.ToDouble(variables[9]);
                        LeftInverterViewModelInstance.Graph2Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("LeftInverterMechanicalPower", CurrentValue);
                        if (GaugeTab)
                        {
                            DashboardViewModelInstance.LeftInverterMechanicalPower = CurrentValue;
                        }

                        CurrentValue = Convert.ToDouble(variables[10]);
                        LeftInverterViewModelInstance.Graph3Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("LeftInverterAbsolutePhaseCurrent", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[11]);
                        LeftInverterViewModelInstance.Graph4Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("LeftInverterLinkVoltageDC", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[12]);
                        RightInverterViewModelInstance.Graph1Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("RightInverterSpeed", CurrentValue);
                        if (GaugeTab)
                        {
                            DashboardViewModelInstance.RightInverterSpeed = CurrentValue;
                        }

                        CurrentValue = Convert.ToDouble(variables[13]);
                        RightInverterViewModelInstance.Graph2Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("RightInverterMechanicalPower", CurrentValue);
                        if (GaugeTab)
                        {
                            DashboardViewModelInstance.RightInverterMechanicalPower = CurrentValue;
                        }

                        CurrentValue = Convert.ToDouble(variables[14]);
                        RightInverterViewModelInstance.Graph3Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("RightInverterAbsolutePhaseCurrent", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[15]);
                        RightInverterViewModelInstance.Graph4Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("RightInverterLinkVoltageDC", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[16]);
                        TemperatureViewModelInstance.Graph1Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("RightPCBTemp", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[17]);
                        TemperatureViewModelInstance.Graph2Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("LeftPCBTemp", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[18]);
                        TemperatureViewModelInstance.Graph3Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("TotalAverageBatteryTemp", CurrentValue);

                        CurrentValue = Convert.ToDouble(variables[19]);
                        TemperatureViewModelInstance.Graph4Value = CurrentValue;
                        AlertViewModelInstance.NewAlert("GearBoxTemp", CurrentValue);
                    }
                    catch { }


                    Task.Factory.StartNew(ECUViewModelInstance.AddPoints);     //add points to graphs
                    Task.Factory.StartNew(KistlerViewModelInstance.AddPoints);
                    Task.Factory.StartNew(LeftInverterViewModelInstance.AddPoints);
                    Task.Factory.StartNew(RightInverterViewModelInstance.AddPoints);
                    Task.Factory.StartNew(TemperatureViewModelInstance.AddPoints);
                }
                try
                {
                    dataIn.DiscardInBuffer(); //clear graph
                }
                catch { }
            }
        }