Git Product home page Git Product logo

cabana's Introduction

Cabana

Cabana was a tool developed to view raw CAN data. One use for this is creating and editing CAN Dictionaries (DBC files), and the tool provides direct integration with commaai/opendbc (a collection of DBC files), allowing you to load the DBC files direct from source, and save to your fork. In addition, you could load routes from comma connect.

⚠️ Deprecation notice

Web cabana has been deprecated in favor of the new cabana, which brings more features and faster load times.

Development

Setup

yarn
yarn run sass
yarn start

Testing

yarn run test

Deploy to Production

npm version patch
git push origin master --tags # push version patch
yarn run deploy # builds and deploys to github pages

errors building libusb modules?

You can safely ignore those errors even though it returns 1. If you'd like them to go away just because they're annoying, install libusb-dev...

sudo apt-get install -y libusb-dev libudev-dev

or

brew install libusb

Create React App documentation

This project was bootstrapped with Create React App v1.x, then upgraded to react-scripts v3.x and use craco to customize it.

You can read the create react app documentation here

We use craco to easily add worker-loader.

License

MIT

cabana's People

Contributors

adeebshihadeh avatar andyh2 avatar chrisinajar avatar christopherbiscardi avatar davetapley avatar dependabot[bot] avatar espes avatar geohot avatar github-actions[bot] avatar gregjhogan avatar incognitojam avatar jwooning avatar marcelocarmona avatar martinl avatar pd0wm avatar robbederks avatar tk211x avatar valish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cabana's Issues

"Fork it"

I can load my fork dbc only a single time a day. Something must be screwed up with cookies mechanism because I am logged in and I do have OpenDBC fork..

image

I tried different browsers. Same. The problem persists at least for several months

Live cabana: update to new panda CANPacket

I'm trying to use Cabana and white panda to stream data from my car, but Cabana hangs at ''Loading message" indefinitely. I'm using windows 10 machine with latest chrome browser.

20220125_165808

Cabana video playback tops out at 360 seconds, connect shows good video for whole drive

see https://discord.com/channels/469524606043160576/819046761287909446/925437626180304898 for detailed information

cabana will only show the first 360 seconds of my drive video, despite having uploaded all the video and all the logs. I can get log data from beyond that point, but not video. If I look on connect.comma.ai, I can see the video from beyond 360 seconds. The drive which exhibits this issue is 354bf0d56b13da66|2021-12-28--07-59-18.

Log event signal display not updating/crashing

I think this may have been recently introduced. Steps to reproduce:

  • Open a drive and load a DBC (not sure loading a DBC matters)
  • Click the Show Log Events checkbox
  • Click CarState:WheelSpeeds, looks normal
  • Click CarState:Ego, message packets list updates but the edit signals/show plot list does not
  • Clicking on one of the "old" signal "Show Plot" button makes Cabana go kaboom

It looks like the signals list refuses to refresh when jumping between log event messages in the same group, e.g. "CarState:WheelSpeeds" to "CarState:[Ego|Controls|Flags]". However, it will refresh normally if jumping to a different log event group. Same bug/behavior seems to hold for all the log event groups, except that Health:Data seems to act as part of the Thermal group.

Enhance Cabana with features to help find signals, such as blinkers for future OP versions/nav

I found this:
https://www.autopi.io/blog/discover-hidden-functions-in-your-car-with-can-bus/

image

Having the ability to more intelligently filter CAN messages in Cabana would go far as to help find messages for future Comma projects, such as blinker for nav and other features. Currently using Cabana to find signals is more guess and check.

I've asked them if they wanted to add support for pandas:
https://community.autopi.io/t/support-for-comma-panda-devices-also-we-have-a-vast-opendbc-library/2763

remove vega-tooltip so we can compile on arm x64

node-gfx/node-canvas-prebuilt#9

pi@raspberrypi:~/cabana $ yarn why canvas-prebuilt
yarn why v1.22.5
[1/4] Why do we have the module "canvas-prebuilt"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "[email protected]"
info Reasons this module exists
   - "vega-tooltip#vega" depends on it
   - Hoisted from "vega-tooltip#vega#canvas-prebuilt"
Done in 10.44s.

Plenty of better UI libraries exist, don't need vega

Also have to remove sentry getsentry/sentry-cli#593

Also node-sass?

Error: Node Sass does not yet support your current environment: Linux Unsupported architecture (arm) with Unsupported runtime (83)
For more information on which environments are supported please see:

Remove msg name popup

I propose moving the two text boxes where the edit button is and removing the popup

image
image

Cannot read property 'hexData' of undefined

Problem encountered on my.comma.ai. To reproduce the problem just click on any message and then try to select any message portion in message details area.

Just to add, after this error the page goes blank so it is a critical error as cabana is is not usable anymore.

