using System; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using System.Text; using System.Threading; using GHI.Processor; namespace FLBBTest { public class Program { public enum CPFStates : int { NotRunning = 0, RunEngrTest, InitializeMission, InitializeProfile, SurfaceOpsSetBellows, PreMissionDelay, SurfaceOps, ABSetFast, ABRetractSlow, Descend, Anchor, StartCPMode, DumpCPData, DeAnchor, Ascend, Surface, EmergencyAscend, ProcessErrors, Exit, lastState } public static StructQueue sQueue = new StructQueue(); private static StructQueue.qStruct qStructure = new StructQueue.qStruct(); public static CPFStates CPFState = CPFStates.NotRunning; public static void Main() { Debug.Print("Started Program"); //Utility.SetLocalTime(RealTimeClock.GetDateTime()); //TODO Add synch to GPS Thread.Sleep(2000); Debug.Print("Queue count = " + sQueue.Count.ToString()); Optode.init(); Thread.Sleep(2000); int passNum = 0; while (true) { Debug.Print("Pass Number = " + passNum.ToString()); if (sQueue.Count > 0) processStructQ(); //if (passNum == 5) // pass(); if (passNum == 7) getAll(); //if (passNum == 10) // poll(); //if (passNum == 15) // save(); if (passNum == 40) getAll(); passNum = passNum + 1; Thread.Sleep(1000); } } //sets passkey = 1 to allow change of some settings public static void pass() { Optode.passKey(); } //enable polled mode (disables periodic measurements based on Optode timer) public static void poll() { Optode.pollMode(); } //save settings public static void save() { Optode.save(); } //reset optode (needed to enact some settings according to data sheet public static void reset() { Optode.reset(); } //get all settings (make sure changed settings stuck) public static void getAll() { Optode.getAll(); } private static StringBuilder sbTemp = new StringBuilder(64); private static DateTime timeNow; private static Object programLock = new Object(); private static void processStructQ() { while (Program.sQueue.Count > 0) { lock (programLock) { qStructure = sQueue.Dequeue(); } switch (qStructure.qRecordType) { case (StructQueue.QRecordType.Optode): #region timeNow = DateTime.Now; sbTemp.Clear(); sbTemp.Append(UTF8Encoding.UTF8.GetChars(qStructure.byteArray)); Debug.Print(timeNow.ToString() + " Optode " + sbTemp.ToString()); //EngrLogger.writeToColumns(EngrLogger.ColumnNums.dateTime, timeNow, EngrLogger.ColumnNums.state, qStructure.state, // EngrLogger.ColumnNums.comment, FLBBHeader, // EngrLogger.ColumnNums.FLBB, qStructure.byteArray); break; #endregion default: #region timeNow = DateTime.Now; sbTemp.Clear(); sbTemp.Append(UTF8Encoding.UTF8.GetChars(qStructure.byteArray)); Debug.Print(timeNow.ToString() + " Default " + sbTemp.ToString()); //sbTemp.Clear(); //sbTemp.Append(DefaultHeader); //sbTemp.Append(qStructure.qRecordType); //sbTemp.Append(" "); //sbTemp.Append(UTF8Encoding.UTF8.GetChars(qStructure.byteArray)); //EngrLogger.writeToColumns(EngrLogger.ColumnNums.dateTime, timeNow, // EngrLogger.ColumnNums.state, CPFState, // EngrLogger.ColumnNums.comment, UTF8Encoding.UTF8.GetBytes(sbTemp.ToString())); break; #endregion } //sbTemp.Clear(); //sbTemp.Append(UTF8Encoding.UTF8.GetChars(qStructure.byteArray)); //Debug.Print(sbTemp.ToString()); } } } }