示例#1
0
        public bool sendCmd(String command)
        {
            if (command.Length == 0)
            {
                return(false);
            }

            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                String st;
                st = comPort.ReadExisting();
                debugLog("::sendCmd - ReadExisting: '" + st + "'");
                WriteData("m" + command + "\r");
                st = comPort.ReadExisting();
                debugLog("::sendCmd - ReadExisting: '" + st + "'");
            }
            catch (Exception ex)
            {
#if DEBUG
                DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                DisplayData(MessageType.Error, ex.Message);
#endif
                return(false);
            }
            return(true);
        }
 public bool readDeviceMenu(ref String menu)
 {
     _recvTransType = ReceiveTransmissionType.Sync;
     try
     {
         String st;
         st = comPort.ReadExisting();
         Console.WriteLine("::readDeviceStats - ReadExisting: '" + st + "'");
         WriteData("\rms\r");
         menu = "";
         do
         {
             st    = comPort.ReadLine();
             menu += st;
             if ((st != string.Empty) && (st.IndexOf("name=") >= 0))
             {
                 Console.WriteLine("::readDeviceStats - ReadLine: menu = '" + menu + "'");
                 st = comPort.ReadLine();
                 return(true);
             }
         }while (true);
     }
     catch
     //catch (Exception ex)
     {
         //DisplayData(MessageType.Error, ex.Message + "\r\n");
         DisplayData(MessageType.Error, "Can not read device menu.\r\n");
     }
     return(false);
 }
 public bool readDeviceStats(ref String stats)
 {
     _recvTransType = ReceiveTransmissionType.Sync;
     try
     {
         String st;
         st = comPort.ReadExisting();
         Console.WriteLine("::readDeviceStats - ReadExisting: '" + st + "'");
         WriteData("ms\r");
         stats = comPort.ReadLine();
         st    = comPort.ReadLine();
         Console.WriteLine("::readDeviceStats - ReadLine: stats = '" + stats + "' st = '" + st + "'");
         if ((st != string.Empty) && (st.IndexOf("return=1") >= 0))
         {
             return(true);
         }
     }
     catch
     //catch (Exception ex)
     {
         //DisplayData(MessageType.Error, ex.Message + "\r\n");
         DisplayData(MessageType.Error, "Can not read device stats.\r\n");
     }
     return(false);
 }
        public bool sendCmd(String command)
        {
            if (command.Length == 0)
            {
                return(false);
            }

            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                String st;
                st = comPort.ReadExisting();
                Console.WriteLine("::sendCmd - ReadExisting: '" + st + "'");
                WriteData("m" + command + "\r");
                st = comPort.ReadExisting();
                Console.WriteLine("::sendCmd - ReadExisting: '" + st + "'");
            }
            catch
            //catch (Exception ex)
            {
                //DisplayData(MessageType.Error, ex.Message + "\r\n");
                DisplayData(MessageType.Error, "Can not write to port.\r\n");
                return(false);
            }
            return(true);
        }
 public void finaliseDownload(Boolean success)
 {
     Console.WriteLine("::finaliseDownload()");
     Console.WriteLine("::finaliseDownload() - removed the downloadHandler");
     comPort.DataReceived -= downloadHandler;
     _recvTransType        = ReceiveTransmissionType.Sync;
     if (Status(false) != State.LoggedIn)
     {
         sendAbort();
         if (Status(false) != State.LoggedIn)
         {
             Console.WriteLine("Problem aborting download");
         }
     }
     dl.file.Close();
     dl.downloading = false;
     dl.finaliseCallback(success);
 }
示例#6
0
        public bool readDeviceMenu(ref String menu)
        {
            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                WriteData("\rms\r");
                menu = waitForAnswer("return");
                return(true);
            }
            catch (Exception ex)
            {
#if DEBUG
                DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                DisplayData(MessageType.Error, ex.Message);
#endif
            }
            return(false);
        }