console.js:39 TypeError: Cannot read property 'hexData' of undefined
    at MessageBytes.shouldComponentUpdate (MessageBytes.js:31)
    at gg (react-dom.production.min.js:2869)
    at Lh (react-dom.production.min.js:3870)
    at mj (react-dom.production.min.js:6116)
    at jj (react-dom.production.min.js:5101)
    at Z (react-dom.production.min.js:4958)
    at $i (react-dom.production.min.js:4817)
    at react-dom.production.min.js:2543
    at n.unstable_runWithPriority (scheduler.production.min.js:338)
    at vf (react-dom.production.min.js:2513)
    at yf (react-dom.production.min.js:2538)
    at O (react-dom.production.min.js:2528)
    at eg (react-dom.production.min.js:4773)
    at Object.enqueueSetState (react-dom.production.min.js:2840)
    at CanExplorer.D.setState (react.production.min.js:60)
    at CanExplorer._callee3$ (CanExplorer.js:763)
    at tryCatch (runtime.js:45)
    at Generator.invoke [as _invoke] (runtime.js:264)
    at Generator.forEach.e.<computed> [as next] (runtime.js:98)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
e.<computed> @ console.js:39
di @ react-dom.production.min.js:4260
r.callback @ react-dom.production.min.js:4659
Zf @ react-dom.production.min.js:2808
Yf @ react-dom.production.min.js:2796
nj @ react-dom.production.min.js:5821
n.unstable_runWithPriority @ scheduler.production.min.js:338
vf @ react-dom.production.min.js:2513
ij @ react-dom.production.min.js:5547
$i @ react-dom.production.min.js:4817
(anonymous) @ react-dom.production.min.js:2543
n.unstable_runWithPriority @ scheduler.production.min.js:338
vf @ react-dom.production.min.js:2513
yf @ react-dom.production.min.js:2538
O @ react-dom.production.min.js:2528
eg @ react-dom.production.min.js:4773
enqueueSetState @ react-dom.production.min.js:2840
D.setState @ react.production.min.js:60
_callee3$ @ CanExplorer.js:763
tryCatch @ runtime.js:45
invoke @ runtime.js:264
forEach.e.<computed> @ runtime.js:98
asyncGeneratorStep @ asyncToGenerator.js:3
_next @ asyncToGenerator.js:25
Promise.then (async)
asyncGeneratorStep @ asyncToGenerator.js:13
_next @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
loadMessagesFromCache @ main.2c9f4575.chunk.js:1
persistDbc @ CanExplorer.js:970
onConfirmedSignalChange @ CanExplorer.js:977
propagateUpSignalChange @ AddSignals.js:520
onBitMouseUp @ AddSignals.js:367
ka @ react-dom.production.min.js:81
qa @ react-dom.production.min.js:101
ra @ react-dom.production.min.js:105
wa @ react-dom.production.min.js:125
Aa @ react-dom.production.min.js:154
ya @ react-dom.production.min.js:143
Ba @ react-dom.production.min.js:167
Pd @ react-dom.production.min.js:1749
Ud @ react-dom.production.min.js:1813
n.unstable_runWithPriority @ scheduler.production.min.js:338
vf @ react-dom.production.min.js:2513
fj @ react-dom.production.min.js:4863
Sd @ react-dom.production.min.js:1783
wrapped @ raven.js:363
asyncToGenerator.js:6 Uncaught (in promise) TypeError: Cannot read property 'hexData' of undefined
    at MessageBytes.shouldComponentUpdate (MessageBytes.js:31)
    at gg (react-dom.production.min.js:2869)
    at Lh (react-dom.production.min.js:3870)
    at mj (react-dom.production.min.js:6116)
    at jj (react-dom.production.min.js:5101)
    at Z (react-dom.production.min.js:4958)
    at $i (react-dom.production.min.js:4817)
    at react-dom.production.min.js:2543
    at n.unstable_runWithPriority (scheduler.production.min.js:338)
    at vf (react-dom.production.min.js:2513)
    at yf (react-dom.production.min.js:2538)
    at O (react-dom.production.min.js:2528)
    at eg (react-dom.production.min.js:4773)
    at Object.enqueueSetState (react-dom.production.min.js:2840)
    at CanExplorer.D.setState (react.production.min.js:60)
    at CanExplorer._callee3$ (CanExplorer.js:763)
    at tryCatch (runtime.js:45)
    at Generator.invoke [as _invoke] (runtime.js:264)
    at Generator.forEach.e.<computed> [as next] (runtime.js:98)
    at asyncGeneratorStep (asyncToGenerator.js:3)
    at _next (asyncToGenerator.js:25)
