Пример #1
0
        public static void Upload(string firmwarebin, ICommsSerial comPort)
        {
            comPort.ReadTimeout = 2000;

            using (var fs = new FileStream(firmwarebin, FileMode.Open))
            {
                var len = (int)fs.Length;
                len = (len % 128) == 0 ? len / 128 : (len / 128) + 1;
                var startlen = len;

                int a          = 1;
                int NoAckCount = 0;
                while (len > 0)
                {
                    LogEvent?.Invoke("Uploading block " + a + "/" + startlen);

                    SendBlock(fs, comPort, a);
                    // responce ACK
                    var ack = comPort.ReadByte();
                    while (ack == 'C')
                    {
                        ack = comPort.ReadByte();
                    }

                    if (ack == ACK)
                    {
                        NoAckCount = 0;
                        len--;
                        a++;

                        ProgressEvent?.Invoke(1 - ((double)len / (double)startlen));
                    }
                    else if (ack == NAK)
                    {
                        MsgBox.CustomMessageBox.Show("Corrupted packet. Please power cycle and try again.\r\n", "Warning",
                                                     MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        len = 0;
                    }
                    else
                    {
                        NoAckCount++;
                        if (NoAckCount >= 10)
                        {
                        }
                    }
                }
            }

            // boot
            Thread.Sleep(100);
            comPort.Write("\r\n");
            Thread.Sleep(100);
            comPort.Write("BOOTNEW\r\n");
            Thread.Sleep(100);
        }
Пример #2
0
        void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (!comPort.IsOpen)
            {
                return;
            }
            try
            {
                lock (thisLock)
                {
                    System.Threading.Thread.Sleep(20);
                    byte[] buffer = new byte[256];
                    int    a      = 0;
                    while (comPort.BytesToRead > 0)
                    {
                        byte indata = (byte)comPort.ReadByte();

                        buffer[a] = indata;

                        if (buffer[a] >= 0x20 && buffer[a] < 0x7f || buffer[a] == (int)'\n' || buffer[a] == (int)'\r')
                        {
                            a++;
                        }
                    }

                    addText(ASCIIEncoding.ASCII.GetString(buffer, 0, a + 1));
                }
            }
            catch (Exception) { if (!threadrun)
                                {
                                    return;
                                }
                                TXT_terminal.AppendText("Error reading com port\r\n"); }
        }
Пример #3
0
        bool upload_xmodem(ICommsSerial comPort)
        {
            // try xmodem mode
            // xmodem - short cts to ground
            try
            {
                uploader_LogEvent("Trying XModem Mode");
                //comPort.BaudRate = 57600;
                comPort.BaudRate    = MainV2.comPort.BaseStream.BaudRate;
                comPort.ReadTimeout = 1000;

                Thread.Sleep(2000);
                var tempd = comPort.ReadExisting();
                Console.WriteLine(tempd);
                comPort.Write("U");
                Thread.Sleep(1000);
                var resp1  = Serial_ReadLine(comPort); // echo
                var resp2  = Serial_ReadLine(comPort); // echo 2
                var tempd2 = comPort.ReadExisting();   // posibly bootloader info / use to sync
                // identify
                comPort.Write("i");
                // responce is rfd900....
                var resp3 = Serial_ReadLine(comPort); //echo
                var resp4 = Serial_ReadLine(comPort); // newline
                var resp5 = Serial_ReadLine(comPort); // bootloader info
                uploader_LogEvent(resp5);
                if (resp5.Contains("RFD900"))
                {
                    // start upload
                    comPort.Write("u");
                    var resp6 = Serial_ReadLine(comPort); // echo
                    var resp7 = Serial_ReadLine(comPort); // Ready
                    if (resp7.Contains("Ready"))
                    {
                        comPort.ReadTimeout = 3500;
                        // responce is C
                        var isC  = comPort.ReadByte();
                        var temp = comPort.ReadExisting();
                        if (isC == 'C')
                        {
                            XModem.LogEvent      += uploader_LogEvent;
                            XModem.ProgressEvent += uploader_ProgressEvent;
                            // start file send
                            XModem.Upload(@"SiK900x.bin",
                                          comPort);
                            XModem.LogEvent      -= uploader_LogEvent;
                            XModem.ProgressEvent -= uploader_ProgressEvent;
                            return(true);
                        }
                    }
                }
            }
            catch (Exception ex2)
            {
                log.Error(ex2);
            }

            return(false);
        }
