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); }
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