There are a TON of explorations I did here, many may be unnecessary, but this is a stake in the ground. The main issue was the strange queue logic in canconmanager::sendFrame which puts the tx data in the rx queue so it will show up in the displayed data. It caused SIGABRT and SIGSEG to show up everywhere. It is NOT fixed yet, but TX works over the wire you just can't see it in the tableview. I thought at first it was only when overwrite data was active, so I put in a a pile of changes to keep frames and filtered frames as two seperate copies of data where frames was always complete and filtered was only what was seen in the mainwindow. It made it so the graphing window would work with overwrite data active which is an improvement. I wouldn't roll these changes back. Because of these changes I had to update the frame sorting code adjust the refresh function in canframemode.cpp I also thought it was related to UI updates, but its not, that's been confirmed. I put a mutex around the custom sender tick timer so that the 1ms timer wouldn't re-enter its callback. This didn't fix the crash, but it sure seems to make a lot of sense, and the way I did it no elasped time is lost for tracking purposes, and in reality theres no way 1ms was consistent anyway. I put a mutex around the shrinking of frames and filteredframes to make sure we weren't deleting at the same time as accessing, but honestly we acccess those lists in many places without semaphores so that probably did nothing. Fixed a bug in FrameSenderWindow:DoModifiers that was improperly parsing and sometimes crashing when looking for the ~ operator before a symbol. Also added some minor work to keep row expansion functioning when changing filters or sorting. Need to make some tweaks so it stops trying so hard when overwrite is not active Theres also code in main.c taht makes debugging output super verbose. Committing now to start cleanup
SavvyCAN
Qt based cross platform canbus tool (C) 2015-2021 EVTV and Collin Kidder
A Qt5 based cross platform tool which can be used to load, save, and capture canbus frames. This tool is designed to help with visualization, reverse engineering, debugging, and capturing of canbus frames.
Please use the "Discussions" tab here on GitHub to ask questions and interact with the community.
Requires a resolution of at least 1024x768. Fully multi-monitor capable. Works on 4K monitors as well.
You are highly recommended to use the CANDue board from EVTV.
The CANDue board must be running the GVRET firmware which can also be found within the collin80 repos.
It is now possible to use any Qt SerialBus driver (socketcan, Vector, PeakCAN, TinyCAN). There may, however, be some loss of some functionality as some functions of SavvyCAN are designed for use directly with the EVTVDue and CANDue 2.0 boards.
It should, however, be noted that use of a capture device is not required to make use of this program. It can load and save in several formats:
- BusMaster log file
- Microchip log file
- CRTD format (OVMS log file format from Mark Webb-Johnson)
- GVRET native format
- Generic CSV file (ID, D0 D1 D2 D3 D4 D5 D6 D7)
- Vector Trace files
- IXXAT Minilog files
- CAN-DO Logs
- Vehicle Spy log files
- CANDump / Kayak (Read only)
- PCAN Viewer (Read Only)
Dependencies
Now this code does not depend on anything other than what is in the source tree or available from the Qt installer.
Uses QCustomPlot available at:
However, this source code is integrated into the source for SavvyCAN and one isn't required to download it separately.
This project requires 5.14.0 or higher because of a dependency on QtSerialBus and other new additions to Qt.
NOTE: Qt6 currently lacks support for QtSerialBus and many other Qt sub-features. At this time you cannot use Qt6 to compile SavvyCAN. Support for Qt6 should be possible around Qt6.2.
Instructions for compiling:
Download the newest stable version of Qt directly from qt.io (You need 5.14.x or newer)
cd ~
git clone https://github.com/collin80/SavvyCAN.git
cd SavvyCAN
~/Qt/5.14/gcc_64/bin/qmake
make
Now run SavvyCAN
./SavvyCAN
On linux systems you can run ./install.sh to create a desktop shortcut.
Compiling in debug mode for additional information
qmake CONFIG+=debug
make
What to do if your compile failed?
The very first thing to do is try:
qmake
make clean
make
Did that fix it? Great! If not, ensure that you selected SerialBUS support when you installed Qt.
What to do if qmake fails with error Project ERROR: Unknown module(s) in QT: qml serialbus help on Ubuntu? :
sudo apt install libqt5serialbus5-dev libqt5serialport5-dev qtdeclarative5-dev qttools5-dev
Used Items Requiring Attribution
nodes by Adrien Coquet from the Noun Project
message by Vectorstall from the Noun Project
signal by shashank singh from the Noun Project
signal by juli from the Noun Project
signal by yudi from the Noun Project
Death by Adrien Coquet from the Noun Project