Package lejos.pc.tools

Source Code of lejos.pc.tools.NXJLinkAndUpload

package lejos.pc.tools;

import js.common.CLIToolProgressMonitor;
import js.common.ToolProgressMonitor;
import js.tinyvm.TinyVM;
import lejos.pc.comm.*;

/**
*
* Command-line utility that links and uploads NXJ programs in one call
*
* @author Lawrie Griffiths
*
*/
public class NXJLinkAndUpload extends NXTCommLoggable {
  private NXJCommandLineParser fParser;
  private Upload fUpload;
  private TinyVM fTinyVM;

  public NXJLinkAndUpload() {
    super();
    fParser = new NXJCommandLineParser();
    fUpload = new Upload();
    fTinyVM = new TinyVM();
    fTinyVM.addProgressMonitor(new CLIToolProgressMonitor());
  }

  /**
   * Main entry point for command line usage
   *
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    try {
      NXJLinkAndUpload instance = new NXJLinkAndUpload();
      instance.addToolsLogListener(new ToolsLogger());
      instance.run(args);
    } catch (Throwable t) {
      System.err.println("an error occurred: " + t.getMessage());
    }
  }

  /**
   * Run the utility.
   * Note that this can be called from other tools such as the Eclipse plug-in.
   *
   * @param args the command-line arguments
   *
   * @throws js.tinyvm.TinyVMException
   * @throws NXJUploadException
   */
  public void run(String[] args) throws js.tinyvm.TinyVMException, NXJUploadException {
    // process arguments
    if (!fParser.parseOrHelp(NXJLinkAndUpload.class, args))
      return;

    String binName = fParser.getOutput();
    boolean run = fParser.isRun();
    boolean blueTooth = fParser.isBluetooth();
    boolean usb = fParser.isUSB();
    String name = fParser.getName();
    String address = fParser.getAddress();
    String[] args1 = fParser.getRestArgs();
    String firstArg = args1[0];

    // System.out.println("Arg count is " + argCount);

    // Build the linker arguments
    if (binName == null)
    {
      //extract classname, throw away packagename
      int i = firstArg.lastIndexOf('.') + 1;
      if (i < 0)
        i = 0;
     
      binName = firstArg.substring(i) + ".nxj";
    }
   
    String classpath = TinyVM.joinCP(fParser.getBP(), fParser.getCP());

    // link
    log("Linking...");
    //TODO switch to streams or temp file if no filename was given
    fTinyVM.start(classpath, args1, fParser.isAll(), binName, fParser.isBigEndian(),
        fParser.isDebug(), fParser.getRunTimeOptions(), fParser.isVerbose());
   
    // upload
    log("Uploading...");
    int protocols = 0;

    if (blueTooth) protocols |= NXTCommFactory.BLUETOOTH;   
    if (usb) protocols |= NXTCommFactory.USB;

    fUpload.upload(name, address, protocols, binName, run);
  }

  /**
   * Register log listener
   *
   * @param listener
   */
  public void addToolsLogListener(ToolsLogListener listener) {
    fLogListeners.add(listener);
    fUpload.addLogListener(listener);
  }
 
  /**
   * Unregister log listener
   *
   * @param listener
   */
  public void removeToolsLogListener(ToolsLogListener listener) {
    fLogListeners.remove(listener);
    fUpload.removeLogListener(listener);
  }

  /**
   * Register monitor
   *
   * @param listener
   */
  public void addMonitor(ToolProgressMonitor monitor) {
    fTinyVM.addProgressMonitor(monitor);
  }

  /**
   * Unregister monitor
   *
   * @param listener
   */
  public void removeMonitor(ToolProgressMonitor monitor) {
    fTinyVM.removeProgressMonitor(monitor);
  }
}
TOP

Related Classes of lejos.pc.tools.NXJLinkAndUpload

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.