using System; using Microsoft.SPOT; using System.Text; using System.IO; using Microsoft.SPOT.IO; using GHI.IO.Storage; using MissionClass; namespace CPF { public class Mission { public static DepthTable[] descendTable; public static DepthTable[] ascendTable; public static TimeSpan parkSamplePeriod; public static bool recoveryMode = true; private static StringBuilder fileName = new StringBuilder(128); private static FileStream missionFile; public static StringBuilder missionFileName = new StringBuilder(128); private static StringBuilder sbTemp = new StringBuilder(256); private static MissionClass.FullMission mission60mHoldAt6 = new FullMission(); public enum Missions : int { mission60mHold8 = 0, mission60mHold30, mission60mNoHold, mission100m1hrHold } public static void createMission(Missions missionNum) { float depth = (float)0.0; switch (missionNum) { case (Missions.mission60mHold8): #region mission60mHold8 descendTable = new DepthTable[1]; ascendTable = new DepthTable[19]; recoveryMode = true; parkSamplePeriod = new TimeSpan(0, 1, 0); //First the descend table descendTable = new DepthTable[1]; descendTable[0].depth = (float)60.0; //decibars descendTable[0].PV = (float)0.10; //mm per second descendTable[0].parkTime = new TimeSpan(0, 2, 0); descendTable[0].sampleList = (byte)7; depth = (float)60.0; //Now the ascend table for (int i = 0; i < ascendTable.Length; i++) { if (depth > 20) { ascendTable[i].depth = depth; ascendTable[i].parkTime = new TimeSpan(0, 0, 0); depth = depth - (float)5.0; } else { ascendTable[i].depth = depth; if (depth == 8.0) ascendTable[i].parkTime = new TimeSpan(0, 2, 0); else ascendTable[i].parkTime = new TimeSpan(0, 0, 0); depth = depth - (float)2.0; } ascendTable[i].PV = (float)0.10; ascendTable[i].sampleList = (byte)7; } break; #endregion case (Missions.mission60mHold30): #region Mission60mHold30 descendTable = new DepthTable[1]; ascendTable = new DepthTable[19]; recoveryMode = false; parkSamplePeriod = new TimeSpan(0, 1, 0); //First the descend table descendTable = new DepthTable[1]; descendTable[0].depth = (float)60.0; //decibars descendTable[0].PV = (float)0.10; //mm per second descendTable[0].parkTime = new TimeSpan(0, 5, 0); descendTable[0].sampleList = (byte)7; depth = (float)60.0; //Now the ascend table for (int i = 0; i < ascendTable.Length; i++) { //Set any park depth here if (depth == 30.0) ascendTable[i].parkTime = new TimeSpan(0, 5, 0); else ascendTable[i].parkTime = new TimeSpan(0, 0, 0); ascendTable[i].PV = (float)0.10; ascendTable[i].sampleList = (byte)7; //5 meter spacing below 20 meters, 2 meter spacing above 20 meters if (depth > 20) { ascendTable[i].depth = depth; depth = depth - (float)5.0; } else { ascendTable[i].depth = depth; depth = depth - (float)2.0; } } break; #endregion case (Missions.mission60mNoHold): #region mission 60mNoHold descendTable = new DepthTable[1]; ascendTable = new DepthTable[19]; recoveryMode = false; parkSamplePeriod = new TimeSpan(0, 1, 0); //First the descend table descendTable = new DepthTable[1]; descendTable[0].depth = (float)60.0; //decibars descendTable[0].PV = (float)0.10; //mm per second descendTable[0].parkTime = new TimeSpan(0, 5, 0); descendTable[0].sampleList = (byte)7; depth = (float)60.0; //Now the ascend table for (int i = 0; i < ascendTable.Length; i++) { if (depth > 20) { ascendTable[i].depth = depth; depth = depth - (float)5.0; } else { ascendTable[i].depth = depth; depth = depth - (float)2.0; } ascendTable[i].PV = (float)0.10; ascendTable[i].sampleList = (byte)7; ascendTable[i].parkTime = new TimeSpan(0, 0, 0); } break; #endregion case (Missions.mission100m1hrHold): depth = (float)500.0; descendTable = new DepthTable[1]; ascendTable = new DepthTable[116]; recoveryMode = false; parkSamplePeriod = new TimeSpan(0, 1, 0); //First the descend table descendTable = new DepthTable[1]; descendTable[0].depth = (float)25.0; //decibars descendTable[0].PV = (float)0.10; //mm per second descendTable[0].parkTime = new TimeSpan(0, 5, 0); descendTable[0].sampleList = (byte)7; configFile.descendTimeout = descendTable[0].parkTime; //Now the ascend table for (int i = 0; i < ascendTable.Length; i++) { if (depth > 20) { ascendTable[i].depth = depth; depth = depth - (float)5.0; } else { ascendTable[i].depth = depth; depth = depth - (float)2.0; } ascendTable[i].PV = (float)0.10; ascendTable[i].sampleList = (byte)7; ascendTable[i].parkTime = new TimeSpan(0, 0, 0); } break; } } public static void ClearMissionAscendSciTable() { for (int i = 0; i < ascendTable.Length; i++) { ascendTable[i].S = 0; ascendTable[i].T = 0; ascendTable[i].datnum = 0; } } public static void upMission() { sbTemp.Clear(); sbTemp.Append("Recovery mode = "); sbTemp.Append(recoveryMode.ToString()); EngrLogger.writeToColumns(sbTemp); sbTemp.Clear(); sbTemp.Append("Park Sample Period = "); sbTemp.Append(parkSamplePeriod.ToString()); EngrLogger.writeToColumns(sbTemp); for (int i = 0; i < descendTable.Length; i++) { sbTemp.Clear(); sbTemp.Append("Depth table "); sbTemp.Append(i.ToString()); sbTemp.Append(" Depth, PV, Park Time, sample list: "); sbTemp.Append(descendTable[i].depth.ToString()); sbTemp.Append(", "); sbTemp.Append(descendTable[i].PV.ToString("f3")); sbTemp.Append(", "); sbTemp.Append(descendTable[i].parkTime.ToString()); sbTemp.Append(", "); sbTemp.Append(descendTable[i].sampleList.ToString()); EngrLogger.writeToColumns(sbTemp); } for (int i = 0; i < ascendTable.Length; i++) { sbTemp.Clear(); sbTemp.Append("Ascend table "); sbTemp.Append(i.ToString()); sbTemp.Append(" Depth, PV, Park Time, sample list: "); sbTemp.Append(ascendTable[i].depth.ToString()); sbTemp.Append(", "); sbTemp.Append(ascendTable[i].PV.ToString("f3")); sbTemp.Append(", "); sbTemp.Append(ascendTable[i].parkTime.ToString()); sbTemp.Append(", "); sbTemp.Append(ascendTable[i].sampleList.ToString()); EngrLogger.writeToColumns(sbTemp); } } public static void loadMissionFromSD() { fileName.Clear(); fileName.Append(EngrLogger.sdVol.RootDirectory); fileName.Append(@"\"); fileName.Append(Program.missionFileName); missionFile = new FileStream(fileName.ToString(), FileMode.Open, FileAccess.Read); int fileLength = (int)missionFile.Length; byte[] fileBuffer = new byte[fileLength]; missionFile.Read(fileBuffer, 0, fileLength); FullMission missionFromFile = (FullMission)Reflection.Deserialize(fileBuffer, typeof(FullMission)); missionFile.Close(); //Set mission recoverMode recoveryMode = missionFromFile.recoveryMode; //Set mission sampleTime parkSamplePeriod = new TimeSpan(0, missionFromFile.samplePeriod.Minutes, missionFromFile.samplePeriod.Seconds); //Fill descend table descendTable = new DepthTable[(int)missionFromFile.descendTable.Length]; for (int i = 0; i < missionFromFile.descendTable.Length; i++) { descendTable[i].depth = missionFromFile.descendTable[i].depth; descendTable[i].PV = missionFromFile.descendTable[i].PV; descendTable[i].parkTime = new TimeSpan(missionFromFile.descendTable[i].parkTime.Hours, missionFromFile.descendTable[i].parkTime.Minutes, missionFromFile.descendTable[i].parkTime.Seconds); descendTable[i].sampleList = missionFromFile.descendTable[i].sampleList; } //Fill ascend table ascendTable = new DepthTable[(int)missionFromFile.ascendTable.Length]; for (int i = 0; i < missionFromFile.ascendTable.Length; i++) { ascendTable[i].depth = missionFromFile.ascendTable[i].depth; ascendTable[i].PV = missionFromFile.ascendTable[i].PV; ascendTable[i].parkTime = new TimeSpan(missionFromFile.ascendTable[i].parkTime.Hours, missionFromFile.ascendTable[i].parkTime.Minutes, missionFromFile.ascendTable[i].parkTime.Seconds); ascendTable[i].sampleList = missionFromFile.ascendTable[i].sampleList; } } } }