示例#7
0
        public void finaliseDownload(Boolean success)
        {
            debugLog("::finaliseDownload()");
            debugLog("::finaliseDownload() - removed the downloadHandler");
            comPort.DataReceived -= downloadHandler;
            _recvTransType        = ReceiveTransmissionType.Sync;
            //string st = comPort.ReadExisting();
            Thread.Sleep(200);
            string st = comPort.ReadExisting().ToLower();

            if (st.Length > 400 && !st.Contains("return") && !st.Contains("statistics"))
            {
                sendAbort();
            }

            dl.file.Close();
            dl.downloading = false;
            form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(success); }));
        }
示例#8
0
        public bool readDeviceStats(ref String stats)
        {
            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                comPort.ReadExisting();
                WriteData("ms\r");
                stats = waitForAnswer("return");
                return(true);
            }
            catch (Exception ex)
            {
#if DEBUG
                DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                DisplayData(MessageType.Error, ex.Message);
#endif
            }
            return(false);
        }
        public bool getResult()
        {
            String st;

            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                st = comPort.ReadLine();
                Console.WriteLine("::sendCmd - read: '" + st + "'");
                if ((st != string.Empty) && (st.IndexOf("return=1") >= 0))
                {
                    return(true);
                }
            }
            catch
            //catch (Exception ex)
            {
                //DisplayData(MessageType.Error, ex.Message + "\r\n");
                DisplayData(MessageType.Error, "Can not read from port.\r\n");
                return(false);
            }
            return(false);
        }
示例#10
0
        public bool getResult()
        {
            String st;

            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                st = waitForAnswer("return").ToLower();
                if (st.Contains("return=1"))
                {
                    return(true);
                }
            }
            catch (Exception ex)
            {
#if DEBUG
                DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                DisplayData(MessageType.Error, ex.Message);
#endif
                return(false);
            }
            return(false);
        }
示例#11
0
        string waitForAnswer(string[] expected)
        {
            string st;
            //bool abort_sent = false;
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < expected.Length; i++)
            {
                expected[i] = expected[i].ToLower();
            }

            _recvTransType = ReceiveTransmissionType.Sync;
            do
            {
                try
                {
                    st = comPort.ReadLine() + '\n';
                }
                catch (System.Exception)
                {
                    sb.Append(comPort.ReadExisting());
                    return(sb.ToString());
                }

                debugLog("waitForAnswer() read: '" + st + "'");
                sb.Append(st);
                st = st.ToLower();
                foreach (string s in expected)
                {
                    if (st.Contains(s))
                    {
                        return(sb.ToString());
                    }
                }
            }while (true);
        }
示例#12
0
        public bool enterBootLoader()
        {
            _recvTransType = ReceiveTransmissionType.Sync;
            int oldTimeOut = comPort.ReadTimeout;

            try
            {
                string [] answers = { "boot v", "return=1" };
                string    st;
                comPort.ReadExisting();

                WriteData("\rmfyk\rmr\r");                /* try enter (for not logged in) => will generate an answer if not in bootloader mode */
                                                          /* try reboot (for logged in) => which will generate reply return=1 */
                st = waitForAnswer(answers).ToLower();
                if (st == "" ||                           /* case1: old bootloader, already in bootloader: will not reply anything */
                    st.Contains(answers[0]) ||            /* case2: new bootloader, already in bootloader, will say: "boot v" */
                    st.Contains(answers[1]))              /* case3: old bootloader, logged in, will say return=1, as accepted the firmware update request "mfyk" */
                                                          /* case4: new bootloader, logged in, will say return=1, as accepted the firmware update request "mfyk" */
                {
                    return(true);
                }

                /* case 5: old bootloader logged out: will fail as bold bootloader does not support this feature */
                /* case 6: new bootloader logged out: will expect removal and reinsertion of device. */

                WriteData("\r");
                comPort.ReadTimeout = 10000;
                st = waitForAnswer(answers[0]).ToLower();
                comPort.ReadTimeout = oldTimeOut;

                if (!st.Contains(answers[0]))            // not "boot v"
                {
                    return(false);
                }
                int i = 0;
                while (comPort.BytesToRead == 0 && i < 1000)
                {
                    i++;
                    WriteData("zzzzz");
                }
                st = waitForAnswer(answers[0]).ToLower();

                if (st.Contains(answers[0]))            // "boot v" ?
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                comPort.ReadTimeout = oldTimeOut;
#if DEBUG
                DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                DisplayData(MessageType.Error, ex.Message);
#endif
                return(false);
            }
        }
