public void ECOMWriteMultiple(CanData can)
        {
            for (int x = 0; x < can.number; x++)
            {
                can.handle = BusInterface.ReturnHandle(can.hardware);
                //MainWindow.ErrorDisplayString("ECom Handle: " + Convert.ToString(can.handle));

                ECOMLibrary.SFFMessage txMessage  = new ECOMLibrary.SFFMessage();
                ECOMLibrary.EFFMessage etxMessage = new ECOMLibrary.EFFMessage();

                // Pulls the top 3 bits for IDH and the bottom 8 bits for IDL
                txMessage.IDH = (byte)(can.id & 0x700);
                txMessage.IDL = (byte)(can.id & 0x0FF);
                // Converts the entire id into an unit for extended sending
                etxMessage.ID = (UInt32)can.id;

                txMessage.DataLength  = (byte)can.dlc;
                etxMessage.DataLength = (byte)can.dlc;
                txMessage.options     = (byte)can.flags;
                etxMessage.options    = (byte)can.flags;

                // Puts the individual bytes into the can.msg byte array
                if (can.dlc > 0)
                {
                    txMessage.data1  = can.msg[0];
                    etxMessage.data1 = can.msg[0];
                }

                if (can.dlc > 1)
                {
                    txMessage.data2  = can.msg[1];
                    etxMessage.data2 = can.msg[1];
                }

                if (can.dlc > 2)
                {
                    txMessage.data3  = can.msg[2];
                    etxMessage.data3 = can.msg[2];
                }

                if (can.dlc > 3)
                {
                    txMessage.data4  = can.msg[3];
                    etxMessage.data4 = can.msg[3];
                }

                if (can.dlc > 4)
                {
                    txMessage.data5  = can.msg[4];
                    etxMessage.data5 = can.msg[4];
                }

                if (can.dlc > 5)
                {
                    txMessage.data6  = can.msg[5];
                    etxMessage.data6 = can.msg[5];
                }

                if (can.dlc > 6)
                {
                    txMessage.data7  = can.msg[6];
                    etxMessage.data7 = can.msg[6];
                }

                if (can.dlc > 7)
                {
                    txMessage.data8  = can.msg[7];
                    etxMessage.data8 = can.msg[7];
                }

                if (can.flags == 4)
                {
                    ECOMLibrary.CANTransmitMessageEx((UInt32)can.handle, ref etxMessage);
                }
                else
                {
                    ECOMLibrary.CANTransmitMessage((UInt32)can.handle, ref txMessage);
                }


                System.Threading.Thread.Sleep(can.timeBtw);

                if (can.increment == true)
                {
                    can.id++;
                }
            }
        }
        }  // End GenericCanTransmitMultiple

        // CAN Receive
        public static bool CanReceive(CanData can)
        {
            Byte ReturnError = 0;

            ECOMLibrary.SFFMessage RxMessage = new ECOMLibrary.SFFMessage();
            ECOMLibrary.EFFMessage ExMessage = new ECOMLibrary.EFFMessage();

            try
            {
                //ECOM library call to get a standard message
                ReturnError = ECOMLibrary.CANReceiveMessage((UInt32)BusInterface.ReturnHandle(can.hardware), ref RxMessage);
            }
            catch {
                ErrorLog.NewLogEntry("ECOM", Convert.ToString(ReturnError));
            }

            if (ReturnError == 0)
            {
                // Converts the ID low and ID high
                can.id   = Convert.ToInt32(RxMessage.IDL + RxMessage.IDH);
                can.dlc  = Convert.ToInt32(RxMessage.DataLength);
                can.time = Convert.ToInt64(RxMessage.TimeStamp);

                // Puts the individual bytes into the can.msg byte array
                if (can.dlc > 0)
                {
                    can.msg[0] = RxMessage.data1;
                }
                if (can.dlc > 1)
                {
                    can.msg[1] = RxMessage.data2;
                }
                if (can.dlc > 2)
                {
                    can.msg[2] = RxMessage.data3;
                }
                if (can.dlc > 3)
                {
                    can.msg[3] = RxMessage.data4;
                }
                if (can.dlc > 4)
                {
                    can.msg[4] = RxMessage.data5;
                }
                if (can.dlc > 5)
                {
                    can.msg[5] = RxMessage.data6;
                }
                if (can.dlc > 6)
                {
                    can.msg[6] = RxMessage.data7;
                }
                if (can.dlc > 7)
                {
                    can.msg[7] = RxMessage.data8;
                }

                // Revisions Needed -- Need to pull flag information
                can.flags = Convert.ToInt32(RxMessage.options);

                //MainWindow.ErrorDisplayString(Convert.ToString(can.flags));

                // For error testing
                // MainWindow.ErrorDisplayByteArray(can.msg);
                //MainWindow.ErrorDisplayString(Convert.ToString(can.dlc));
            }
            else
            {
                ReturnError = ECOMLibrary.CANReceiveMessageEx((UInt32)BusInterface.ReturnHandle(can.hardware), ref ExMessage);

                can.id   = Convert.ToInt32(ExMessage.ID);
                can.dlc  = Convert.ToInt32(ExMessage.DataLength);
                can.time = Convert.ToInt64(ExMessage.TimeStamp);

                // Puts the individual bytes into the can.msg byte array
                if (can.dlc > 0)
                {
                    can.msg[0] = ExMessage.data1;
                }
                if (can.dlc > 1)
                {
                    can.msg[1] = ExMessage.data2;
                }
                if (can.dlc > 2)
                {
                    can.msg[2] = ExMessage.data3;
                }
                if (can.dlc > 3)
                {
                    can.msg[3] = ExMessage.data4;
                }
                if (can.dlc > 4)
                {
                    can.msg[4] = ExMessage.data5;
                }
                if (can.dlc > 5)
                {
                    can.msg[5] = ExMessage.data6;
                }
                if (can.dlc > 6)
                {
                    can.msg[6] = ExMessage.data7;
                }
                if (can.dlc > 7)
                {
                    can.msg[7] = ExMessage.data8;
                }

                // Revisions Needed -- Need to pull flag information
                can.flags = Convert.ToInt32(ExMessage.options);

                // For error testing
                //  MainWindow.ErrorDisplayByteArray(can.msg);
            }

            if (ReturnError != 0)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        } // End Read
        //************************************
        // CAN Transmit for a single transmission
        //************************************
        public static void CanTransmitSingle(CanData can)
        {
            // Implementation for Standard Message & Extended Message

            can.handle = BusInterface.ReturnHandle(can.hardware);
            //MainWindow.ErrorDisplayString("ECom Handle: " + Convert.ToString(can.handle));

            ECOMLibrary.SFFMessage txMessage  = new ECOMLibrary.SFFMessage();
            ECOMLibrary.EFFMessage etxMessage = new ECOMLibrary.EFFMessage();

            // Pulls the top 3 bits for IDH and the bottom 8 bits for IDL
            txMessage.IDH = (byte)(can.id & 0x700);
            txMessage.IDL = (byte)(can.id & 0x0FF);
            // Converts the entire id into an unit for extended sending
            etxMessage.ID = (UInt32)can.id;

            txMessage.DataLength  = (byte)can.dlc;
            etxMessage.DataLength = (byte)can.dlc;
            txMessage.options     = (byte)can.flags;
            etxMessage.options    = (byte)can.flags;

            // Puts the individual bytes into the can.msg byte array
            if (can.dlc > 0)
            {
                txMessage.data1  = can.msg[0];
                etxMessage.data1 = can.msg[0];
            }

            if (can.dlc > 1)
            {
                txMessage.data2  = can.msg[1];
                etxMessage.data2 = can.msg[1];
            }

            if (can.dlc > 2)
            {
                txMessage.data3  = can.msg[2];
                etxMessage.data3 = can.msg[2];
            }

            if (can.dlc > 3)
            {
                txMessage.data4  = can.msg[3];
                etxMessage.data4 = can.msg[3];
            }

            if (can.dlc > 4)
            {
                txMessage.data5  = can.msg[4];
                etxMessage.data5 = can.msg[4];
            }

            if (can.dlc > 5)
            {
                txMessage.data6  = can.msg[5];
                etxMessage.data6 = can.msg[5];
            }

            if (can.dlc > 6)
            {
                txMessage.data7  = can.msg[6];
                etxMessage.data7 = can.msg[6];
            }
            if (can.dlc > 7)
            {
                txMessage.data8  = can.msg[7];
                etxMessage.data8 = can.msg[7];
            }

            // Non-threading write option
            if (can.flags == 4)
            {
                ECOMLibrary.CANTransmitMessageEx((UInt32)can.handle, ref etxMessage);
            }
            else
            {
                ECOMLibrary.CANTransmitMessage((UInt32)can.handle, ref txMessage);
            }

            CheckFlags(can);
        } // End GenericCanTransmitSingle
        public void ECOMWriteMultiple(CanData can)
        {
            for (int x = 0; x < can.number; x++)
            {
                can.handle = BusInterface.ReturnHandle(can.hardware);
                //MainWindow.ErrorDisplayString("ECom Handle: " + Convert.ToString(can.handle));

                ECOMLibrary.SFFMessage txMessage = new ECOMLibrary.SFFMessage();
                ECOMLibrary.EFFMessage etxMessage = new ECOMLibrary.EFFMessage();

                // Pulls the top 3 bits for IDH and the bottom 8 bits for IDL
                txMessage.IDH = (byte)(can.id & 0x700);
                txMessage.IDL = (byte)(can.id & 0x0FF);
                // Converts the entire id into an unit for extended sending
                etxMessage.ID = (UInt32)can.id;

                txMessage.DataLength = (byte)can.dlc;
                etxMessage.DataLength = (byte)can.dlc;
                txMessage.options = (byte)can.flags;
                etxMessage.options = (byte)can.flags;

                // Puts the individual bytes into the can.msg byte array
                if (can.dlc > 0)
                {
                    txMessage.data1 = can.msg[0];
                    etxMessage.data1 = can.msg[0];
                }

                if (can.dlc > 1)
                {
                    txMessage.data2 = can.msg[1];
                    etxMessage.data2 = can.msg[1];
                }

                if (can.dlc > 2)
                {
                    txMessage.data3 = can.msg[2];
                    etxMessage.data3 = can.msg[2];
                }

                if (can.dlc > 3)
                {
                    txMessage.data4 = can.msg[3];
                    etxMessage.data4 = can.msg[3];
                }

                if (can.dlc > 4)
                {
                    txMessage.data5 = can.msg[4];
                    etxMessage.data5 = can.msg[4];
                }

                if (can.dlc > 5)
                {
                    txMessage.data6 = can.msg[5];
                    etxMessage.data6 = can.msg[5];
                }

                if (can.dlc > 6)
                {
                    txMessage.data7 = can.msg[6];
                    etxMessage.data7 = can.msg[6];
                }

                if (can.dlc > 7)
                {
                    txMessage.data8 = can.msg[7];
                    etxMessage.data8 = can.msg[7];
                }

                if (can.flags == 4)
                    ECOMLibrary.CANTransmitMessageEx((UInt32)can.handle, ref etxMessage);
                else
                    ECOMLibrary.CANTransmitMessage((UInt32)can.handle, ref txMessage);

               System.Threading.Thread.Sleep(can.timeBtw);

               if (can.increment == true)
                    can.id++;
            }
        }
        //************************************
        // CAN Transmit for a single transmission
        //************************************
        public static void CanTransmitSingle(CanData can)
        {
            // Implementation for Standard Message & Extended Message

            can.handle = BusInterface.ReturnHandle(can.hardware);
            //MainWindow.ErrorDisplayString("ECom Handle: " + Convert.ToString(can.handle));

            ECOMLibrary.SFFMessage txMessage = new ECOMLibrary.SFFMessage();
            ECOMLibrary.EFFMessage etxMessage = new ECOMLibrary.EFFMessage();

            // Pulls the top 3 bits for IDH and the bottom 8 bits for IDL
            txMessage.IDH = (byte)(can.id & 0x700);
            txMessage.IDL = (byte)(can.id & 0x0FF);
            // Converts the entire id into an unit for extended sending
            etxMessage.ID = (UInt32)can.id;

            txMessage.DataLength = (byte)can.dlc;
            etxMessage.DataLength = (byte)can.dlc;
            txMessage.options = (byte)can.flags;
            etxMessage.options = (byte)can.flags;

            // Puts the individual bytes into the can.msg byte array
            if (can.dlc > 0)
            {
                txMessage.data1 = can.msg[0];
                etxMessage.data1 = can.msg[0];
            }

            if (can.dlc > 1)
            {
                txMessage.data2 = can.msg[1];
                etxMessage.data2 = can.msg[1];
            }

            if (can.dlc > 2)
            {
                txMessage.data3 = can.msg[2];
                etxMessage.data3 = can.msg[2];
            }

            if (can.dlc > 3)
            {
                txMessage.data4 = can.msg[3];
                etxMessage.data4 = can.msg[3];
            }

            if (can.dlc > 4)
            {
                txMessage.data5 = can.msg[4];
                etxMessage.data5 = can.msg[4];
            }

            if (can.dlc > 5)
            {
                txMessage.data6 = can.msg[5];
                etxMessage.data6 = can.msg[5];
            }

            if (can.dlc > 6)
            {
                txMessage.data7 = can.msg[6];
                etxMessage.data7 = can.msg[6];
            }
            if (can.dlc > 7)
            {
                txMessage.data8 = can.msg[7];
                etxMessage.data8 = can.msg[7];
            }

            // Non-threading write option
            if (can.flags == 4)
                ECOMLibrary.CANTransmitMessageEx((UInt32)can.handle, ref etxMessage);
            else
                ECOMLibrary.CANTransmitMessage((UInt32)can.handle, ref txMessage);

            CheckFlags(can);
        }
        // CAN Receive
        public static bool CanReceive(CanData can)
        {
            Byte ReturnError = 0;

            ECOMLibrary.SFFMessage RxMessage = new ECOMLibrary.SFFMessage();
            ECOMLibrary.EFFMessage ExMessage = new ECOMLibrary.EFFMessage();

            try
            {
                //ECOM library call to get a standard message
                ReturnError = ECOMLibrary.CANReceiveMessage((UInt32)BusInterface.ReturnHandle(can.hardware), ref RxMessage);
            }
            catch {
                ErrorLog.NewLogEntry("ECOM", Convert.ToString(ReturnError));
            }

            if (ReturnError == 0)
            {
                // Converts the ID low and ID high
                can.id = Convert.ToInt32(RxMessage.IDL + RxMessage.IDH);
                can.dlc = Convert.ToInt32(RxMessage.DataLength);
                can.time = Convert.ToInt64(RxMessage.TimeStamp);

                // Puts the individual bytes into the can.msg byte array
                if (can.dlc > 0)
                    can.msg[0] = RxMessage.data1;
                if (can.dlc > 1)
                    can.msg[1] = RxMessage.data2;
                if (can.dlc > 2)
                    can.msg[2] = RxMessage.data3;
                if (can.dlc > 3)
                    can.msg[3] = RxMessage.data4;
                if (can.dlc > 4)
                    can.msg[4] = RxMessage.data5;
                if (can.dlc > 5)
                    can.msg[5] = RxMessage.data6;
                if (can.dlc > 6)
                    can.msg[6] = RxMessage.data7;
                if (can.dlc > 7)
                    can.msg[7] = RxMessage.data8;

                // Revisions Needed -- Need to pull flag information
                can.flags = Convert.ToInt32(RxMessage.options);

                //MainWindow.ErrorDisplayString(Convert.ToString(can.flags));

                // For error testing
                // MainWindow.ErrorDisplayByteArray(can.msg);
                //MainWindow.ErrorDisplayString(Convert.ToString(can.dlc));
            }
            else
            {
                ReturnError = ECOMLibrary.CANReceiveMessageEx((UInt32)BusInterface.ReturnHandle(can.hardware), ref ExMessage);

                can.id = Convert.ToInt32(ExMessage.ID);
                can.dlc = Convert.ToInt32(ExMessage.DataLength);
                can.time = Convert.ToInt64(ExMessage.TimeStamp);

                // Puts the individual bytes into the can.msg byte array
                if (can.dlc > 0)
                    can.msg[0] = ExMessage.data1;
                if (can.dlc > 1)
                    can.msg[1] = ExMessage.data2;
                if (can.dlc > 2)
                    can.msg[2] = ExMessage.data3;
                if (can.dlc > 3)
                    can.msg[3] = ExMessage.data4;
                if (can.dlc > 4)
                    can.msg[4] = ExMessage.data5;
                if (can.dlc > 5)
                    can.msg[5] = ExMessage.data6;
                if (can.dlc > 6)
                    can.msg[6] = ExMessage.data7;
                if (can.dlc > 7)
                    can.msg[7] = ExMessage.data8;

                // Revisions Needed -- Need to pull flag information
                can.flags = Convert.ToInt32(ExMessage.options);

                // For error testing
               //  MainWindow.ErrorDisplayByteArray(can.msg);

            }

            if (ReturnError != 0)
                return false;
            else
                return true;
        }