예제 #1
0
파일: fup.cs 프로젝트: glocklueng/NXP_DFU
        public static bool phaseOne(String filename, DFUMachine dfu)
        {
            bool       done         = false;
            int        transferSize = (dfu.wTransferSize < dfu.iobuf.Length) ? dfu.wTransferSize : dfu.iobuf.Length;
            int        totalbytes   = 0;
            FileStream secloader    = File.Open(filename, FileMode.Open);
            DFU_Status status;

            secloader.Seek(0, SeekOrigin.Begin);
            dfu.make_idle(false);
            dfu.transaction = 0;
            while (!done)
            {
                int nbytes = getBytes(secloader, ref dfu.iobuf, 0, transferSize);
                totalbytes += nbytes;
                DEBUG("Got " + nbytes.ToString() + "bytes, total:" + totalbytes.ToString());
                if (nbytes > 0)
                {
                    dfu.download(ref dfu.iobuf, nbytes);
                    dfu.wait_idle();
                }
                else
                {
                    done = true;
                }
            }
            dfu.download(ref dfu.iobuf, 0); //Signal we're done.
            do
            {
                dfu.get_status(out status);
            } while (status.State == DFUStateVals.STATE_DFU_MANIFEST_SYNC);
            return(true);
        }
예제 #2
0
파일: fup.cs 프로젝트: glocklueng/NXP_DFU
        public static void Main(string[] args)
        {
            bool   show_help = false;
            String secloader = "";
            String binfile   = "";
            int    exitCode  = 1;

            var p = new OptionSet()
            {
                { "v|verbose", "tell me what's happening during program.", v => chatty = (v != null) },
                { "d|debug", "more debugging output.", v => debug = (v != null) },
                { "s|secondary_loader=", "filename of secondary loader", v => secloader = v },
                { "b|binfile=", "filename of bin flash image", v => binfile = v },
                { "h|help", "show this message and exit", v => show_help = (v != null) },
            };

            List <string> extra;

            try {
                extra = p.Parse(args);
            }
            catch (OptionException e) {
                Console.Write("fup: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `fup --help' for more information.");
                return;
            }

            if (secloader.Length == 0 || binfile.Length == 0)
            {
                show_help = true;
            }


            if (show_help)
            {
                ShowHelp(p);
                return;
            }

            if (debug)
            {
                chatty = true;
            }

            ourDevice = findOurDevice();
            dfu       = new DFUMachine(ourDevice);

            if (dfu.findInterface())
            {
                verboseOut("Found DFU interface");
                dfu.claimIface();
                DEBUG("wTransferSize = " + dfu.wTransferSize.ToString());
            }
            //Hack
            if (dfu.wTransferSize == 0)
            {
                dfu.wTransferSize = 2048;
            }
            phaseOne(secloader, dfu);

            verboseOut("Wait 5 sec for next phase ...");
            Thread.Sleep(5000);
            if (ourDevice.IsOpen)
            {
                ourDevice.Close();
            }
            ourDevice = findOurDevice();
            nxpdfu    = new NXPDFUMachine(ourDevice);
            if (nxpdfu.findInterface())
            {
                verboseOut("Found DFU interface");
                nxpdfu.claimIface();
                DEBUG("wTransferSize = " + nxpdfu.wTransferSize.ToString());
            }
            //Hack
            if (nxpdfu.wTransferSize == 0)
            {
                nxpdfu.wTransferSize = 2048;
            }
            if (phaseTwo(binfile, nxpdfu))
            {
                exitCode = 0;
            }

            if (ourDevice.IsOpen)
            {
                ourDevice.Close();
            }
            UsbDevice.Exit();
            Environment.Exit(exitCode);
        } //Main