示例#13
0
        public State Status(bool show)
        {
            int    i;
            String st = "";

            try
            {
                if (!comPort.IsOpen)
                {
                    if (show)
                    {
                        DisplayData(MessageType.Error, "Port " + comPort.PortName + " is closed");
                    }
                    lastState = State.PortClosed;
                    return(lastState);
                }
                _recvTransType = ReceiveTransmissionType.Sync;

                comPort.ReadExisting();
            }
            catch (Exception ex)
            {
#if DEBUG
                DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                DisplayData(MessageType.Error, ex.Message);
#endif
                lastState = State.Disconnected;
                return(lastState);
            }

            comPort.ReadExisting();
            debugLog("-------------------------------------------");

            for (i = 0; i < 3; i++)
            {
                try
                {
                    WriteData("\r");
                    string[] answers = { "s) statistics", "l) login", "brute force" };
                    st = waitForAnswer(answers).ToLower();
                    if (st.Contains(answers[0]))
                    {
                        //if (show && lastState != State.LoggedIn)
                        //    DisplayData(MessageType.Incoming, "Logged in successfully");
                        lastState = State.LoggedIn;
                        return(lastState);
                    }
                    else if (st.Contains(answers[1]))
                    {
                        if (show && lastState != State.LoggedOut)
                        {
                            DisplayData(MessageType.Incoming, "Connected; authentification required");
                        }
                        lastState = State.LoggedOut;
                        return(lastState);
                    }
                    else if (st.Contains(answers[2]))
                    {
                        GetUnlockTimes(st, out blockMaxTime, out blockedCurrentTime);

                        if (show)
                        {
                            int firstBlockMaxTime;
                            int firstBlockedCurrentTime;

                            firstBlockMaxTime       = blockMaxTime;
                            firstBlockedCurrentTime = blockedCurrentTime;

                            DateTime startTime = DateTime.Now;

                            Thread.Sleep(1000);

                            DateTime statusTime = DateTime.Now;
                            Status(false);
                            DateTime now           = DateTime.Now;
                            TimeSpan executionTime = now - statusTime;
                            TimeSpan totalTime     = now - startTime;
                            TimeSpan sleepTime     = statusTime - startTime;

                            double   units    = 1.0;
                            TimeSpan diffTime = totalTime - executionTime - sleepTime;
                            if (diffTime.Milliseconds > 50)
                            {
                                units = 1.2;
                            }

                            string msg = BuildUnlockString(firstBlockMaxTime, firstBlockedCurrentTime, units);

                            blockTimeMessage = msg;

                            DisplayData(MessageType.Incoming, "Device blocked!" + msg);
                        }

                        lastState = State.Blocked;
                        return(lastState);
                    }
                    else if (st.Length > 1000)
                    {
                        sendAbort();
                    }
                }
                catch (Exception ex)
                {
                    if (i == 2 && show)
                    {
#if DEBUG
                        DisplayData(MessageType.Error, ex.Message + "\n" + ex.StackTrace);
#else
                        DisplayData(MessageType.Error, ex.Message);
#endif
                    }
                }
            }

            if (show)
            {
                DisplayData(MessageType.Error, "Device is not responding on " + comPort.PortName);
            }

            lastState = State.Disconnected;
            return(lastState);
        }
