public override bool setVapdAndSlope(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR)
        {
            try {
                FVA.Write("INP:WAVE 1490 NM");
                Thread.Sleep(Delay_suyhao);

                _testinfo.SYSTEMLOG += "STEP 1: SET APD voltage & Slope\r\n";
                _testinfo.VAPDRESULT = Parameters.testStatus.Wait.ToString();

                base.Read();
                base.WriteLine("echo set_flash_register 0x" + VAR.APD_00 + VAR.APD_40 + " 0x30 >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                _testinfo.SYSTEMLOG += string.Format("{0}\r\n", base.Read());

                base.WriteLine("echo set_flash_register 0x" + VAR.APD_80 + VAR.APD_C0 + " 0x34 >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                _testinfo.SYSTEMLOG += string.Format("{0}\r\n", base.Read());

                VAR.Slope_Up   = Convert.ToInt32((Convert.ToDouble(VAR.Slope_Up) * 100)).ToString("X");
                VAR.Slope_Down = Convert.ToInt32((Convert.ToDouble(VAR.Slope_Down) * 100)).ToString("X");

                base.WriteLine("echo set_flash_register_APD 0x00" + VAR.Slope_Up + " 0x00" + VAR.Slope_Down + " 0x" + (Convert.ToInt32((VAR.Vbr - 3) * 100)).ToString("X") + " >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                _testinfo.SYSTEMLOG += string.Format("{0}\r\n", base.Read());

                string APD_DAC = "";
                if (VAR.Vbr - 3 >= 30.2 && VAR.Vbr - 3 <= 37.6)
                {
                    APD_DAC = Convert.ToInt32((Math.Round((((VAR.Vbr - 3) - 30.2) / (37.6 - 30.2)) * 64))).ToString("X");
                }
                else if (VAR.Vbr - 3 >= 37.6 && VAR.Vbr - 3 <= 44.9)
                {
                    APD_DAC = Convert.ToInt32((Math.Round((((VAR.Vbr - 3) - 37.6) / (44.9 - 37.6)) * 64) + 64)).ToString("X");
                }
                if (VAR.Vbr - 3 >= 44.9 && VAR.Vbr - 3 <= 50.9)
                {
                    APD_DAC = Convert.ToInt32((Math.Round((((VAR.Vbr - 3) - 44.9) / (50.9 - 44.9)) * 64) + 128)).ToString("X");
                }
                base.WriteLine("echo APD_DAC 0x" + APD_DAC + " >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                base.WriteLine("echo DDMI_check_8472 >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                base.WriteLine("echo apd_ctrl >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                _testinfo.SYSTEMLOG += string.Format("{0}\r\n", base.Read());

                _testinfo.SYSTEMLOG += string.Format("{0}\r\n", "Set APD & Slope: PASS");
                _testinfo.VAPDRESULT = Parameters.testStatus.PASS.ToString();
                return(true);
            }
            catch (Exception ex) {
                _testinfo.VAPDRESULT = Parameters.testStatus.FAIL.ToString();
                _testinfo.SYSTEMLOG += ex.ToString() + "\r\n";
                return(false);
            }
        }
 public override bool calibDDMI(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR)
 {
     try {
         string str = "";
         Thread.Sleep(Delay_modem);
         _testinfo.SYSTEMLOG      += "STEP 3: RX DDMI Calibration\r\n";
         _testinfo.CALIBDDMIRESULT = Parameters.testStatus.Wait.ToString();
         _testinfo.SYSTEMLOG      += "- Thiết lập suy hao để ONT nhận mức Power: -30dBm\r\n";
         VAR.Att = -30 - (Convert.ToDouble(VAR.OLT_Power));
         FVA.Write("ATT " + VAR.Att.ToString() + " DB");
         Thread.Sleep(Delay_suyhao);
         base.WriteLine("echo set_flash_register_DDMI_RxPower 0x0064 0x58 >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem * 4);
         str = base.Read();
         _testinfo.SYSTEMLOG += str + "\r\n";
         _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -20dBm\r\n";
         VAR.Att              = -20 - (Convert.ToDouble(VAR.OLT_Power));
         FVA.Write("ATT " + VAR.Att.ToString() + " DB");
         Thread.Sleep(Delay_suyhao);
         base.WriteLine("echo set_flash_register_DDMI_RxPower 0x03e8 0x54 >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem * 4);
         str = base.Read();
         _testinfo.SYSTEMLOG += str + "\r\n";
         _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -10dBm\r\n";
         VAR.Att              = -10 - (Convert.ToDouble(VAR.OLT_Power));
         FVA.Write("ATT " + VAR.Att.ToString() + " DB");
         Thread.Sleep(Delay_suyhao);
         base.WriteLine("echo set_flash_register_DDMI_RxPower 0x2710 0x50 >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem * 4);
         str = base.Read();
         _testinfo.SYSTEMLOG      += str + "\r\n";
         _testinfo.CALIBDDMIRESULT = Parameters.testStatus.PASS.ToString();
         _testinfo.SYSTEMLOG      += "DDMI Calibration thành công.\r\n";
         return(true);
     }
     catch (Exception ex) {
         _testinfo.CALIBDDMIRESULT = Parameters.testStatus.FAIL.ToString();
         _testinfo.SYSTEMLOG      += ex.ToString() + "\r\n";
         return(false);
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="_flag">True = -37, -31 // -35, -30</param>
        /// <param name="_bosainfo"></param>
        /// <param name="_testinfo"></param>
        /// <param name="FVA"></param>
        /// <param name="VAR"></param>
        /// <returns></returns>
        public override bool checkLOS(bool _flag, bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR)
        {
            try {
                string str = "";
                bool   ret1 = false, ret2 = false;
                double value1 = _flag == true ? -37 : -35, value2 = _flag == true ? -31 : -30;
                _testinfo.SYSTEMLOG     += "STEP 6: LOS Check\r\n";
                _testinfo.CHECKLOSRESULT = Parameters.testStatus.Wait.ToString();
                _testinfo.SYSTEMLOG     += string.Format("- LOS Check: Thiết lập suy hao để ONT nhận mức Power: {0}dBm\r\n", value1);

                VAR.Att = value1 - (Convert.ToDouble(VAR.OLT_Power));
                FVA.Write("ATT " + VAR.Att.ToString() + " DB");
                Thread.Sleep(Delay_suyhao);
                base.WriteLine("echo DDMI_check_8472 >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                base.WriteLine("echo show_BoB_information >/proc/pon_phy/debug");
                Thread.Sleep(Delay_modem);
                str = base.Read();
                _testinfo.SYSTEMLOG += str + "\r\n";
                for (int n = 0; n < str.Split('\n').Length; n++)
                {
                    if (str.Split('\n')[n].Contains("LOS ="))
                    {
                        str = str.Split('\n')[n].Split('=')[1];
                        if (str.Contains("1"))
                        {
                            _testinfo.SYSTEMLOG += string.Format("Check LOS ở {0}dBm: PASS\r\n", value1);
                            ret1 = true;
                            break;
                        }
                        else
                        {
                            _testinfo.SYSTEMLOG += string.Format("Check LOS ở {0}dBm: FAIL\r\n", value1);
                            ret1 = false;
                            break;
                        }
                    }
                }

                if (ret1 == true)
                {
                    _testinfo.SYSTEMLOG += string.Format("- LOS Check: Thiết lập suy hao để ONT nhận mức Power: {0}dBm\r\n", value2);
                    VAR.Att              = value2 - (Convert.ToDouble(VAR.OLT_Power));
                    FVA.Write("ATT " + VAR.Att.ToString() + " DB");
                    Thread.Sleep(Delay_suyhao);
                    base.WriteLine("echo DDMI_check_8472 >/proc/pon_phy/debug");
                    Thread.Sleep(Delay_modem);
                    base.WriteLine("echo show_BoB_information >/proc/pon_phy/debug");
                    Thread.Sleep(Delay_modem);
                    str = base.Read();
                    _testinfo.SYSTEMLOG += str + "\r\n";
                    for (int n = 0; n < str.Split('\n').Length; n++)
                    {
                        if (str.Split('\n')[n].Contains("LOS ="))
                        {
                            str = str.Split('\n')[n].Split('=')[1];

                            if (str.Contains("0"))
                            {
                                _testinfo.SYSTEMLOG += string.Format("Check LOS ở {0}dBm: PASS", value2);
                                ret2 = true;
                                break;
                            }
                            else
                            {
                                _testinfo.SYSTEMLOG += string.Format("Check LOS ở {0}dBm: FAIL", value2);
                                ret2 = false;
                                break;
                            }
                        }
                    }
                }
                _testinfo.CHECKLOSRESULT = ret1 && ret2 == true?Parameters.testStatus.PASS.ToString() : Parameters.testStatus.FAIL.ToString();

                return(ret1 && ret2);
            }
            catch (Exception ex) {
                _testinfo.CHECKLOSRESULT = Parameters.testStatus.FAIL.ToString();
                _testinfo.SYSTEMLOG     += ex.ToString() + "\r\n";
                return(false);
            }
        }
 public override bool calibLOS(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR, ref bool _flag)
 {
     try {
         string str = "";
         _testinfo.SYSTEMLOG     += "STEP 5: LOS Calibration\r\n";
         _testinfo.CALIBLOSRESULT = Parameters.testStatus.Wait.ToString();
         base.WriteLine("echo apd_ctrl >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem);
         base.WriteLine("echo LOS_calibration 7F 00 >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem);
         str = base.Read();
         _testinfo.SYSTEMLOG += str + "\r\n";
         _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -34dBm\r\n";
         VAR.Att              = -34 - (Convert.ToDouble(VAR.OLT_Power));
         FVA.Write("ATT " + VAR.Att.ToString() + " DB");
         Thread.Sleep(Delay_suyhao);
         base.WriteLine("echo cal_LOS >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem * 4);
         str = base.Read();
         _testinfo.SYSTEMLOG += str + "\r\n";
         _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -30dBm\r\n";
         VAR.Att              = -30 - (Convert.ToDouble(VAR.OLT_Power));
         FVA.Write("ATT " + VAR.Att.ToString() + " DB");
         Thread.Sleep(Delay_suyhao);
         base.WriteLine("echo cal_SD >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem * 4);
         str = base.Read();
         _testinfo.SYSTEMLOG += str + "\r\n";
         base.WriteLine("echo set_flash_register_LOS >/proc/pon_phy/debug");
         Thread.Sleep(Delay_modem * 2);
         str = base.Read();
         if (str.Contains("0x7e"))
         {
             _testinfo.SYSTEMLOG += str + "\r\n";
             _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -36dBm\r\n";
             VAR.Att              = -36 - (Convert.ToDouble(VAR.OLT_Power));
             FVA.Write("ATT " + VAR.Att.ToString() + " DB");
             Thread.Sleep(Delay_suyhao);
             base.WriteLine("echo cal_LOS >/proc/pon_phy/debug");
             Thread.Sleep(Delay_modem * 4);
             str = base.Read();
             _testinfo.SYSTEMLOG += str + "\r\n";
             _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -32dBm\r\n";
             VAR.Att              = -32 - (Convert.ToDouble(VAR.OLT_Power));
             FVA.Write("ATT " + VAR.Att.ToString() + " DB");
             Thread.Sleep(Delay_suyhao);
             base.WriteLine("echo cal_SD >/proc/pon_phy/debug");
             Thread.Sleep(Delay_modem * 4);
             str = base.Read();
             _testinfo.SYSTEMLOG += str + "\r\n";
             base.WriteLine("echo set_flash_register_LOS >/proc/pon_phy/debug");
             Thread.Sleep(Delay_modem * 2);
             str = base.Read();
             if (str.Contains("0x7e"))
             {
                 _testinfo.SYSTEMLOG     += str + "\r\n";
                 _testinfo.SYSTEMLOG     += "[FAIL] Board gặp trạng thái 7E\r\n";
                 _testinfo.CALIBLOSRESULT = Parameters.testStatus.FAIL.ToString();
             }
             else
             {
                 _testinfo.SYSTEMLOG     += str + "\r\n";
                 _testinfo.SYSTEMLOG     += "[OK] Thực hiện xong LOS Calibration\r\n";
                 _testinfo.CALIBLOSRESULT = Parameters.testStatus.PASS.ToString();
             }
             _flag = true;
         }
         else
         {
             _testinfo.CALIBLOSRESULT = Parameters.testStatus.PASS.ToString();
             _flag = false;
         }
         return(_testinfo.CALIBLOSRESULT == Parameters.testStatus.PASS.ToString());
     }
     catch (Exception ex) {
         _testinfo.CALIBLOSRESULT = Parameters.testStatus.FAIL.ToString();
         _testinfo.SYSTEMLOG     += ex.ToString() + "\r\n";
         return(false);
     }
 }
        public override bool curveDDMI(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR)
        {
            try {
                //----------------------------------BƯỚC 4: RX DDMI curve check ------------------------------------
                string str = "";
                bool   ret1 = false, ret2 = false;
                _testinfo.SYSTEMLOG      += "STEP 4: RX DDMI curve check\r\n";
                _testinfo.CURVEDDMIRESULT = Parameters.testStatus.Wait.ToString();
                _testinfo.SYSTEMLOG      += "- Thiết lập suy hao để ONT nhận mức Power: -15dBm\r\n";
                VAR.Att = -15 - (Convert.ToDouble(VAR.OLT_Power));
                FVA.Write("ATT " + VAR.Att.ToString() + " DB");
                Thread.Sleep(Delay_suyhao);
                for (int i = 0; i < 2; i++)
                {
                    base.WriteLine("echo DDMI_check_8472 >/proc/pon_phy/debug");
                    Thread.Sleep(Delay_modem);
                    str = base.Read();
                    _testinfo.SYSTEMLOG += str + "\r\n";
                    for (int n = 0; n < str.Split('\n').Length; n++)
                    {
                        if (str.Split('\n')[n].Contains("Rx Power"))
                        {
                            str = str.Split('\n')[n].Split('=')[1];
                            double RX_DDMI_Temp = Convert.ToDouble(str);
                            RX_DDMI_Temp         = (Math.Log10(RX_DDMI_Temp / 10000)) * 10;
                            _testinfo.SYSTEMLOG += "RX DDMI = " + RX_DDMI_Temp + "\r\n";
                            if (RX_DDMI_Temp > -16.5 && RX_DDMI_Temp < -13.5)
                            {
                                _testinfo.SYSTEMLOG += "Check DDMI -15dBm: PASS\r\n";
                                ret1 = true;
                                break;
                            }
                            else
                            {
                                _testinfo.SYSTEMLOG += "Check DDMI -15dBm: FAIL\r\n";
                                ret1 = false;
                                break;
                            }
                        }
                        else if ((n == str.Split('\n').Length - 1) && !str.Split('\n')[n].Contains("Rx Power"))
                        {
                            _testinfo.SYSTEMLOG += "Check DDMI -15dBm: FAIL\r\n";
                            ret1 = false;
                            break;
                        }
                    }
                    if (ret1 == true)
                    {
                        break;
                    }
                }

                _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -25dBm\r\n";
                VAR.Att              = -25 - (Convert.ToDouble(VAR.OLT_Power));
                FVA.Write("ATT " + VAR.Att.ToString() + " DB");
                Thread.Sleep(Delay_suyhao);
                for (int i = 0; i < 2; i++)
                {
                    base.WriteLine("echo DDMI_check_8472 >/proc/pon_phy/debug");
                    Thread.Sleep(Delay_modem);
                    str = base.Read();
                    _testinfo.SYSTEMLOG += str + "\r\n";
                    for (int n = 0; n < str.Split('\n').Length; n++)
                    {
                        if (str.Split('\n')[n].Contains("Rx Power"))
                        {
                            str = str.Split('\n')[n].Split('=')[1];
                            double RX_DDMI_Temp = Convert.ToDouble(str);
                            RX_DDMI_Temp         = (Math.Log10(RX_DDMI_Temp / 10000)) * 10;
                            _testinfo.SYSTEMLOG += "RX DDMI = " + RX_DDMI_Temp + "\r\n";
                            if (RX_DDMI_Temp > -26.5 && RX_DDMI_Temp < -23.5)
                            {
                                _testinfo.SYSTEMLOG += "Check DDMI -25dBm: PASS\r\n";
                                ret2 = true;
                                break;
                            }
                            else
                            {
                                _testinfo.SYSTEMLOG += "Check DDMI -25dBm: FAIL\r\n";
                                ret2 = false;
                                break;
                            }
                        }
                        else if ((n == str.Split('\n').Length - 1) && !str.Split('\n')[n].Contains("Rx Power"))
                        {
                            _testinfo.SYSTEMLOG += "Check DDMI -25dBm: FAIL\r\n";
                            ret2 = false;
                            break;
                        }
                    }
                    if (ret2 == true)
                    {
                        break;
                    }
                }

                _testinfo.CURVEDDMIRESULT = ret1 && ret2 == true?Parameters.testStatus.PASS.ToString() : Parameters.testStatus.FAIL.ToString();

                return(ret1 && ret2);
            }
            catch (Exception ex) {
                _testinfo.CURVEDDMIRESULT = Parameters.testStatus.FAIL.ToString();
                _testinfo.SYSTEMLOG      += ex.ToString() + "\r\n";
                return(false);
            }
        }
        public override bool overloadSensitivity(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR)
        {
            try {
                string str = "";
                bool   ret1 = false, ret2 = false;
                //------------------------------------------------------------------------------------------//
                _testinfo.SYSTEMLOG     += "STEP 2: RX Power Overload test & Sensivity test\r\n";
                _testinfo.OVERLOADRESULT = Parameters.testStatus.PASS.ToString();
                _testinfo.SYSTEMLOG     += "- Thiết lập suy hao để ONT nhận mức Power: -8dBm\r\n";
                VAR.Att = -8 - (Convert.ToDouble(VAR.OLT_Power));
                FVA.Write("ATT " + VAR.Att.ToString() + " DB");
                Thread.Sleep(Delay_suyhao);

                for (int j = 0; j < 2; j++)
                {
                    base.WriteLine("echo GPON_BER 6 >/proc/pon_phy/debug");
                    Thread.Sleep(Delay_modem * 3);
                    str = base.Read();
                    _testinfo.SYSTEMLOG += str + "\r\n";

                    for (int n = 0; n < str.Split('\n').Length; n++)
                    {
                        if (str.Contains("Pattern Aligned"))
                        {
                            Thread.Sleep(Delay_modem * 3);
                            base.WriteLine("echo err_cnt >/proc/pon_phy/debug");
                            Thread.Sleep(Delay_modem * 2);
                            str = base.Read();
                            _testinfo.SYSTEMLOG += str + "\r\n";

                            for (int m = 0; m < str.Split('\n').Length; m++)
                            {
                                if (str.Contains("0x0"))
                                {
                                    ret1 = true;
                                    _testinfo.SYSTEMLOG += "Test Overload -8dBm: PASS\r\n";
                                    break;
                                }
                                else
                                {
                                    ret1 = false;
                                    _testinfo.SYSTEMLOG += "Test Overload -8dBm: FAIL\r\n";
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    if (ret1 == true)
                    {
                        break;
                    }
                }
                if (ret1 == false)
                {
                    goto END;
                }

                //------------------------------------------------------------------------------------------//
                _testinfo.SYSTEMLOG += "- Thiết lập suy hao để ONT nhận mức Power: -28dBm\r\n";
                VAR.Att              = -28 - (Convert.ToDouble(VAR.OLT_Power));
                FVA.Write("ATT " + VAR.Att.ToString() + " DB");
                Thread.Sleep(Delay_suyhao);

                for (int j = 0; j < 2; j++)
                {
                    base.WriteLine("echo GPON_BER 6 >/proc/pon_phy/debug");
                    Thread.Sleep(Delay_modem * 3);
                    str = base.Read();
                    _testinfo.SYSTEMLOG += str + "\r\n";

                    for (int n = 0; n < str.Split('\n').Length; n++)
                    {
                        if (str.Contains("Pattern Aligned"))
                        {
                            Thread.Sleep(Delay_modem * 3);
                            base.WriteLine("echo err_cnt >/proc/pon_phy/debug");
                            Thread.Sleep(Delay_modem * 2);
                            str = base.Read();
                            _testinfo.SYSTEMLOG += str + "\r\n";

                            for (int m = 0; m < str.Split('\n').Length; m++)
                            {
                                if (str.Contains("0x0"))
                                {
                                    ret2 = true;
                                    _testinfo.SYSTEMLOG += "Test Sensitivity -28dBm: PASS\r\n";
                                    break;
                                }
                                else
                                {
                                    ret2 = false;
                                    _testinfo.SYSTEMLOG += "Test Sensitivity -28dBm: FAIL\r\n";
                                    break;
                                }
                            }
                            break;
                        }

                        else
                        {
                            ret2 = false;
                            _testinfo.SYSTEMLOG += "Test Sensitivity -28dBm FAIL. Kết quả Log không chứa Pattern Aligned\r\n";
                            break;
                        }
                    }
                    if (ret2 == true)
                    {
                        break;
                    }
                    else
                    {
                        continue;
                    }
                }
                goto END;
                //------------------------------------------------------------------------------------------//
END:
                _testinfo.OVERLOADRESULT = ret1 && ret2 == true?Parameters.testStatus.PASS.ToString() : Parameters.testStatus.FAIL.ToString();

                return(ret1 && ret2);
            }
            catch (Exception ex) {
                _testinfo.OVERLOADRESULT = Parameters.testStatus.FAIL.ToString();
                _testinfo.SYSTEMLOG     += ex.ToString() + "\r\n";
                return(false);
            }
        }