shouldComponentUpdate @ MessageBytes.js:31
gg @ react-dom.production.min.js:2869
Lh @ react-dom.production.min.js:3870
mj @ react-dom.production.min.js:6116
jj @ react-dom.production.min.js:5101
Z @ react-dom.production.min.js:4958
$i @ react-dom.production.min.js:4817
(anonymous) @ react-dom.production.min.js:2543
n.unstable_runWithPriority @ scheduler.production.min.js:338
vf @ react-dom.production.min.js:2513
yf @ react-dom.production.min.js:2538
O @ react-dom.production.min.js:2528
eg @ react-dom.production.min.js:4773
enqueueSetState @ react-dom.production.min.js:2840
D.setState @ react.production.min.js:60
_callee3$ @ CanExplorer.js:763
tryCatch @ runtime.js:45
invoke @ runtime.js:264
forEach.e.<computed> @ runtime.js:98
asyncGeneratorStep @ asyncToGenerator.js:3
_next @ asyncToGenerator.js:25
Promise.then (async)
asyncGeneratorStep @ asyncToGenerator.js:13
_next @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
loadMessagesFromCache @ main.2c9f4575.chunk.js:1
persistDbc @ CanExplorer.js:970
onConfirmedSignalChange @ CanExplorer.js:977
propagateUpSignalChange @ AddSignals.js:520
onBitMouseUp @ AddSignals.js:367
ka @ react-dom.production.min.js:81
qa @ react-dom.production.min.js:101
ra @ react-dom.production.min.js:105
wa @ react-dom.production.min.js:125
Aa @ react-dom.production.min.js:154
ya @ react-dom.production.min.js:143
Ba @ react-dom.production.min.js:167
Pd @ react-dom.production.min.js:1749
Ud @ react-dom.production.min.js:1813
n.unstable_runWithPriority @ scheduler.production.min.js:338
vf @ react-dom.production.min.js:2513
fj @ react-dom.production.min.js:4863
Sd @ react-dom.production.min.js:1783
wrapped @ raven.js:363

Extra definitions added to exported dbc (causing parsing issue)

to reproduce:

  1. open up a cabana link.
  2. load a genreated dbc.
  3. once it's fully loaded, save/download the dbc.
  4. validate the downloaded dbc.

When I tried to open a cabana link with honda_crv_hybrid_2019_can_generated.dbc, I noticed the GEAR and GEAR_SHIFTER plots in GEARBOX couldn't display properly (no timeline and not moving)

After inspecting the export dbc, I noticed it's overwriting GEARBOX definitions:

image

If I removed CM_ "Imported file _bosch_2018.dbc starts here" from the dbc file and import/export again, it seems loading fine and not overwriting defintions.

image

so looks like issue is caused when:

CM_ "Imported file bosch_2018.dbc starts here"
or
CM
"honda_crv_hybrid_2019_can.dbc starts here"

are added.

Add signal value editor

Ideally, we can come up with a nice UI for this, but a text field for setting the raw line would be great for now. For example, for this you'd enter 0 "P" 1 "R" 2 "N" 3 "D" 4 "B" in the value field, then cabana would insert the VAL_ 295 GEAR and the semicolon in the DBC it outputs.

performance enhancement suggestion

in realtime streaming mode, cabana should wait to collect can messages until after a dbc is chosen because right now selecting a dbc is super slow and unresponsive on some computers that otherwise work fine with live cabana

Choosing of car from list

Clicking load DBC and selecting a car makes it impossible to make another choice.
Even if you click on another car in the list, clicking ok will load the car you clicked first.

Use live stream mode while offline

Since Cabana runs from https://community.comma.ai/cabana is there an internet connection needed even when using direct USB to panda? This may look like a stupid question but is it maybe possible to load the website on a laptop and then do offline and use USB afterwards or is it needed to stay online all the time?

cache rlog files

Every time you load a route the all rlogs are downloaded. Ideally these files are cached and probably pulled through a CDN (should speed up delivery), too.

make signal names easier to find when looking at bytes view

You are supposed to be able to mouse over a signal in the bytes view and it highlights the signal name in the signal name list at the bottom (or you can just visually match based on color). Sometimes, however, there are so many small signals that there is no way to see the byte view and corresponding signal name in the signal list at the same time. With the addition of CAN-FD support this is an even bigger problem.

A few potential ideas:

  • show the signal name when you mouse over a signal in the byte view (replace byte values, show tool tip, or show above outside scrolling area)
  • always show the signal names in the byte view somehow (similar to lsb/msb indicators, but sometimes names will still need ellipsis and mouse-over)
  • click on a signal in the byte view and it goes into a focused state such that you can scroll down and see the same signal focused in the signal list

remove busTime

We are not getting busTime from panda anymore, so removal of busTime will improve Cabana processing time.

USB Livestreaming to Cabana doesn't work

Cabana lets you create/save an invalid dbc file

Cabana lets you create and save a Signal Name with a space in it, which seems to be invalid. Loading the generated/saved dbc file will result in the line being ignored.

Ideally, Cabana would prevent the user from using an "illegal" signal name.

Local storage is leaked every time a DBC is loaded for a new drive

Cabana retains a local copy of the DBC used to interpret a given drive, per drive, indefinitely. This accumulates over time and eventually makes Cabana stop working until the browser cache is cleared, or the local storage entities are nuked by hand in the developer console.

It's nice to have all those workspaces held for later reference, particularly if edits are in progress, but a mechanism is needed to gracefully react to quota exhaustion.

cabana-quota

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.