using System; using System.IO; using System.IO.Ports; using System.Reflection; using System.Text; using GHI.IO.Storage; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using Microsoft.SPOT.IO; using SWModules; using Zmodem; namespace HWModules { class Console { // Constants private const bool GC_LOCALECHO = true; private const byte GC_MAXTOKENS = 10; // Limits of FAT32 Filesystems //private const int GC_MAXFILES = 125; private const byte GC_MAXFILEN = 0xFF; private const int GC_MAXPATHL = 0xFFF; private char[] GC_DELIMITERS = new char[] { ' ', ',' }; public enum CMD { HELP, PWD, DIR, CD, MKDIR, CP, RM, MV, SZ, RZ, UT, COM, REBOOT, POW, DATE, SET, CPF, UNKNOWN, }; private enum UT { Console, ZmodemConsole, EngLogger, Iridium, Rudics, Ctd, Optode, Pump, Pth, Elmo, Gps, Watchdog, EMonBatt, EMonPump, Msc, Unknown, }; private enum PORT { COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, COM11, COM12, Unknown }; // IO private SerialPort sPort; private SerialPort comPort; private I2CSerialPort i2cComport; private bool isI2cPort; private MotherBoard _mb; private StringBuilder sbTemp = new StringBuilder(GC_MAXMESSAGESIZE); private MessageQueue _messageQueue; private QRecord _msgQEntry; // SD CARD private SDCard sdCard; private VolumeInfo viSDCard; // SerialPort BUFFER private const int GC_MAXMESSAGESIZE = 0xFFF; private StringBuilder sbInput = new StringBuilder(GC_MAXMESSAGESIZE); private byte[] txbuff; private byte[] rxbuff; private int rxbuffpos; int bytesAvailable; // Program Mode public CMD modeCMD { get; protected set; } //CommandParser private string[] cmdtok = new string[GC_MAXTOKENS]; //Directory buffers //private string[] dirbuff = new string[GC_MAXFILES]; private StringBuilder srcdir = new StringBuilder(GC_MAXPATHL); private StringBuilder desdir = new StringBuilder(GC_MAXPATHL); private StringBuilder pwDir = new StringBuilder(GC_MAXPATHL); public Console(SerialPort port) { modeCMD = CMD.UNKNOWN; sPort = port; txbuff = new byte[GC_MAXMESSAGESIZE]; rxbuff = new byte[GC_MAXMESSAGESIZE]; _mb = HWModules.MotherBoard.Instance; rxbuffpos = 0; sPort.Open(); // SD Card init try { viSDCard = new VolumeInfo("\\SD"); } catch (Exception e) { ////TODO P2 Error here. Debug.Print("Can't Load SDCard:" + e.ToString()); } pwDir.Clear(); pwDir.Append(viSDCard.RootDirectory); _messageQueue = MessageQueue.Instance; // _msgQEntry = new QRecord(ProcessMessage); } // public void welcomeMessage() // { // Assembly asm = Assembly.GetExecutingAssembly(); // writeLine("\r\nCoastal Profiling Float Console \r\n" + // "Assembly: " + // asm.FullName + // "\r\n\r"); // } // public void printPrompt() // { // txbuff = Encoding.UTF8.GetBytes("\n\rCPF>"); // sPort.Write(txbuff, 0, txbuff.Length); // } // public void read() // { // bytesAvailable = sPort.BytesToRead; // if (bytesAvailable > 0) // { // sPort.Read(rxbuff, rxbuffpos, 1); // if (GC_LOCALECHO) // sPort.Write(rxbuff, rxbuffpos, 1); //echo the character // rxbuffpos++; // } // else // return; // if (rxbuff[rxbuffpos - 1] == '\r' || // rxbuff[rxbuffpos - 1] == '\n') // { // this.gotCommand(); // } // } // public void readUntilLN() // { // bytesAvailable = sPort.BytesToRead; // if (bytesAvailable <= 0) // return; // for (int i = 0; i < bytesAvailable; i++) // { // sPort.Read(rxbuff, rxbuffpos, 1); // if (GC_LOCALECHO) // { // sPort.Write(rxbuff, rxbuffpos, 1); // } // // If we are in a serial Port command program // if (modeCMD == CMD.COM) // { // try // { // if (rxbuff[rxbuffpos] == 0x03) //ETX CTRL-C Received // { // writeLine("CTRL-C Received, exiting program...\r\n\r"); // modeCMD = CMD.UNKNOWN; // if (isI2cPort) // i2cComport.Close(); // else // comPort.Close(); // } // else // if (isI2cPort) // i2cComport.WriteByte(rxbuff[rxbuffpos]); // else // comPort.WriteByte(rxbuff[rxbuffpos]); // return; // } // catch // { // writeLine("Error writing to com port, exiting com program.\r\n"); // if (isI2cPort) // i2cComport.Close(); // else // comPort.Close(); // modeCMD = CMD.UNKNOWN; // return; // } // } // rxbuffpos++; //enable backspace functionality. // if (rxbuff[rxbuffpos - 1] == '\b') // { // rxbuffpos -= 2; // if (rxbuffpos < 0) rxbuffpos = 0; // sPort.WriteByte(32); sPort.WriteByte(8); // continue; // } // if ((rxbuff[rxbuffpos - 1] == '\r' || // rxbuff[rxbuffpos - 1] == '\n')) // { // this.gotCommand(); // } // } // } // public void writeLine(string s) // { // txbuff = Encoding.UTF8.GetBytes(s); // sPort.Write(txbuff, 0, txbuff.Length); // } // public void writeLine(StringBuilder s) // { // writeLine(s.ToString()); // } // // BUFFER COMMANDS TODO MOVE TO SUBCLASS // public void gotCommand() // { // // Test for Case in rcving \r\n from the console // if (rxbuffpos == 1) // { // rxbuffpos = 0; // Array.Clear(rxbuff, 0, rxbuff.Length); // writeLine("\r"); printPrompt(); // return; // } // //else // sbInput.Clear(); // try // { // sbInput.Append(UTF8Encoding.UTF8.GetChars(rxbuff, 0, rxbuffpos - 1)); // Debug.Print("GOT LINE: " + sbInput.ToString()); // this.ProcessCommand(); // } // catch // { // // ignored // } // rxbuffpos = 0; // Array.Clear(rxbuff, 0, rxbuff.Length); // } // public void ProcessMessage(QRecord qRecord) // { // //TODO P0 copy the message and call ProcessCommand? // } // private void ProcessCommand() // { // CMD cmd = CMD.UNKNOWN; // byte itok = 0; // Array.Clear(cmdtok, 0, cmdtok.Length); // cmdtok = sbInput.ToString().Trim().Split(GC_DELIMITERS, (int)GC_MAXTOKENS); // //Decode Command // cmd = decodeCommand(cmdtok[0]); // //Output to DEBUG // foreach (var s in cmdtok) // { // if (itok == 0) // continue; // Debug.Print("GOT TOK: " + s); // itok++; // } // writeLine("\r\n"); // switch (cmd) // { // case CMD.HELP: // printHelp(); // break; // case CMD.PWD: // presentWorkingDirectory(); // break; // case CMD.DIR: // dir(); // break; // case CMD.CD: // cd(); // break; // case CMD.MKDIR: // mkdir(); // break; // case CMD.CP: // cpormv(CMD.CP); // break; // case CMD.RM: // rm(); // break; // case CMD.MV: // cpormv(CMD.MV); // break; // case CMD.SZ: // sz(); // break; // case CMD.RZ: // rz(); // break; // case CMD.UT: // ut(); // break; // case CMD.COM: // com(); // break; // case CMD.POW: //#if GEN2 // pow(); //#else // writeLine("Incompatible command\r\n"); //#endif // break; // case CMD.REBOOT: // reboot(); // break; // case CMD.DATE: // date(); // break; // case CMD.SET: // changeSetting(); // break; // case CMD.CPF: // cpfChange(); // break; // case CMD.UNKNOWN: // writeLine("ERROR: Unknown CMD\r\n"); // break; // } // //at end print out new prompt // printPrompt(); // } // private void cpfChange() // { // if (cmdtok.Length < 2) // { // writeLine("usage: cpf \r\n"+ // "\t Actions: \r\n"+ // "\t GO: Start profiling operations\r\n"+ // "\t RECOVERYTRUE: Enable recovery mode\r\n"+ // "\t RECOVERYFALSE: Disable recovery mode\r\n"+ // "\t STARTDOG: Start watchdog timer\r\n"+ // "\t FAKEMTSBD: Send fase MTSBD using Iridium\r\n"+ // "\t EXIT: Halt state machine\r\n"); // return; // } // switch (cmdtok[1].ToLower()) // { // case "go": // SV.SurfaceOpsGo = true; // break; // case "recoverytrue": // SV.RecoveryMode = true; // EngrLogger.writeToColumns("Recovery mode set true"); // break; // case "recoveryfalse": // SV.RecoveryMode = false; // EngrLogger.writeToColumns("Recovery mode set false"); // break; // case "startdog": // WatchDog.startWatchdog(); // EngrLogger.writeToColumns("Starting watchdog"); // break; // case "fakemtsbd": // NAL_A3LAR.fakeMTSBD(); // break; // case "exit": // SV.CurrentState = CPFStates.exit; //// EngrLogger.CurrentState = cpfStatesArray[(int)SV.CurrentState].stateName; // break; // default: // writeLine("ERROR: Unknown cpf action requested"); // break; // } // } // private void changeSetting() // { // if (cmdtok.Length < 3) // { // writeLine("usage: set \r\n"); // return; // } // // Parse field // double argValue = -1; // try // { // argValue = double.Parse(cmdtok[2]); // } // catch // { // writeLine("ERROR: Cannot parse setting field.\r\n"); // } // // Field name // switch (cmdtok[1].ToLower()) // { // case "simp": // // TODO P2 do we use this? // break; // case "upengr": // SV.UploadEngrFile = true; // break; // case "maxprofiles": // if ((int) argValue <= 0 || (int) argValue >= 200) // { // writeLine("ERROR: Invalid profile setting\r\n"); // return; // } // SV.MaxProfiles = (int) argValue; // sbTemp.Clear().Append("Setting Max Number of Profiles to: ").Append(SV.MaxProfiles); // EngrLogger.writeToColumns(sbTemp); // break; // case "missiontimeout": // if ((int) argValue <= 0 || (int) argValue >= 120) // { // writeLine("ERROR: Invalid mission timeout"); // return; // } // SV.MissionTimeoutTS = new TimeSpan(0, (int) argValue, 0, 0); // SV.MissionTimedOut = false; // sbTemp.Clear().Append("Set MissionTimeout hours to: ").Append(SV.MissionTimeoutTS); // EngrLogger.writeToColumns(sbTemp); // break; // case "parktime": // if ((int) argValue <= 0 || (int) argValue >= 172800) //2*24*3600 // { // writeLine("ERROR: Invalid park time\r\n"); // return; // } // Mission.descendTable[0].parkTime = new TimeSpan(0, 0, (int)argValue, 0); // sbTemp.Clear().Append("Park time minutes to: "); // sbTemp.Append(Mission.descendTable[0].parkTime); // EngrLogger.writeToColumns(sbTemp); // break; // case "parkpressure": // if ((float) argValue <= 4 || (float) argValue >= 300) // { // writeLine("ERROR: Invalid park pressure\r\n"); // return; // } // Mission.descendTable[9].pressure = (float) argValue; // sbTemp.Clear().Append("Setting Park Pressure to: "); // sbTemp.Append(Mission.descendTable[0].pressure); // EngrLogger.writeToColumns(sbTemp); // break; // default: // writeLine("ERROR: Unknown field.\r\n"); // break; // } // } // private void date() // { // if (cmdtok.Length < 7) // { // writeLine(DateTime.Now.ToString()); // writeLine("usage: date [NUMERIC]"); // return; // } // int year = int.Parse(cmdtok[1]); // int month = int.Parse(cmdtok[2]); // int day = int.Parse(cmdtok[3]); // int hour = int.Parse(cmdtok[4]); // int minute = int.Parse(cmdtok[5]); // int second = int.Parse(cmdtok[6]); // Utility.SetLocalTime(new DateTime(year,month,day,hour,minute,second)); // EngrLogger.openNewFile(); // } // private void pow() // { // int channel = -1; // if (cmdtok.Length < 3) // { // writeLine("usage: pow "); // for (int i = 1; i <= 16; i++) // { // writeLine("CH"+i+":"+_mb.QueryChannelPower(i)+"\r\n"); // } // return; // } // //channel number // try // { // channel = int.Parse(cmdtok[1]); // if (channel < 1 || channel >16) // throw new ArgumentOutOfRangeException(); // } // catch // { writeLine("Invalid channel number: "+cmdtok[1]+"\r\n"); return; } // //state // if (string.Equals("on", cmdtok[2])) // { // if (channel <16) // _mb.EnableChannelPower(channel); // else // _mb.EnablePump(); // } // else if (string.Equals("off", cmdtok[2])) // { // if (channel <16) // _mb.DisableChannelPower(channel); // else // _mb.DisablePump(); // } // } // private void com() // { // if (cmdtok.Length < 2) // { // writeLine("usage: com \r\n" + // "\t defaults are 9600 8 N 1"); // return; // } // //Set Defaults // int portnum = 2; // int baud = 9600; // int databits = 8; // Parity parity = Parity.None; // StopBits stopbits = StopBits.One; // if (!ParseSerialConfig(ref portnum, ref baud, ref databits, ref parity)) return; // //For traditional serialports // if (portnum <= 6) // { // try // { // comPort = new SerialPort("COM" + portnum.ToString(), baud, parity, databits, stopbits); // comPort.Open(); // comPort.DataReceived += ComPortOnDataReceived; // isI2cPort = false; // } // catch (Exception e) // { // writeLine("Error Opening SerialPort " + portnum.ToString() + ":" + e.ToString()); // return; // } // } // //For i2c ports (slots 3-6) // if (portnum > 6) // { // i2cComport = new I2CSerialPort("COM" + portnum.ToString(), baud, databits, parity, stopbits); // i2cComport.Open(); // i2cComport.DataReceived += I2CPortOnDataReceived; // isI2cPort = true; // } // writeLine("Serial Port Connected, press CTRL-C to exit program...\r\n\r"); // modeCMD = CMD.COM; // } // private void I2CPortOnDataReceived(object sender, EventArgs e) // { // int bytesToRead = i2cComport.BytesToRead; // int inChar; // if (bytesToRead == 0) // return; // for (int i = 0; i < bytesToRead; ++i) // { // inChar = i2cComport.ReadByte(); // if (inChar == -1) // return; // sPort.WriteByte((byte) inChar); // } // } // private void ComPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs) // { // int bytesToRead = comPort.BytesToRead; // int inChar; // if (bytesToRead == 0) // return; // for (int i = 0; i < bytesToRead; ++i) // { // inChar = comPort.ReadByte(); // if (inChar == -1) // return; // sPort.WriteByte((byte) inChar); // } // } // private bool ParseSerialConfig(ref int portnum, ref int baud, ref int databits, ref Parity parity) // { // StopBits stopbits; // for (int i = 1; i < cmdtok.Length; ++i) // { // switch (i) // { // case 1: //portnum // try // { // portnum = int.Parse(cmdtok[1]); // if (string.Equals("COM"+portnum.ToString(), sPort.PortName) || // portnum < 1 || portnum > 12) // throw new ArgumentOutOfRangeException("invalid portnum"); // } // catch // { // writeLine("Invalid Portnum Specified " + cmdtok[1] + "\r\n"); // return false; // } // break; // case 2: //baudrate // try // { // baud = int.Parse(cmdtok[2]); // } // catch // { // writeLine("Invalid Baud Rate Specified: " + cmdtok[2] + "\r\n"); // return false; // } // break; // case 3: //databits // try // { // databits = int.Parse(cmdtok[3]); // if (databits < 5 || databits > 8) // throw new ArgumentOutOfRangeException("invalid databits"); // } // catch // { // writeLine("Invalid Databits Specified: " + cmdtok[3] + "\r\n"); // return false; // } // break; // case 4: //parity // try // { // if (string.Equals(cmdtok[4].ToLower(), "n")) // parity = Parity.None; // else if (string.Equals(cmdtok[4].ToLower(), "e")) // parity = Parity.Even; // else if (string.Equals(cmdtok[4].ToLower(), "o")) // parity = Parity.Odd; // else if (string.Equals(cmdtok[4].ToLower(), "m")) // parity = Parity.Mark; // else if (string.Equals(cmdtok[4].ToLower(), "s")) // parity = Parity.Space; // else // throw new ArgumentOutOfRangeException("Invalid parity"); // } // catch // { // writeLine("Invalid Parity Specified: " + cmdtok[4] + "\r\n"); // return false; // } // break; // case 5: //stopbits // try // { // double dStopbits = double.Parse(cmdtok[5]); // if (dStopbits == 1) // stopbits = StopBits.One; // else if (dStopbits == 1.5) // stopbits = StopBits.OnePointFive; // else if (dStopbits == 2) // stopbits = StopBits.Two; // else if (dStopbits == 0) // stopbits = StopBits.None; // else // throw new ArgumentOutOfRangeException("Invalid stopbits"); // } // catch // { // writeLine("Invalid Stopbits Specified: " + cmdtok[5] + "\r\n"); // return false; // } // break; // } // } // return true; // } // private void mkdir() // { // DirectoryInfo dinfo; // if (cmdtok.Length < 2) // { // writeLine("usage: mkdir \r\n"); // return; // } // changeWorkingDir(ref desdir, 1); // try // { // if (Directory.Exists(desdir.ToString())) // { // writeLine("ERROR: directory already exists.\r\n"); // return; // } // dinfo = Directory.CreateDirectory(desdir.ToString()); // if (dinfo == null) // { // writeLine("ERROR: directory creation failed.\r\n"); // return; // } // } // catch // { // writeLine("ERROR: directory creation failed.\r\n"); // return; // } // writeLine("Directory successfully created at " + dinfo.CreationTimeUtc.ToString() + "\r\n"); // } // private void rm() // { // int sarg = 0; // if (cmdtok.Length < 2) // { // writeLine("usage: rm or rm -f \r\n"); // return; // } // sarg = (cmdtok[1][0] == '-') ? 1 : 0; // //change input to full path // changeWorkingDir(ref srcdir, 1 + sarg); // try // { // if (!File.Exists(srcdir.ToString()) && !Directory.Exists(srcdir.ToString())) // { // writeLine("ERROR: file/dir does not exist\r\n"); // return; // } // } // catch // { // writeLine("ERROR: file/dir does not exist\r\n"); // return; // } // //delete file // if (sarg == 0) // { // try // { // File.Delete(srcdir.ToString()); // } // catch // { // writeLine("ERROR: File delete failed.\r\n"); // return; // } // writeLine("File(s) deleted.\r\n"); // } // else if (sarg == 1) // { // try // { // Directory.Delete(srcdir.ToString()); // } // catch // { // writeLine("ERROR: Directory delete failed.\r\n"); // return; // } // writeLine("Directory deleted. \r\n"); // } // } // private void rz() // { // writeLine("Beginning Zmodem Receive.\r\n"); // ZmodemReceiver zr = new ZmodemReceiver(sPort, false); // zr.filePrefix = "\\SD\\"; // int ret = 0; // do // { // ret = zr.doTasks(); // } while (ret == 0); // } // private void sz() // { // if (cmdtok.Length < 2) // { // writeLine("usage sz \r\n"); // return; // } // changeWorkingDir(ref srcdir, 1); // try // { // if (File.Exists(srcdir.ToString()) == false) // { // writeLine("ERROR: No such source file.\r\n"); // return; // } // } // catch // { // writeLine("ERROR: No such source file.\r\n"); // return; // } // //Ok, we can try to conduct a ZMODEM interaction... // ZmodemSender zs = new ZmodemSender(sPort, srcdir.ToString()); // //it will eventually give up or finish... single file at this point. // int ret = 0; // do // { // ret = zs.doTasks(); // } while (ret == 0); // writeLine("Zmodem Finished, result code"+ret+"\r\n"); // } // private void reboot() // { // PowerState.RebootDevice(false); // } // private void ut() // { // if (cmdtok.Length < 2) // { // writeLine("usage ut \r\n"); // writeLine("\t available options are: \r\n" + // "\t\t console \t- simple console print and read tests\r\n" + // "\t\t zmodem \t- test zmodem send and receive.\r\n" + // "\t\t englogger \t- test some write commands to the engrlogger\r\n" + // "\t\t iridium \t- test iridium driver functions except for rudics\r\n" + // "\t\t rudics \t- test iridium drivers for full rudics connections to the main server\r\n" + // "\t\t ctd \t- test the seabird 41 drivers\r\n" + // "\t\t optode \t- optode driver test\r\n" + // "\t\t gps \t- test the GPS and driver\r\n" + // "\t\t pump \t- test the elmo driver\r\n" + // "\t\t pth \t- test pressure temp and humid sensor\r\n" + // "\t\t msc \t- test MBARI multi-sensor controller\r\n" + // "\t\t elmo \t- test gps drivers\r\n" + // "\t\t energymonbatt \t- test energy monitors on the battery\r\n" + // "\t\t energymonpump \t- test energy monitor on the pump\r\n" + // "\t\t watchdog \t- test the watchdog\r\n"); // return; // } // int nattempts = 1; // int natt; // if (cmdtok.Length == 3) // { // try { natt = int.Parse(cmdtok[2]); } // catch { // writeLine("Bad Input, try again \n\r"); // return; // } // if (natt > 1) // { // nattempts = natt; // } // } // for (int i = 0; i < nattempts; i++) // { // switch (DecodeUnitTest(cmdtok[1])) // { // case UT.Console: // writeLine("Running Bluetooth Console Unit Test\n\r"); // //TestManager.RunTest(typeof(UnitTestBTConsole)); // break; // case UT.ZmodemConsole: // // todo P3 don't really need this either, we can just try zmodeming // break; // case UT.Ctd: // //TODO P3 unimplemented // break; // case UT.Elmo: // //TODO P3 unimplemented // break; // case UT.Gps: // writeLine("Running GPS Unit Test\r\n"); // //TestManager.RunTest(typeof(UnitTest_MotherBoard_GPS)); // break; // case UT.Optode: // //TODO P3 unimplemented // break; // case UT.Pth: // //TODO P3 unimplemented // break; // case UT.Pump: // //TODO P3 unimplemented // break; // case UT.Watchdog: // //TODO P3 unimplemented // break; // case UT.EngLogger: // writeLine("Running Engineering Logger Unit Test\n\r"); // //TestManager.RunTest(typeof(UnitTestEngLogger)); // break; // case UT.Iridium: // writeLine("Running Iridium Unit Test\n\r"); // //TestManager.RunTest(typeof(UnitTestIridium)); // break; // case UT.Rudics: // writeLine("Running Rudics Unit Test\n\r"); // //TestManager.RunTest(typeof(UnitTestIridiumRUDICS)); // break; // case UT.EMonBatt: // writeLine("Running Pump Energy Monitor Test\n\r"); // //TestManager.RunTest(typeof(UnitTest_MotherBoard_EnergyMonitor),"TestEnergyMonitorVI"); // break; // case UT.EMonPump: // writeLine("Running Pump Energy Monitor Pump\n\r"); // //TestManager.RunTest(typeof(UnitTest_MotherBoard_EnergyMonitor),"TestEnergyMonitorPump"); // break; // case UT.Msc: // writeLine("Running MSC Unit Test\n\r"); // //TestManager.RunTest(typeof(UnitTestMsc),"TestSample"); // break; // default: // writeLine("Unknown Unit Test \r\n"); // break; // } // } // } // private UT DecodeUnitTest(string s) // { // s = s.ToLower(); // if (string.Equals(s, "console")) // return UT.Console; // if (string.Equals(s, "zmodem")) // return UT.ZmodemConsole; // if (string.Equals(s, "englogger")) // return UT.EngLogger; // if (string.Equals(s, "iridium")) // return UT.Iridium; // if (string.Equals(s, "rudics")) // return UT.Rudics; // if (string.Equals(s, "ctd")) // return UT.Ctd; // if (string.Equals(s, "optode")) // return UT.Optode; // if (string.Equals(s, "pump")) // return UT.Pump; // if (string.Equals(s, "pth")) // return UT.Pth; // if (string.Equals(s, "gps")) // return UT.Gps; // if (string.Equals(s, "elmo")) // return UT.Elmo; // if (string.Equals(s, "energymonbatt")) // return UT.EMonBatt; // if (string.Equals(s, "energymonpump")) // return UT.EMonPump; // if (string.Equals(s, "watchdog")) // return UT.Watchdog; // if (string.Equals(s, "msc")) // return UT.Msc; // return UT.Unknown; // } // private void cpormv(CMD type) // { // int sarg = 0; // bool overwrite = false; // //ok this has to have multiple inputs // if (cmdtok.Length < 3) // { // writeLine("usage: cp \r\n"); // return; // } // //create offset if flag exists // sarg = (cmdtok[1][0] == '-') ? 1 : 0; // overwrite = (sarg == 1) ? true : false; // // Change and verify inputs. // changeWorkingDir(ref srcdir, 1 + sarg); // try // { // if (File.Exists(srcdir.ToString()) == false) // { // writeLine("ERROR: No such source file.\r\n"); // return; // } // } // catch // { // writeLine("ERROR: No such source file.\r\n"); // return; // } // changeWorkingDir(ref desdir, 2 + sarg); // if (Path.GetDirectoryName(desdir.ToString()) == String.Empty || // Path.GetDirectoryName(desdir.ToString()) == null) // { // writeLine("ERROR: No such destination directory.\r\n"); // return; // } // try // { // if (File.Exists(desdir.ToString()) == true && overwrite == false) // { // writeLine(Path.GetFileName(desdir.ToString()) + ":exists, use -f flag to overwrite\r\n"); // return; // } // } // catch // { // writeLine("ERROR: No such destination directory.\r\n"); // return; // } // //OK We can attempt the copy. // try // { // if (type == CMD.CP) // File.Copy(srcdir.ToString(), desdir.ToString(), overwrite); // else if (type == CMD.MV) // File.Move(srcdir.ToString(), desdir.ToString()); // } // catch // { // if (type == CMD.CP) writeLine("ERROR: Copy Failed\r\n"); // else if (type == CMD.MV) writeLine("ERROR: Move Failed\r\n"); // return; // } // if (type == CMD.CP) writeLine("1 File(s) copied.\r\n"); // else if (type == CMD.MV) writeLine("1 File(s) moved.\r\n"); // } // private void cd() // { // changeWorkingDir(ref srcdir, 1); // try // { // if (Directory.Exists(srcdir.ToString()) == false) // { // writeLine("ERROR: No such directory.\r\n"); // return; // } // } // catch // { // writeLine("ERROR: No such directory.\r\n"); // return; // } // pwDir.Clear(); // pwDir.Append(srcdir); // writeLine("Changed working directory to " + pwDir.ToString()); // } // private void dir() // { // changeWorkingDir(ref srcdir, 1); // try // { // if (Directory.Exists(srcdir.ToString()) == false) // { // writeLine("ERROR: No such directory.\r\n"); // return; // } // } // catch // { // writeLine("ERROR: Invalid Input\r\n"); // return; // } // Path path; // //list files in directory // //Array.Clear(dirbuff, 0, dirbuff.Length); // string[] dirbuff = Directory.GetFiles(srcdir.ToString()); // writeLine("\r\nFiles in " + srcdir.ToString() + "\r\n"); // for (int i = 0; i < dirbuff.Length; i++) // writeLine("\t" + Path.GetFileName(dirbuff[i]) + "\r\n"); // //list directories in directory // //Array.Clear(dirbuff, 0, dirbuff.Length); // dirbuff = Directory.GetDirectories(srcdir.ToString()); // writeLine("\r\nDirectories in " + srcdir.ToString() + "\r\n"); // for (int i = 0; i < dirbuff.Length; i++) // { // writeLine("\t" + dirbuff[i] + "\r\n"); // } // } // private void changeWorkingDir(ref StringBuilder sb, int offset) // { // sb.Clear(); // //Form the directory input // if (cmdtok.Length == 1) // { // sb.Append(pwDir); // } // else // { // if (cmdtok[offset][0] == '\\') //This a is fully qualified path. // sb.Append(cmdtok[offset]); // else // { // sb.Append(pwDir); // sb.Append("\\"); // sb.Append(cmdtok[offset]); // } // } // } // private void presentWorkingDirectory() // { // writeLine(this.pwDir.ToString() + "\r\n"); // } // private void printHelp() // { // writeLine("AVAILABLE COMMANDS:\r\n"); // writeLine("HELP - This printout\r\n"); // writeLine("PWD - Present Working Dir\r\n"); // writeLine("DIR - List files in PWD\r\n"); // writeLine("CD - Change Directory\r\n"); // writeLine("MKDIR - Make Directory\r\n"); // writeLine("CP - Copy\r\n"); // writeLine("RM - Delete/Remove\r\n"); // writeLine("MV - Move\r\n"); // writeLine("SZ - Send via ZMODEM\r\n"); // writeLine("RZ - Receive via ZMODEM\r\n" + // "UT - Conduct Unit Test\r\n" + // "REBOOT- Hard Reboot Processor\r\n" + // "COM - Open an native or i2c serial port\r\n" + // " (enable power first)\r\n" + // "POW - Switch power on available channels.\r\n"); // } // private CMD decodeCommand(string s) // { // s = s.ToLower(); // if (String.Equals(s, "help")) // return CMD.HELP; // if (String.Equals(s, "pwd")) // return CMD.PWD; // if (String.Equals(s, "dir")) // return CMD.DIR; // if (String.Equals(s, "cd")) // return CMD.CD; // if (String.Equals(s, "mkdir")) // return CMD.MKDIR; // if (String.Equals(s, "cp")) // return CMD.CP; // if (String.Equals(s, "rm")) // return CMD.RM; // if (String.Equals(s, "mv")) // return CMD.MV; // if (String.Equals(s, "sz")) // return CMD.SZ; // if (String.Equals(s, "rz")) // return CMD.RZ; // if (String.Equals(s, "ut")) // return CMD.UT; // if (String.Equals(s, "com")) // return CMD.COM; // if (String.Equals(s, "pow")) // return CMD.POW; // if (String.Equals(s, "reboot")) // return CMD.REBOOT; // if (String.Equals(s, "date")) // return CMD.DATE; // if (String.Equals(s, "set")) // return CMD.SET; // if (String.Equals(s, "cpf")) // return CMD.CPF; // return CMD.UNKNOWN; // } // public void SendLine(StringBuilder builder) // { // writeLine(builder.ToString()); // } } }