Пример #4
0
        public static void Upload(string firmwarebin, ICommsSerial comPort)
        {
            var fs  = new FileStream(firmwarebin, FileMode.Open);
            var len = (int)fs.Length;

            len = (len % 128) == 0 ? len / 128 : (len / 128) + 1;
            var startlen = len;

            int a = 1;

            while (len > 0)
            {
                if (LogEvent != null)
                {
                    LogEvent("Uploading block " + a + "/" + startlen);
                }

                XModem.SendBlock(fs, comPort, a);
                // responce ACK
                var ack = comPort.ReadByte();
                while (ack == 'C')
                {
                    ack = comPort.ReadByte();
                }

                if (ack == ACK)
                {
                    len--;
                    a++;

                    if (ProgressEvent != null)
                    {
                        ProgressEvent(len / startlen);
                    }
                }
                else if (ack == NAK)
                {
                    CustomMessageBox.Show("Corrupted packet. Please power cycle and try again.\r\n", "Warning",
                                          MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    len = 0;
                }
            }

            // boot
            comPort.Write("b");
        }
Пример #5
0
        private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (!comPort.IsOpen)
            {
                return;
            }

            // if btr > 0 then this shouldnt happen
            comPort.ReadTimeout = 300;

            try
            {
                lock (thisLock)
                {
                    var buffer = new byte[256];
                    var a      = 0;

                    while (comPort.IsOpen && comPort.BytesToRead > 0 && !inlogview)
                    {
                        var indata = (byte)comPort.ReadByte();

                        buffer[a] = indata;

                        if (buffer[a] >= 0x20 && buffer[a] < 0x7f || buffer[a] == '\n' || buffer[a] == 0x1b)
                        {
                            a++;
                        }

                        if (indata == '\n')
                        {
                            break;
                        }

                        if (a == (buffer.Length - 1))
                        {
                            break;
                        }
                    }

                    addText(Encoding.ASCII.GetString(buffer, 0, a + 1));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                if (!threadrun)
                {
                    return;
                }
                TXT_terminal.AppendText("Error reading com port\r\n");
            }
        }
Пример #6
0
        string Serial_ReadLine(ICommsSerial comPort)
        {
            StringBuilder sb = new StringBuilder();
            DateTime Deadline = DateTime.Now.AddMilliseconds(comPort.ReadTimeout);

            while (DateTime.Now < Deadline)
            {
                if (comPort.BytesToRead > 0)
                {
                    byte data = (byte)comPort.ReadByte();
                    sb.Append((char)data);
                    if (data == '\n')
                        break;
                }
            }

            return sb.ToString();
        }
Пример #7
0
        /// <summary>
        ///     Receive a byte.
        /// </summary>
        private byte recv()
        {
            byte b;

            var Deadline = DateTime.Now.AddMilliseconds(port.ReadTimeout);

            while (DateTime.Now < Deadline && port.BytesToRead == 0)
            {
            }
            if (port.BytesToRead == 0)
            {
                throw new Exception("Timeout");
            }

            b = (byte)port.ReadByte();

            log(string.Format("recv {0:X}\n", b), 5);

            return(b);
        }
Пример #8
0
        string Serial_ReadLine(ICommsSerial comPort)
        {
            StringBuilder sb = new StringBuilder();
            DateTime Deadline = DateTime.Now.AddMilliseconds(comPort.ReadTimeout);

            while (DateTime.Now < Deadline)
            {
                if (comPort.BytesToRead > 0)
                {
                    byte data = (byte)comPort.ReadByte();
                    sb.Append((char)data);
                    if (data == '\n')
                        break;
                }
            }

            return sb.ToString();
        }
Пример #9
0
        bool upload_xmodem(ICommsSerial comPort)
        {
            // try xmodem mode
            // xmodem - short cts to ground
            try
            {
                uploader_LogEvent("Trying XModem Mode");
                //comPort.BaudRate = 57600;
                comPort.BaudRate = MainV2.comPort.BaseStream.BaudRate;
                comPort.ReadTimeout = 1000;

                Thread.Sleep(2000);
                var tempd = comPort.ReadExisting();
                Console.WriteLine(tempd);
                comPort.Write("U");
                Thread.Sleep(1000);
                var resp1 = Serial_ReadLine(comPort); // echo
                var resp2 = Serial_ReadLine(comPort); // echo 2
                var tempd2 = comPort.ReadExisting(); // posibly bootloader info / use to sync
                // identify
                comPort.Write("i");
                // responce is rfd900....
                var resp3 = Serial_ReadLine(comPort); //echo
                var resp4 = Serial_ReadLine(comPort); // newline
                var resp5 = Serial_ReadLine(comPort); // bootloader info
                uploader_LogEvent(resp5);
                if (resp5.Contains("RFD900"))
                {
                    // start upload
                    comPort.Write("u");
                    var resp6 = Serial_ReadLine(comPort); // echo
                    var resp7 = Serial_ReadLine(comPort); // Ready
                    if (resp7.Contains("Ready"))
                    {
                        comPort.ReadTimeout = 3500;
                        // responce is C
                        var isC = comPort.ReadByte();
                        var temp = comPort.ReadExisting();
                        if (isC == 'C')
                        {
                            XModem.LogEvent += uploader_LogEvent;
                            XModem.ProgressEvent += uploader_ProgressEvent;
                            // start file send
                            XModem.Upload(@"SiK900x.bin",
                                comPort);
                            XModem.LogEvent -= uploader_LogEvent;
                            XModem.ProgressEvent -= uploader_ProgressEvent;
                            return true;
                        }
                    }
                }
            }
            catch (Exception ex2)
            {
                log.Error(ex2);
            }

            return false;
        }
Пример #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="serialPort"></param>
        /// <returns></returns>
        static byte[] readpacket(ICommsSerial serialPort)
        {
            byte[] temp = new byte[4000];
            byte[] mes  = new byte[2] {
                0x0, 0xC0
            };                                      // fail
            int a     = 7;
            int count = 0;

            serialPort.ReadTimeout = 1000;

            while (count < a)
            {
                //Console.WriteLine("count {0} a {1} mes leng {2}",count,a,mes.Length);
                try
                {
                    temp[count] = (byte)serialPort.ReadByte();
                }
                catch
                {
                    break;
                }


                //Console.Write("{1}", temp[0], (char)temp[0]);

                if (temp[0] != 0x1b)
                {
                    count = 0;
                    continue;
                }

                if (count == 3)
                {
                    a   = (temp[2] << 8) + temp[3];
                    mes = new byte[a];
                    a  += 5;
                }

                if (count >= 5)
                {
                    mes[count - 5] = temp[count];
                }

                count++;
            }

            //Console.WriteLine("read ck");
            try
            {
                temp[count] = (byte)serialPort.ReadByte();
            }
            catch
            {
            }

            count++;

            Array.Resize <byte>(ref temp, count);

            //Console.WriteLine(this.BytesToRead);

            return(mes);
        }
Пример #11
0
        public static void Upload(string firmwarebin, ICommsSerial comPort)
        {
            var fs = new FileStream(firmwarebin, FileMode.Open);
            var len = (int)fs.Length;
            len = (len % 128) == 0 ? len / 128 : (len / 128) + 1;
            var startlen = len;

            int a = 1;
            while (len > 0)
            {
                if (LogEvent != null)
                    LogEvent("Uploading block " + a + "/" + startlen);

                XModem.SendBlock(fs, comPort, a);
                // responce ACK
                var ack = comPort.ReadByte();
                while (ack == 'C')
                    ack = comPort.ReadByte();

                if (ack==ACK)
                {
                    len--;
                    a++;

                    if (ProgressEvent != null)
                        ProgressEvent(len / startlen);
                }
                else if (ack==NAK)
                {
                    CustomMessageBox.Show("Corrupted packet. Please power cycle and try again.\r\n", "Warning",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    len = 0;
                }
            }

            // boot
            comPort.Write("b");
        }
Пример #12
0
 void Sleep(int ms, ICommsSerial comPortT)
 {
     DateTime start = DateTime.Now;
     Console.WriteLine("sleep in");
     while (start.AddMilliseconds(ms) > DateTime.Now)
     {
         while (comPortT.BytesToRead > 0)
         {
             Console.Write((char)comPortT.ReadByte());
         }
         System.Threading.Thread.Sleep(1);
     }
     Console.WriteLine("sleep out");
 }