Пример #1
0
 public static void Main(string[] Args)
 {
     Initialize();
     Warn.LLogL("Make sure to open Goldtree after having opened Goldleaf on your console. Looking for connection...");
     try
     {
         var pat = new KLST_PATTERN_MATCH {
             DeviceID = @"USB\VID_057E&PID_3000"
         };
         var lst = new LstK(0, ref pat);
         lst.MoveNext(out var dinfo);
         USB = new UsbK(dinfo);
         Log.LogL("Connection was established.");
     }
     catch
     {
         Error.LLogL("Unable to find USB communication. Are you sure Goldleaf is open and plugged in?");
     }
     Console.WriteLine();
     while (USB.HandleNextCommand())
     {
         ;
     }
     Error.LLogL("An error ocurred handling Goldleaf's latest command request.");
 }
Пример #2
0
        public static void Main(string[] Args)
        {
            Initialize();
            var pat = new KLST_PATTERN_MATCH {
                DeviceID = @"USB\VID_057E&PID_3000"
            };
            var lst = new LstK(0, ref pat);

            try
            {
                lst.MoveNext(out var dinfo);
                USB = new UsbK(dinfo);
            }
            catch
            {
                // System.Diagnostics.Process.Start(System.Windows.Forms.Application.ExecutablePath);
                return;
            }
            while (USB.HandleNextCommand() == CommandHandleResult.Success)
            {
                ;
            }

            /*
             * usbnsp:
             * // Console.Clear();
             * Initialize();
             * try
             * {
             *  var pat = new KLST_PATTERN_MATCH { DeviceID = @"USB\VID_057E&PID_3000" };
             *  var lst = new LstK(0, ref pat);
             *  lst.MoveNext(out var dinfo);
             *  USB = new UsbK(dinfo);
             * }
             * catch
             * {
             *  Error.Log("No USB connection was found. Make sure you have Goldleaf open before running Goldtree.");
             * }
             * try
             * {
             *  Command c = new Command(CommandId.ConnectionRequest);
             *  USB.Write(c);
             *  Log.Log("Attempting to connect to Goldleaf via USB...");
             *  Command rc = USB.Read();
             *  if(rc.MagicOk())
             *  {
             *      if(rc.IsCommandId(CommandId.ConnectionResponse))
             *      {
             *          Log.Log("Connection was established with Goldleaf.");
             *          Log.Log("Select the NSP to send to Goldleaf on the dialog.");
             *          OpenFileDialog fd = new OpenFileDialog()
             *          {
             *              Title = "Select NSP to send to Goldleaf via USB",
             *              Filter = "NSP / Nintendo Submission Package (*.nsp)|*.nsp",
             *              Multiselect = false,
             *          };
             *          if(fd.ShowDialog() == DialogResult.OK)
             *          {
             *              string nsp = fd.FileName;
             *              string nspname = Path.GetFileName(nsp);
             *              c = new Command(CommandId.NSPName);
             *              USB.Write(c);
             *              USB.Write((uint)nspname.Length);
             *              USB.Write(nspname);
             *              Log.Log("Selected NSP's name was sent to Goldleaf. Waiting for install approval from Goldleaf...");
             *              Command rc2 = USB.Read();
             *              if(rc2.MagicOk())
             *              {
             *                  if(rc2.IsCommandId(CommandId.Start))
             *                  {
             *                      Log.Log("Goldleaf is ready for the installation. Preparing everything...");
             *                      try
             *                      {
             *                          FileStream fs = new FileStream(nsp, FileMode.Open);
             *                          StreamStorage ist = new StreamStorage(fs, true);
             *                          Pfs pnsp = new Pfs(ist);
             *                          ist.Dispose();
             *                          fs.Close();
             *                          fs = new FileStream(nsp, FileMode.Open);
             *                          uint filecount = (uint)pnsp.Files.Length;
             *                          c = new Command(CommandId.NSPData);
             *                          USB.Write(c);
             *                          USB.Write(filecount);
             *                          int tikidx = -1;
             *                          int certidx = -1;
             *                          int tmpidx = 0;
             *                          foreach(var file in pnsp.Files)
             *                          {
             *                              ulong offset = (ulong)pnsp.HeaderSize + (ulong)file.Offset;
             *                              ulong size = (ulong)file.Size;
             *                              uint len = (uint)file.Name.Length;
             *                              USB.Write(len);
             *                              USB.Write(file.Name);
             *                              USB.Write(offset);
             *                              USB.Write(size);
             *                              if(Path.GetExtension(file.Name).Replace(".", "").ToLower() == "tik") tikidx = tmpidx;
             *                              else if(Path.GetExtension(file.Name).Replace(".", "").ToLower() == "cert") certidx = tmpidx;
             *                              tmpidx++;
             *                          }
             *                          BinaryReader br = new BinaryReader(fs);
             *                          while(true)
             *                          {
             *                              Command ccmd = USB.Read();
             *                              if(ccmd.MagicOk())
             *                              {
             *                                  if(ccmd.IsCommandId(CommandId.NSPContent))
             *                                  {
             *                                      USB.Read(out uint idx);
             *                                      Log.Log("Sending content \'" + pnsp.Files[idx].Name + "\'... (" + (idx + 1) + " of " + pnsp.Files.Length + ")");
             *                                      PfsFileEntry ent = pnsp.Files[idx];
             *                                      long rsize = 0x100000;
             *                                      long coffset = pnsp.HeaderSize + ent.Offset;
             *                                      long toread = ent.Size;
             *                                      long tmpread = 1;
             *                                      byte[] bufb;
             *                                      while((tmpread > 0) && (toread > 0) && (coffset < (coffset + ent.Size)))
             *                                      {
             *                                          if(rsize >= ent.Size) rsize = ent.Size;
             *                                          int tor = (int)Math.Min(rsize, toread);
             *                                          br.BaseStream.Position = coffset;
             *                                          bufb = br.ReadBytes(tor);
             *                                          tmpread = bufb.Length;
             *                                          USB.Write(bufb);
             *                                          coffset += tmpread;
             *                                          toread -= tmpread;
             *                                      }
             *                                      Log.Log("Content was sent to Goldleaf.");
             *                                  }
             *                                  else if(ccmd.IsCommandId(CommandId.NSPTicket))
             *                                  {
             *                                      Log.Log("Sending ticket file...");
             *                                      PfsFileEntry tik = pnsp.Files[tikidx];
             *                                      br.BaseStream.Seek(pnsp.HeaderSize + tik.Offset, SeekOrigin.Begin);
             *                                      byte[] file = br.ReadBytes((int)tik.Size);
             *                                      USB.Write(file);
             *                                      Log.Log("Ticket was sent to Goldleaf.");
             *                                  }
             *                                  else if(ccmd.IsCommandId(CommandId.Finish)) break;
             *                                  else
             *                                  {
             *                                      USB = null;
             *                                      Error.Log("An invalid command was received. Are you sure Goldleaf is active?");
             *                                  }
             *                              }
             *                              else
             *                              {
             *                                  USB = null;
             *                                  Error.Log("An invalid command was received. Are you sure Goldleaf is active?");
             *                              }
             *                          }
             *                      }
             *                      catch
             *                      {
             *                          Error.Log("An error ocurred opening the selected NSP. Are you sure it's a valid NSP?");
             *                      }
             *                  }
             *                  else if(rc2.IsCommandId(CommandId.Finish))
             *                  {
             *                      USB = null;
             *                      Error.Log("Goldleaf has canceled the installation.");
             *                  }
             *                  else
             *                  {
             *                      USB = null;
             *                      Error.Log("An invalid command was received. Are you sure Goldleaf is active?");
             *                  }
             *              }
             *              else
             *              {
             *                  USB = null;
             *                  Error.Log("An invalid command was received. Are you sure Goldleaf is active?");
             *              }
             *          }
             *          else Error.Log("The dialog was closed without selecting a NSP, or another error ocurred. Reopen Goldleaf and Goldtree and try again.");
             *      }
             *      else if(rc.IsCommandId(CommandId.Finish))
             *      {
             *          USB = null;
             *          Error.Log("Goldleaf has canceled the installation.");
             *      }
             *      else
             *      {
             *          USB = null;
             *          Error.Log("An invalid command was received. Are you sure Goldleaf is active?");
             *      }
             *  }
             *  else
             *  {
             *      USB = null;
             *      Error.Log("An invalid command was received. Are you sure Goldleaf is active?");
             *  }
             * }
             * catch
             * {
             *  Error.Log("An error ocurred selecting the NSP to be sent.");
             * }
             * Log.Log("The installation has finished. Press ENTER to close Goldtree, or any other key to start another USB installation.", true);
             * ConsoleKeyInfo ki = Console.ReadKey();
             * if(ki.Key == ConsoleKey.Enter)
             * {
             *  if(USB != null)
             *  {
             *      Command cmd = new Command(CommandId.Finish);
             *      USB.Write(cmd);
             *  }
             *  Environment.Exit(0);
             * }
             * else goto usbnsp;
             */
        }