Understanding the program download process

The Netbeans FRC plugins will use FTP to download a program to the robot. It relies on a program called the "OTA Server" on the robot to force the robot to reboot after the download is complete. The first time you download a program after reimaging the cRIO the OTA server is downloaded along with your program. Since it was not running you have to manually reboot the robot the first time after the reimaging. After that, it will reboot automatically since the OTA server will start up when the robot boots.

What you will see the first time running a Java program after re-imaging the cRIO

What you will see the first time running a Java program after re-imaging the cRIO

This shows the output from NetBeans as it downloads the program to the cRiO. The steps are:

  1. Build the project
  2. Verify the development system IP addresses. In this case there are several interfaces because the system is a Mac running a Windows virtual machine. Normally there won't be that many interfaces.
  3. The downloader noticed that the version of the OTA server is not correct or missing and deploys a new copy. Then it downloads image.suite (the user program).
  4. NetBeans waits for the cRIO to reboot. It won't complete since the OTA server is just being downloaded for the first time. This is the case where a manual boot is required.

Subsequent downloads of the Java program

Subsequent downloads of the Java program

In this case, after the OTA server is installed you'll see something like this:

  1. The development computer network interface checks, same as before.
  2. This time, the correct JVM and OTA server are deployed so that step is skipped from before. Just the user program is downloaded.
  3. The cRIO reboots and takes between 7-12 seconds.
  4. You start seeing startup messages from VxWorks and the LabVIEW runtime components. Also there are messages that verify the FPGA version (FPGA Hardware version and GUID).
  5. The program has loaded, and in this case there is no programmer supplied "disabled()" method so the default version of the disabled() method is run from the library and it prints a message to inform you that this is happening. If you see messages saying that the default autonomous() or operatorControl() methods running, that it indicates that the program hasn't correctly overridden those methods. This program is built using the SimepleRobotTemplate and you'll see similar messages corresponding to the default methods in the default template that you chose.