panda/README.md

106 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

# Welcome to panda
2017-04-06 19:11:36 -06:00
2017-06-28 23:20:38 -06:00
[panda](http://github.com/commaai/panda) is the nicest universal car interface ever.
2017-04-06 19:11:36 -06:00
2019-01-02 23:00:21 -07:00
<a href="https://comma.ai/shop/products/panda-obd-ii-dongle"><img src="https://github.com/commaai/panda/blob/master/panda.png">
2017-04-06 19:56:25 -06:00
It supports 3x CAN, 2x LIN, and 1x GMLAN. It also charges a phone. On the computer side, it has USB.
2017-04-06 19:11:36 -06:00
It uses an [STM32F413](http://www.st.com/en/microcontrollers/stm32f413-423.html?querycriteria=productId=LN2004).
2017-04-06 19:11:36 -06:00
It is 2nd gen hardware, reusing code and parts from the [NEO](https://github.com/commaai/neo) interface board.
2020-08-22 20:21:11 -06:00
![panda tests](https://github.com/commaai/panda/workflows/tests/badge.svg)
![panda drivers](https://github.com/commaai/panda/workflows/drivers/badge.svg)
2017-11-12 16:31:25 -07:00
## Usage
### Python
2017-04-06 19:23:26 -06:00
2017-06-20 16:40:34 -06:00
To install the library:
``` bash
pip install pandacan
2017-06-20 16:40:34 -06:00
```
2017-12-13 16:24:57 -07:00
See [this class](https://github.com/commaai/panda/blob/master/python/__init__.py#L80) for how to interact with the panda.
2017-04-06 19:23:26 -06:00
For example, to receive CAN messages:
``` python
>>> from panda import Panda
2017-04-06 19:28:59 -06:00
>>> panda = Panda()
2017-04-06 19:23:26 -06:00
>>> panda.can_recv()
```
2017-04-06 19:28:59 -06:00
And to send one on bus 0:
``` python
2017-04-06 19:28:59 -06:00
>>> panda.can_send(0x1aa, "message", 0)
```
2019-09-25 08:55:46 -06:00
Note that you may have to setup [udev rules](https://community.comma.ai/wiki/index.php/Panda#Linux_udev_rules) for Linux, such as
``` bash
sudo tee /etc/udev/rules.d/11-panda.rules <<EOF
SUBSYSTEM=="usb", ATTRS{idVendor}=="bbaa", ATTRS{idProduct}=="ddcc", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="bbaa", ATTRS{idProduct}=="ddee", MODE="0666"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger
2019-09-25 08:55:46 -06:00
```
### JavaScript
See [PandaJS](https://github.com/commaai/pandajs)
## Software interface support
2017-06-26 00:01:41 -06:00
As a universal car interface, it should support every reasonable software interface.
2018-07-12 11:08:34 -06:00
- [User space](https://github.com/commaai/panda/tree/master/python)
- [socketcan in kernel](https://github.com/commaai/panda/tree/master/drivers/linux) (alpha)
- [Windows J2534](https://github.com/commaai/panda/tree/master/drivers/windows)
2017-06-26 00:01:41 -06:00
## Directory structure
2017-04-06 19:11:36 -06:00
- board -- Code that runs on the STM32
2017-06-26 00:01:41 -06:00
- drivers -- Drivers (not needed for use with python)
- python   -- Python userspace library for interfacing with the panda
2017-04-06 19:11:36 -06:00
- tests -- Tests and helper programs for panda
## Programming
2017-04-06 19:11:36 -06:00
See `board/README.md`
2017-04-06 19:11:36 -06:00
## Debugging
2017-04-17 16:28:28 -06:00
To print out the serial console from the STM32, run `tests/debug_console.py`
2017-04-17 16:28:28 -06:00
## Safety Model
2017-07-17 11:48:16 -06:00
When a panda powers up, by default it's in `SAFETY_SILENT` mode. While in `SAFETY_SILENT` mode, the buses are also forced to be silent. In order to send messages, you have to select a safety mode. Currently, setting safety modes is only supported over USB. Some of safety modes (for example `SAFETY_ALLOUTPUT`) are disabled in release firmwares. In order to use them, compile and flash your own build.
2017-07-17 11:48:16 -06:00
Safety modes optionally supports `controls_allowed`, which allows or blocks a subset of messages based on a customizable state in the board.
## Code Rigor
When compiled from the [EON](https://comma.ai/shop/products/eon-gold-dashcam-devkit) or [comma two](https://comma.ai/shop/products/comma-two-devkit) dev kits, the panda FW is configured and optimized (at compile time) for its use in
conjuction with [openpilot](https://github.com/commaai/openpilot). The panda FW, through its safety model, provides and enforces the
[openpilot safety](https://github.com/commaai/openpilot/blob/devel/SAFETY.md). Due to its critical function, it's important that the application code rigor within the `board` folder is held to high standards.
2020-05-17 20:53:23 -06:00
These are the [CI regression tests](https://github.com/commaai/panda/actions) we have in place:
* A generic static code analysis is performed by [cppcheck](https://github.com/danmar/cppcheck/).
* In addition, [cppcheck](https://github.com/danmar/cppcheck/) has a specific addon to check for [MISRA C:2012](https://www.misra.org.uk/MISRAHome/MISRAC2012/tabid/196/Default.aspx) violations. See [current coverage](https://github.com/commaai/panda/blob/master/tests/misra/coverage_table).
* Compiler options are relatively strict: the flags `-Wall -Wextra -Wstrict-prototypes -Werror` are enforced on board and pedal Makefiles.
2019-09-27 18:22:13 -06:00
* The [safety logic](https://github.com/commaai/panda/tree/master/board/safety) is tested and verified by [unit tests](https://github.com/commaai/panda/tree/master/tests/safety) for each supported car variant.
* A recorded drive for each supported car variant is [replayed through the safety logic](https://github.com/commaai/panda/tree/master/tests/safety_replay)
to ensure that the behavior remains unchanged.
2019-09-27 18:22:13 -06:00
* An internal Hardware-in-the-loop test, which currently only runs on pull requests opened by comma.ai's organization members, verifies the following functionalities:
* compiling the code in various configuration and flashing it both through USB.
* Receiving, sending and forwarding CAN messages on all buses, over USB.
2017-07-17 11:48:16 -06:00
In addition, we run the [pylint](https://www.pylint.org/) and [flake8](https://github.com/PyCQA/flake8) linters on all python files within the panda repo.
## Hardware
2017-04-27 21:32:16 -06:00
2017-04-06 19:23:26 -06:00
Check out the hardware [guide](https://github.com/commaai/panda/blob/master/docs/guide.pdf)
## Licensing
2017-04-06 19:11:36 -06:00
2017-04-06 19:53:43 -06:00
panda software is released under the MIT license unless otherwise specified.