New Jaguars on CAN bus

I’m trying to get the code for the new Jaguars to compile in C++ using Windriver. Here is my setup and the errors I’m getting:

I got the sources for the CAN jaguar code off of http://firstforge.wpi.edu/sf/frs/do/viewRelease/projects.canjaguar/frs.canjaguar_for_c.canjaguar_for_c_revision_6
I then imported the files “CANJaguar.cpp”, “can_proto.h”, “CANJaguar.h”, and “JaguarCANDriver.h” into my project. In the file which I wanted to use the new Jaguars, I put:


#include "CANJaguar.h"

When I compiled my new project, I got a ton of compiler errors. They were:


In file included from C:/windriver/workspace/Spy/CANJaguar.cpp:3:
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:13: error: `tNIRIO_i32' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:16: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:19: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:28: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:35: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:38: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:47: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:50: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:53: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:56: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:64: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:67: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:70: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:74: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:78: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:84: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:87: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:90: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:98: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:101: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:104: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:107: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:110: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:117: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:120: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:123: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:130: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:133: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:136: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:143: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:146: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:149: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:152: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:162: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:165: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:168: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:171: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:174: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:177: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:180: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:183: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:186: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:189: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:192: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:195: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:198: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:206: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:209: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:212: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:215: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:218: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:221: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:224: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:227: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:230: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:233: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:236: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:239: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:242: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:245: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:248: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:251: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:258: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:261: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:264: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:267: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:270: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:277: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:280: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:287: error: `tRioStatusCode' does not name a type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:293: error: expected `,' or `...' before "status"
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:294: error: ISO C++ forbids declaration of `tRioStatusCode' with no type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h: In function `bool rioStatusIsFatal(int)':
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:295: error: `status' undeclared (first use this function)
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:295: error: (Each undeclared identifier is reported only once for each function it appears in.)
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h: At global scope:
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:298: error: expected `,' or `...' before "status"
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:299: error: ISO C++ forbids declaration of `tRioStatusCode' with no type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h: In function `bool rioStatusIsNotFatal(int)':
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:300: error: `status' undeclared (first use this function)
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h: At global scope:
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:306: error: expected `,' or `...' before "newStatus"
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:307: error: ISO C++ forbids declaration of `tRioStatusCode' with no type
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h: In function `T& rioSetStatus(T&, int)':
C:/WindRiver/vxworks-6.3/target/h/WPILib/ChipObject/NiRioStatus.h:308: error: `newStatus' undeclared (first use this function)
C:/windriver/workspace/Spy/CANJaguar.cpp: In member function `void CANJaguar::InitJaguar()':
C:/windriver/workspace/Spy/CANJaguar.cpp:31: error: `kRIOStatusVersionMismatch' undeclared (first use this function)
C:\WindRiver\vxworks-6.3\host\x86-win32\bin\make.exe: *** [SimpleTemplate_partialImage/Debug/Objects/Spy/CANJaguar.o] Error 1
Build Failed in Project 'Spy' (Process Exit Value was 2):   2010-01-20 14:45:55   (Elapsed Time: 00:01)

Does anyone know what’s wrong?

Thanks.

modify the include header in CANJaguar.cpp
#include “CANJaguar.h”
#include “ChipObject/NiRio.h” <-add this line
#include “ChipObject/NiRioStatus.h”

You beat me to it! You’ll also find that it only supports the Voltage control mode. Too bad :frowning:

If you install the firmware development package from luminarymicro.com in the docs folder it has the CAN protocol spec, so you could implement whatever mode you want.

Thanks! I figured most of that out by monitoring the communication between BDCOM and the Jaguar, but that doc is much easier!

However, it doesn’t include the modifications made in the FRC firmware, which we are required to use. I have managed to get speed control working with the FRC firmware, but they seem to have done something to the current control that I haven’t figured out yet.

  • Kevin