internal async Task DeployMono() { var writer = OutputWriter.Instance; writer.Clear(); //Connect to RoboRIO writer.WriteLine("Attempting to Connect to RoboRIO"); Task <bool> rioConnectionTask = m_deployManager.StartConnectionTask(m_teamNumber); Task delayTask = Task.Delay(10000); bool success = await m_monoFile.UnzipMonoFile(); if (!success) { return; } //Successfully extracted files. writer.WriteLine("Waiting for Connection to Finish"); if (await Task.WhenAny(rioConnectionTask, delayTask) == rioConnectionTask) { //Completed if (rioConnectionTask.Result) { writer.WriteLine("Successfully Connected to RoboRIO"); List <string> deployFiles = m_monoFile.GetUnzippedFileList(); writer.WriteLine("Creating Opkg Directory"); await RoboRIOConnection.RunCommand($"mkdir -p {DeployProperties.RoboRioOpgkLocation}", ConnectionUser.Admin); writer.WriteLine("Deploying Mono Files"); success = await RoboRIOConnection.DeployFiles(deployFiles, DeployProperties.RoboRioOpgkLocation, ConnectionUser.Admin); if (!success) { return; } writer.WriteLine("Installing Mono"); var monoRet = await RoboRIOConnection.RunCommand(DeployProperties.OpkgInstallCommand, ConnectionUser.Admin); //Check for success. bool monoSuccess = await m_deployManager.CheckMonoInstall(); if (monoSuccess) { writer.WriteLine("Mono Installed Successfully"); } else { writer.WriteLine("Mono not installed successfully. Please try again."); } writer.WriteLine("Cleaning up installation"); // Set allow realtime on Mono instance await RoboRIOConnection.RunCommand("setcap cap_sys_nice=pe /usr/bin/mono-sgen", ConnectionUser.Admin); //Removing ipk files from the RoboRIO await RoboRIOConnection.RunCommand($"rm -rf {DeployProperties.RoboRioOpgkLocation}", ConnectionUser.Admin); writer.WriteLine("Done. You may now deploy code to your robot."); } else { //Did not successfully connect writer.WriteLine("Failed to Connect to RoboRIO. Exiting."); } } else { //Timedout writer.WriteLine("RoboRIO connection timedout. Exiting."); } }
public override async void ButtonCallback(object sender, EventArgs e) { var menuCommand = sender as OleMenuCommand; if (menuCommand == null) { return; } if (!m_killing) { try { string teamNumber = Package.GetTeamNumber(); if (teamNumber == null) { return; } DeployManager m = new DeployManager(Package.PublicGetService(typeof(DTE)) as DTE); var writer = OutputWriter.Instance; menuCommand.Visible = false; m_killing = true; //Connect to RoboRIO writer.WriteLine("Attempting to Connect to RoboRIO"); Task <bool> rioConnectionTask = m.StartConnectionTask(teamNumber); Task delayTask = Task.Delay(10000); //Successfully extracted files. writer.WriteLine("Waiting for Connection to Finish"); if (await Task.WhenAny(rioConnectionTask, delayTask) == rioConnectionTask) { //Connected if (rioConnectionTask.Result) { writer.WriteLine("Killing currently running robot code."); await RoboRIOConnection.RunCommand(DeployProperties.KillOnlyCommand, ConnectionUser.LvUser); writer.WriteLine("Done."); m_killing = false; menuCommand.Visible = true; } else { //Did not successfully connect writer.WriteLine("Failed to Connect to RoboRIO. Exiting."); m_killing = false; menuCommand.Visible = true; } } else { //Timedout writer.WriteLine("RoboRIO connection timedout. Exiting."); m_killing = false; menuCommand.Visible = true; } } catch (Exception ex) { Output.WriteLine(ex.ToString()); m_killing = false; menuCommand.Visible = true; OutputWriter.Instance.WriteLine("Code Kill Failed"); } } }