示例#14
0
        public bool Download(bool full, String filename, DownloadCallback finaliseCallback)
        {
            String st;
            int    length = 0;
            int    block  = 0;

            debugLog("::Download()");

            //Assert(dl.downloading == false);
            dl.finaliseCallback = finaliseCallback;

            _recvTransType = ReceiveTransmissionType.Sync;
            try
            {
                st = comPort.ReadExisting();
                debugLog("::Download - ReadExisting: '" + st + "'");
                if (full)
                {
                    WriteData("mdA\r");
                }
                else
                {
                    WriteData("md\r");
                }
                bool sigOk = getString("dl");
                length = getLong();
                block  = getLong();

                if (!sigOk || block == 0)
                {
                    DisplayData(MessageType.Error, "Fatal error while talking with the device...");
                    sendAbort();
                    form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); }));
                    return(false);
                }
                if (length == 0)
                {
                    DisplayData(MessageType.Error, "Device is empty");
                    form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); }));
                    return(false);
                }
            }
            catch (Exception ex)
            {
                sendAbort();
                DisplayData(MessageType.Error, ex.Message);
                form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); }));
                return(false);
            }

            try
            {
                _recvTransType = ReceiveTransmissionType.Async;

                dl.file                = new FileStream(filename, FileMode.Create, FileAccess.Write);
                dl.blockSize           = block + 4;
                dl.blockOffset         = 0;
                dl.fileSize            = length;
                dl.fileOffset          = 0;
                dl.buf                 = new byte[block + 4];
                dl.lastOk              = 0;
                dl.previousOk          = 0;
                dl.retrying            = false;
                dl.retrySignatureIndex = 0;
                dl.retries             = 0;
                dl.downloading         = true;

                debugLog("::Download - filesize = " + dl.fileSize + " in blocks of = " + dl.blockSize);

                if (progressBar != null)
                {
                    progressBar.Maximum = length;
                }
                DisplayData(MessageType.Normal, "Downloading " + length + " bytes ...");
                downloadHandler(null, null);
                if (dl.downloading)
                {
                    debugLog("::Download() - added the download handler");
                    comPort.DataReceived += new SerialDataReceivedEventHandler(downloadHandler);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                if (dl.file != null)
                {
                    dl.file.Close();
                }

                DisplayData(MessageType.Error, ex.Message);
                form.BeginInvoke(new EventHandler(delegate { dl.finaliseCallback(false); }));
                return(false);
            }
        }
        public State Status(bool show)
        {
            int    i;
            string st = "";

            try
            {
                if (!comPort.IsOpen)
                {
                    if (show)
                    {
                        DisplayData(MessageType.Error, "Cannot read status: Port " + comPort.PortName + " is closed\r\n");
                    }
                    return(State.Disconnected);
                }
                _recvTransType = ReceiveTransmissionType.Sync;

                comPort.ReadExisting();
            }
            catch
            //catch (Exception ex)
            {
                //DisplayData(MessageType.Error, ex.Message + "\r\n");
                DisplayData(MessageType.Error, "Error reading device status.\r\n");
                return(State.Disconnected);
            }

            for (i = 0; i < 3; i++)
            {
                try
                {
                    st += comPort.ReadExisting();
                    Console.WriteLine("::Status - ReadExisting: '" + st + "'");
                    WriteData("\r");
                    st += comPort.ReadLine();
                    Console.WriteLine("::Status - ReadLine: '" + st + "'");
                    if (st == string.Empty)
                    {
                        continue;
                    }
                    if (st.IndexOf("s) Statistics") >= 0)
                    {
                        if (show)
                        {
                            DisplayData(MessageType.Incoming, "Logged in successfully\r\n");
                        }
                        return(State.LoggedIn);
                    }
                    if (st.IndexOf("l) LogIn") >= 0)
                    {
                        if (show)
                        {
                            DisplayData(MessageType.Incoming, "Connected; authentification required\r\n");
                        }
                        return(State.LoggedOut);
                    }
                    if (st.IndexOf("Brute force") >= 0)
                    {
                        if (show)
                        {
                            DisplayData(MessageType.Incoming, "Device blocked!\r\n");
                        }
                        return(State.Blocked);
                    }
                }
                catch
                //catch (Exception ex)
                {
                    if (i == 2 && show)
                    {
                        //DisplayData(MessageType.Error, ex.Message + "\r\n");
                        DisplayData(MessageType.Error, "Error reading device status.\r\n");
                    }
                }
            }
            try
            {
                if (show)
                {
                    DisplayData(MessageType.Error, "Device is not responding on " + comPort.PortName + "\r\n");
                }
            }
            catch
            //catch (Exception ex)
            {
                //DisplayData(MessageType.Error, ex.Message + "\r\n");
                DisplayData(MessageType.Error, "Error reading device status.\r\n");
            };
            return(State.Disconnected);
        }