ValueCAN Drivers for Jetson TX2

Hello,

I’m trying to set up ValueCAN drivers for the Nvidia Jetson TX2 and I’m failing to compile the code.

ValueCAN offers the python package “python-ics” to integrate with “python-can.” This can be downloaded here: https://github.com/intrepidcs/python_ics or through pip3 install python-ics
The “python-ics” install the “icsneoapi” available here: https://github.com/intrepidcs/icsneoapi

I’ve had success building from source and using pip3 on a raspberry pi. Same compilers. I’m not sure what I’m missing. I would really appreciate some help! I have seen the notes on the Kvaser CAN system, but I didn’t come across any arm items to change. I had though this would be helpful:
https://devtalk.nvidia.com/default/topic/1005924/jetson-tx2/kvaser-drivers-building-on-tx2-/

When running “make”
nvidia@tegra-ubuntu:~ git clone https://github.com/intrepidcs/icsneoapi Cloning into 'icsneoapi'... remote: Enumerating objects: 148, done. remote: Total 148 (delta 0), reused 0 (delta 0), pack-reused 148 Receiving objects: 100% (148/148), 115.01 KiB | 0 bytes/s, done. Resolving deltas: 100% (87/87), done. Checking connectivity... done. nvidia@tegra-ubuntu:~ cd icsneoapi/
nvidia@tegra-ubuntu:~/icsneoapi$ ls
99-intrepidcs.rules LICENSE Makefile README.md src
nvidia@tegra-ubuntu:~/icsneoapi$ make
g++ -g -c -fpic -fvisibility=hidden -fvisibility-inlines-hidden -O2 -Isrc/ src/CFTDILib.cpp
In file included from src/CFTDILib.h:31:0,
from src/CFTDILib.cpp:31:
src/icsnVC40.h:2372:45: warning: division by zero [-Wdiv-by-zero]
ASSERT_CONCAT(assert_line_, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2412:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessage);
^
src/icsnVC40.h:2372:58: error: ‘(1 / 0)’ is not a constant expression
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2412:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessage);
^
src/icsnVC40.h:2372:58: error: enumerator value for ‘assert_line_2412’ is not an integer constant
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2412:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessage);
^
src/icsnVC40.h:2372:45: warning: division by zero [-Wdiv-by-zero]
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2413:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessageLong);
^
src/icsnVC40.h:2372:58: error: ‘(1 / 0)’ is not a constant expression
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2413:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessageLong);
^
src/icsnVC40.h:2372:58: error: enumerator value for ‘assert_line_2413’ is not an integer constant
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2413:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessageLong);
^
src/icsnVC40.h:2372:45: warning: division by zero [-Wdiv-by-zero]
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2414:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessageJ1850);
^
src/icsnVC40.h:2372:58: error: ‘(1 / 0)’ is not a constant expression
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2414:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessageJ1850);
^
src/icsnVC40.h:2372:58: error: enumerator value for ‘assert_line_2414’ is not an integer constant
ASSERT_CONCAT(assert_line
, LINE) = 1 / (int)(!!(e))
^
src/icsnVC40.h:2376:30: note: in expansion of macro ‘ics_static_assert’
#define CHECK_STRUCT_SIZE(X) ics_static_assert(sizeof(X) == X##_SIZE, #X " is the wrong size");
^
src/icsnVC40.h:2414:1: note: in expansion of macro ‘CHECK_STRUCT_SIZE’
CHECK_STRUCT_SIZE(icsSpyMessageJ1850);
^
Makefile:17: recipe for target ‘CFTDILib.o’ failed
make: *** [CFTDILib.o] Error 1

Hi Rukie1,

We do all the setups with mttcan driver which is included with jetson released souces.
Mttcan code is written specific to Tegra CAN controller and any transceiver can be interfaced to make it participated over the CAN network.

I will be looking into this package and try building ValueCAN for Jetson-TX2.

Mean time Can you please let me know what is the purpose of ValueCAN package and how can it be used. Why is it preferred over other CAN software?

Thanks & Regards,
Sandipan

Sandipan,
The ValueCAN is a CAN to USB device (2x) that is used regularly within our organization, along with P-CAN, VectorCAN, Kvaser, etc. The Jetson offers built-in CAN technology, but as I understand it I have to create my own hardware to connect to CAN Hi/Low pins.

I know I could take something like this: https://www.amazon.com/NOYITO-TJA1051-CAN-Transceiver-Consumption/dp/B07DMTFHS7 and connect it pretty quickly, but I’d rather have something a little more “robust” without creating packaging. A USB to CAN device offers me something I can leave in the vehicle without worrying about snagging wires, etc. No soldering required.

The ValueCAN package ICSNEOAPI is required by the python package Python-ICS. The Python-ICS package provides drivers for Python-CAN. The ValueCAN has proprietary hardware that requires their drivers to access the full functionality of their devices. Without the compiling of their ICSNEOAPI, I cannot use their USB to CAN device.

Again, thank you for the help!

Regards,
Rukie