using System; using System.IO; using System.Text; using System.IO.Ports; using System.Threading; using Microsoft.SPOT.Hardware; using Microsoft.SPOT; //Sediment trap is on DC3/CHB 7bit i2c=31, pwr = PB10 namespace NXP752 { 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 SedTrapBridgeAddress1 = 0x31; private static ushort SedTrapBridgeAddress2 = 0x34; public static I2CDevice.Configuration configSedTrap1 = new I2CDevice.Configuration(SedTrapBridgeAddress1, 100); public static I2CDevice.Configuration configSedTrap2 = new I2CDevice.Configuration(SedTrapBridgeAddress2, 100); public static ushort SedTrapSelect = 1; 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 () { if (SedTrapSelect == 1) { Program.SedTrapPwr1.Write(true); Thread.Sleep(5000); Program.g400I2C.Config = configSedTrap1; bridgeInit(); I2CUartBridge.clear_i2c_buffer(Program.g400I2C, 1); } if (SedTrapSelect == 2) { Program.SedTrapPwr2.Write(true); Thread.Sleep(5000); Program.g400I2C.Config = configSedTrap2; bridgeInit(); I2CUartBridge.clear_i2c_buffer(Program.g400I2C, 1); } } public static void pwrOff() { //SedTrapPwr1.Write(false); //SedTrapPwr2.Write(false); //Program.SED_PWR_STAT = false; //sbTemp.Clear(); //sbTemp.Append("SedTrap1 & SedTrap2 power off"); //EngrLogger.writeToColumns(false, sbTemp); } public static void bridgeInit() { if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; I2CUartBridge.init(Program.g400I2C); Debug.Print("Init Sed Trap I2C Bridge1 ... Done"); } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; I2CUartBridge.init(Program.g400I2C); Debug.Print("Init Sed Trap I2C Bridge2 ... 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); if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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); if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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); if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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); if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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) { if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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.CurrentState; //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) { if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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.CurrentState; //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 advanceboth(int secs) { SedTrapSelect = 1; advance(secs); SedTrapSelect = 2; advance(secs); return (true); } 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) { if (SedTrapSelect == 1) { Program.g400I2C.Config = configSedTrap1; } if (SedTrapSelect == 2) { Program.g400I2C.Config = configSedTrap2; } 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.CurrentState; //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); } } }