Ensure that the temporary row that is added to the view on startup is sized correctly before storing that height as the default.
Then use the calculated row height to set the default height for all added rows
Right-clicking and trying to graph a signal from a DBC with "Label filters"
unset would result in an error "Cannot find ID 0xNNN in DBC files(). Not adding
graph".
Filter labels unset is the default state when adding a new DBC file.
This is useful if you have a 1920x1080 monitor or smaller resolution
but you want to capture 64 byte payloads. The default is 8 bytes but
usually 16 bytes is fine.
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
More standard way of looking at parsed data
Handles multiple message types. Each message gets its own columns.
With many message types there are a lot of blank cells but its easy to
analyze.
Also switched from Sphinx generated HTML to GitHub markup help files.
This improves compatibility and will allow the help files to more easily be viewed on github as well.
- Generic CSV parses file without failures, so CARBUS must be higher.
- File may be loaded but will have no packets. Adjusted UI message for this case.
- Obviously if we got CANHACKER header, then file is already detected and there is no need to parse.
- Changes in DBC file manager are immediately propagated to the main window (frames, filter labeling)
- Prevent DBC file manager from saving settings too often and too early (this also fixes a bug where sometimes the settings of all but the first DBC file are lost)
- Add GMLAN 29bit filtering feature. In addition to J1939 matching, it is now possible to match DBC messages using only the Arbitration Id (bits 14-26 of CAN Address), since Priority id (higher bits) and Sender Id (lowest 13 bits) are not relevant when interpreting the CAN message content. This allows to use the excellent GM Global A DBC files on https://github.com/commaai/opendbc. Just remember to select the "GMLAN" matching criteria on DBC File manager.
- Add "Filter labeling" feature. Using loaded DBC files, it matches the filter Ids with DBC messages and shows them in filter windows. Labeling works in the main window (no need to set "Frame interpret" on, since this is a separate feature), as well as in Flow view, Frame data analysis, Playback and Fuzzzing windows. This makes it so much easier to concentrate on those CAN messages that matter. To use this feature, select global "Label filters using messages from DBC files" on Main Configuration page, and then enable the feature on individual DBC files (on DBC file manager) as needed. This is needed if there's overlap in CAN addresses between DBC files, and because the filter labeler cannot tell apart anymore which Filter ID is associated to which bus, it might label them incorrectly. But usually it's ok to just enable the labeling with all the DBC files.
- In Frame data analysis window, in addition to J1939 decoding show also GMLAN (Priority bits, Arbitration Id, Sender Id) decoding.
- FilterUtility static class used for centralized ListWidgetItem creation and for other helper functions
- DBC handler: To allow setting bus numbers even before connection is configured, do not enforce "valid" bus numbers