public static void JesdConfigRx1Rx2CaptureTest([Values(JESDAlphaTests.MYK_DATAPATH_MODE.RX2TX2OBS1)] MYK_DATAPATH_MODE DataPath,
                                                       [Values(MYK_JESD_LANE_CFG.RL1OBSL2TL2, MYK_JESD_LANE_CFG.RL1OBSL2TL4,
                                                               MYK_JESD_LANE_CFG.RL2OBSL2TL2, MYK_JESD_LANE_CFG.RL2OBSL2TL4)] MYK_JESD_LANE_CFG LaneCfg,
                                                       [Values(12, 32)] byte framerK,
                                                       [Values(12, 32)] byte obsRxframerK,
                                                       [Values(20, 32)] byte deframerK)
        {
            //Define Test Signal Parameters
            int amp_dbm1   = -20;
            int OffSet1    = 10;
            int IQExptVal1 = 20000;
            int amp_dbm2   = -10;
            int OffSet2    = 5;
            int IQExptVal2 = 30000;


            //Based on Test Parameters Determin Jesd Settings
            ConfigJesdParams(DataPath, LaneCfg, framerK, obsRxframerK, deframerK);

            //Configure Chip and Data Paths with Test Specific JESD Settings
            TestSetup.TestSetupInit(settings);
            //Enable System, Apply Signal, Analysis Captured Data
            TxLoopbackRx1Rx2Capture(amp_dbm1, OffSet1, IQExptVal1, amp_dbm2, OffSet2, IQExptVal2);
        }
        public void TestJESDAlfaParam([Values(JESDAlphaTests.MYK_DATAPATH_MODE.RX2TX2OBS1, MYK_DATAPATH_MODE.RX1TX2OBS1,
                                              MYK_DATAPATH_MODE.RX2TX1OBS1, MYK_DATAPATH_MODE.RX1TX1OBS1)] MYK_DATAPATH_MODE DataPath,
                                      [Values(MYK_JESD_LANE_CFG.RL1OBSL0TL2, MYK_JESD_LANE_CFG.RL1OBSL0TL4,
                                              MYK_JESD_LANE_CFG.RL1OBSL2TL2, MYK_JESD_LANE_CFG.RL1OBSL2TL4,
                                              MYK_JESD_LANE_CFG.RL2OBSL0TL2, MYK_JESD_LANE_CFG.RL2OBSL0TL4,
                                              MYK_JESD_LANE_CFG.RL2OBSL2TL2, MYK_JESD_LANE_CFG.RL2OBSL2TL4)] MYK_JESD_LANE_CFG LaneCfg,
                                      [Values(16, 32)] byte framerK,
                                      [Values(16, 32)] byte obsRxframerK,
                                      [Values(20, 32)] byte deframerK)
        {
            AdiCommandServerClient Link = AdiCommandServerClient.Instance;

            Link.hw.Connect(TestSetupConfig.ipAddr, TestSetupConfig.port);

            Link.Mykonos.resetDevice();

            Mykonos.RXCHANNEL rxChannels = Mykonos.RXCHANNEL.RX1_RX2;
            Mykonos.TXCHANNEL txChannels = Mykonos.TXCHANNEL.TX1_TX2;
            byte Obsrxchannels           = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;

            byte deframerM       = 0;
            byte desLanesEnabled = 0;

            byte framerM = 0;
            byte serializerLanesEnabled = 0;

            byte obsRxframerM = 0;
            byte obsRxserializerLanesEnabled = 0;
            byte invalidTest = 0;

            switch (DataPath)
            {
            case MYK_DATAPATH_MODE.RX2TX2OBS1:
                //Data Path Configuration
                rxChannels = Mykonos.RXCHANNEL.RX1_RX2;
                framerM    = 4;

                txChannels = Mykonos.TXCHANNEL.TX1_TX2;
                deframerM  = 4;

                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsRxframerM  = 2;
                //Lane Config
                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL2:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            case MYK_DATAPATH_MODE.RX1TX2OBS1:
                //Data Path Configuration
                rxChannels    = Mykonos.RXCHANNEL.RX1;
                framerM       = 2;
                txChannels    = Mykonos.TXCHANNEL.TX1_TX2;
                deframerM     = 4;
                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsRxframerM  = 2;
                //Lane Config
                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL1OBSL2TL4:
                    serializerLanesEnabled      = 0x01;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL0TL4:
                    serializerLanesEnabled      = 0x01;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            case MYK_DATAPATH_MODE.RX2TX1OBS1:
                rxChannels    = Mykonos.RXCHANNEL.RX1_RX2;
                framerM       = 4;
                txChannels    = Mykonos.TXCHANNEL.TX1;
                deframerM     = 2;
                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsRxframerM  = 2;

                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL2OBSL2TL2:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x03;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL2:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x03;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            case MYK_DATAPATH_MODE.RX1TX1OBS1:
                rxChannels    = Mykonos.RXCHANNEL.RX1;
                framerM       = 2;
                txChannels    = Mykonos.TXCHANNEL.TX1;
                deframerM     = 2;
                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsRxframerM  = 2;
                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL1OBSL2TL2:
                    serializerLanesEnabled      = 0x01;
                    desLanesEnabled             = 0x03;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL0TL2:
                    serializerLanesEnabled      = 0x01;
                    desLanesEnabled             = 0x03;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL2TL4:
                    serializerLanesEnabled      = 0x01;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL0TL4:
                    serializerLanesEnabled      = 0x01;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL2:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x03;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL2:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x03;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL4:
                    serializerLanesEnabled      = 0x03;
                    desLanesEnabled             = 0x0F;
                    obsRxserializerLanesEnabled = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            default:
                break;
            }
            if (invalidTest != 1)
            {
                byte deframerF    = (byte)(2 * (int)deframerM / ConvertMaskToCount(desLanesEnabled));
                byte framerF      = (byte)(2 * (int)framerM / ConvertMaskToCount(serializerLanesEnabled));
                byte obsRxframerF = (byte)(2 * (int)obsRxframerM / ConvertMaskToCount(obsRxserializerLanesEnabled));

                DateTime timeStamp = DateTime.Now;

                string text = "Tx M: " + deframerM + ", Tx K: " + deframerK +
                              ", Tx lanes: " + string.Format("{0:X}", desLanesEnabled) + ", Tx F: " + deframerF +
                              ", Rx M: " + framerM + ", Rx K: " + framerK +
                              ", Rx lanes: " + string.Format("{0:X}", serializerLanesEnabled) + ", Rx F: " + framerF +
                              ", ORx M: " + obsRxframerM + ", ORx K: " + obsRxframerK +
                              ", ORx lanes: " + string.Format("{0:X}", obsRxserializerLanesEnabled) +
                              ", ORx F: " + obsRxframerF + "  " + timeStamp.ToString();

                using (System.IO.StreamWriter file = new System.IO.StreamWriter(resFilePathAlpha, true))
                {
                    file.WriteLine(text);
                }

                //Initialize(rxChannels, txChannels, Obsrxchannels, deframerM, deframerK, desLanesEnabled, framerM, framerK, serializerLanesEnabled, obsRxframerM, obsRxframerK, obsRxserializerLanesEnabled);
                JESDTestInit(deframerM, deframerK, desLanesEnabled, framerM, framerK, serializerLanesEnabled, obsRxframerM, obsRxframerK, obsRxserializerLanesEnabled);
                Console.WriteLine("Rx Profile: " + settings.mykSettings.rxProfileName);
                Console.WriteLine("Tx Profile: " + settings.mykSettings.txProfileName);
                Console.WriteLine("ORx Profile: " + settings.mykSettings.orxProfileName);
                TestSetup.JESDTestSetupInit(settings, rxChannels, txChannels, Obsrxchannels);

                mykonosUnitTest.Helper.EnableRxFramerLink_JESD(resFilePathAlpha);
                mykonosUnitTest.Helper.EnableORxFramerLink_JESD(resFilePathAlpha);
                mykonosUnitTest.Helper.EnableTxLink_JESD(resFilePathAlpha);
            }
        }
        public static byte ConfigJesdParams(MYK_DATAPATH_MODE DataPath,
                                            MYK_JESD_LANE_CFG LaneCfg,
                                            [Values(12, 32)] byte framerK,
                                            [Values(12, 32)] byte obsRxframerK,
                                            [Values(20, 32)] byte deframerK)
        {
            Mykonos.RXCHANNEL rxChannels = Mykonos.RXCHANNEL.RX1_RX2;
            Mykonos.TXCHANNEL txChannels = Mykonos.TXCHANNEL.TX1_TX2;
            byte Obsrxchannels           = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;

            byte deframerM = 0;
            byte desLaneEn = 0;

            byte framerM   = 0;
            byte serLaneEn = 0;

            byte obsFramerM   = 0;
            byte obsSerLaneEn = 0;

            byte invalidTest = 0;

            switch (DataPath)
            {
            case MYK_DATAPATH_MODE.RX2TX2OBS1:
                //Data Path Configuration
                rxChannels = Mykonos.RXCHANNEL.RX1_RX2;
                framerM    = 4;

                txChannels = Mykonos.TXCHANNEL.TX1_TX2;
                deframerM  = 4;

                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsFramerM    = 2;
                //Lane Config
                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL2:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            case MYK_DATAPATH_MODE.RX1TX2OBS1:
                //Data Path Configuration
                rxChannels    = Mykonos.RXCHANNEL.RX1;
                framerM       = 2;
                txChannels    = Mykonos.TXCHANNEL.TX1_TX2;
                deframerM     = 4;
                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsFramerM    = 2;
                //Lane Config
                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL1OBSL2TL4:
                    serLaneEn    = 0x01;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL0TL4:
                    serLaneEn    = 0x01;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            case MYK_DATAPATH_MODE.RX2TX1OBS1:
                rxChannels    = Mykonos.RXCHANNEL.RX1_RX2;
                framerM       = 4;
                txChannels    = Mykonos.TXCHANNEL.TX1;
                deframerM     = 2;
                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsFramerM    = 2;

                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL2OBSL2TL2:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL2:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            case MYK_DATAPATH_MODE.RX1TX1OBS1:
                rxChannels    = Mykonos.RXCHANNEL.RX1;
                framerM       = 2;
                txChannels    = Mykonos.TXCHANNEL.TX1;
                deframerM     = 2;
                Obsrxchannels = (byte)Mykonos.OBSRXCHANNEL_ENABLE.MYK_ORX1;
                obsFramerM    = 2;
                switch (LaneCfg)
                {
                case MYK_JESD_LANE_CFG.RL1OBSL2TL2:
                    serLaneEn    = 0x01;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL0TL2:
                    serLaneEn    = 0x01;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL2TL4:
                    serLaneEn    = 0x01;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL1OBSL0TL4:
                    serLaneEn    = 0x01;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL2:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL2:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x03;
                    obsSerLaneEn = 0x0;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL2TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0xC;
                    break;

                case MYK_JESD_LANE_CFG.RL2OBSL0TL4:
                    serLaneEn    = 0x03;
                    desLaneEn    = 0x0F;
                    obsSerLaneEn = 0x0;
                    break;

                default:
                    invalidTest = 1;
                    break;
                }
                break;

            default:
                break;
            }
            if (invalidTest != 1)
            {
                byte deframerF  = (byte)((2 * (int)deframerM) / (int)ConvertMaskToCount(desLaneEn));
                byte framerF    = (byte)(2 * (int)framerM / ConvertMaskToCount(serLaneEn));
                byte obsFramerF = (byte)(2 * (int)obsFramerM / ConvertMaskToCount(obsSerLaneEn));

                settings.mykSettings.rxChannel  = rxChannels;
                settings.mykSettings.txChannel  = txChannels;
                settings.mykSettings.orxChannel = (Mykonos.OBSRXCHANNEL_ENABLE)Obsrxchannels;
                settings.mykTxDeFrmrCfg.M       = deframerM;
                settings.mykTxDeFrmrCfg.K       = deframerK;
                settings.mykTxDeFrmrCfg.deserializerLanesEnabled = desLaneEn;

                settings.mykRxFrmrCfg.M = framerM;
                settings.mykRxFrmrCfg.K = framerK;
                settings.mykRxFrmrCfg.serializerLanesEnabled = serLaneEn;

                settings.mykObsRxFrmrCfg.M = obsFramerM;
                settings.mykObsRxFrmrCfg.K = obsRxframerK;
                settings.mykObsRxFrmrCfg.serializerLanesEnabled = obsSerLaneEn;

                return(0);
            }
            return(1);
        }