/// <summary> /// 任务流 /// </summary> /// <returns></returns> private int TestTaskFlow() { int ret = -1; //string pattern = null; //eidRead = "NULL"; //两种情况进入此处:1、超时跳出了do while,2、按了空格确认上电 if (readWriteIdHandle.IsTimeOut) { frmMain.DisplayLog("测试超时\r\n"); return(ret); } do { frmMain.DisplayLog("测试中...\r\n"); CmdProcess cmdProcess = new CmdProcess(); //cmd类 tool = new ThirdPartyTool() { ToolDirectory = "Microsoft Azure Sphere SDK", ToolName = "InitializeCommandPrompt", Cmd = "azsphere device wifi show-status" }; string strRet; #region //获取OS版本 //strRet = cmdProcess.ExeCommand("", "azsphere device show-ota-status");//"azsphere device wifi show-status" //if (strRet.Contains("error: Could not connect to the device.")) //{ // frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} //if (strRet.Contains("is not a valid value")) //{ // frmMain.DisplayLog(string.Format("未claim设备 获取OS版本失败 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} #endregion //对比模块MAC地址-标签MAC地址 strRet = cmdProcess.ExeCommand("", "azsphere device wifi show-status");//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } //ret = DeviceCheck(tool, out strRet); //if (ret!=0) //{ // frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} string mouduleMac = cmdProcess.GetValueByKeyword(strRet, "MAC Address"); if (mouduleMac != labelSn) { frmMain.DisplayLog(string.Format("MAC检查:模块{0},标签{1} 对比不一致 FAIL\r\n", mouduleMac, labelSn)); break; } frmMain.DisplayLog(string.Format("MAC检查:模块{0},标签{1} 对比一致 PASS\r\n", mouduleMac, labelSn)); //检查是否有测试程序 //azsphere device sideload show-status //azsphere device sideload delete //azsphere device sideload deploy -p mt_app.img //删除当前程序 frmMain.DisplayLog("当前程序删除中...\r\n"); strRet = cmdProcess.ExeCommand("", "azsphere device sideload delete");//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } if (!strRet.Contains("Command completed successfully")) { frmMain.DisplayLog(string.Format("当前程序删除: 失败 FAIL\r\n详细:{0} \r\n", strRet)); break; } frmMain.DisplayLog("当前程序删除:成功 PASS\r\n"); Thread.Sleep(500); //Side load(加载测试固件) frmMain.DisplayLog("测试固件加载中...\r\n"); strRet = cmdProcess.ExeCommand("", string.Format("azsphere device sideload deploy -p ../app/{0}", TestAppName));//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } //tool.Cmd = "azsphere device sideload deploy -p mt_app.img"; //ret = DeviceCheck(tool, out strRet); //if (ret != 0) //{ // frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} if (!strRet.Contains("Command completed successfully")) { frmMain.DisplayLog(string.Format("加载测试固件:失败 FAIL\r\n详细:{0} \r\n", strRet)); break; } frmMain.DisplayLog(string.Format("加载测试固件:成功 PASS\r\n", strRet)); string pinTestRetinfo; //Socket复位 frmMain.DisplayLog("复位测试中...\r\n"); //成功 为有效信息 bool pinTestRet = PinTestBySocket("reset_tests", out pinTestRetinfo); frmMain.DisplayLog(pinTestRetinfo + "\r\n"); //失败 为错误信息 if (!pinTestRet) { frmMain.DisplayLog("复位测试:失败 FAIL\r\n");//失败 为错误信息 break; } frmMain.DisplayLog("复位测试:合格 PASS\r\n");//成功 为有效信息 //Socket GPIO检查 frmMain.DisplayLog("GPIO测试中...\r\n"); pinTestRet = PinTestBySocket("get_gpios", out pinTestRetinfo); frmMain.DisplayLog(pinTestRetinfo + "\r\n");//失败 为错误信息 if (!pinTestRet) { frmMain.DisplayLog("GPIO测试:测试失败 FAIL\r\n");//失败 为错误信息 break; } string errorStr; bool gpioRet = GetGIPOResultBySocketRet(pinTestRetinfo, out errorStr); //展示返回的GPIO数据 //strRet = strRet.Replace("P", "PASS").Replace("F", "FAIL") + "\r\n"; //frmMain.DisplayLog(strRet); //GPIO结果显示 if (!gpioRet) { frmMain.DisplayLog("GPIO测试: 不合格 FAIL \r\n"); break; } frmMain.DisplayLog("GPIO测试:合格 PASS\r\n");//成功 为有效信息 #region 串口测试 复位和GPIO ////串口发送Reset System\r\n //strRet = readWriteIdHandle.Read(ATReadCmd.ReadIdType.Reset); //if (string.IsNullOrEmpty(strRet)) //{ // frmMain.DisplayLog(string.Format("复位命令未得到回应 串口失败 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} ////if (!strRet.Contains("Get RST command")) ////{ //// frmMain.DisplayLog(string.Format("复位未得到回应 串口失败 FAIL\r\n详细:{0} \r\n", strRet)); //// break; ////} ////复位命令得到回应 //frmMain.DisplayLog(string.Format("复位中... \r\n")); ////跳出循环说明复位成功 //readWriteIdHandle.ReadRestInfo("init completed"); //frmMain.DisplayLog(string.Format("复位成功 PASS\r\n")); ////GPIO测试 ////串口发送Reset System\r\n //Thread.Sleep(1000); //strRet = readWriteIdHandle.Read(ATReadCmd.ReadIdType.GPIOTest); //if (string.IsNullOrEmpty(strRet)) //{ // frmMain.DisplayLog("GPIO测试命令未得到回应 串口失败 FAIL\r\n"); // break; //} ////GPIO测试命令得到回应 ////frmMain.DisplayLog("GPIO测试中... \r\n"); ////string errorInfo; ////bool gpioRet = checkGIPOResult(strRet, out errorInfo); //////展示返回的GPIO数据 ////strRet = strRet.Replace("P", "PASS").Replace("F", "FAIL") + "\r\n"; ////frmMain.DisplayLog(strRet); //////GPIO结果显示 ////if (!gpioRet) ////{ //// frmMain.DisplayLog(string.Format("GPIO测试:失败 FAIL \r\n详细:{0}\r\n", errorInfo)); //// break; ////} ////frmMain.DisplayLog("GPIO测试:成功 PASS\r\n"); #endregion //删除APPtest frmMain.DisplayLog("测试固件删除中...\r\n"); strRet = cmdProcess.ExeCommand("", "azsphere device sideload delete");//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } //tool.Cmd = "azsphere device sideload deploy -p mt_app.img"; //ret = DeviceCheck(tool, out strRet); //if (ret != 0) //{ // frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} if (!strRet.Contains("Command completed successfully")) { frmMain.DisplayLog(string.Format("测试固件删除:失败 FAIL\r\n详细:{0} \r\n", strRet)); break; } frmMain.DisplayLog("测试固件删除:成功 PASS\r\n"); frmMain.DisplayLog("Wifi列表网络检查中...\r\n"); //检查网络 wifi表 strRet = cmdProcess.ExeCommand("", "azsphere device wifi list");//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } if (!strRet.Contains("No networks found") && strRet.Contains("ID")) { //Get ID string[] wifiIdList = cmdProcess.GetListByKeyword(strRet, "ID").ToArray(); foreach (var item in wifiIdList) { frmMain.DisplayLog("WIFI列表检查:含有WIFI列表ID,删除中...\r\n"); //不为空 if (!string.IsNullOrEmpty(item)) { //删除ID strRet = cmdProcess.ExeCommand("", string.Format("azsphere device wifi delete –i {0}", item));//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); return(ret); } //不包含成功信息且不包含 if (!strRet.Contains("Successfully removed network") && !strRet.Contains("Command completed successfully")) { frmMain.DisplayLog(string.Format("WIFI列表ID删除:失败 FAIL\r\n详细:{0} \r\n", strRet)); return(ret); } } } } frmMain.DisplayLog("WIFI列表检查:PASS\r\n"); //性能测试 frmMain.DisplayLog("capabilties测试中...\r\n"); Capability: strRet = cmdProcess.ExeCommand("", "azsphere device capability show-attached");//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } if (!strRet.Contains("Command completed successfully")) { frmMain.DisplayLog(string.Format("capabilties测试:失败 FAIL\r\n详细:{0} \r\n", strRet)); break; } List <string> capabilitiesList = cmdProcess.GetListCapabilitiesKeyword(strRet, "Enable"); if (capabilitiesList.Count > 0) { //manufacture set complete status,只能设置一次,设置后就不能够RF测试和校准了,测试阶段不要轻易尝试。 #region if (IsManufactureComplete == 1) { strRet = cmdProcess.ExeCommand("", "manufacture set complete status");//"azsphere device wifi show-status" if (strRet.Contains("error: Could not connect to the device.")) { frmMain.DisplayLog(string.Format("未上电连接上设备,请检查连接或驱动 FAIL\r\n详细:{0} \r\n", strRet)); break; } frmMain.DisplayLog(string.Format("已设置制作完成状态,继续测试capabilties中... \r\n详细:{0} \r\n", strRet)); goto Capability; } #endregion frmMain.DisplayLog(string.Format("capabilties测试:失败 FAIL\r\n详细:{0} \r\n", strRet)); break; } frmMain.DisplayLog("capabilties测试:PASS\r\n"); //E-fuse测试 tool = new ThirdPartyTool() { ToolDirectory = "RFToolCli", Cmd = string.Format("RfSettingsTool check --expected ../bin/{0}", EfuseBin) }; //strRet = cmdProcess.ExeCommand(tool);//"azsphere device wifi show-status" //if (strRet.Contains("error")) //{ // frmMain.DisplayLog(string.Format("E-fuse测试:失败 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} //python //tool.Cmd = "python RunHeaderTest.py ";//reset_system //tool.ToolDirectory = "PC"; //strRet = cmdProcess.ExeCommand(tool, ""); //if (strRet.Contains("error")) //{ // frmMain.DisplayLog(string.Format("E-fuse测试:失败 FAIL\r\n详细:{0} \r\n", strRet)); // break; //} //E-fuse具体测试内容 frmMain.DisplayLog("e-fuse测试中...\r\n"); strRet = cmdProcess.ExeCommand(tool, ""); string hasReadFlag = "Comparing configurations."; string startFlag = "Reading configuration data from device."; string erroInfo = StringHelp.SubCentre(strRet, startFlag, "\r\n\r\n"); if (!strRet.Contains(hasReadFlag)) { frmMain.DisplayLog(string.Format("E-fuse测试:命令失败 \r\n详细:{0} \r\n", erroInfo)); break; } strRet = StringHelp.SubCentre(strRet, hasReadFlag, "\r\n\r\n"); frmMain.DisplayLog(strRet + "\r\n"); if (strRet.Contains("ERROR") || strRet.Contains("异常")) { frmMain.DisplayLog("E-fuse测试结果: FAIL \r\n"); break; } frmMain.DisplayLog("E-fuse测试:PASS\r\n"); ret = 0; //cd RFToolCli //List<string> listValue = readWriteIdHandle.ReadId(); //if (listValue.Count <= 3) //{ // break; //} ////多组:1,1,01,01,,,40,0*61 //int sum = 0; //string[] arryData; //try //{ // foreach (string strData in listValue) // { // arryData = strData.Split(','); // 应滤除其他可视卫星 // int cn0Value = int.Parse(arryData[6]); // sum += cn0Value; // } //} //catch (Exception ex) //{ // frmMain.DisplayLog(string.Format("数据解析错误:{0}\r\n", ex.Message)); // break; //} //int argVale = sum / listValue.Count; //frmMain.DisplayLog(string.Format("获取C/N0值:{0}\r\n", argVale)); //if (argVale < StandardCN01) //{ // frmMain.DisplayLog(string.Format("C/N0值:{0},小于设定范围{1} FAIL\r\n", argVale, StandardCN01)); // break; //} //frmMain.DisplayLog(string.Format("C/N0值:{0},大于设定范围{1} PASS\r\n", argVale,StandardCN01)); //ret = 0; ////从芯片获取eid ////eidRead = "081603FFFFF35293" + eidlast.ToString("X").PadLeft(4,'0'); //eidRead = readWriteIdHandle.ReadId(ATReadCmd.ReadIdType.EidRead); //pattern = @"[0-9A-Z]{20}"; //if (string.IsNullOrEmpty(eidRead) || !Regex.IsMatch(eidRead, pattern)) //{ // frmMain.DisplayLog("EID读取失败\r\n"); // break; //} //frmMain.DisplayLog(string.Format("已获取模块EID:{0}\r\n", eidRead)); //frmMain.SetText(AllForms.EnumControlWidget.txtEid.ToString(), eidRead, false); } while (false); ProductionInfo.SystemType systemType = ProductionInfo.Type; //使用do..while(false)的原因,是为了当测试流程为fail时,使用break跳出该结构,仍然执行结果上报 return(ret); }