//initialise the usb interface library based on which interface was selected
        public static void initialiseCAN()
        {
            for (int i = 0; i < CAN_Channel.numOfChan; i++)
            {
                switch (CAN_Channel._INTERFACEs[i])
                {
                case CAN_Channel.CAN_INTERFACE.KVASER:


                    if (!KvaserInit)
                    {
                        Canlib.canInitializeLibrary();
                    }

                    if (CanInit)
                    {
                        Close();
                    }

                    numOfKvaser++;

                    canHandle[i] = Canlib.canOpenChannel(numOfKvaser - 1, Canlib.canOPEN_ACCEPT_VIRTUAL);
                    KvaserInit   = true;

                    //check whether handle was gotten successfully
                    ErrorControl(handle: canHandle[i], location: "canOpenChannel: initialise()");

                    switch (CAN_Channel._BAUDRATEs[i])
                    {
                    case CAN_Channel.CAN_BAUDRATE._250K:

                        status = Canlib.canSetBusParams(canHandle[i], Canlib.canBITRATE_250K, 0, 0, 0, 0, 0);

                        break;

                    case CAN_Channel.CAN_BAUDRATE._500K:

                        status = Canlib.canSetBusParams(canHandle[i], Canlib.canBITRATE_500K, 0, 0, 0, 0, 0);

                        break;

                    case CAN_Channel.CAN_BAUDRATE._1M:

                        status = Canlib.canSetBusParams(canHandle[i], Canlib.canBITRATE_1M, 0, 0, 0, 0, 0);
                        break;
                    }

                    ErrorControl(status: status, location: "canSetBusParams: initialise()");
                    Canlib.canSetBusOutputControl(canHandle[i], Canlib.canDRIVER_NORMAL);

                    //turn the bus on with a handle to the open channel to write data
                    Canlib.canBusOn(canHandle[i]);

                    break;

                case CAN_Channel.CAN_INTERFACE.PEAK:

                    if (CanInit)
                    {
                        Close();
                    }

                    numOfPeak++;

                    if (numOfPeak == 1)
                    {
                        canHandle[i] = PCANBasic.PCAN_USBBUS1;
                    }
                    if (numOfPeak == 2)
                    {
                        canHandle[i] = PCANBasic.PCAN_USBBUS2;
                    }

                    switch (CAN_Channel._BAUDRATEs[i])
                    {
                    case CAN_Channel.CAN_BAUDRATE._250K:

                        pCANBaudrate[numOfPeak - 1] = TPCANBaudrate.PCAN_BAUD_250K;

                        break;

                    case CAN_Channel.CAN_BAUDRATE._500K:

                        pCANBaudrate[numOfPeak - 1] = TPCANBaudrate.PCAN_BAUD_500K;

                        break;

                    case CAN_Channel.CAN_BAUDRATE._1M:

                        pCANBaudrate[numOfPeak - 1] = TPCANBaudrate.PCAN_BAUD_1M;
                        break;
                    }


                    if (PCANBasic.Initialize((ushort)canHandle[i], pCANBaudrate[numOfPeak - 1]) == TPCANStatus.PCAN_ERROR_INITIALIZE)
                    {
                        ErrorControl(-1, location: "PCANBasic.initialize: initialise()");
                        return;
                    }


                    break;
                }
            }

            CanInit     = true;
            numOfPeak   = 0;
            numOfKvaser = 0;
        }