using System; using System.IO; using System.Text; using System.IO.Ports; using System.Threading; using Microsoft.SPOT.Hardware; using Microsoft.SPOT; namespace CPF { class SedTrap { public static int SEDMAXBYTES = 2048; public static StringBuilder instr = new StringBuilder(SEDMAXBYTES); private static byte[] txBytes = new byte[16]; private static StringBuilder SampleCmd = new StringBuilder("S\r"); private static StringBuilder AdvanceCmd = new StringBuilder("A\r"); private static StringBuilder HomeCmd = new StringBuilder("H\r"); private static StringBuilder sbTemp = new StringBuilder(256); private static DateTime wfrStartTime = new DateTime(); private static ushort SedTrapBridgeAddress = 48; //A1=VCC A0=VCC public static I2CDevice.Configuration configSedTrap = new I2CDevice.Configuration(SedTrapBridgeAddress, 400); private static OutputPort SedTrapPwr = new OutputPort(GHI.Pins.G400.PC13,false); private static object SedTrapLock = new object(); private static StructQueue.qStruct qS = new StructQueue.qStruct(); public static void init() { qS.byteArray = new byte[StructQueue.byteArrayWidth]; } public static void pwrOn () { SedTrapPwr.Write(true); Thread.Sleep(5000); bridgeInit(); Program.g400I2C.Config = configSedTrap; I2CUartBridge.clear_i2c_buffer(Program.g400I2C, 1); } public static void pwrOff() { SedTrapPwr.Write(false); } public static void bridgeInit() { Program.g400I2C.Config = configSedTrap; I2CUartBridge.init(Program.g400I2C); Debug.Print("Init Sed Trap I2C Bridge1 ... Done"); } public static void sendSampleCmd() { Debug.Print("Sending Set Trap Sample command"); sbTemp.Clear(); sbTemp.Append(SampleCmd); Array.Clear(txBytes, 0, txBytes.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(sbTemp.ToString()), txBytes, sbTemp.Length); Program.g400I2C.Config = configSedTrap; I2CUartBridge.i2cprint(Program.g400I2C, txBytes, sbTemp.Length); } public static void sendAdvanceCmd() { Debug.Print("Sending Sed Trap advance command"); sbTemp.Clear(); sbTemp.Append(AdvanceCmd); Array.Clear(txBytes, 0, txBytes.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(sbTemp.ToString()), txBytes, sbTemp.Length); Program.g400I2C.Config = configSedTrap; I2CUartBridge.i2cprint(Program.g400I2C, txBytes, sbTemp.Length); } public static void sendHomeCmd() { Debug.Print("Sending Set Trap HOME command"); sbTemp.Clear(); sbTemp.Append(HomeCmd); Array.Clear(txBytes, 0, txBytes.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(sbTemp.ToString()), txBytes, sbTemp.Length); Program.g400I2C.Config = configSedTrap; I2CUartBridge.i2cprint(Program.g400I2C, txBytes, sbTemp.Length); } public static void getPrompt() { Debug.Print("Asking for Sed Trap prompt.."); sbTemp.Clear(); sbTemp.Append("\r"); Array.Clear(txBytes, 0, txBytes.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(sbTemp.ToString()), txBytes, sbTemp.Length); Program.g400I2C.Config = configSedTrap; I2CUartBridge.i2cprint(Program.g400I2C, txBytes, sbTemp.Length); } public static bool nextpos(int secs) { bool found = false; int i = 0; int beg_index = 0; int end_index = 0; int err_code = -1; pwrOn(); Thread.Sleep(5000); wfrStartTime = DateTime.Now; Debug.Print("Going to next position"); SedTrap.instr.Clear(); sendSampleCmd(); while ((DateTime.Now.Ticks - wfrStartTime.Ticks) < (secs * 10000000) && !found) { Program.g400I2C.Config = configSedTrap; sbTemp.Clear(); sbTemp=I2CUartBridge.get_i2c_buffer(Program.g400I2C); instr.Append(sbTemp); i = 0; if (instr.Length > 0) { for (i = 0; i < instr.Length; i++) { if (instr[i] == '(') { beg_index = i; } if (instr[i] == ')') { found = true; end_index = i; } } } } Debug.Print("instr=" + instr); Debug.Print("found=" + found.ToString()); Program.btConsole.SendLine(instr); //que up the line qS.timeStamp = DateTime.Now; qS.state = Program.CPFState; Array.Clear(qS.byteArray, 0, qS.byteArray.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(instr.ToString()), qS.byteArray, instr.Length); qS.qRecordType = StructQueue.QRecordType.SedTrap; lock (SedTrapLock) { Program.sQueue.Enqueue(qS); } //extract the err_code here pwrOff(); return (found); } public static bool advance(int secs) { bool found = false; int i = 0; int beg_index = 0; int end_index = 0; int err_code = -1; pwrOn(); Thread.Sleep(5000); wfrStartTime = DateTime.Now; Debug.Print("Advancing"); SedTrap.instr.Clear(); sendAdvanceCmd(); while ((DateTime.Now.Ticks - wfrStartTime.Ticks) < (secs * 10000000) && !found) { Program.g400I2C.Config = configSedTrap; sbTemp.Clear(); sbTemp = I2CUartBridge.get_i2c_buffer(Program.g400I2C); instr.Append(sbTemp); i = 0; if (instr.Length > 0) { for (i = 0; i < instr.Length; i++) { if (instr[i] == '(') { beg_index = i; } if (instr[i] == ')') { found = true; end_index = i; } } } } Debug.Print("instr=" + instr); Debug.Print("found=" + found.ToString()); Program.btConsole.SendLine(instr); //que up the line qS.timeStamp = DateTime.Now; qS.state = Program.CPFState; Array.Clear(qS.byteArray, 0, qS.byteArray.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(instr.ToString()), qS.byteArray, instr.Length); qS.qRecordType = StructQueue.QRecordType.SedTrap; lock (SedTrapLock) { Program.sQueue.Enqueue(qS); } //extract the err_code here pwrOff(); return (found); } public static bool home(int secs) { bool found = false; int i = 0; int err_code = -1; pwrOn(); Thread.Sleep(5000); wfrStartTime = DateTime.Now; Debug.Print("Going to next position"); SedTrap.instr.Clear(); sendHomeCmd(); while ((DateTime.Now.Ticks - wfrStartTime.Ticks) < (secs * 10000000) && !found) { Program.g400I2C.Config = configSedTrap; sbTemp.Clear(); sbTemp = I2CUartBridge.get_i2c_buffer(Program.g400I2C); instr.Append(sbTemp); i = 0; if (instr.Length > 0) { for (i = 0; i < instr.Length; i++) { if (instr[i] == '!') { found = true; } } } } Debug.Print("instr=" + instr); Debug.Print("found=" + found.ToString()); Program.btConsole.SendLine(instr); //extract the err_code here //que up the line qS.timeStamp = DateTime.Now; qS.state = Program.CPFState; Array.Clear(qS.byteArray, 0, qS.byteArray.Length); Array.Copy(UTF8Encoding.UTF8.GetBytes(instr.ToString()), qS.byteArray, instr.Length); qS.qRecordType = StructQueue.QRecordType.SedTrap; lock (SedTrapLock) { Program.sQueue.Enqueue(qS); } //extract the err_code here pwrOff(); return (found); } } }