예제 #1
0
        private void BUT_sn_Click(object sender, EventArgs e)
        {
            px4uploader.Uploader up;

            CustomMessageBox.Show("Please unplug press ok, and plug board in", "px4");

            DateTime DEADLINE = DateTime.Now.AddSeconds(30);
            while (DateTime.Now < DEADLINE)
            {
                string[] allports = SerialPort.GetPortNames();

                foreach (string port in allports)
                {
                    Console.WriteLine(DateTime.Now.Millisecond + " Trying Port " + port);

                    try
                    {
                        up = new Uploader(port, 115200);
                    }
                    catch (Exception ex)
                    {
                        //System.Threading.Thread.Sleep(50);
                        Console.WriteLine(ex.Message);
                        continue;
                    }

                    try
                    {
                        up.identify();
                        Console.WriteLine("Found board type {0} boardrev {1} bl rev {2} fwmax {3} on {4}", up.board_type,
                            up.board_rev, up.bl_rev, up.fw_maxsize, port);

                        byte[] sn = up.__get_sn();

                        StringBuilder sb = new StringBuilder();

                        Console.Write("SN: ");
                        for (int s = 0; s < sn.Length; s += 1)
                        {
                            Console.Write(sn[s].ToString("X2"));
                            sb.Append(sn[s].ToString("X2"));
                        }

                        txtboardsn.Text = sb.ToString();

                        up.close();

                        CustomMessageBox.Show("Done");
                        return;
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Not There..");
                        //Console.WriteLine(ex.Message);
                        up.close();
                        continue;
                    }
                }
            }
        }
예제 #2
0
        public void identify()
        {
            port.DiscardInBuffer();

            //Console.WriteLine("0 " + DateTime.Now.Millisecond);
            // make sure we are in sync before starting
            self.__sync();

            //Console.WriteLine("1 "+DateTime.Now.Millisecond);

            //get the bootloader protocol ID first
            self.bl_rev = self.__getInfo(Info.BL_REV);

            // Console.WriteLine("2 " + DateTime.Now.Millisecond);
            if ((bl_rev < (int)BL_REV_MIN) || (bl_rev > (int)BL_REV_MAX))
            {
                throw new Exception("Bootloader protocol mismatch");
            }

            print("Got BL Info - changing timeout");

            // revert to default write timeout
            port.WriteTimeout = 500;

            self.board_type = self.__getInfo(Info.BOARD_ID);
            self.board_rev  = self.__getInfo(Info.BOARD_REV);
            self.fw_maxsize = self.__getInfo(Info.FLASH_SIZE);

            if (bl_rev >= 5)
            {
                try
                {
                    self.chip      = self.__getCHIP();
                    self.chip_desc = self.__getCHIPDES();
                } catch { __sync(); }
            }

            if (bl_rev >= 5)
            {
                try
                {
                    self.sn = self.__get_sn();
                }
                catch { __sync(); }
            }

            if (bl_rev >= 5)
            {
                try
                {
                    self.extf_maxsize = __getInfo(Info.EXTF_SIZE);
                }
                catch { __sync(); }
            }

            Console.WriteLine(
                "Found board type {0} brdrev {1} blrev {2} fwmax {3} extf {7} chip {5:X} chipdes {6} SN {8} on {4}",
                board_type,
                board_rev, bl_rev, fw_maxsize, port, chip, chip_desc, extf_maxsize,
                BitConverter.ToString(self.sn).Replace("-", string.Empty));
        }