diff --git a/.gitignore b/.gitignore
index 6304b080164d59..915a798c76d390 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,10 +3,14 @@ venv/
.tags
.ipynb_checkpoints
.idea
+.overlay_init
+.overlay_consistent
.sconsign.dblite
.vscode
model2.png
a.out
+
+*.dylib
*.DSYM
*.d
*.pyc
@@ -14,7 +18,11 @@ a.out
.*.swp
.*.swo
.*.un~
+*.tmp
*.o
+*.o-*
+*.os
+*.os-*
*.so
*.a
*.clb
@@ -23,26 +31,40 @@ a.out
*.vcd
config.json
clcache
-launch_chffrplus.sh
-.vscode/*.json
-selfdrive/visiond/visiond
-.vscode/
+
+persist
board/obj/
selfdrive/boardd/boardd
selfdrive/logcatd/logcatd
selfdrive/mapd/default_speeds_by_region.json
selfdrive/proclogd/proclogd
-selfdrive/ui/ui
-selfdrive/test/tests/plant/out
-openpilot_tools/
+selfdrive/ui/_ui
+selfdrive/test/longitudinal_maneuvers/out
selfdrive/visiond/visiond
selfdrive/loggerd/loggerd
-selfdrive/sensord/gpsd
-selfdrive/sensord/sensord
+selfdrive/sensord/_gpsd
+selfdrive/sensord/_sensord
+selfdrive/camerad/camerad
+selfdrive/modeld/_modeld
+selfdrive/modeld/_dmonitoringmodeld
/src/
+
one
-.vscode/*.json
-./launch_chffrplus.sh
openpilot
+notebooks
xx
+hyperthneed
+panda_jungle
+apks
+openpilot-apks
+
+.coverage*
+coverage.xml
+htmlcov
+pandaextra
+
+.mypy_cache/
+flycheck_*
+cppcheck_report.txt
+comma.sh
diff --git a/.pylintrc b/.pylintrc
deleted file mode 100644
index 64a55daf8fabb3..00000000000000
--- a/.pylintrc
+++ /dev/null
@@ -1,585 +0,0 @@
-[MASTER]
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code
-extension-pkg-whitelist=scipy
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Add files or directories matching the regex patterns to the blacklist. The
-# regex matches against base names, not paths.
-ignore-patterns=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Use multiple processes to speed up Pylint.
-jobs=4
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# Specify a configuration file.
-#rcfile=
-
-# When enabled, pylint would attempt to guess common misconfiguration and emit
-# user-friendly hints instead of false-positive error messages
-suggestion-mode=yes
-
-# Allow loading of arbitrary C extensions. Extensions are imported into the
-# active Python interpreter and may run arbitrary code.
-unsafe-load-any-extension=no
-
-
-[MESSAGES CONTROL]
-
-# Only show warnings with the listed confidence levels. Leave empty to show
-# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
-confidence=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once).You can also use "--disable=all" to
-# disable everything first and then reenable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use"--disable=all --enable=classes
-# --disable=W"
-disable=print-statement,
- parameter-unpacking,
- unpacking-in-except,
- old-raise-syntax,
- backtick,
- long-suffix,
- old-ne-operator,
- old-octal-literal,
- import-star-module-level,
- non-ascii-bytes-literal,
- raw-checker-failed,
- bad-inline-option,
- locally-disabled,
- locally-enabled,
- file-ignored,
- suppressed-message,
- useless-suppression,
- deprecated-pragma,
- apply-builtin,
- basestring-builtin,
- buffer-builtin,
- cmp-builtin,
- coerce-builtin,
- execfile-builtin,
- file-builtin,
- long-builtin,
- raw_input-builtin,
- reduce-builtin,
- standarderror-builtin,
- unicode-builtin,
- xrange-builtin,
- coerce-method,
- delslice-method,
- getslice-method,
- setslice-method,
- no-absolute-import,
- old-division,
- dict-iter-method,
- dict-view-method,
- next-method-called,
- metaclass-assignment,
- indexing-exception,
- raising-string,
- reload-builtin,
- oct-method,
- hex-method,
- nonzero-method,
- cmp-method,
- input-builtin,
- round-builtin,
- intern-builtin,
- unichr-builtin,
- map-builtin-not-iterating,
- zip-builtin-not-iterating,
- range-builtin-not-iterating,
- filter-builtin-not-iterating,
- using-cmp-argument,
- eq-without-hash,
- div-method,
- idiv-method,
- rdiv-method,
- exception-message-attribute,
- invalid-str-codec,
- sys-max-int,
- bad-python3-import,
- deprecated-string-function,
- deprecated-str-translate-call,
- deprecated-itertools-function,
- deprecated-types-field,
- next-method-defined,
- dict-items-not-iterating,
- dict-keys-not-iterating,
- dict-values-not-iterating,
- bad-indentation,
- line-too-long,
- missing-docstring,
- multiple-statements,
- bad-continuation,
- invalid-name,
- too-many-arguments,
- too-many-locals,
- superfluous-parens,
- bad-whitespace,
- too-many-instance-attributes,
- wrong-import-position,
- ungrouped-imports,
- wrong-import-order,
- protected-access,
- trailing-whitespace,
- too-many-branches,
- too-few-public-methods,
- too-many-statements,
- trailing-newlines,
- attribute-defined-outside-init,
- too-many-return-statements,
- too-many-public-methods,
- unused-argument,
- old-style-class,
- no-init,
- len-as-condition,
- unneeded-not,
- no-self-use,
- multiple-imports,
- no-else-return,
- logging-not-lazy,
- fixme,
- redefined-outer-name,
- unused-variable,
- unsubscriptable-object,
- expression-not-assigned,
- too-many-boolean-expressions,
- consider-using-ternary,
- invalid-unary-operand-type,
- relative-import,
- deprecated-lambda
-
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once). See also the "--disable" option for examples.
-enable=c-extension-no-member
-
-
-[REPORTS]
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Template used to display messages. This is a python new-style format string
-# used to format the message information. See doc for all details
-#msg-template=
-
-# Set the output format. Available formats are text, parseable, colorized, json
-# and msvs (visual studio).You can also give a reporter class, eg
-# mypackage.mymodule.MyReporterClass.
-output-format=text
-
-# Tells whether to display a full report or only the messages
-reports=no
-
-# Activate the evaluation score.
-score=yes
-
-
-[REFACTORING]
-
-# Maximum number of nested blocks for function / method body
-max-nested-blocks=5
-
-# Complete name of functions that never returns. When checking for
-# inconsistent-return-statements if a never returning function is called then
-# it will be considered as an explicit return statement and no message will be
-# printed.
-never-returning-functions=optparse.Values,sys.exit
-
-
-[LOGGING]
-
-# Logging modules to check that the string format arguments are in logging
-# function parameter format
-logging-modules=logging
-
-
-[SPELLING]
-
-# Limits count of emitted suggestions for spelling mistakes
-max-spelling-suggestions=4
-
-# Spelling dictionary name. Available dictionaries: none. To make it working
-# install python-enchant package.
-spelling-dict=
-
-# List of comma separated words that should not be checked.
-spelling-ignore-words=
-
-# A path to a file that contains private dictionary; one word per line.
-spelling-private-dict-file=
-
-# Tells whether to store unknown words to indicated private dictionary in
-# --spelling-private-dict-file option instead of raising a message.
-spelling-store-unknown-words=no
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,
- XXX,
- TODO
-
-
-[SIMILARITIES]
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-# Ignore imports when computing similarities.
-ignore-imports=no
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-
-[TYPECHECK]
-
-# List of decorators that produce context managers, such as
-# contextlib.contextmanager. Add to this list to register other decorators that
-# produce valid context managers.
-contextmanager-decorators=contextlib.contextmanager
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E1101 when accessed. Python regular
-# expressions are accepted.
-generated-members=capnp.* cereal.* pygame.* zmq.* setproctitle.* smbus2.* usb1.* serial.* cv2.*
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# This flag controls whether pylint should warn about no-member and similar
-# checks whenever an opaque object is returned when inferring. The inference
-# can return multiple potential results while evaluating a Python object, but
-# some branches might not be evaluated, which results in partial inference. In
-# that case, it might be useful to still emit no-member and other checks for
-# the rest of the inferred objects.
-ignore-on-opaque-inference=yes
-
-# List of class names for which member attributes should not be checked (useful
-# for classes with dynamically set attributes). This supports the use of
-# qualified names.
-ignored-classes=optparse.Values,thread._local,_thread._local
-
-# List of module names for which member attributes should not be checked
-# (useful for modules/projects where namespaces are manipulated during runtime
-# and thus existing member attributes cannot be deduced by static analysis. It
-# supports qualified module names, as well as Unix pattern matching.
-ignored-modules=flask setproctitle usb1 flask.ext.socketio smbus2 usb1.*
-
-# Show a hint with possible names when a member name was not found. The aspect
-# of finding the hint is based on edit distance.
-missing-member-hint=yes
-
-# The minimum edit distance a name should have in order to be considered a
-# similar match for a missing member name.
-missing-member-hint-distance=1
-
-# The total number of similar names that should be taken in consideration when
-# showing a hint for a missing member.
-missing-member-max-choices=1
-
-
-[VARIABLES]
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-# Tells whether unused global variables should be treated as a violation.
-allow-global-unused-variables=yes
-
-# List of strings which can identify a callback function by name. A callback
-# name must start or end with one of those strings.
-callbacks=cb_,
- _cb
-
-# A regular expression matching the name of dummy variables (i.e. expectedly
-# not used).
-dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore
-ignored-argument-names=_.*|^ignored_|^unused_
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# List of qualified module names which can have objects that can redefine
-# builtins.
-redefining-builtins-modules=six.moves,past.builtins,future.builtins
-
-
-[FORMAT]
-
-# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
-expected-line-ending-format=
-
-# Regexp for a line that is allowed to be longer than the limit.
-ignore-long-lines=^\s*(# )??$
-
-# Number of spaces of indent required inside a hanging or continued line.
-indent-after-paren=4
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string=' '
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Maximum number of lines in a module
-max-module-lines=1000
-
-# List of optional constructs for which whitespace checking is disabled. `dict-
-# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
-# `trailing-comma` allows a space between comma and closing bracket: (a, ).
-# `empty-line` allows space-only lines.
-no-space-check=trailing-comma,
- dict-separator
-
-# Allow the body of a class to be on the same line as the declaration if body
-# contains single statement.
-single-line-class-stmt=no
-
-# Allow the body of an if to be on the same line as the test if there is no
-# else.
-single-line-if-stmt=no
-
-
-[BASIC]
-
-# Naming style matching correct argument names
-argument-naming-style=snake_case
-
-# Regular expression matching correct argument names. Overrides argument-
-# naming-style
-#argument-rgx=
-
-# Naming style matching correct attribute names
-attr-naming-style=snake_case
-
-# Regular expression matching correct attribute names. Overrides attr-naming-
-# style
-#attr-rgx=
-
-# Bad variable names which should always be refused, separated by a comma
-bad-names=foo,
- bar,
- baz,
- toto,
- tutu,
- tata
-
-# Naming style matching correct class attribute names
-class-attribute-naming-style=any
-
-# Regular expression matching correct class attribute names. Overrides class-
-# attribute-naming-style
-#class-attribute-rgx=
-
-# Naming style matching correct class names
-class-naming-style=PascalCase
-
-# Regular expression matching correct class names. Overrides class-naming-style
-#class-rgx=
-
-# Naming style matching correct constant names
-const-naming-style=UPPER_CASE
-
-# Regular expression matching correct constant names. Overrides const-naming-
-# style
-#const-rgx=
-
-# Minimum line length for functions/classes that require docstrings, shorter
-# ones are exempt.
-docstring-min-length=-1
-
-# Naming style matching correct function names
-function-naming-style=snake_case
-
-# Regular expression matching correct function names. Overrides function-
-# naming-style
-#function-rgx=
-
-# Good variable names which should always be accepted, separated by a comma
-good-names=i,
- j,
- k,
- ex,
- Run,
- _
-
-# Include a hint for the correct naming format with invalid-name
-include-naming-hint=no
-
-# Naming style matching correct inline iteration names
-inlinevar-naming-style=any
-
-# Regular expression matching correct inline iteration names. Overrides
-# inlinevar-naming-style
-#inlinevar-rgx=
-
-# Naming style matching correct method names
-method-naming-style=snake_case
-
-# Regular expression matching correct method names. Overrides method-naming-
-# style
-#method-rgx=
-
-# Naming style matching correct module names
-module-naming-style=snake_case
-
-# Regular expression matching correct module names. Overrides module-naming-
-# style
-#module-rgx=
-
-# Colon-delimited sets of names that determine each other's naming style when
-# the name regexes allow several styles.
-name-group=
-
-# Regular expression which should only match function or class names that do
-# not require a docstring.
-no-docstring-rgx=^_
-
-# List of decorators that produce properties, such as abc.abstractproperty. Add
-# to this list to register other decorators that produce valid properties.
-property-classes=abc.abstractproperty
-
-# Naming style matching correct variable names
-variable-naming-style=snake_case
-
-# Regular expression matching correct variable names. Overrides variable-
-# naming-style
-#variable-rgx=
-
-
-[DESIGN]
-
-# Maximum number of arguments for function / method
-max-args=5
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Maximum number of boolean expressions in a if statement
-max-bool-expr=5
-
-# Maximum number of branch for function / method body
-max-branches=12
-
-# Maximum number of locals for function / method body
-max-locals=15
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-# Maximum number of return / yield for function / method body
-max-returns=6
-
-# Maximum number of statements in function / method body
-max-statements=50
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-
-[CLASSES]
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,
- __new__,
- setUp
-
-# List of member names, which should be excluded from the protected access
-# warning.
-exclude-protected=_asdict,
- _fields,
- _replace,
- _source,
- _make
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=mcs
-
-
-[IMPORTS]
-
-# Allow wildcard imports from modules that define __all__.
-allow-wildcard-with-all=no
-
-# Analyse import fallback blocks. This can be used to support both Python 2 and
-# 3 compatible code, which means that the block might have code that exists
-# only in one or another interpreter, leading to false positives when analysed.
-analyse-fallback-blocks=no
-
-# Deprecated modules which should not be used, separated by a comma
-deprecated-modules=regsub,
- TERMIOS,
- Bastion,
- rexec
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled)
-ext-import-graph=
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled)
-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled)
-int-import-graph=
-
-# Force import order to recognize a module as part of the standard
-# compatibility libraries.
-known-standard-library=
-
-# Force import order to recognize a module as part of a third party library.
-known-third-party=enchant
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception"
-overgeneral-exceptions=Exception
diff --git a/.python-version b/.python-version
index 35b46aeacab588..cc1923a40b1a5e 100644
--- a/.python-version
+++ b/.python-version
@@ -1 +1 @@
-2.7.16
+3.8
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 8683d8bee015be..00000000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-sudo: required
-
-services:
- - docker
-
-script:
- - ./run_docker_tests.sh
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 738679aca5d5e6..45de84bd56563f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@
Our software is open source so you can solve your own problems without needing help from others. And if you solve a problem and are so kind, you can upstream it for the rest of the world to use.
-Most open source development activity is coordinated through our [Discord](https://discord.comma.ai). A lot of documentation is available on our [medium](https://medium.com/@comma_ai/)
+Most open source development activity is coordinated through our [GitHub Discussions](https://github.com/commaai/openpilot/discussions) and [Discord](https://discord.comma.ai). A lot of documentation is available on our [medium](https://medium.com/@comma_ai/).
## Getting Started
@@ -12,20 +12,34 @@ Most open source development activity is coordinated through our [Discord](https
## Testing
-### Local Testing
-
-You can test your changes on your machine by running `run_docker_tests.sh`. This will run some automated tests in docker against your code.
-
### Automated Testing
-All PRs are automatically checked by travis. Check out `.travis.yml` for what travis runs. Any new tests sould be added to travis.
+All PRs and commits are automatically checked by GitHub Actions. Check out `.github/workflows/` for what GitHub Actions runs. Any new tests should be added to GitHub Actions.
### Code Style and Linting
-Code is automatically check for style by travis as part of the automated tests. You can also run these yourself by running `check_code_quality.sh`.
+Code is automatically checked for style by GitHub Actions as part of the automated tests. You can also run these tests yourself by running `pre-commit run --all`.
## Car Ports (openpilot)
We've released a [Model Port guide](https://medium.com/@comma_ai/openpilot-port-guide-for-toyota-models-e5467f4b5fe6) for porting to Toyota/Lexus models.
-If you port openpilot to a substantially new car brand, see this more generic [Brand Port guide](https://medium.com/@comma_ai/how-to-write-a-car-port-for-openpilot-7ce0785eda84). You might also be eligible for a bounty. See our bounties at [comma.ai/bounties.html](https://comma.ai/bounties.html)
+If you port openpilot to a substantially new car brand, see this more generic [Brand Port guide](https://medium.com/@comma_ai/how-to-write-a-car-port-for-openpilot-7ce0785eda84).
+
+## Pull Requests
+
+Pull requests should be against the master branch. Before running master on in-car hardware, you'll need to clone the submodules too. That can be done by recursively cloning the repository:
+```
+git clone https://github.com/commaai/openpilot.git --recursive
+```
+Or alternatively, when on the master branch:
+```
+git submodule update --init
+```
+The reasons for having submodules on a dedicated repository and our new development philosophy can be found in our [post about externalization](https://medium.com/@comma_ai/a-2020-theme-externalization-13b33326d8b3).
+Modules that are in seperate repositories include:
+* cereal
+* laika
+* opendbc
+* panda
+* rednose
diff --git a/Dockerfile.openpilot b/Dockerfile.openpilot
deleted file mode 100644
index 6be64c13118aaa..00000000000000
--- a/Dockerfile.openpilot
+++ /dev/null
@@ -1,57 +0,0 @@
-FROM ubuntu:16.04
-ENV PYTHONUNBUFFERED 1
-
-RUN apt-get update && apt-get install -y \
- autoconf \
- build-essential \
- bzip2 \
- clang \
- git \
- libarchive-dev \
- libavcodec-dev \
- libavdevice-dev \
- libavfilter-dev \
- libavresample-dev \
- libavutil-dev \
- libffi-dev \
- libglib2.0-0 \
- libssl-dev \
- libswscale-dev \
- libtool \
- libusb-1.0-0 \
- libzmq5-dev \
- ocl-icd-libopencl1 \
- ocl-icd-opencl-dev \
- opencl-headers \
- pkg-config \
- python-pip \
- wget
-
-COPY phonelibs/install_capnp.sh /tmp/install_capnp.sh
-RUN /tmp/install_capnp.sh
-
-RUN pip install --upgrade pip==18.0
-RUN pip install pipenv==2018.11.26
-
-COPY Pipfile /tmp/
-COPY Pipfile.lock /tmp/
-RUN cd /tmp && pipenv install --deploy --system
-
-ENV PYTHONPATH /tmp/openpilot:$PYTHONPATH
-
-RUN git clone --branch v0.6.2 https://github.com/commaai/openpilot-tools.git /tmp/openpilot/tools
-RUN pip install -r /tmp/openpilot/tools/requirements.txt
-RUN pip install fastcluster==1.1.20 scipy==0.19.1 dictdiffer==0.8.0 azure-batch==4.1.3 azure-common==1.1.16 azure-nspkg==3.0.0 azure-storage-blob==1.3.1 azure-storage-common==1.3.0 azure-storage-nspkg==3.0.0
-
-COPY ./.pylintrc /tmp/openpilot/.pylintrc
-COPY ./common /tmp/openpilot/common
-COPY ./cereal /tmp/openpilot/cereal
-COPY ./opendbc /tmp/openpilot/opendbc
-COPY ./selfdrive /tmp/openpilot/selfdrive
-COPY ./phonelibs /tmp/openpilot/phonelibs
-COPY ./pyextra /tmp/openpilot/pyextra
-COPY ./panda /tmp/openpilot/panda
-
-RUN mkdir -p /tmp/openpilot/selfdrive/test/out
-RUN make -C /tmp/openpilot/selfdrive/controls/lib/longitudinal_mpc clean
-RUN make -C /tmp/openpilot/selfdrive/controls/lib/lateral_mpc clean
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 00000000000000..a9479a111b920f
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,160 @@
+def phone(String ip, String step_label, String cmd) {
+ def ci_env = "CI=1 TEST_DIR=${env.TEST_DIR} GIT_BRANCH=${env.GIT_BRANCH} GIT_COMMIT=${env.GIT_COMMIT}"
+
+ withCredentials([file(credentialsId: 'id_rsa_public', variable: 'key_file')]) {
+ sh label: step_label,
+ script: """
+ ssh -tt -o StrictHostKeyChecking=no -i ${key_file} -p 8022 root@${ip} '${ci_env} /usr/bin/bash -le' <<'EOF'
+echo \$\$ > /dev/cpuset/app/tasks || true
+echo \$PPID > /dev/cpuset/app/tasks || true
+mkdir -p /dev/shm
+chmod 777 /dev/shm
+cd ${env.TEST_DIR} || true
+${cmd}
+exit 0
+EOF"""
+ }
+}
+
+def phone_steps(String device_type, steps) {
+ lock(resource: "", label: device_type, inversePrecedence: true, variable: 'device_ip', quantity: 1) {
+ timeout(time: 60, unit: 'MINUTES') {
+ phone(device_ip, "kill old processes", "pkill -f comma || true")
+ phone(device_ip, "git checkout", readFile("selfdrive/test/setup_device_ci.sh"),)
+ steps.each { item ->
+ phone(device_ip, item[0], item[1])
+ }
+ }
+ }
+}
+
+pipeline {
+ agent none
+ environment {
+ COMMA_JWT = credentials('athena-test-jwt')
+ TEST_DIR = "/data/openpilot"
+ }
+ options {
+ timeout(time: 1, unit: 'HOURS')
+ }
+
+ stages {
+
+ stage('Release Build') {
+ agent {
+ docker {
+ image 'python:3.7.3'
+ args '--user=root'
+ }
+ }
+ when {
+ branch 'devel-staging'
+ }
+ steps {
+ phone_steps("eon-build", [
+ ["build release2-staging and dashcam-staging", "cd release && PUSH=1 ./build_release2.sh"],
+ ])
+ }
+ }
+
+ stage('openpilot tests') {
+ when {
+ not {
+ anyOf {
+ branch 'master-ci'; branch 'devel'; branch 'devel-staging'; branch 'release2'; branch 'release2-staging'; branch 'dashcam'; branch 'dashcam-staging'; branch 'testing-closet*'
+ }
+ }
+ }
+
+
+ stages {
+
+ /*
+ stage('PC tests') {
+ agent {
+ dockerfile {
+ filename 'Dockerfile.openpilotci'
+ args '--privileged --shm-size=1G --user=root'
+ }
+ }
+ stages {
+ stage('Build') {
+ steps {
+ sh 'scons -j$(nproc)'
+ }
+ }
+ }
+ post {
+ always {
+ // fix permissions since docker runs as another user
+ sh "chmod -R 777 ."
+ }
+ }
+ }
+ */
+
+ stage('On-device Tests') {
+ agent {
+ docker {
+ image 'python:3.7.3'
+ args '--user=root'
+ }
+ }
+
+ stages {
+ stage('parallel tests') {
+ parallel {
+
+ stage('Devel Build') {
+ environment {
+ CI_PUSH = "${env.BRANCH_NAME == 'master' ? 'master-ci' : ' '}"
+ }
+ steps {
+ phone_steps("eon", [
+ ["build devel", "cd release && CI_PUSH=${env.CI_PUSH} ./build_devel.sh"],
+ ["test openpilot", "nosetests -s selfdrive/test/test_openpilot.py"],
+ ["test cpu usage", "cd selfdrive/test/ && ./test_cpu_usage.py"],
+ ["test car interfaces", "cd selfdrive/car/tests/ && ./test_car_interfaces.py"],
+ ["test spinner build", "cd selfdrive/ui/spinner && make clean && make"],
+ ["test text window build", "cd selfdrive/ui/text && make clean && make"],
+ ])
+ }
+ }
+
+ stage('Replay Tests') {
+ steps {
+ phone_steps("eon2", [
+ ["camerad/modeld replay", "QCOM_REPLAY=1 scons -j4 && cd selfdrive/test/process_replay && ./camera_replay.py"],
+ ])
+ }
+ }
+
+ stage('HW + Unit Tests') {
+ steps {
+ phone_steps("eon", [
+ ["build", "SCONS_CACHE=1 scons -j4"],
+ ["test sounds", "nosetests -s selfdrive/test/test_sounds.py"],
+ ["test boardd loopback", "nosetests -s selfdrive/boardd/tests/test_boardd_loopback.py"],
+ ["test loggerd", "CI=1 python selfdrive/loggerd/tests/test_loggerd.py"],
+ //["test camerad", "CI=1 python selfdrive/camerad/test/test_camerad.py"], // wait for shelf refactor
+ //["test updater", "python installer/updater/test_updater.py"],
+ ])
+ }
+ }
+
+ }
+ }
+ }
+
+ post {
+ always {
+ cleanWs()
+ }
+ }
+
+ }
+
+ }
+ }
+ }
+}
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 4f690b2e7e88c1..00000000000000
--- a/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-
-code_dir := $(shell pwd)
-
-# TODO: Add a global build system
-
-.PHONY: all
-all:
- cd selfdrive && PYTHONPATH=$(code_dir) PREPAREONLY=1 ./manager.py
-
diff --git a/Pipfile b/Pipfile
deleted file mode 100644
index 7afffb1e940942..00000000000000
--- a/Pipfile
+++ /dev/null
@@ -1,145 +0,0 @@
-[[source]]
-name = "pypi"
-url = "https://pypi.org/simple"
-verify_ssl = true
-
-[dev-packages]
-ipython = "<6.0"
-aenum = "*"
-azure-batch = "==4.1.3"
-azure-common = "==1.1.16"
-azure-nspkg = "==3.0.1"
-azure-storage-blob = "==1.3.1"
-azure-storage-common = "==1.3.0"
-azure-storage-nspkg = "==3.0.0"
-bincopy = "*"
-bleach = "==1.5.0"
-boto = "*"
-"boto3" = "*"
-celery = "*"
-control = "*"
-datadog = "*"
-decorator = "*"
-dlib = "*"
-dominate = "*"
-elasticsearch = "*"
-entium = "==0.1.4"
-fasteners = "*"
-future = "*"
-futures = "*"
-gevent = "*"
-pycocotools = {git = "https://github.com/cocodataset/cocoapi.git",subdirectory = "PythonAPI"}
-gunicorn = "*"
-"h5py" = "*"
-hexdump = "*"
-"html5lib" = "==0.9999999"
-imageio = "*"
-intervaltree = "*"
-ipykernel = "<5.0"
-joblib = "*"
-json-logging-py = "*"
-jupyter = "*"
-libarchive = "*"
-lru-dict = "*"
-lxml = "*"
-matplotlib = "==2.2.3"
-"mpld3" = "*"
-msgpack-python = "*"
-nbstripout = "*"
-nose-parameterized = "*"
-numpy = "==1.14.5"
-osmium = "==2.15.0"
-pbr = "==5.1.3"
-percache = "*"
-pprofile = "*"
-psutil = "*"
-pycurl = "*"
-git-pylint-commit-hook = "==2.5.1"
-pymongo = "*"
-"pynmea2" = "*"
-pypolyline = "==0.1.17"
-pysendfile = "*"
-python-logstash = "*"
-pyvcd = "*"
-redis = "*"
-redlock = "*"
-"s2sphere" = "*"
-scikit-image = "*"
-"subprocess32" = "*"
-supervisor = "*"
-tenacity = "*"
-tensorflow-gpu = "==1.13.0rc0"
-"transforms3d" = "*"
-utm = "*"
-"v4l2" = "*"
-visdom = "*"
-PyJWT = "==1.4.1"
-PyMySQL = "==0.9.2"
-Theano = "*"
-Werkzeug = "*"
-"backports.lzma" = "*"
-Flask-Cors = "*"
-Flask-SocketIO = "*"
-"GeoAlchemy2" = "*"
-Keras = ">=2.1.6"
-keras-maskrcnn = "*"
-keras-retinanet = "*"
-Pygments = "*"
-PyNaCl = "*"
-"PySDL2" = "*"
-reverse_geocoder = "*"
-Shapely = "*"
-SQLAlchemy = "==1.2.7"
-uWSGI = "*"
-scipy = "*"
-fastcluster = "==1.1.25"
-backports-abc = "*"
-pygame = "*"
-simplejson = "*"
-python-logstash-async = "*"
-pandas = "*"
-seaborn = "*"
-tensorflow-estimator = "==1.10.12"
-pyproj = "*"
-
-[packages]
-overpy = {git = "https://github.com/commaai/python-overpy.git",ref = "f86529af402d4642e1faeb146671c40284007323"}
-atomicwrites = "*"
-cffi = "*"
-crcmod = "*"
-hexdump = "*"
-libusb1 = "*"
-numpy = "*"
-psutil = "*"
-pycapnp = "*"
-cryptography = "*"
-pyserial = "*"
-python-dateutil = "*"
-pyzmq = "*"
-raven = "*"
-requests = "*"
-setproctitle = "*"
-six = "*"
-smbus2 = "*"
-sympy = "*"
-tqdm = "*"
-Cython = "*"
-PyYAML = "*"
-websocket_client = "*"
-Logentries = {git = "https://github.com/commaai/le_python.git",ref = "5eef8f5be5929d33973e1b10e686fa0cdcd6792f"}
-urllib3 = "*"
-chardet = "*"
-idna = "*"
-gunicorn = "*"
-utm = "*"
-json-rpc = "*"
-Flask = "*"
-PyJWT = "*"
-"Jinja2" = "*"
-nose = "*"
-pyflakes = "*"
-pylint = "*"
-pycryptodome = "*"
-
-[requires]
-python_version = "2.7"
diff --git a/Pipfile.lock b/Pipfile.lock
deleted file mode 100644
index 15416a7bf6acce..00000000000000
--- a/Pipfile.lock
+++ /dev/null
@@ -1,2887 +0,0 @@
-{
- "_meta": {
- "hash": {
- "sha256": "43f96719ff9a1b7eae6c7a88f903c4f5a137c2b195e3ba148f32767827b98710"
- },
- "pipfile-spec": 6,
- "requires": {
- "python_version": "2.7"
- },
- "sources": [
- {
- "name": "pypi",
- "url": "https://pypi.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "asn1crypto": {
- "hashes": [
- "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87",
- "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
- ],
- "version": "==0.24.0"
- },
- "astroid": {
- "hashes": [
- "sha256:87de48a92e29cedf7210ffa853d11441e7ad94cb47bacd91b023499b51cbc756",
- "sha256:d25869fc7f44f1d9fb7d24fd7ea0639656f5355fc3089cd1f3d18c6ec6b124c7"
- ],
- "version": "==1.6.6"
- },
- "atomicwrites": {
- "hashes": [
- "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
- "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
- ],
- "index": "pypi",
- "version": "==1.3.0"
- },
- "backports.functools-lru-cache": {
- "hashes": [
- "sha256:9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a",
- "sha256:f0b0e4eba956de51238e17573b7087e852dfe9854afd2e9c873f73fc0ca0a6dd"
- ],
- "markers": "python_version == '2.7'",
- "version": "==1.5"
- },
- "certifi": {
- "hashes": [
- "sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
- "sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
- ],
- "version": "==2019.6.16"
- },
- "cffi": {
- "hashes": [
- "sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774",
- "sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d",
- "sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90",
- "sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b",
- "sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63",
- "sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45",
- "sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25",
- "sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3",
- "sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b",
- "sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647",
- "sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016",
- "sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4",
- "sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb",
- "sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753",
- "sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7",
- "sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9",
- "sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f",
- "sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8",
- "sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f",
- "sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc",
- "sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42",
- "sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3",
- "sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909",
- "sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45",
- "sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d",
- "sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512",
- "sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff",
- "sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201"
- ],
- "index": "pypi",
- "version": "==1.12.3"
- },
- "chardet": {
- "hashes": [
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
- ],
- "index": "pypi",
- "version": "==3.0.4"
- },
- "click": {
- "hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
- ],
- "version": "==7.0"
- },
- "configparser": {
- "hashes": [
- "sha256:8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32",
- "sha256:da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75"
- ],
- "markers": "python_version == '2.7'",
- "version": "==3.7.4"
- },
- "contextlib2": {
- "hashes": [
- "sha256:509f9419ee91cdd00ba34443217d5ca51f5a364a404e1dce9e8979cea969ca48",
- "sha256:f5260a6e679d2ff42ec91ec5252f4eeffdcf21053db9113bd0a8e4d953769c00"
- ],
- "markers": "python_version < '3.2'",
- "version": "==0.5.5"
- },
- "crcmod": {
- "hashes": [
- "sha256:dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e"
- ],
- "index": "pypi",
- "version": "==1.7"
- },
- "cryptography": {
- "hashes": [
- "sha256:24b61e5fcb506424d3ec4e18bca995833839bf13c59fc43e530e488f28d46b8c",
- "sha256:25dd1581a183e9e7a806fe0543f485103232f940fcfc301db65e630512cce643",
- "sha256:3452bba7c21c69f2df772762be0066c7ed5dc65df494a1d53a58b683a83e1216",
- "sha256:41a0be220dd1ed9e998f5891948306eb8c812b512dc398e5a01846d855050799",
- "sha256:5751d8a11b956fbfa314f6553d186b94aa70fdb03d8a4d4f1c82dcacf0cbe28a",
- "sha256:5f61c7d749048fa6e3322258b4263463bfccefecb0dd731b6561cb617a1d9bb9",
- "sha256:72e24c521fa2106f19623a3851e9f89ddfdeb9ac63871c7643790f872a305dfc",
- "sha256:7b97ae6ef5cba2e3bb14256625423413d5ce8d1abb91d4f29b6d1a081da765f8",
- "sha256:961e886d8a3590fd2c723cf07be14e2a91cf53c25f02435c04d39e90780e3b53",
- "sha256:96d8473848e984184b6728e2c9d391482008646276c3ff084a1bd89e15ff53a1",
- "sha256:ae536da50c7ad1e002c3eee101871d93abdc90d9c5f651818450a0d3af718609",
- "sha256:b0db0cecf396033abb4a93c95d1602f268b3a68bb0a9cc06a7cff587bb9a7292",
- "sha256:cfee9164954c186b191b91d4193989ca994703b2fff406f71cf454a2d3c7327e",
- "sha256:e6347742ac8f35ded4a46ff835c60e68c22a536a8ae5c4422966d06946b6d4c6",
- "sha256:f27d93f0139a3c056172ebb5d4f9056e770fdf0206c2f422ff2ebbad142e09ed",
- "sha256:f57b76e46a58b63d1c6375017f4564a28f19a5ca912691fd2e4261b3414b618d"
- ],
- "index": "pypi",
- "version": "==2.7"
- },
- "cython": {
- "hashes": [
- "sha256:04ebf16df9406d3279a2489c3327803c782d9e17637d525bfb44ecf5ec65850f",
- "sha256:1486ec88d1c73dea3846a5640054018b002608e04a791ccbd2082a47bce4440a",
- "sha256:20da832a5e9a8e93d1e1eb64650258956723940968eb585506531719b55b804f",
- "sha256:2464688b523d7a133b52cf1343c1c595b92fc6554af1015f74b9e49951e992d4",
- "sha256:27827b68a8359e9ab6bf683c68d8ee79863a0c94a577acf56aa02cc302e16f51",
- "sha256:27deeeeca0fd8933af07923e809c8fed0763d150a4fdd4082932a33b8c874ed6",
- "sha256:31f4da785d5e09deb852ea59795a629c5befb6040929e7880c6f63e6668246ce",
- "sha256:4828cf8fa638c35139e643f30201b240c0d156b1b9967a7321ae42d721d7224c",
- "sha256:48b365e32cc5639ae2c239d7bd4f8a1d920a13a7ae92113c4c938903c9400147",
- "sha256:4eb71856c1d1b33083df9318fd30143470ad6f0d1b9ad2ee61a120710842d28b",
- "sha256:5b06ef8422d27d8128f8f80bdefa111eadcab246fba1d668720af4f0b97b7a0e",
- "sha256:71c553640e1ddaaf143e38dbc6cd1863fa3c0738fb1830a9aaffba9a51838f30",
- "sha256:73e2742ee1f923c5f213183bf493901f9630e395634fce5b739a53b7dc5d64be",
- "sha256:82a632bc02063eff0b8e7ff3089aa3d912d1c7499709f51c8f04f57c8832cfe6",
- "sha256:977ca1ac059e4d4a4bf5fe2224986baf42b69290453eda44822606f4deae6515",
- "sha256:a7e6217d0dd864a7cc4f457172766864496efd64d24d4980df1521f75f992761",
- "sha256:ad0ed7dd5dff76eb3aae8c18d95b1c9f885a91a92132728051a704fb8060d08c",
- "sha256:b1b8eda9e931f0ca1aadb95a890811bdf530407e48c962643b85675329d99abf",
- "sha256:cec99c79205131da3ee75becea1f3f55c57bf6a1c500431de9ae7a32ac8a5cc4",
- "sha256:d4bbdaa6f61ce2ef26535a7d473d6ffa6e413013c5c580af999546bf1627ae11",
- "sha256:d8bdb4208975b12048bdace46e9dd8e3dda3872432f95b53789700a1330e6060",
- "sha256:dce0362ff9b61f8411d1efc9e16fc528dadbd3707a557561992457f5cb446297",
- "sha256:defbbbf5653629ce5cc54091ce49c6830da8d3104de53ed2169c9efcb0720f27",
- "sha256:e0c53a7e2b6d82ec3c26c009c937fc88eb8c7edf000c54334261beaf56bb08f2",
- "sha256:e1065bacfe5303f107896e63263537dee90920d26050f2e23c4af12c37da2db6",
- "sha256:e142837c4212c0b2c71e6773cb6740828922806b4c00ee4215be3ceb558671e6",
- "sha256:f4cbbab28c93ffee6ec929cf0826f0b11d2488e53a708d51142a5e62f8cd9806",
- "sha256:fa8f63b6551621eea9efea4db37ae401104352f0ebaee32f7d20be88cbe589c3"
- ],
- "index": "pypi",
- "version": "==0.29.12"
- },
- "enum34": {
- "hashes": [
- "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850",
- "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a",
- "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79",
- "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
- ],
- "markers": "python_version < '3'",
- "version": "==1.1.6"
- },
- "flask": {
- "hashes": [
- "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52",
- "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"
- ],
- "index": "pypi",
- "version": "==1.1.1"
- },
- "futures": {
- "hashes": [
- "sha256:49b3f5b064b6e3afc3316421a3f25f66c137ae88f068abbf72830170033c5e16",
- "sha256:7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794"
- ],
- "markers": "python_version < '3.2'",
- "version": "==3.3.0"
- },
- "gunicorn": {
- "hashes": [
- "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
- "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
- ],
- "index": "pypi",
- "version": "==19.9.0"
- },
- "hexdump": {
- "hashes": [
- "sha256:d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db"
- ],
- "index": "pypi",
- "version": "==3.3"
- },
- "idna": {
- "hashes": [
- "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
- "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
- ],
- "index": "pypi",
- "version": "==2.8"
- },
- "ipaddress": {
- "hashes": [
- "sha256:64b28eec5e78e7510698f6d4da08800a5c575caa4a286c93d651c5d3ff7b6794",
- "sha256:b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c"
- ],
- "markers": "python_version < '3'",
- "version": "==1.0.22"
- },
- "isort": {
- "hashes": [
- "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1",
- "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"
- ],
- "version": "==4.3.21"
- },
- "itsdangerous": {
- "hashes": [
- "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
- "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
- ],
- "version": "==1.1.0"
- },
- "jinja2": {
- "hashes": [
- "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
- "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
- ],
- "index": "pypi",
- "version": "==2.10.1"
- },
- "json-rpc": {
- "hashes": [
- "sha256:bc84451268b48a576d3138744322a8ce673eccadf7424edf4d446b1ddb59e58c",
- "sha256:d6ed3dae670a12e4caa738d309807357d22e2f6e222bb34e8ef019e8b5b1228b"
- ],
- "index": "pypi",
- "version": "==1.12.1"
- },
- "lazy-object-proxy": {
- "hashes": [
- "sha256:159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661",
- "sha256:23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f",
- "sha256:3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13",
- "sha256:3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821",
- "sha256:4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71",
- "sha256:4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e",
- "sha256:64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea",
- "sha256:6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229",
- "sha256:7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4",
- "sha256:7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e",
- "sha256:8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20",
- "sha256:a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16",
- "sha256:acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b",
- "sha256:be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7",
- "sha256:bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c",
- "sha256:c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a",
- "sha256:dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e",
- "sha256:e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1"
- ],
- "version": "==1.4.1"
- },
- "libusb1": {
- "hashes": [
- "sha256:adf64a4f3f5c94643a1286f8153bcf4bc787c348b38934aacd7fe17fbeebc571"
- ],
- "index": "pypi",
- "version": "==1.7.1"
- },
- "logentries": {
- "git": "https://github.com/commaai/le_python.git",
- "ref": "5eef8f5be5929d33973e1b10e686fa0cdcd6792f"
- },
- "markupsafe": {
- "hashes": [
- "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
- "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
- "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
- "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
- "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
- "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
- "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
- "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
- "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
- "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
- "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
- "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
- "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
- "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
- "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
- "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
- "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
- "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
- "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
- "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
- "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
- "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
- "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
- "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
- "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
- "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
- "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
- "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
- ],
- "version": "==1.1.1"
- },
- "mccabe": {
- "hashes": [
- "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
- "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
- ],
- "version": "==0.6.1"
- },
- "mpmath": {
- "hashes": [
- "sha256:fc17abe05fbab3382b61a123c398508183406fa132e0223874578e20946499f6"
- ],
- "version": "==1.1.0"
- },
- "nose": {
- "hashes": [
- "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac",
- "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a",
- "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
- ],
- "index": "pypi",
- "version": "==1.3.7"
- },
- "numpy": {
- "hashes": [
- "sha256:0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633",
- "sha256:141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7",
- "sha256:14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b",
- "sha256:27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5",
- "sha256:2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e",
- "sha256:3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca",
- "sha256:52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336",
- "sha256:6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5",
- "sha256:7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7",
- "sha256:7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7",
- "sha256:94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69",
- "sha256:a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3",
- "sha256:ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166",
- "sha256:b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8",
- "sha256:b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722",
- "sha256:cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525",
- "sha256:d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10",
- "sha256:dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29",
- "sha256:dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8",
- "sha256:e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52",
- "sha256:ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797",
- "sha256:f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a",
- "sha256:f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7"
- ],
- "index": "pypi",
- "version": "==1.16.4"
- },
- "overpy": {
- "git": "https://github.com/commaai/python-overpy.git",
- "ref": "f86529af402d4642e1faeb146671c40284007323"
- },
- "psutil": {
- "hashes": [
- "sha256:028a1ec3c6197eadd11e7b46e8cc2f0720dc18ac6d7aabdb8e8c0d6c9704f000",
- "sha256:503e4b20fa9d3342bcf58191bbc20a4a5ef79ca7df8972e6197cc14c5513e73d",
- "sha256:863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3",
- "sha256:954f782608bfef9ae9f78e660e065bd8ffcfaea780f9f2c8a133bb7cb9e826d7",
- "sha256:b6e08f965a305cd84c2d07409bc16fbef4417d67b70c53b299116c5b895e3f45",
- "sha256:bc96d437dfbb8865fc8828cf363450001cb04056bbdcdd6fc152c436c8a74c61",
- "sha256:cf49178021075d47c61c03c0229ac0c60d5e2830f8cab19e2d88e579b18cdb76",
- "sha256:d5350cb66690915d60f8b233180f1e49938756fb2d501c93c44f8fb5b970cc63",
- "sha256:eba238cf1989dfff7d483c029acb0ac4fcbfc15de295d682901f0e2497e6781a"
- ],
- "index": "pypi",
- "version": "==5.6.3"
- },
- "pycapnp": {
- "hashes": [
- "sha256:44e14a5ace399cf1753acb8bbce558b8c895c48fd2102d266c34eaff286824cf"
- ],
- "index": "pypi",
- "version": "==0.6.4"
- },
- "pycparser": {
- "hashes": [
- "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
- ],
- "version": "==2.19"
- },
- "pycryptodome": {
- "hashes": [
- "sha256:0281dc6a65a4d0d9e439f54e0ad5faf27bfdc2ebe9ead36912bac74a0920fa2e",
- "sha256:02af9b284f5c9a55f06f5e4532c16c9b7bd958e293e93969934d864ef7bd87ee",
- "sha256:09da99372fb69762e4b9690291176a166cc351793e2e1c9405d29ca291503aa8",
- "sha256:0c2400ccfc049c3f24e65d4f02bb4208d86e408011019e455fab7f50d2b226c9",
- "sha256:2081dd6dce6b21bf3596427edaedd4f2561dce616893b162ed2c674f3a3ca70a",
- "sha256:28b86ec9fdb005a2a18e4862a3a7277046738825ee8dc89cda5657e75a396089",
- "sha256:2d790c0d4c0d5edcf5fbab4e2af7b03757e40c5ae8d217f0dfe9ddea37fe130f",
- "sha256:2f24906153dca16528cf5515b1afa9ef635423d5a654904e861765f88ca667b6",
- "sha256:30d283939896fa4bacbdb9fa86e6fd51e9a5b953a511e210b38481f697f289f5",
- "sha256:31f78b67f97830d137f74813c0502a181a03b43a32ed124049bb20428176c307",
- "sha256:33c1f3a380fd38ab4dd4372bef17e98002b360b52814bb1b077693b1bd06ec87",
- "sha256:34091e9a6650c44e25339f22fc821396f19f152f65be2546edd823a093fb5a04",
- "sha256:567fb73951ab6865a2eb1a0060b54be1e27302574f6c65879525bdf53fab49e1",
- "sha256:5bc40f8aa7ba8ca7f833ad2477b9d84e1bfd2630b22a46d9bbd221982f8c3ac0",
- "sha256:6b0a0ccf33c7a6100c569667c888335a4aaf0d22218cb97b4963a65d70f6c343",
- "sha256:71b93157f1ce93fc7cfff9359b76def2b4826a7ef7a7f95e070161368e7f584a",
- "sha256:7d939d511b7dac29b2d936706786771ecb8256e43fade5cdb0e8bc58f02b86cf",
- "sha256:7fbc5a93d52e4c51487f4648b00dc41700adb144d10fc567b05f852e76c243ad",
- "sha256:9cb94b8f9c915a5d2b273d612a25a8e5d67b49543f8eb6bcec0275ac46cda421",
- "sha256:a585ea1722f9731e75881d5ffcc51d11c794d244ac57e7c2a9cbb8d5ac729302",
- "sha256:a6458dd7a10ae51f6fce56bdfc79bf6d3b54556237045d09e77fbda9d6d37864",
- "sha256:a9fb92e948128bce0239b87c6efcf2cb1c5a703d0b41dd6835211e6fafd1c5df",
- "sha256:b0b6b4ca1c53e7d6ca9f2720919f63837f05e7a5f92912a2bc29bfd03ed3b54f",
- "sha256:b7d22c8d648aaa3a7ec785eda544402141eb78ac5ffbba4cbe2c3a1f52276870",
- "sha256:bc9560574a868cfa2ba781b7bb0b4685b08ea251697abfc49070ffc05e1cbee6",
- "sha256:c0c5a576f3f7b7de3f86889cb47eb51b59dc11db9cf1e2a0f51eb4d988010ea4",
- "sha256:e1c91c2fa942a71c98a7a1f462de6dbbe82f34b9267eb8131314d97bd13bf0d4",
- "sha256:ec936361ad78aa95382c313df95777795b8185aac5dd3ec5463363ea94b556fc"
- ],
- "index": "pypi",
- "version": "==3.8.2"
- },
- "pyflakes": {
- "hashes": [
- "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
- "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
- ],
- "index": "pypi",
- "version": "==2.1.1"
- },
- "pyjwt": {
- "hashes": [
- "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e",
- "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"
- ],
- "index": "pypi",
- "version": "==1.7.1"
- },
- "pylint": {
- "hashes": [
- "sha256:367e3d49813d349a905390ac27989eff82ab84958731c5ef0bef867452cfdc42",
- "sha256:97a42df23d436c70132971d1dcb9efad2fe5c0c6add55b90161e773caf729300"
- ],
- "index": "pypi",
- "version": "==1.9.5"
- },
- "pyserial": {
- "hashes": [
- "sha256:6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627",
- "sha256:e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8"
- ],
- "index": "pypi",
- "version": "==3.4"
- },
- "python-dateutil": {
- "hashes": [
- "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb",
- "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
- ],
- "index": "pypi",
- "version": "==2.8.0"
- },
- "pyyaml": {
- "hashes": [
- "sha256:57acc1d8533cbe51f6662a55434f0dbecfa2b9eaf115bede8f6fd00115a0c0d3",
- "sha256:588c94b3d16b76cfed8e0be54932e5729cc185caffaa5a451e7ad2f7ed8b4043",
- "sha256:68c8dd247f29f9a0d09375c9c6b8fdc64b60810ebf07ba4cdd64ceee3a58c7b7",
- "sha256:70d9818f1c9cd5c48bb87804f2efc8692f1023dac7f1a1a5c61d454043c1d265",
- "sha256:86a93cccd50f8c125286e637328ff4eef108400dd7089b46a7be3445eecfa391",
- "sha256:a0f329125a926876f647c9fa0ef32801587a12328b4a3c741270464e3e4fa778",
- "sha256:a3c252ab0fa1bb0d5a3f6449a4826732f3eb6c0270925548cac342bc9b22c225",
- "sha256:b4bb4d3f5e232425e25dda21c070ce05168a786ac9eda43768ab7f3ac2770955",
- "sha256:cd0618c5ba5bda5f4039b9398bb7fb6a317bb8298218c3de25c47c4740e4b95e",
- "sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190",
- "sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd"
- ],
- "index": "pypi",
- "version": "==5.1.1"
- },
- "pyzmq": {
- "hashes": [
- "sha256:00dd015159eaeb1c0731ad49310e1f5d839c9a35a15e4f3267f5052233fad99b",
- "sha256:03913b6beb8e7b417b9910b0ee1fd5d62e9626d218faefbe879d70714ceab1a2",
- "sha256:13f17386df81d5e6efb9a4faea341d8de22cdc82e49a326dded26e33f42a3112",
- "sha256:16c6281d96885db1e15f7047ddc1a8f48ff4ea35d31ca709f4d2eb39f246d356",
- "sha256:17efab4a804e31f58361631256d660214204046f9e2b962738b171b9ad674ea7",
- "sha256:2b79919ddeff3d3c96aa6087c21d294c8db1c01f6bfeee73324944683685f419",
- "sha256:2f832e4711657bb8d16ea1feba860f676ec5f14fb9fe3b449b5953a60e89edae",
- "sha256:31a11d37ac73107363b47e14c94547dbfc6a550029c3fe0530be443199026fc2",
- "sha256:33a3e928e6c3138c675e1d6702dd11f6b7050177d7aab3fc322db6e1d2274490",
- "sha256:34a38195a6d3a9646cbcdaf8eb245b4d935c7a57f7e1b3af467814bc1a92467e",
- "sha256:42900054f1500acef6df7428edf806abbf641bf92eb9ceded24aa863397c3bae",
- "sha256:4ccc7f3c63aa9d744dadb62c49eda2d0e7de55649b80c45d7c684d70161a69af",
- "sha256:5b220c37c346e6575db8c88a940c1fc234f99ce8e0068c408919bb8896c4b6d2",
- "sha256:6074848da5c8b44a1ca40adf75cf65aa92bc80f635e8249aa8f37a69b2b9b6f5",
- "sha256:61a4155964bd4a14ef95bf46cb1651bcf8dcbbed8c0108e9c974c1fcbb57788f",
- "sha256:62b5774688326600c52f587f7a033ca6b6284bef4c8b1b5fda32480897759eac",
- "sha256:65a9ffa4f9f085d696f16fd7541f34b3c357d25fe99c90e3bce2ea59c3b5b4b6",
- "sha256:76a077d2c30f8adc5e919a55985a784b96aeca69b53c1ea6fd5723d3ae2e6f53",
- "sha256:8e5b4c51557071d6379d6dc1f54f35e9f6a137f5e84e102efb869c8d3c13c8ff",
- "sha256:917f73e07cc04f0678a96d93e7bb8b1adcccdde9ccfe202e622814f4d1d1ecfd",
- "sha256:91c75d3c4c357f9643e739db9e79ab9681b2f6ae8ec5678d6ef2ea0d01532596",
- "sha256:923dd91618b100bb4c92ab9ed7b65825a595b8524a094ce03c7cb2aaae7d353b",
- "sha256:9849054e0355e2bc7f4668766a25517ba76095031c9ff5e39ae8949cee5bb024",
- "sha256:c9d453933f0e3f44b9759189f2a18aa765f7f1a4345c727c18ebe8ad0d748d26",
- "sha256:cb7514936277abce64c2f4c56883e5704d85ed04d98d2d432d1c6764003bb003"
- ],
- "index": "pypi",
- "version": "==18.0.2"
- },
- "raven": {
- "hashes": [
- "sha256:3fa6de6efa2493a7c827472e984ce9b020797d0da16f1db67197bcc23c8fae54",
- "sha256:44a13f87670836e153951af9a3c80405d36b43097db869a36e92809673692ce4"
- ],
- "index": "pypi",
- "version": "==6.10.0"
- },
- "requests": {
- "hashes": [
- "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
- "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
- ],
- "index": "pypi",
- "version": "==2.22.0"
- },
- "setproctitle": {
- "hashes": [
- "sha256:6283b7a58477dd8478fbb9e76defb37968ee4ba47b05ec1c053cb39638bd7398",
- "sha256:6a035eddac62898786aed2c2eee7334c28cfc8106e8eb29fdd117cac56c6cdf0"
- ],
- "index": "pypi",
- "version": "==1.1.10"
- },
- "singledispatch": {
- "hashes": [
- "sha256:5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c",
- "sha256:833b46966687b3de7f438c761ac475213e53b306740f1abfaa86e1d1aae56aa8"
- ],
- "markers": "python_version < '3.4'",
- "version": "==3.4.0.3"
- },
- "six": {
- "hashes": [
- "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
- "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
- ],
- "index": "pypi",
- "version": "==1.12.0"
- },
- "smbus2": {
- "hashes": [
- "sha256:4d5aae2f65d39056bb44e8906d5c503f8ee7e02fadb0a6433f1091a9ce528dde"
- ],
- "index": "pypi",
- "version": "==0.2.3"
- },
- "sympy": {
- "hashes": [
- "sha256:71a11e5686ae7ab6cb8feb5bd2651ef4482f8fd43a7c27e645a165e4353b23e1",
- "sha256:f9b00ec76151c98470e84f1da2d7d03633180b71fb318428ddccce1c867d3eaa"
- ],
- "index": "pypi",
- "version": "==1.4"
- },
- "tqdm": {
- "hashes": [
- "sha256:14a285392c32b6f8222ecfbcd217838f88e11630affe9006cd0e94c7eff3cb61",
- "sha256:25d4c0ea02a305a688e7e9c2cdc8f862f989ef2a4701ab28ee963295f5b109ab"
- ],
- "index": "pypi",
- "version": "==4.32.2"
- },
- "urllib3": {
- "hashes": [
- "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
- "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
- ],
- "index": "pypi",
- "version": "==1.25.3"
- },
- "utm": {
- "hashes": [
- "sha256:07e55707ed660eec1ae983bd54a406c437962618a6261b38d70592fe30f5f508"
- ],
- "index": "pypi",
- "version": "==0.5.0"
- },
- "websocket-client": {
- "hashes": [
- "sha256:1151d5fb3a62dc129164292e1227655e4bbc5dd5340a5165dfae61128ec50aa9",
- "sha256:1fd5520878b68b84b5748bb30e592b10d0a91529d5383f74f4964e72b297fd3a"
- ],
- "index": "pypi",
- "version": "==0.56.0"
- },
- "werkzeug": {
- "hashes": [
- "sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4",
- "sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6"
- ],
- "version": "==0.15.5"
- },
- "wrapt": {
- "hashes": [
- "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"
- ],
- "version": "==1.11.2"
- }
- },
- "develop": {
- "absl-py": {
- "hashes": [
- "sha256:b943d1c567743ed0455878fcd60bc28ac9fae38d129d1ccfad58079da00b8951"
- ],
- "version": "==0.7.1"
- },
- "adal": {
- "hashes": [
- "sha256:5a7f1e037c6290c6d7609cab33a9e5e988c2fbec5c51d1c4c649ee3faff37eaf",
- "sha256:fd17e5661f60634ddf96a569b95d34ccb8a98de60593d729c28bdcfe360eaad1"
- ],
- "version": "==1.2.2"
- },
- "aenum": {
- "hashes": [
- "sha256:0e3589654ef090784971f7778dcb74b08c9b4ef80b33267c00f82ddeedac179a",
- "sha256:b12a7be3d89b270f266f8643aaa126404e5cdc0929bd6f09548b8eaed85e2aa1",
- "sha256:e4dab068cbe00295bbc3660cd562221b008687d0f7a4c40fc2dd7a80002126a7"
- ],
- "index": "pypi",
- "version": "==2.2.1"
- },
- "amqp": {
- "hashes": [
- "sha256:aa4409446139676943a2eaa27d5f58caf750f4ca5a89f888c452afd86be6a67d",
- "sha256:cbb6f87d53cac612a594f982b717cc1c54c6a1e17943a0a0d32dc6cc9e2120c8"
- ],
- "version": "==2.5.0"
- },
- "asn1crypto": {
- "hashes": [
- "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87",
- "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
- ],
- "version": "==0.24.0"
- },
- "astor": {
- "hashes": [
- "sha256:0e41295809baf43ae8303350e031aff81ae52189b6f881f36d623fa8b2f1960e",
- "sha256:37a6eed8b371f1228db08234ed7f6cfdc7817a3ed3824797e20cbb11dc2a7862"
- ],
- "version": "==0.8.0"
- },
- "astroid": {
- "hashes": [
- "sha256:87de48a92e29cedf7210ffa853d11441e7ad94cb47bacd91b023499b51cbc756",
- "sha256:d25869fc7f44f1d9fb7d24fd7ea0639656f5355fc3089cd1f3d18c6ec6b124c7"
- ],
- "version": "==1.6.6"
- },
- "attrs": {
- "hashes": [
- "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
- "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
- ],
- "version": "==19.1.0"
- },
- "azure-batch": {
- "hashes": [
- "sha256:017be21a9e6db92473d2e33170d5dd445596fc70d706f73552ac9c6b57a6ef1c",
- "sha256:cd71c7ebb5beab174b6225bbf79ae18d6db0c8d63227a7e514da0a75f138364c"
- ],
- "index": "pypi",
- "version": "==4.1.3"
- },
- "azure-common": {
- "hashes": [
- "sha256:2606ae77ff81c0036965b92ec2efe03eaec02a66714140ca0f7aa401b8b9bbb0",
- "sha256:c908621a71eb4ee9fab0962e35d3c27a18f09a854d8359c2f32c15b3f4fc576e"
- ],
- "index": "pypi",
- "version": "==1.1.16"
- },
- "azure-nspkg": {
- "hashes": [
- "sha256:a908f96a695b12e31b6c56cda0bb8e6d2a054283c350881667f300b8563ece33",
- "sha256:af81fd4512be5ad0834b8e82c43bbe80b016bd295a8794fac28d69bf243357e0",
- "sha256:ce4173e06f2f423775c4ca8a635e9a89b5fe8e4ba9fefbbe2a1e0d525072392c"
- ],
- "index": "pypi",
- "version": "==3.0.1"
- },
- "azure-storage-blob": {
- "hashes": [
- "sha256:308058abfd789f5830d91f6407eb00a7b04925b2b9af267aecfb46c335802cdc",
- "sha256:8cab5420ba6646ead09fdb497646f735b12645cba8efed96a86f7b370e175ade"
- ],
- "index": "pypi",
- "version": "==1.3.1"
- },
- "azure-storage-common": {
- "hashes": [
- "sha256:585658ebc784e843a285732a69aa69ef922e17c3063460c2c7b27c89f377004c",
- "sha256:a412a78618e82bf99030ce56f1f2d5fc6c2c2eec7ee1beda86ce6ea5f2c9196b"
- ],
- "index": "pypi",
- "version": "==1.3.0"
- },
- "azure-storage-nspkg": {
- "hashes": [
- "sha256:4fc4685aef941eab2f7fb53824254cca2e38f2a1bf33cda0c8ae654fe15827d6",
- "sha256:855315c038c0e695868025127e1b3057a1f984af9ccfbaeac4fbfd6c5dd3b466"
- ],
- "index": "pypi",
- "version": "==3.0.0"
- },
- "backports-abc": {
- "hashes": [
- "sha256:033be54514a03e255df75c5aee8f9e672f663f93abb723444caec8fe43437bde",
- "sha256:52089f97fe7a9aa0d3277b220c1d730a85aefd64e1b2664696fe35317c5470a7"
- ],
- "index": "pypi",
- "version": "==0.5"
- },
- "backports.functools-lru-cache": {
- "hashes": [
- "sha256:9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a",
- "sha256:f0b0e4eba956de51238e17573b7087e852dfe9854afd2e9c873f73fc0ca0a6dd"
- ],
- "markers": "python_version == '2.7'",
- "version": "==1.5"
- },
- "backports.lzma": {
- "hashes": [
- "sha256:50829db66f0445442f6c796bba0ca62d1f87f54760c4682b6d1489e729a43744"
- ],
- "index": "pypi",
- "version": "==0.0.13"
- },
- "backports.shutil-get-terminal-size": {
- "hashes": [
- "sha256:0975ba55054c15e346944b38956a4c9cbee9009391e41b86c68990effb8c1f64",
- "sha256:713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80"
- ],
- "markers": "python_version == '2.7'",
- "version": "==1.0.0"
- },
- "backports.weakref": {
- "hashes": [
- "sha256:81bc9b51c0abc58edc76aefbbc68c62a787918ffe943a37947e162c3f8e19e82",
- "sha256:bc4170a29915f8b22c9e7c4939701859650f2eb84184aee80da329ac0b9825c2"
- ],
- "version": "==1.0.post1"
- },
- "billiard": {
- "hashes": [
- "sha256:756bf323f250db8bf88462cd042c992ba60d8f5e07fc5636c24ba7d6f4261d84"
- ],
- "version": "==3.6.0.0"
- },
- "bincopy": {
- "hashes": [
- "sha256:61d02c09910635599127056d2707c22bfa310cb31f935fbfdda406639017717e",
- "sha256:a0e31dc5de70bffaf717bb76b136857eb78ea138fb49dc5a1bf06303f103dff8"
- ],
- "index": "pypi",
- "version": "==16.0.0"
- },
- "bleach": {
- "hashes": [
- "sha256:978e758599b54cd3caa2e160d74102879b230ea8dc93871d0783721eef58bc65",
- "sha256:e67f46adcec78dbc3c04462f3aba3213a673d5652eba2609ed1ef15492a44b8d"
- ],
- "index": "pypi",
- "version": "==1.5.0"
- },
- "boto": {
- "hashes": [
- "sha256:147758d41ae7240dc989f0039f27da8ca0d53734be0eb869ef16e3adcfa462e8",
- "sha256:ea0d3b40a2d852767be77ca343b58a9e3a4b00d9db440efb8da74b4e58025e5a"
- ],
- "index": "pypi",
- "version": "==2.49.0"
- },
- "boto3": {
- "hashes": [
- "sha256:6a950bf98b22812896ea0f833a26d448acfdf43179f41f389d501af7a9fae328",
- "sha256:cfbc062a76a7781af8e6a4ea26ebcafa3866872a8cceb05fdbf588c36e7848f0"
- ],
- "index": "pypi",
- "version": "==1.9.195"
- },
- "botocore": {
- "hashes": [
- "sha256:691627c2aeff0fcbd9237985717c28404a628181fd3e86b7be500bf2ee156007",
- "sha256:c59e9981db9dfc54f0d22f731ca8de904760049a9c60d86dcedde84ae64ef4f0"
- ],
- "version": "==1.12.195"
- },
- "celery": {
- "hashes": [
- "sha256:4c4532aa683f170f40bd76f928b70bc06ff171a959e06e71bf35f2f9d6031ef9",
- "sha256:528e56767ae7e43a16cfef24ee1062491f5754368d38fcfffa861cdb9ef219be"
- ],
- "index": "pypi",
- "version": "==4.3.0"
- },
- "certifi": {
- "hashes": [
- "sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
- "sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
- ],
- "version": "==2019.6.16"
- },
- "cffi": {
- "hashes": [
- "sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774",
- "sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d",
- "sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90",
- "sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b",
- "sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63",
- "sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45",
- "sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25",
- "sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3",
- "sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b",
- "sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647",
- "sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016",
- "sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4",
- "sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb",
- "sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753",
- "sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7",
- "sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9",
- "sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f",
- "sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8",
- "sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f",
- "sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc",
- "sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42",
- "sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3",
- "sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909",
- "sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45",
- "sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d",
- "sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512",
- "sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff",
- "sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201"
- ],
- "index": "pypi",
- "version": "==1.12.3"
- },
- "chardet": {
- "hashes": [
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
- ],
- "index": "pypi",
- "version": "==3.0.4"
- },
- "click": {
- "hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
- ],
- "version": "==7.0"
- },
- "cloudpickle": {
- "hashes": [
- "sha256:603244e0f552b72a267d47a7d9b347b27a3430f58a0536037a290e7e0e212ecf",
- "sha256:b8ba7e322f2394b9bbbdc1c976e6442c2c02acc784cb9e553cee9186166a6890"
- ],
- "version": "==1.2.1"
- },
- "configparser": {
- "hashes": [
- "sha256:8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32",
- "sha256:da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75"
- ],
- "markers": "python_version == '2.7'",
- "version": "==3.7.4"
- },
- "control": {
- "hashes": [
- "sha256:726e8c36a253a54c8886df31f860d740d70de4f8b041421d5df078c3bff3aadb"
- ],
- "index": "pypi",
- "version": "==0.8.2"
- },
- "cryptography": {
- "hashes": [
- "sha256:24b61e5fcb506424d3ec4e18bca995833839bf13c59fc43e530e488f28d46b8c",
- "sha256:25dd1581a183e9e7a806fe0543f485103232f940fcfc301db65e630512cce643",
- "sha256:3452bba7c21c69f2df772762be0066c7ed5dc65df494a1d53a58b683a83e1216",
- "sha256:41a0be220dd1ed9e998f5891948306eb8c812b512dc398e5a01846d855050799",
- "sha256:5751d8a11b956fbfa314f6553d186b94aa70fdb03d8a4d4f1c82dcacf0cbe28a",
- "sha256:5f61c7d749048fa6e3322258b4263463bfccefecb0dd731b6561cb617a1d9bb9",
- "sha256:72e24c521fa2106f19623a3851e9f89ddfdeb9ac63871c7643790f872a305dfc",
- "sha256:7b97ae6ef5cba2e3bb14256625423413d5ce8d1abb91d4f29b6d1a081da765f8",
- "sha256:961e886d8a3590fd2c723cf07be14e2a91cf53c25f02435c04d39e90780e3b53",
- "sha256:96d8473848e984184b6728e2c9d391482008646276c3ff084a1bd89e15ff53a1",
- "sha256:ae536da50c7ad1e002c3eee101871d93abdc90d9c5f651818450a0d3af718609",
- "sha256:b0db0cecf396033abb4a93c95d1602f268b3a68bb0a9cc06a7cff587bb9a7292",
- "sha256:cfee9164954c186b191b91d4193989ca994703b2fff406f71cf454a2d3c7327e",
- "sha256:e6347742ac8f35ded4a46ff835c60e68c22a536a8ae5c4422966d06946b6d4c6",
- "sha256:f27d93f0139a3c056172ebb5d4f9056e770fdf0206c2f422ff2ebbad142e09ed",
- "sha256:f57b76e46a58b63d1c6375017f4564a28f19a5ca912691fd2e4261b3414b618d"
- ],
- "index": "pypi",
- "version": "==2.7"
- },
- "cycler": {
- "hashes": [
- "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d",
- "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
- ],
- "version": "==0.10.0"
- },
- "cython": {
- "hashes": [
- "sha256:04ebf16df9406d3279a2489c3327803c782d9e17637d525bfb44ecf5ec65850f",
- "sha256:1486ec88d1c73dea3846a5640054018b002608e04a791ccbd2082a47bce4440a",
- "sha256:20da832a5e9a8e93d1e1eb64650258956723940968eb585506531719b55b804f",
- "sha256:2464688b523d7a133b52cf1343c1c595b92fc6554af1015f74b9e49951e992d4",
- "sha256:27827b68a8359e9ab6bf683c68d8ee79863a0c94a577acf56aa02cc302e16f51",
- "sha256:27deeeeca0fd8933af07923e809c8fed0763d150a4fdd4082932a33b8c874ed6",
- "sha256:31f4da785d5e09deb852ea59795a629c5befb6040929e7880c6f63e6668246ce",
- "sha256:4828cf8fa638c35139e643f30201b240c0d156b1b9967a7321ae42d721d7224c",
- "sha256:48b365e32cc5639ae2c239d7bd4f8a1d920a13a7ae92113c4c938903c9400147",
- "sha256:4eb71856c1d1b33083df9318fd30143470ad6f0d1b9ad2ee61a120710842d28b",
- "sha256:5b06ef8422d27d8128f8f80bdefa111eadcab246fba1d668720af4f0b97b7a0e",
- "sha256:71c553640e1ddaaf143e38dbc6cd1863fa3c0738fb1830a9aaffba9a51838f30",
- "sha256:73e2742ee1f923c5f213183bf493901f9630e395634fce5b739a53b7dc5d64be",
- "sha256:82a632bc02063eff0b8e7ff3089aa3d912d1c7499709f51c8f04f57c8832cfe6",
- "sha256:977ca1ac059e4d4a4bf5fe2224986baf42b69290453eda44822606f4deae6515",
- "sha256:a7e6217d0dd864a7cc4f457172766864496efd64d24d4980df1521f75f992761",
- "sha256:ad0ed7dd5dff76eb3aae8c18d95b1c9f885a91a92132728051a704fb8060d08c",
- "sha256:b1b8eda9e931f0ca1aadb95a890811bdf530407e48c962643b85675329d99abf",
- "sha256:cec99c79205131da3ee75becea1f3f55c57bf6a1c500431de9ae7a32ac8a5cc4",
- "sha256:d4bbdaa6f61ce2ef26535a7d473d6ffa6e413013c5c580af999546bf1627ae11",
- "sha256:d8bdb4208975b12048bdace46e9dd8e3dda3872432f95b53789700a1330e6060",
- "sha256:dce0362ff9b61f8411d1efc9e16fc528dadbd3707a557561992457f5cb446297",
- "sha256:defbbbf5653629ce5cc54091ce49c6830da8d3104de53ed2169c9efcb0720f27",
- "sha256:e0c53a7e2b6d82ec3c26c009c937fc88eb8c7edf000c54334261beaf56bb08f2",
- "sha256:e1065bacfe5303f107896e63263537dee90920d26050f2e23c4af12c37da2db6",
- "sha256:e142837c4212c0b2c71e6773cb6740828922806b4c00ee4215be3ceb558671e6",
- "sha256:f4cbbab28c93ffee6ec929cf0826f0b11d2488e53a708d51142a5e62f8cd9806",
- "sha256:fa8f63b6551621eea9efea4db37ae401104352f0ebaee32f7d20be88cbe589c3"
- ],
- "index": "pypi",
- "version": "==0.29.12"
- },
- "datadog": {
- "hashes": [
- "sha256:0e33727bd9ef0b8201359accdf12f61fb58ab541bf4062693aca16653f8e7a0a",
- "sha256:995e51d142ae3624c86c78369b268f23386bb207df5345d718c241718387875c"
- ],
- "index": "pypi",
- "version": "==0.29.3"
- },
- "decorator": {
- "hashes": [
- "sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de",
- "sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6"
- ],
- "index": "pypi",
- "version": "==4.4.0"
- },
- "defusedxml": {
- "hashes": [
- "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93",
- "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5"
- ],
- "version": "==0.6.0"
- },
- "dlib": {
- "hashes": [
- "sha256:92587c81b0165e933593f505fdf099dface0d0f8ec874b1d8655fc774598911f"
- ],
- "index": "pypi",
- "version": "==19.17.0"
- },
- "docutils": {
- "hashes": [
- "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6",
- "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274",
- "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6"
- ],
- "version": "==0.14"
- },
- "dominate": {
- "hashes": [
- "sha256:4076735c0745fe771e57b2313dbb4bfeec42731816ee23cee509f66e8912aa51",
- "sha256:4b9fd42d2824b79761799590697db45bf93daad511b130c50513af38da33df9b"
- ],
- "index": "pypi",
- "version": "==2.3.5"
- },
- "elasticsearch": {
- "hashes": [
- "sha256:cbc73831c63fa2824538df76fcb2c4be007b43dbd9e7788ae70ea6d24109925b",
- "sha256:d1b176b87a7fb75dca82978c82a4023e8b21cbc98f4018cb51190fb0b8b43764"
- ],
- "index": "pypi",
- "version": "==7.0.2"
- },
- "entium": {
- "hashes": [
- "sha256:233f39c6b5477e0c6fffd8d5cb7fc9df9deab80c79c7fb77e91f6d046782b0ce",
- "sha256:4b14b4810a97ab041b629a0b59d21a98f5e197ee623d7b14925755ec4fd6888a"
- ],
- "index": "pypi",
- "version": "==0.1.4"
- },
- "entrypoints": {
- "hashes": [
- "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
- "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
- ],
- "version": "==0.3"
- },
- "enum34": {
- "hashes": [
- "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850",
- "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a",
- "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79",
- "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
- ],
- "markers": "python_version < '3'",
- "version": "==1.1.6"
- },
- "fastcluster": {
- "hashes": [
- "sha256:0024b1304d4618a32900473b809265694bc6d0a10bfbc272407443318644d405",
- "sha256:0b33b076ea98939742e0734e944c903c8c67af3eecd5a9f8b4349407c1affdd3",
- "sha256:244d400a81d23b48f2b825e50e99e1ff3c7d2be2acc40942e3359b4deef68483",
- "sha256:2bb3bf8e1c7af42e47ef24bc2386a1d3e6ec8dc5e6be4123a491a36b89227b49",
- "sha256:539d84d43fbe541a38d94c84bf0469c430cb7cda488364941ce57f680a07b091",
- "sha256:5e7d81385bbc2148c554c4aaa32e26a00fbadc1190d5bad9c8719f6432629307",
- "sha256:642e4d92220c1deede1e89409c5ad366e4a3f3ed55fff0a4e325d4eb2574d65a",
- "sha256:66c868fdfc161e5c45cdf399f1274216602ea82c9fc46c632c9602dbaa149840",
- "sha256:6952c9d25b3ea60d6a53ee92205e7f16cc6baf7caa4776fb1e55dc6e8e2965f2",
- "sha256:8606da6f6f51f81c3b4e000edeb8668711a1769a6ebf3c99ab98f9c6d2fb7534",
- "sha256:8d552d29ed054ce20f5bb0445b51bd7b6b8088fdae334625b4a9950189dcc2bf",
- "sha256:922735fde2848a6f0478c6968048a16a5d3d6ba6e1d1a9596d578b59dce719d7",
- "sha256:9f3cd227a9ebeec090e4186a63e46cd87d121968bd1d45ea8a7c2d483bc082fb",
- "sha256:a382cb411610ca06a69e7b131239f0bb02961fec762d5b6804e653a32cd5ab52",
- "sha256:a986b3afe823bcaea3dad9de1485b176c6dd5b0e2f154ede71aaf6635e82e159",
- "sha256:b1902ab52418c6f4c2f3f7439aea711c6b5aa9bbb4c97b6d4b0c6f5e5c894342",
- "sha256:bb56f6c7343bbb68beb1ffd13abdb87ce7a84ab391b3a4e63ed5c02b2d1ce46f",
- "sha256:c2e5d11f5f96e6861fd632246f18bc6592ac439f236caffd4d2a75697a6f8969",
- "sha256:c61973bb16117ee16b7642ff9da8e0899fb4d5eb5d0cc9c56d3269551ccd6307",
- "sha256:d2deec11a6625c5578325f4dd10980e2981d1f1d1e658c7c79f2497377f92bdf",
- "sha256:e0f2feb03f67b12f25538aa05b1150c7a2c1cd1c21ad7d0bde94e8169ef46627",
- "sha256:e32e7287c47291eca2c83cd5cc6a5007eff2da00c12ac21fd721a16d0c428059",
- "sha256:e889ea36c4e469ff3fb2a6a868c8e557fc988a81cd1cf3d09876107e59ee9cbd",
- "sha256:e96f3b65e3748f2be06aa0977a00872ddeca4f8959703126f2b103978243bbdd"
- ],
- "index": "pypi",
- "version": "==1.1.25"
- },
- "fasteners": {
- "hashes": [
- "sha256:007e4d2b2d4a10093f67e932e5166722d2eab83b77724156e92ad013c6226574",
- "sha256:3a176da6b70df9bb88498e1a18a9e4a8579ed5b9141207762368a1017bf8f5ef"
- ],
- "index": "pypi",
- "version": "==0.15"
- },
- "flask": {
- "hashes": [
- "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52",
- "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"
- ],
- "index": "pypi",
- "version": "==1.1.1"
- },
- "flask-cors": {
- "hashes": [
- "sha256:72170423eb4612f0847318afff8c247b38bd516b7737adfc10d1c2cdbb382d16",
- "sha256:f4d97201660e6bbcff2d89d082b5b6d31abee04b1b3003ee073a6fd25ad1d69a"
- ],
- "index": "pypi",
- "version": "==3.0.8"
- },
- "flask-socketio": {
- "hashes": [
- "sha256:aced332903522a52822fb1e21744549510ce8b26e074422d4cd9aff68e43be5b",
- "sha256:f6f7e0205f0dd92d98a87e3f6d26d94ade29ca380ba383b505070674c804ae2e"
- ],
- "index": "pypi",
- "version": "==4.1.0"
- },
- "funcsigs": {
- "hashes": [
- "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca",
- "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"
- ],
- "markers": "python_version < '3.3'",
- "version": "==1.0.2"
- },
- "functools32": {
- "hashes": [
- "sha256:89d824aa6c358c421a234d7f9ee0bd75933a67c29588ce50aaa3acdf4d403fa0",
- "sha256:f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d"
- ],
- "markers": "python_version < '3'",
- "version": "==3.2.3.post2"
- },
- "future": {
- "hashes": [
- "sha256:67045236dcfd6816dc439556d009594abf643e5eb48992e36beac09c2ca659b8"
- ],
- "index": "pypi",
- "version": "==0.17.1"
- },
- "futures": {
- "hashes": [
- "sha256:49b3f5b064b6e3afc3316421a3f25f66c137ae88f068abbf72830170033c5e16",
- "sha256:7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794"
- ],
- "markers": "python_version < '3.2'",
- "version": "==3.3.0"
- },
- "gast": {
- "hashes": [
- "sha256:fe939df4583692f0512161ec1c880e0a10e71e6a232da045ab8edd3756fbadf0"
- ],
- "version": "==0.2.2"
- },
- "geoalchemy2": {
- "hashes": [
- "sha256:0d1c9ea3ec13f6a522ccc3ffd2569ac524a6c6e80bab883e8805b28c48e77143",
- "sha256:4dc4c6c2bda0fc82cccab4aaff185a6570e13a5351d85e29e12984a55d4138ee"
- ],
- "index": "pypi",
- "version": "==0.6.3"
- },
- "gevent": {
- "hashes": [
- "sha256:0774babec518a24d9a7231d4e689931f31b332c4517a771e532002614e270a64",
- "sha256:0e1e5b73a445fe82d40907322e1e0eec6a6745ca3cea19291c6f9f50117bb7ea",
- "sha256:0ff2b70e8e338cf13bedf146b8c29d475e2a544b5d1fe14045aee827c073842c",
- "sha256:107f4232db2172f7e8429ed7779c10f2ed16616d75ffbe77e0e0c3fcdeb51a51",
- "sha256:14b4d06d19d39a440e72253f77067d27209c67e7611e352f79fe69e0f618f76e",
- "sha256:1b7d3a285978b27b469c0ff5fb5a72bcd69f4306dbbf22d7997d83209a8ba917",
- "sha256:1eb7fa3b9bd9174dfe9c3b59b7a09b768ecd496debfc4976a9530a3e15c990d1",
- "sha256:2711e69788ddb34c059a30186e05c55a6b611cb9e34ac343e69cf3264d42fe1c",
- "sha256:28a0c5417b464562ab9842dd1fb0cc1524e60494641d973206ec24d6ec5f6909",
- "sha256:3249011d13d0c63bea72d91cec23a9cf18c25f91d1f115121e5c9113d753fa12",
- "sha256:44089ed06a962a3a70e96353c981d628b2d4a2f2a75ea5d90f916a62d22af2e8",
- "sha256:4bfa291e3c931ff3c99a349d8857605dca029de61d74c6bb82bd46373959c942",
- "sha256:50024a1ee2cf04645535c5ebaeaa0a60c5ef32e262da981f4be0546b26791950",
- "sha256:53b72385857e04e7faca13c613c07cab411480822ac658d97fd8a4ddbaf715c8",
- "sha256:74b7528f901f39c39cdbb50cdf08f1a2351725d9aebaef212a29abfbb06895ee",
- "sha256:7d0809e2991c9784eceeadef01c27ee6a33ca09ebba6154317a257353e3af922",
- "sha256:896b2b80931d6b13b5d9feba3d4eebc67d5e6ec54f0cf3339d08487d55d93b0e",
- "sha256:8d9ec51cc06580f8c21b41fd3f2b3465197ba5b23c00eb7d422b7ae0380510b0",
- "sha256:9f7a1e96fec45f70ad364e46de32ccacab4d80de238bd3c2edd036867ccd48ad",
- "sha256:ab4dc33ef0e26dc627559786a4fba0c2227f125db85d970abbf85b77506b3f51",
- "sha256:d1e6d1f156e999edab069d79d890859806b555ce4e4da5b6418616322f0a3df1",
- "sha256:d752bcf1b98174780e2317ada12013d612f05116456133a6acf3e17d43b71f05",
- "sha256:e5bcc4270671936349249d26140c267397b7b4b1381f5ec8b13c53c5b53ab6e1"
- ],
- "index": "pypi",
- "version": "==1.4.0"
- },
- "git-pylint-commit-hook": {
- "hashes": [
- "sha256:e1d39e7856b3ef0a0269121ca210dc3f5a97da158b322411e8e1185918a91b3c"
- ],
- "index": "pypi",
- "version": "==2.5.1"
- },
- "greenlet": {
- "hashes": [
- "sha256:000546ad01e6389e98626c1367be58efa613fa82a1be98b0c6fc24b563acc6d0",
- "sha256:0d48200bc50cbf498716712129eef819b1729339e34c3ae71656964dac907c28",
- "sha256:23d12eacffa9d0f290c0fe0c4e81ba6d5f3a5b7ac3c30a5eaf0126bf4deda5c8",
- "sha256:37c9ba82bd82eb6a23c2e5acc03055c0e45697253b2393c9a50cef76a3985304",
- "sha256:51503524dd6f152ab4ad1fbd168fc6c30b5795e8c70be4410a64940b3abb55c0",
- "sha256:8041e2de00e745c0e05a502d6e6db310db7faa7c979b3a5877123548a4c0b214",
- "sha256:81fcd96a275209ef117e9ec91f75c731fa18dcfd9ffaa1c0adbdaa3616a86043",
- "sha256:853da4f9563d982e4121fed8c92eea1a4594a2299037b3034c3c898cb8e933d6",
- "sha256:8b4572c334593d449113f9dc8d19b93b7b271bdbe90ba7509eb178923327b625",
- "sha256:9416443e219356e3c31f1f918a91badf2e37acf297e2fa13d24d1cc2380f8fbc",
- "sha256:9854f612e1b59ec66804931df5add3b2d5ef0067748ea29dc60f0efdcda9a638",
- "sha256:99a26afdb82ea83a265137a398f570402aa1f2b5dfb4ac3300c026931817b163",
- "sha256:a19bf883b3384957e4a4a13e6bd1ae3d85ae87f4beb5957e35b0be287f12f4e4",
- "sha256:a9f145660588187ff835c55a7d2ddf6abfc570c2651c276d3d4be8a2766db490",
- "sha256:ac57fcdcfb0b73bb3203b58a14501abb7e5ff9ea5e2edfa06bb03035f0cff248",
- "sha256:bcb530089ff24f6458a81ac3fa699e8c00194208a724b644ecc68422e1111939",
- "sha256:beeabe25c3b704f7d56b573f7d2ff88fc99f0138e43480cecdfcaa3b87fe4f87",
- "sha256:d634a7ea1fc3380ff96f9e44d8d22f38418c1c381d5fac680b272d7d90883720",
- "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656"
- ],
- "markers": "platform_python_implementation == 'CPython'",
- "version": "==0.4.15"
- },
- "grpcio": {
- "hashes": [
- "sha256:03b78b4e7dcdfe3e257bb528cc93923f9cbbab6d5babf15a60d21e9a4a70b1a2",
- "sha256:1ce0ccfbdfe84387dbcbf44adb4ae16ec7ae70e166ffab478993eb1ea1cba3ce",
- "sha256:22e167a9406d73dd19ffe8ed6a485f17e6eac82505be8c108897f15e68badcbb",
- "sha256:31d0aeca8d8ee2301c62c5c340e0889d653b1280d68f9fa203982cb6337b050e",
- "sha256:44c7f99ca17ebbcc96fc54ed00b454d8313f1eac28c563098d8b901025aff941",
- "sha256:5471444f53f9db6a1f1f11f5dbc173228881df8446380b6b98f90afb8fd8348e",
- "sha256:561bca3b1bde6d6564306eb05848fd155136e9c3a25d2961129b1e2edba22fce",
- "sha256:5bf58e1d2c2f55365c06e8cb5abe067b88ca2e5550fb62009c41df4b54505acf",
- "sha256:6b7163d1e85d76b0815df63fcc310daec02b44532bb433f743142d4febcb181f",
- "sha256:766d79cddad95f5f6020037fe60ea8b98578afdf0c59d5a60c106c1bdd886303",
- "sha256:770b7372d5ca68308ff66d7baee53369fa5ce985f84bcb6aa1948c1f2f7b02f2",
- "sha256:7ab178da777fc0f55b6aef5a755f99726e8e4b75e3903954df07b27059b54fcf",
- "sha256:8078305e77c2f6649d36b24d8778096413e474d9d7892c6f92cfb589c9d71b2e",
- "sha256:85600b63a386d860eeaa955e9335e18dd0d7e5477e9214825abf2c2884488369",
- "sha256:857d9b939ae128be1c0c792eb885c7ff6a386b9dea899ac4b06f4d90a31f9d87",
- "sha256:87a41630c90c179fa5c593400f30a467c498972c702f348d41e19dafeb1d319e",
- "sha256:8805d486c6128cc0fcc8ecf16c4095d99a8693a541ef851429ab334e028a4a97",
- "sha256:8d71b7a89c306a41ccc7741fc9409b14f5b86727455c2a1c0c7cfcb0f784e1f2",
- "sha256:9e1b80bd65f8f160880cb4dad7f55697f6d37b2d7f251fc0c2128e811928f369",
- "sha256:9e290c84a145ae2411ee0ec9913c41cd7500e2e7485fe93632434d84ef4fda67",
- "sha256:9ec9f88b5bc94bd99372f27cdd53af1c92ba06717380b127733b953cfb181174",
- "sha256:a0a02a8b4ba6deadf706d5f849539b3685b72b186a3c9ef5d43e8972ed60fb6f",
- "sha256:a4059c59519f5940e01a071f74ae2a60ea8f6185b03d22a09d40c7959a36b16b",
- "sha256:a6e028c2a6da2ebfa2365a5b32531d311fbfec0e3600fc27e901b64f0ff7e54e",
- "sha256:adcdebf9f8463df4120c427cf6c9aed39258bccd03ed37b6939e7a145d64d6e0",
- "sha256:bdec982610259d07156a58f80b8c3e69be7751a9208bc577b059c5193d087fad",
- "sha256:cefc4d4251ffb73feb303d4b7e9d6c367cb60f2db16d259ea28b114045f965aa",
- "sha256:d4145c8aa6afbac10ad27e408f7ce15992fe89ba5d0b4abca31c0c2729864c03",
- "sha256:da76dc5ad719ee99de5ea28a5629ff92172cbb4a70d8a6ae3a5b7a53c7382ce1",
- "sha256:dde2452c08ef8b6426ccab6b5b6de9f06d836d9937d6870e68153cbf8cb49348",
- "sha256:e3d88091d2539a4868750914a6fe7b9ec50e42b913851fc1b77423b5bd918530",
- "sha256:f9c67cfe6278499d7f83559dc6322a8bbb108e307817a3d7acbfea807b3603cc"
- ],
- "version": "==1.22.0"
- },
- "gunicorn": {
- "hashes": [
- "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
- "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
- ],
- "index": "pypi",
- "version": "==19.9.0"
- },
- "h5py": {
- "hashes": [
- "sha256:05750b91640273c69989c657eaac34b091abdd75efc8c4824c82aaf898a2da0a",
- "sha256:082a27208aa3a2286e7272e998e7e225b2a7d4b7821bd840aebf96d50977abbb",
- "sha256:08e2e8297195f9e813e894b6c63f79372582787795bba2014a2db6a2de95f713",
- "sha256:0dd2adeb2e9de5081eb8dcec88874e7fd35dae9a21557be3a55a3c7d491842a4",
- "sha256:0f94de7a10562b991967a66bbe6dda9808e18088676834c0a4dcec3fdd3bcc6f",
- "sha256:106e42e2e01e486a3d32eeb9ba0e3a7f65c12fa8998d63625fa41fb8bdc44cdb",
- "sha256:1606c66015f04719c41a9863c156fc0e6b992150de21c067444bcb82e7d75579",
- "sha256:1854c4beff9961e477e133143c5e5e355dac0b3ebf19c52cf7cc1b1ef757703c",
- "sha256:1e9fb6f1746500ea91a00193ce2361803c70c6b13f10aae9a33ad7b5bd28e800",
- "sha256:2cca17e80ddb151894333377675db90cd0279fa454776e0a4f74308376afd050",
- "sha256:30e365e8408759db3778c361f1e4e0fe8e98a875185ae46c795a85e9bafb9cdf",
- "sha256:3206bac900e16eda81687d787086f4ffd4f3854980d798e191a9868a6510c3ae",
- "sha256:3c23d72058647cee19b30452acc7895621e2de0a0bd5b8a1e34204b9ea9ed43c",
- "sha256:407b5f911a83daa285bbf1ef78a9909ee5957f257d3524b8606be37e8643c5f0",
- "sha256:4162953714a9212d373ac953c10e3329f1e830d3c7473f2a2e4f25dd6241eef0",
- "sha256:5fc7aba72a51b2c80605eba1c50dbf84224dcd206279d30a75c154e5652e1fe4",
- "sha256:713ac19307e11de4d9833af0c4bd6778bde0a3d967cafd2f0f347223711c1e31",
- "sha256:71b946d80ef3c3f12db157d7778b1fe74a517ca85e94809358b15580983c2ce2",
- "sha256:8cc4aed71e20d87e0a6f02094d718a95252f11f8ed143bc112d22167f08d4040",
- "sha256:9d41ca62daf36d6b6515ab8765e4c8c4388ee18e2a665701fef2b41563821002",
- "sha256:a744e13b000f234cd5a5b2a1f95816b819027c57f385da54ad2b7da1adace2f3",
- "sha256:b087ee01396c4b34e9dc41e3a6a0442158206d383c19c7d0396d52067b17c1cb",
- "sha256:b0f03af381d33306ce67d18275b61acb4ca111ced645381387a02c8a5ee1b796",
- "sha256:b9e4b8dfd587365bdd719ae178fa1b6c1231f81280b1375eef8626dfd8761bf3",
- "sha256:c5dd4ec75985b99166c045909e10f0534704d102848b1d9f0992720e908928e7",
- "sha256:d2b82f23cd862a9d05108fe99967e9edfa95c136f532a71cb3d28dc252771f50",
- "sha256:e58a25764472af07b7e1c4b10b0179c8ea726446c7141076286e41891bf3a563",
- "sha256:f3b49107fbfc77333fc2b1ef4d5de2abcd57e7ea3a1482455229494cf2da56ce"
- ],
- "index": "pypi",
- "version": "==2.9.0"
- },
- "hexdump": {
- "hashes": [
- "sha256:d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db"
- ],
- "index": "pypi",
- "version": "==3.3"
- },
- "html5lib": {
- "hashes": [
- "sha256:2612a191a8d5842bfa057e41ba50bbb9dcb722419d2408c78cff4758d0754868"
- ],
- "index": "pypi",
- "version": "==0.9999999"
- },
- "humanfriendly": {
- "hashes": [
- "sha256:23057b10ad6f782e7bc3a20e3cb6768ab919f619bbdc0dd75691121bbde5591d",
- "sha256:33ee8ceb63f1db61cce8b5c800c531e1a61023ac5488ccde2ba574a85be00a85"
- ],
- "version": "==4.18"
- },
- "idna": {
- "hashes": [
- "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
- "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
- ],
- "index": "pypi",
- "version": "==2.8"
- },
- "imageio": {
- "hashes": [
- "sha256:1a2bbbb7cd38161340fa3b14d806dfbf914abf3ee6fd4592af2afb87d049f209",
- "sha256:42e65aadfc3d57a1043615c92bdf6319b67589e49a0aae2b985b82144aceacad"
- ],
- "index": "pypi",
- "version": "==2.5.0"
- },
- "intervaltree": {
- "hashes": [
- "sha256:cb4f61c81dcb4fea6c09903f3599015a83c9bdad1f0bbd232495e6681e19e273"
- ],
- "index": "pypi",
- "version": "==3.0.2"
- },
- "ipaddress": {
- "hashes": [
- "sha256:64b28eec5e78e7510698f6d4da08800a5c575caa4a286c93d651c5d3ff7b6794",
- "sha256:b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c"
- ],
- "markers": "python_version < '3'",
- "version": "==1.0.22"
- },
- "ipykernel": {
- "hashes": [
- "sha256:56d82987472f4b14ab0214e4aef55def006671885d285cd8821f2600861215a6",
- "sha256:59b0855082d021f533cff477e1bb619e663b6aab11309a05bf88eaec9f53faed",
- "sha256:699103c8e64886e3ec7053f2a6aa83bb90426063526f63a818732ff385202bad"
- ],
- "index": "pypi",
- "version": "==4.10.0"
- },
- "ipython": {
- "hashes": [
- "sha256:0371b7e4bd74954a35086eac949beeac5b1c9f5ce231e2e77df2286a293765e3",
- "sha256:37101b8cbe072fe17bff100bc03d096404e4a9a0357097aeb5b61677c042cab1",
- "sha256:4bac649857611baaaf76bc82c173aa542f7486446c335fe1a6c05d0d491c8906"
- ],
- "index": "pypi",
- "version": "==5.8.0"
- },
- "ipython-genutils": {
- "hashes": [
- "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
- "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
- ],
- "version": "==0.2.0"
- },
- "ipywidgets": {
- "hashes": [
- "sha256:cb263c6974aca902d00a435711823bb4aaf6614a5f997f517e15fa84151e8fa2",
- "sha256:eab6060f20f7f10d91f6efc8d33f9fd22133406980fcaee2738d836a910402f4"
- ],
- "version": "==7.5.0"
- },
- "isodate": {
- "hashes": [
- "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8",
- "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81"
- ],
- "version": "==0.6.0"
- },
- "isort": {
- "hashes": [
- "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1",
- "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"
- ],
- "version": "==4.3.21"
- },
- "itsdangerous": {
- "hashes": [
- "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
- "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
- ],
- "version": "==1.1.0"
- },
- "jinja2": {
- "hashes": [
- "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
- "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
- ],
- "index": "pypi",
- "version": "==2.10.1"
- },
- "jmespath": {
- "hashes": [
- "sha256:3720a4b1bd659dd2eecad0666459b9788813e032b83e7ba58578e48254e0a0e6",
- "sha256:bde2aef6f44302dfb30320115b17d030798de8c4110e28d5cf6cf91a7a31074c"
- ],
- "version": "==0.9.4"
- },
- "joblib": {
- "hashes": [
- "sha256:21e0c34a69ad7fde4f2b1f3402290e9ec46f545f15f1541c582edfe05d87b63a",
- "sha256:315d6b19643ec4afd4c41c671f9f2d65ea9d787da093487a81ead7b0bac94524"
- ],
- "index": "pypi",
- "version": "==0.13.2"
- },
- "json-logging-py": {
- "hashes": [
- "sha256:118b1fe1f4eacaea6370e5b9710d0f6d0c0a4599aef9d5b9875a6a579974fc9a"
- ],
- "index": "pypi",
- "version": "==0.2"
- },
- "jsonschema": {
- "hashes": [
- "sha256:0c0a81564f181de3212efa2d17de1910f8732fa1b71c42266d983cd74304e20d",
- "sha256:a5f6559964a3851f59040d3b961de5e68e70971afb88ba519d27e6a039efff1a"
- ],
- "version": "==3.0.1"
- },
- "jupyter": {
- "hashes": [
- "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7",
- "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78",
- "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"
- ],
- "index": "pypi",
- "version": "==1.0.0"
- },
- "jupyter-client": {
- "hashes": [
- "sha256:73a809a2964afa07adcc1521537fddb58c2ffbb7e84d53dc5901cf80480465b3",
- "sha256:98e8af5edff5d24e4d31e73bc21043130ae9d955a91aa93fc0bc3b1d0f7b5880"
- ],
- "version": "==5.3.1"
- },
- "jupyter-console": {
- "hashes": [
- "sha256:3f928b817fc82cda95e431eb4c2b5eb21be5c483c2b43f424761a966bb808094",
- "sha256:545dedd3aaaa355148093c5609f0229aeb121b4852995c2accfa64fe3e0e55cd"
- ],
- "version": "==5.2.0"
- },
- "jupyter-core": {
- "hashes": [
- "sha256:2c6e7c1e9f2ac45b5c2ceea5730bc9008d92fe59d0725eac57b04c0edfba24f7",
- "sha256:f4fa22d6cf25f34807c995f22d2923693575c70f02557bcbfbe59bd5ec8d8b84"
- ],
- "version": "==4.5.0"
- },
- "keras": {
- "hashes": [
- "sha256:794d0c92c6c4122f1f0fcf3a7bc2f49054c6a54ddbef8d8ffafca62795d760b6",
- "sha256:90b610a3dbbf6d257b20a079eba3fdf2eed2158f64066a7c6f7227023fd60bc9"
- ],
- "index": "pypi",
- "version": "==2.2.4"
- },
- "keras-applications": {
- "hashes": [
- "sha256:5579f9a12bcde9748f4a12233925a59b93b73ae6947409ff34aa2ba258189fe5",
- "sha256:df4323692b8c1174af821bf906f1e442e63fa7589bf0f1230a0b6bdc5a810c95"
- ],
- "version": "==1.0.8"
- },
- "keras-maskrcnn": {
- "hashes": [
- "sha256:9e2258390d749986fe6dc05aabdd7198ae689e60696b6a5568929379457a2e98"
- ],
- "index": "pypi",
- "version": "==0.2.2"
- },
- "keras-preprocessing": {
- "hashes": [
- "sha256:44aee5f2c4d80c3b29f208359fcb336df80f293a0bb6b1c738da43ca206656fb",
- "sha256:5a8debe01d840de93d49e05ccf1c9b81ae30e210d34dacbcc47aeb3049b528e5"
- ],
- "version": "==1.1.0"
- },
- "keras-resnet": {
- "hashes": [
- "sha256:8ce27ba782d1b45b127af51208aefdceb2de8d2c54646bac5fc786506ce558c0"
- ],
- "version": "==0.2.0"
- },
- "keras-retinanet": {
- "hashes": [
- "sha256:6d4da9d83a9a82cb025298a88256546bc625e9c78cd4f1bbec576d11295910b6"
- ],
- "index": "pypi",
- "version": "==0.5.1"
- },
- "kiwisolver": {
- "hashes": [
- "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f",
- "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7",
- "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe",
- "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c",
- "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5",
- "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75",
- "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187",
- "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641",
- "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883",
- "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5",
- "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2",
- "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3",
- "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389",
- "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897",
- "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a",
- "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c",
- "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326",
- "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0",
- "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e",
- "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544",
- "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995",
- "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f",
- "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee",
- "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004",
- "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2",
- "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9",
- "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a",
- "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f"
- ],
- "version": "==1.1.0"
- },
- "kombu": {
- "hashes": [
- "sha256:55b71d3785def3470a16217fe0780f9e6f95e61bf9ad39ef8dce0177224eab77",
- "sha256:eb365ea795cd7e629ba2f1f398e0c3ba354b91ef4de225ffdf6ab45fdfc7d581"
- ],
- "version": "==4.6.3"
- },
- "lazy-object-proxy": {
- "hashes": [
- "sha256:159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661",
- "sha256:23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f",
- "sha256:3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13",
- "sha256:3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821",
- "sha256:4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71",
- "sha256:4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e",
- "sha256:64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea",
- "sha256:6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229",
- "sha256:7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4",
- "sha256:7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e",
- "sha256:8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20",
- "sha256:a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16",
- "sha256:acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b",
- "sha256:be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7",
- "sha256:bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c",
- "sha256:c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a",
- "sha256:dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e",
- "sha256:e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1"
- ],
- "version": "==1.4.1"
- },
- "libarchive": {
- "hashes": [
- "sha256:829dc298a08877f62335d528973bc034f7c1e8a03c16bfc1fa561e164e76a365"
- ],
- "index": "pypi",
- "version": "==0.4.7"
- },
- "limits": {
- "hashes": [
- "sha256:9df578f4161017d79f5188609f1d65f6b639f8aad2914c3960c9252e56a0ff95",
- "sha256:a017b8d9e9da6761f4574642149c337f8f540d4edfe573fb91ad2c4001a2bc76"
- ],
- "version": "==1.3"
- },
- "lru-dict": {
- "hashes": [
- "sha256:365457660e3d05b76f1aba3e0f7fedbfcd6528e97c5115a351ddd0db488354cc"
- ],
- "index": "pypi",
- "version": "==1.1.6"
- },
- "lxml": {
- "hashes": [
- "sha256:06c7616601430aa140a69f97e3116308fffe0848f543b639a5ec2e8920ae72fd",
- "sha256:177202792f9842374a8077735c69c41a4282183f7851443d2beb8ee310720819",
- "sha256:19317ad721ceb9e39847d11131903931e2794e447d4751ebb0d9236f1b349ff2",
- "sha256:36d206e62f3e5dbaafd4ec692b67157e271f5da7fd925fda8515da675eace50d",
- "sha256:387115b066c797c85f9861a9613abf50046a15aac16759bc92d04f94acfad082",
- "sha256:3ce1c49d4b4a7bc75fb12acb3a6247bb7a91fe420542e6d671ba9187d12a12c2",
- "sha256:4d2a5a7d6b0dbb8c37dab66a8ce09a8761409c044017721c21718659fa3365a1",
- "sha256:58d0a1b33364d1253a88d18df6c0b2676a1746d27c969dc9e32d143a3701dda5",
- "sha256:62a651c618b846b88fdcae0533ec23f185bb322d6c1845733f3123e8980c1d1b",
- "sha256:69ff21064e7debc9b1b1e2eee8c2d686d042d4257186d70b338206a80c5bc5ea",
- "sha256:7060453eba9ba59d821625c6af6a266bd68277dce6577f754d1eb9116c094266",
- "sha256:7d26b36a9c4bce53b9cfe42e67849ae3c5c23558bc08363e53ffd6d94f4ff4d2",
- "sha256:83b427ad2bfa0b9705e02a83d8d607d2c2f01889eb138168e462a3a052c42368",
- "sha256:923d03c84534078386cf50193057aae98fa94cace8ea7580b74754493fda73ad",
- "sha256:b773715609649a1a180025213f67ffdeb5a4878c784293ada300ee95a1f3257b",
- "sha256:baff149c174e9108d4a2fee192c496711be85534eab63adb122f93e70aa35431",
- "sha256:bca9d118b1014b4c2d19319b10a3ebed508ff649396ce1855e1c96528d9b2fa9",
- "sha256:ce580c28845581535dc6000fc7c35fdadf8bea7ccb57d6321b044508e9ba0685",
- "sha256:d34923a569e70224d88e6682490e24c842907ba2c948c5fd26185413cbe0cd96",
- "sha256:dd9f0e531a049d8b35ec5e6c68a37f1ba6ec3a591415e6804cbdf652793d15d7",
- "sha256:ecb805cbfe9102f3fd3d2ef16dfe5ae9e2d7a7dfbba92f4ff1e16ac9784dbfb0",
- "sha256:ede9aad2197a0202caff35d417b671f5f91a3631477441076082a17c94edd846",
- "sha256:ef2d1fc370400e0aa755aab0b20cf4f1d0e934e7fd5244f3dd4869078e4942b9",
- "sha256:f2fec194a49bfaef42a548ee657362af5c7a640da757f6f452a35da7dd9f923c"
- ],
- "index": "pypi",
- "version": "==4.3.4"
- },
- "markdown": {
- "hashes": [
- "sha256:2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a",
- "sha256:56a46ac655704b91e5b7e6326ce43d5ef72411376588afa1dd90e881b83c7e8c"
- ],
- "version": "==3.1.1"
- },
- "markupsafe": {
- "hashes": [
- "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
- "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
- "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
- "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
- "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
- "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
- "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
- "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
- "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
- "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
- "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
- "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
- "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
- "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
- "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
- "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
- "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
- "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
- "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
- "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
- "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
- "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
- "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
- "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
- "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
- "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
- "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
- "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
- ],
- "version": "==1.1.1"
- },
- "matplotlib": {
- "hashes": [
- "sha256:0ba8e3ec1b0feddc6b068fe70dc38dcf2917e301ad8d2b3f848c14ad463a4157",
- "sha256:10a48e33e64dbd95f0776ba162f379c5cc55301c2d155506e79ce0c26b52f2ce",
- "sha256:1376535fe731adbba55ab9e48896de226b7e89dbb55390c5fbd8f7161b7ae3be",
- "sha256:16f0f8ba22df1e2c9f06c87088de45742322fde282a93b5c744c0f969cf7932e",
- "sha256:1c6c999f2212858021329537f8e0f98f3f29086ec3683511dd1ecec84409f51d",
- "sha256:2316dc177fc7b3d8848b49365498de0c385b4c9bba511edddd24c34fbe3d37a4",
- "sha256:3398bfb533482bf21974cecf28224dd23784ad4e4848be582903f7a2436ec12e",
- "sha256:3477cb1e1061b34210acc43d20050be8444478ff50b8adfac5fe2b45fc97df01",
- "sha256:3cc06333b8264428d02231804e2e726b902e9161dc16f573183dee6cb7ef621f",
- "sha256:4259ea7cb2c238355ee13275eddd261d869cefbdeb18a65f35459589d6d17def",
- "sha256:4addcf93234b6122f530f90f485fd3d00d158911fbc1ed24db3fa66cd49fe565",
- "sha256:50c0e24bcbce9c54346f4a2f4e97b0ed111f0413ac3fe9954061ae1c8aa7021f",
- "sha256:62ed7597d9e54db6e133420d779c642503c25eba390e1178d85dfb2ba0d05948",
- "sha256:69f6d51e41a17f6a5f70c56bb10b8ded9f299609204495a7fa2782a3a755ffc5",
- "sha256:6d232e49b74e3d2db22c63c25a9a0166d965e87e2b057f795487f1f244b61d9d",
- "sha256:7355bf757ecacd5f0ac9dd9523c8e1a1103faadf8d33c22664178e17533f8ce5",
- "sha256:886b1045c5105631f10c1cbc999f910e44d33af3e9c7efd68c2123efc06ab636",
- "sha256:9e1f353edd7fc7e5e9101abd5bc0201946f77a1b59e0da49095086c03db856ed",
- "sha256:b3a343dfcbe296dbe0f26c731beee72a792ff948407e6979524298ae7bc3234e",
- "sha256:d93675af09ca497a25f4f8d62f3313cf0f21e45427a87487049fe84898b99909",
- "sha256:e2409ef9d37804dfb566f39c962e6ed70f281ff516b8131b3e6b4e6442711ff1",
- "sha256:f8b653b0f89938ba72e92ab080c2f3aa24c1b72e2f61add22880cd1b9a6e3cdd"
- ],
- "index": "pypi",
- "version": "==2.2.3"
- },
- "mccabe": {
- "hashes": [
- "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
- "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
- ],
- "version": "==0.6.1"
- },
- "meld3": {
- "hashes": [
- "sha256:b28a9bfac342aadb4557aa144bea9f8e6208bfb0596190570d10a892d35ff7dc",
- "sha256:f7b754a0fde7a4429b2ebe49409db240b5699385a572501bb0d5627d299f9558"
- ],
- "version": "==1.0.2"
- },
- "mistune": {
- "hashes": [
- "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e",
- "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"
- ],
- "version": "==0.8.4"
- },
- "mock": {
- "hashes": [
- "sha256:83657d894c90d5681d62155c82bda9c1187827525880eda8ff5df4ec813437c3",
- "sha256:d157e52d4e5b938c550f39eb2fd15610db062441a9c2747d3dbfa9298211d0f8"
- ],
- "version": "==3.0.5"
- },
- "monotonic": {
- "hashes": [
- "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0",
- "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"
- ],
- "markers": "python_version == '2.6' or python_version == '2.7' or python_version == '3.0' or python_version == '3.1' or python_version == '3.2'",
- "version": "==1.5"
- },
- "mpld3": {
- "hashes": [
- "sha256:4d455884a211bf99b37ecc760759435c7bb6a5955de47d8daf4967e301878ab7"
- ],
- "index": "pypi",
- "version": "==0.3"
- },
- "msgpack-python": {
- "hashes": [
- "sha256:378cc8a6d3545b532dfd149da715abae4fda2a3adb6d74e525d0d5e51f46909b"
- ],
- "index": "pypi",
- "version": "==0.5.6"
- },
- "msrest": {
- "hashes": [
- "sha256:2c0909570913785a4408a17286e151f3b28d39277113e5c63378572f7395c660",
- "sha256:c9e9cbb0c47745f9f5c82cce60849d7c3ec9e33fc6fad9e2987b7657ad1ba479"
- ],
- "version": "==0.6.8"
- },
- "msrestazure": {
- "hashes": [
- "sha256:070220fa9c86b55026360435b655d1d67ff4306fd1412687c400dc549e9647b7",
- "sha256:e9d525b11d88f1073744e128ae19a4e023e4085893cfcfd02483fdd4cee25091"
- ],
- "version": "==0.6.1"
- },
- "nbconvert": {
- "hashes": [
- "sha256:138381baa41d83584459b5cfecfc38c800ccf1f37d9ddd0bd440783346a4c39c",
- "sha256:4a978548d8383f6b2cfca4a3b0543afb77bc7cb5a96e8b424337ab58c12da9bc"
- ],
- "version": "==5.5.0"
- },
- "nbformat": {
- "hashes": [
- "sha256:b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b",
- "sha256:f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402"
- ],
- "version": "==4.4.0"
- },
- "nbstripout": {
- "hashes": [
- "sha256:1960caf7d1c1e281126c6c5cb98053db89eca8aaa616b58eed381e3e1508c0f4",
- "sha256:d35c553f724d3fb7ec9e9602c6e55a75101064a6bbec4f8c28e8c84d6e3dd060"
- ],
- "index": "pypi",
- "version": "==0.3.6"
- },
- "networkx": {
- "hashes": [
- "sha256:45e56f7ab6fe81652fb4bc9f44faddb0e9025f469f602df14e3b2551c2ea5c8b"
- ],
- "version": "==2.2"
- },
- "nose": {
- "hashes": [
- "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac",
- "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a",
- "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98"
- ],
- "index": "pypi",
- "version": "==1.3.7"
- },
- "nose-parameterized": {
- "hashes": [
- "sha256:8f519b9739ac67e3d95f69c15cc80416eea4d63559530d01a37b9565eb629277",
- "sha256:d35e677aba2f15135b6b7ea7feb88f792b899492ba5365ec0e269015df5214ce"
- ],
- "index": "pypi",
- "version": "==0.6.0"
- },
- "notebook": {
- "hashes": [
- "sha256:573e0ae650c5d76b18b6e564ba6d21bf321d00847de1d215b418acb64f056eb8",
- "sha256:f64fa6624d2323fbef6210a621817d6505a45d0d4a9367f1843b20a38a4666ee"
- ],
- "version": "==5.7.8"
- },
- "numpy": {
- "hashes": [
- "sha256:0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633",
- "sha256:141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7",
- "sha256:14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b",
- "sha256:27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5",
- "sha256:2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e",
- "sha256:3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca",
- "sha256:52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336",
- "sha256:6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5",
- "sha256:7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7",
- "sha256:7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7",
- "sha256:94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69",
- "sha256:a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3",
- "sha256:ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166",
- "sha256:b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8",
- "sha256:b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722",
- "sha256:cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525",
- "sha256:d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10",
- "sha256:dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29",
- "sha256:dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8",
- "sha256:e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52",
- "sha256:ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797",
- "sha256:f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a",
- "sha256:f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7"
- ],
- "index": "pypi",
- "version": "==1.16.4"
- },
- "oauthlib": {
- "hashes": [
- "sha256:40a63637707e9163eda62d0f5345120c65e001a790480b8256448543c1f78f66",
- "sha256:b4d99ae8ccfb7d33ba9591b59355c64eef5241534aa3da2e4c0435346b84bc8e"
- ],
- "version": "==3.0.2"
- },
- "opencv-python": {
- "hashes": [
- "sha256:1703a296a96d3d46615e5053f224867977accb4240bcaa0fcabcb0768bf5ac13",
- "sha256:1777ce7535ee7a1995cae168a107a1320e9df13648b930e72a1a2c2eccd64cda",
- "sha256:1e5520482fb18fbd64d079e7f17ac0018f195fd75f6360a53bb82d7903106b50",
- "sha256:25522dcf2529614750a71112a6659759080b4bdc2323f19d47f4d895960fd796",
- "sha256:2af5f2842ad44c65ae2647377e0ff198719e1a1cfc9c6a19bc0c525c035d4bd8",
- "sha256:31ec48d7eca13fc25c287dea7cecab453976e372cad8f50d55c054a247efda21",
- "sha256:47cf48ff5dbd554e9f58cc9e98cf0b5de3f6a971172612bffa06bc5fb79ce872",
- "sha256:494f98366bb5d6c2ac7e50e6617139f353704fd97a6d12ec9d392e72817d5cb0",
- "sha256:4a9845870739e640e3350a8d98d511c92c087fe3d66090e83be7bf94e0ac64f7",
- "sha256:4ac29cc0847d948a6636899014e84e165c30cc8779d6218394d44363462a01ce",
- "sha256:5857ace03b7854221abf8072462d306c2c2ce4e366190b21d90ee8ee8aaf5bb4",
- "sha256:5b4a23d99d5a2874767034466f5a8fd37b9f93ac14955a01b1a208983c76b9ad",
- "sha256:734d87a5021c037064beb62133e135e66c7128e401a63b8b842b809ae2093749",
- "sha256:78005c1c5d15ef4e32e0f485557bd15b5b6d87f49c19db7fe3e9246a61ebe7e4",
- "sha256:81ae2283225c5c52fc3d72debd4241c30ccff2bb922578bf7867f9851cce3acb",
- "sha256:88dbf900f297fdae0f62b899d6a784d8868ec2135854c5f8a9abbad00a6f0c5b",
- "sha256:8c98ea7b8d327a31cd6028782a06147d0e0329ae8e829e881fb5d02f7ed8aec9",
- "sha256:937d4686fef6967921145290f5b50c01c00c5b5d3542a6519e8a85cd88448723",
- "sha256:a057958c0e362b3c4f03b9af1cbdb6d5af035fd22ecd7fd794eba8fdeb049eb8",
- "sha256:c41eab31fa2c641226c6187caa391a688d064c99f078d604574f1912296b771f",
- "sha256:cf4f7e62d1f80d1fa85a1693a3500def5cde54b2b75212b3609e552e4c25acfb",
- "sha256:d90d60143e18334330c149f293071c9f2f3c79c896f33dc4ec65099e58baaaa7",
- "sha256:db3106b7ca86999a7bd1f2fcc93e49314e5e6e451356774e421a69428df5020b",
- "sha256:dbaf264db56f4771dfac6624f438bc4dc670aa94f61a6138848fcab7e9e77380",
- "sha256:e65206c4cf651dc9cf0829962fae8bec986767c9f123d6a1ad17f9356bf7257e",
- "sha256:eac94ddc78c58e891cff7180274317dad2938a4ddfc6ced1c04846c7f50e77e9",
- "sha256:f2e828711f044a965509c862b3a59b3181e9c56c145a950cb53d43fec54e66d2"
- ],
- "version": "==4.1.0.25"
- },
- "osmium": {
- "hashes": [
- "sha256:008f89720d833a28ff875893bc90ca6314ed27f23dedbff6b8e7e0224c058076",
- "sha256:0811d5453e9828f14dc14f7380570a71b2ac2e9fbfc849fb1485a198e1bc0825",
- "sha256:08a427a7c3fe3dceb84e19bcef6edada0dde9a675f75189d89dd7f4b0cab3539",
- "sha256:0a1e4200e678e18db9b291a6498385b4c8f66dc3898be8fc6d0c232fe7600360",
- "sha256:2183610dfbd7831b819e5990ec47a9c25dec76084dbae1d55bdc092bfba9177c",
- "sha256:227ab38197d45fced6e18a5000e27b7bc7ef2970f7adcb856370661340a03b8e",
- "sha256:2928713aaadaeab38fa8d546d274c9545b20440f2019425b3a6bab9444bd935a",
- "sha256:2a3a42252afcf7fd3558c582e6a38df63df038a027b6d5fe1eaf8dac66969d37",
- "sha256:4617fc74d13e2373b239597c6a875b90f95f40ec0d0977f68ca4beb3383a6f63",
- "sha256:4ea02b36332585b66fb52b49468fac7426a257d0ffeaf0e0aa7ef7205f0fc442",
- "sha256:56f269587578fcdd406af43dc276f3a59c4763821f9e41ce7b777f6f97cdede4",
- "sha256:62688a1a662bc2ef7f0b05908c9e68ba11926fc79f3d1df13cd62cee74a6ca66",
- "sha256:72d1d43834610c3d802316b526c204ecf428d5bbd5dab189b0e469bc67858db1",
- "sha256:8a316b6bba0f33250c232c8a10f550d8578b639857e286159e1e0767d5ac7107",
- "sha256:8b4802472d974b4f05ee960c40ccd0c14881b73cd68a669f23ce9b35fe313157",
- "sha256:8c6b5c489d78d398786547480f87a7d51ad51cf0044479f13ecb0c74fb5616c7",
- "sha256:91baacc2b7ad28574ec8c204ba812c5bdd9b0fae79f8b6787bea450441cba52f",
- "sha256:b0b2f925c45fdd1af4a79d3051359c3bc70e7e83939c6096ab91f80b3e2e8cf8",
- "sha256:b96ab16db2537edf7fd36f5b819f4575b7be0dce6ac857a813822b85c790c8c3",
- "sha256:ce9f170aa8cf03a497e3a42fff785e4ddd6937a0a074e480d03b2ae90b60f80d",
- "sha256:d5ebe6bf0e2afc943125ab01980cd0762b3cae8bb47c50aa14ee1a934caf0c85"
- ],
- "index": "pypi",
- "version": "==2.15.0"
- },
- "pandas": {
- "hashes": [
- "sha256:071e42b89b57baa17031af8c6b6bbd2e9a5c68c595bc6bf9adabd7a9ed125d3b",
- "sha256:17450e25ae69e2e6b303817bdf26b2cd57f69595d8550a77c308be0cd0fd58fa",
- "sha256:17916d818592c9ec891cbef2e90f98cc85e0f1e89ed0924c9b5220dc3209c846",
- "sha256:2538f099ab0e9f9c9d09bbcd94b47fd889bad06dc7ae96b1ed583f1dc1a7a822",
- "sha256:366f30710172cb45a6b4f43b66c220653b1ea50303fbbd94e50571637ffb9167",
- "sha256:42e5ad741a0d09232efbc7fc648226ed93306551772fc8aecc6dce9f0e676794",
- "sha256:4e718e7f395ba5bfe8b6f6aaf2ff1c65a09bb77a36af6394621434e7cc813204",
- "sha256:4f919f409c433577a501e023943e582c57355d50a724c589e78bc1d551a535a2",
- "sha256:4fe0d7e6438212e839fc5010c78b822664f1a824c0d263fd858f44131d9166e2",
- "sha256:5149a6db3e74f23dc3f5a216c2c9ae2e12920aa2d4a5b77e44e5b804a5f93248",
- "sha256:627594338d6dd995cfc0bacd8e654cd9e1252d2a7c959449228df6740d737eb8",
- "sha256:83c702615052f2a0a7fb1dd289726e29ec87a27272d775cb77affe749cca28f8",
- "sha256:8c872f7fdf3018b7891e1e3e86c55b190e6c5cee70cab771e8f246c855001296",
- "sha256:90f116086063934afd51e61a802a943826d2aac572b2f7d55caaac51c13db5b5",
- "sha256:a3352bacac12e1fc646213b998bce586f965c9d431773d9e91db27c7c48a1f7d",
- "sha256:bcdd06007cca02d51350f96debe51331dec429ac8f93930a43eb8fb5639e3eb5",
- "sha256:c1bd07ebc15285535f61ddd8c0c75d0d6293e80e1ee6d9a8d73f3f36954342d0",
- "sha256:c9a4b7c55115eb278c19aa14b34fcf5920c8fe7797a09b7b053ddd6195ea89b3",
- "sha256:cc8fc0c7a8d5951dc738f1c1447f71c43734244453616f32b8aa0ef6013a5dfb",
- "sha256:d7b460bc316064540ce0c41c1438c416a40746fd8a4fb2999668bf18f3c4acf1"
- ],
- "index": "pypi",
- "version": "==0.24.2"
- },
- "pandocfilters": {
- "hashes": [
- "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9"
- ],
- "version": "==1.4.2"
- },
- "pathlib2": {
- "hashes": [
- "sha256:2156525d6576d21c4dcaddfa427fae887ef89a7a9de5cbfe0728b3aafa78427e",
- "sha256:446014523bb9be5c28128c4d2a10ad6bb60769e78bd85658fe44a450674e0ef8"
- ],
- "markers": "python_version in '2.6 2.7 3.2 3.3'",
- "version": "==2.3.4"
- },
- "pbr": {
- "hashes": [
- "sha256:8257baf496c8522437e8a6cfe0f15e00aedc6c0e0e7c9d55eeeeab31e0853843",
- "sha256:8c361cc353d988e4f5b998555c88098b9d5964c2e11acf7b0d21925a66bb5824"
- ],
- "index": "pypi",
- "version": "==5.1.3"
- },
- "percache": {
- "hashes": [
- "sha256:b60043937aece6d154ccd1fd7380fc01ea482335716c2bd41efb85b097bc88df"
- ],
- "index": "pypi",
- "version": "==0.3.0"
- },
- "pexpect": {
- "hashes": [
- "sha256:2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1",
- "sha256:9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb"
- ],
- "markers": "sys_platform != 'win32'",
- "version": "==4.7.0"
- },
- "pickleshare": {
- "hashes": [
- "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca",
- "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
- ],
- "version": "==0.7.5"
- },
- "pillow": {
- "hashes": [
- "sha256:0804f77cb1e9b6dbd37601cee11283bba39a8d44b9ddb053400c58e0c0d7d9de",
- "sha256:0ab7c5b5d04691bcbd570658667dd1e21ca311c62dcfd315ad2255b1cd37f64f",
- "sha256:0b3e6cf3ea1f8cecd625f1420b931c83ce74f00c29a0ff1ce4385f99900ac7c4",
- "sha256:365c06a45712cd723ec16fa4ceb32ce46ad201eb7bbf6d3c16b063c72b61a3ed",
- "sha256:38301fbc0af865baa4752ddae1bb3cbb24b3d8f221bf2850aad96b243306fa03",
- "sha256:3aef1af1a91798536bbab35d70d35750bd2884f0832c88aeb2499aa2d1ed4992",
- "sha256:3fe0ab49537d9330c9bba7f16a5f8b02da615b5c809cdf7124f356a0f182eccd",
- "sha256:45a619d5c1915957449264c81c008934452e3fd3604e36809212300b2a4dab68",
- "sha256:49f90f147883a0c3778fd29d3eb169d56416f25758d0f66775db9184debc8010",
- "sha256:571b5a758baf1cb6a04233fb23d6cf1ca60b31f9f641b1700bfaab1194020555",
- "sha256:5ac381e8b1259925287ccc5a87d9cf6322a2dc88ae28a97fe3e196385288413f",
- "sha256:6153db744a743c0c8c91b8e3b9d40e0b13a5d31dbf8a12748c6d9bfd3ddc01ad",
- "sha256:6fd63afd14a16f5d6b408f623cc2142917a1f92855f0df997e09a49f0341be8a",
- "sha256:70acbcaba2a638923c2d337e0edea210505708d7859b87c2bd81e8f9902ae826",
- "sha256:70b1594d56ed32d56ed21a7fbb2a5c6fd7446cdb7b21e749c9791eac3a64d9e4",
- "sha256:76638865c83b1bb33bcac2a61ce4d13c17dba2204969dedb9ab60ef62bede686",
- "sha256:7b2ec162c87fc496aa568258ac88631a2ce0acfe681a9af40842fc55deaedc99",
- "sha256:7cee2cef07c8d76894ebefc54e4bb707dfc7f258ad155bd61d87f6cd487a70ff",
- "sha256:7d16d4498f8b374fc625c4037742fbdd7f9ac383fd50b06f4df00c81ef60e829",
- "sha256:b50bc1780681b127e28f0075dfb81d6135c3a293e0c1d0211133c75e2179b6c0",
- "sha256:bd0582f831ad5bcad6ca001deba4568573a4675437db17c4031939156ff339fa",
- "sha256:cfd40d8a4b59f7567620410f966bb1f32dc555b2b19f82a91b147fac296f645c",
- "sha256:e3ae410089de680e8f84c68b755b42bc42c0ceb8c03dbea88a5099747091d38e",
- "sha256:e9046e559c299b395b39ac7dbf16005308821c2f24a63cae2ab173bd6aa11616",
- "sha256:ef6be704ae2bc8ad0ebc5cb850ee9139493b0fc4e81abcc240fb392a63ebc808",
- "sha256:f8dc19d92896558f9c4317ee365729ead9d7bbcf2052a9a19a3ef17abbb8ac5b"
- ],
- "version": "==6.1.0"
- },
- "pprofile": {
- "hashes": [
- "sha256:3469102f462f9fc2d889970afcf73d89c0d89a36c49a4c262c3edc302b4a22da"
- ],
- "index": "pypi",
- "version": "==2.0.2"
- },
- "progressbar2": {
- "hashes": [
- "sha256:9ecb2d35edaa30ed86eb92fb0135eb19a6ef9b3657be4350cc3d0d3563e6af65",
- "sha256:c086fc1f718839c0ec95caaeb7bd5a1d0268a8775960b8f9dee06f2a04c84628"
- ],
- "version": "==3.42.0"
- },
- "prometheus-client": {
- "hashes": [
- "sha256:71cd24a2b3eb335cb800c7159f423df1bd4dcd5171b234be15e3f31ec9f622da"
- ],
- "version": "==0.7.1"
- },
- "prompt-toolkit": {
- "hashes": [
- "sha256:1e71341526efa4b11bb44d323e687a5d9cef204aabe2907e3f0dc1534cda0ecc",
- "sha256:955d81315bb7a049f19cd17d1a73f1a40861483260f7dffd825e98303a8bd6b6",
- "sha256:c1cedd626e08b8ee830ee65897de754113ff3f3035880030c08b01674d85c5b4"
- ],
- "version": "==1.0.16"
- },
- "protobuf": {
- "hashes": [
- "sha256:05c36022fef3c7d3562ac22402965c0c2b9fe8421f459bb377323598996e407f",
- "sha256:139b7eadcca0a861d60b523cb37d9475505e0dfb07972436b15407c2b968d87e",
- "sha256:15f683006cb77fb849b1f561e509b03dd2b7dcc749086b8dd1831090d0ba4740",
- "sha256:2ad566b7b7cdd8717c7af1825e19f09e8fef2787b77fcb979588944657679604",
- "sha256:35cfcf97642ef62108e10a9431c77733ec7eaab8e32fe4653de20403429907cb",
- "sha256:387822859ecdd012fdc25ec879f7f487da6e1d5b1ae6115e227e6be208836f71",
- "sha256:4df14cbe1e7134afcfdbb9f058949e31c466de27d9b2f7fb4da9e0b67231b538",
- "sha256:586c4ca37a7146d4822c700059f150ac3445ce0aef6f3ea258640838bb892dc2",
- "sha256:58b11e530e954d29ab3180c48dc558a409f705bf16739fd4e0d3e07924ad7add",
- "sha256:63c8c98ccb8c95f41c18fb829aeeab21c6249adee4ed75354125bdc44488f30e",
- "sha256:72edcbacd0c73eef507d2ff1af99a6c27df18e66a3ff4351e401182e4de62b03",
- "sha256:83dc8a561b3b954fd7002c690bb83278b8d1742a1e28abba9aaef28b0c8b437d",
- "sha256:913171ecc84c2726b86574e40549a0ea619d569657c5a5ff782a3be7d81401a5",
- "sha256:aabb7c741d3416671c3e6fe7c52970a226e6a8274417a97d7d795f953fadef36",
- "sha256:b3452bbda12b1cbe2187d416779de07b2ab4c497d83a050e43c344778763721d",
- "sha256:c5d5b8d4a9212338297fa1fa44589f69b470c0ba1d38168b432d577176b386a8",
- "sha256:d86ee389c2c4fc3cebabb8ce83a8e97b6b3b5dc727b7419c1ccdc7b6e545a233",
- "sha256:f2db8c754de788ab8be5e108e1e967c774c0942342b4f8aaaf14063889a6cfdc"
- ],
- "version": "==3.9.0"
- },
- "psutil": {
- "hashes": [
- "sha256:028a1ec3c6197eadd11e7b46e8cc2f0720dc18ac6d7aabdb8e8c0d6c9704f000",
- "sha256:503e4b20fa9d3342bcf58191bbc20a4a5ef79ca7df8972e6197cc14c5513e73d",
- "sha256:863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3",
- "sha256:954f782608bfef9ae9f78e660e065bd8ffcfaea780f9f2c8a133bb7cb9e826d7",
- "sha256:b6e08f965a305cd84c2d07409bc16fbef4417d67b70c53b299116c5b895e3f45",
- "sha256:bc96d437dfbb8865fc8828cf363450001cb04056bbdcdd6fc152c436c8a74c61",
- "sha256:cf49178021075d47c61c03c0229ac0c60d5e2830f8cab19e2d88e579b18cdb76",
- "sha256:d5350cb66690915d60f8b233180f1e49938756fb2d501c93c44f8fb5b970cc63",
- "sha256:eba238cf1989dfff7d483c029acb0ac4fcbfc15de295d682901f0e2497e6781a"
- ],
- "index": "pypi",
- "version": "==5.6.3"
- },
- "ptyprocess": {
- "hashes": [
- "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0",
- "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"
- ],
- "markers": "os_name != 'nt'",
- "version": "==0.6.0"
- },
- "pycocotools": {
- "git": "https://github.com/cocodataset/cocoapi.git",
- "ref": "aca78bcd6b4345d25405a64fdba1120dfa5da1ab",
- "subdirectory": "PythonAPI"
- },
- "pycparser": {
- "hashes": [
- "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
- ],
- "version": "==2.19"
- },
- "pycurl": {
- "hashes": [
- "sha256:6f08330c5cf79fa8ef68b9912b9901db7ffd34b63e225dce74db56bb21deda8e"
- ],
- "index": "pypi",
- "version": "==7.43.0.3"
- },
- "pygame": {
- "hashes": [
- "sha256:0480fe82cd41a43e3eea497fa2c059c72ac54cb5d003d5aa2ed06a04541c384e",
- "sha256:136a3b5711d9ec369a0407e4e08ffced3ba61aa41059e9280ffffa79c8614f65",
- "sha256:2622b9dd95f445c887a36a57eade42c672598589f69a8052ccdb8eeeffa4dbb1",
- "sha256:301c6428c0880ecd4a9e3951b80e539c33863b6ff356a443db1758de4f297957",
- "sha256:398c42b605ecc514e62f68f1944a2d21e247938309f598de6cb0ad3c207324a8",
- "sha256:4aaff572a273a32e70ec3593d213e59ab11c183a9916616562247930f17a5447",
- "sha256:4e1065577f1b29111113be5deb2ea88553551a5e1cf33e0c08fa32768f285809",
- "sha256:5f052dc2975a399aa1830c1f04c5f72856aa416bf3cd4b31375a058015a5c620",
- "sha256:68ea43e51150316b9fb08e251209d4e2b4e76a340b5b6fc8cdf1a898c78f7e5b",
- "sha256:698433a9fcefca0527244dc44dff9503eb26157494730b1cc80e6e4dbb246e92",
- "sha256:6f714986f7987f10cb94f1be0753318e341a7ea6b12d66f37a4d5d6dd4695023",
- "sha256:73cd9df328c7e72638dbcc1d18e7155225faed880a53db6bad90d1d7c0a71dfd",
- "sha256:7876d1f29f66d3d7cac46479503891ee1ef409b0fbce54b0d74f3a6b33a46dba",
- "sha256:854e87b8b2b76e3ed11d64985fcfdd7af919659503de99fc2b0a717b314c3cf0",
- "sha256:8da13704ad45b7d5de8a8cca135a7f44c7fc6aa9f691abe7b0392468a34a8013",
- "sha256:9ce22fb72298ea33dbb3a1c6c60a4a4e19d9698df6f3f5782eba4dada7b7736d",
- "sha256:a37b6c59e7b8feadc51db5197052b86ceb6443f9fb2a6f7d6527620e707c558c",
- "sha256:a6e8d2f99dbe1dfe72d0c019693c14d93c410f702d0b04ec9a81b36dacd55a23",
- "sha256:a9ac862dd7159861f2c6443b0029089e1c0c4ec762a8074022914ec52fe4dfac",
- "sha256:ae1bc3e78ed28f20878e7ca2c98663a6634e9c00d7746d39413fc18e907dc162",
- "sha256:be7e70f91bd4eb35ae081062f16bf434619b3292358d9b061f8159ddc570c7f0",
- "sha256:c895cf9c1b6d1cbba8cb8cc3f5427febcf8aa41a9333697741abeea1c537a350",
- "sha256:f1f5714d2c23f6a64ef2ac4fcd36a2dd2689da85978d951a99a6ae5dfdf9bdbc",
- "sha256:fa788f775680fc5d268ab00a2da29c9a22830032cfab732730298a2952cd87f3"
- ],
- "index": "pypi",
- "version": "==1.9.6"
- },
- "pygments": {
- "hashes": [
- "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127",
- "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"
- ],
- "index": "pypi",
- "version": "==2.4.2"
- },
- "pyjwt": {
- "hashes": [
- "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e",
- "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"
- ],
- "index": "pypi",
- "version": "==1.7.1"
- },
- "pylint": {
- "hashes": [
- "sha256:367e3d49813d349a905390ac27989eff82ab84958731c5ef0bef867452cfdc42",
- "sha256:97a42df23d436c70132971d1dcb9efad2fe5c0c6add55b90161e773caf729300"
- ],
- "index": "pypi",
- "version": "==1.9.5"
- },
- "pylogbeat": {
- "hashes": [
- "sha256:11f3b1d04424151d406d8b844a8db6299442b4af1f10d5f622a6febf1ad5c41d",
- "sha256:473494a0c798a560a8312ee662b333888181cf4db18cd8f87a8d7d1548beefd9"
- ],
- "version": "==1.0.2"
- },
- "pymongo": {
- "hashes": [
- "sha256:32421df60d06f479d71b6b539642e410ece3006e8910688e68df962c8eb40a21",
- "sha256:324b22a8443e11faca44c96b20e7ec8a9e59a1e664457edeeb4f796080b31cde",
- "sha256:4505ff8b7923dd7a8bed1bf25c9c4d0df5ab0b8b2821f2296533f2149a55f401",
- "sha256:460b224681ea711e48e3638d15be2249024031b7dcb9622ba19c2e85bd5a26cc",
- "sha256:47473b70c5f3cd5ddd2c49ab3b9ceafdafbbed5bc963f147df22a9343d7978f5",
- "sha256:49375839af76834e9c5c3cc78c78386873fd0b2ad9a0860a7dc4ec9fe73af9dd",
- "sha256:4a65f0f71ece86c860d30a1436b646db8ea32aec518845ef2903ca569faec32e",
- "sha256:530621906c5dd6d27305b39c4e017701e5f4299aa68b93cde70eb985f94ca26f",
- "sha256:54f4770b5810e8dc3cbeed675874195f02bb2bc4e95a9d665068edfb3baff4f7",
- "sha256:5ed9382410e938b0ff76041c34018210504729a83bcf4f6a70c7092c28169f6f",
- "sha256:61cad83637ae12c1c825130d7f9325cd6c162e3a64e8747a8144866020be3ff4",
- "sha256:61e8e1c58b4fdf47ab79b7c7db8bb022c1e40b3b5fcbbaeea5fc94dc5c75638d",
- "sha256:6e04e496af7d156b66cce70460011c621ecbadf5dcdce325c7acbb3cd6ea245d",
- "sha256:7ef89ec435e89da902451dde6845066fe2770befaf0301fe2a1ac426b51fced3",
- "sha256:854e8425e5eb775ccfffad04ecd094c99923d60a2c2d49babb5c435e836a91fa",
- "sha256:9569796d48498e4db4e1d56284b626a8ed15f641ce3a8b2085f06bb03f4c2c88",
- "sha256:9d50c99c6388863cbfdc5db9bad62e3a7c2e5fc151554a07c7f3c2530334a34f",
- "sha256:9ea016c2c011df21f77c1f806ce45129a344ba2d414bd50f9e065b13a4a134be",
- "sha256:a8421f0823174888fb12a5fa675322e756499d71e77ff712b4412d4b8f3c6503",
- "sha256:aef7d88384ada699976350a285c7a333f96ebc959e98e7d2c98589f47bbf3b7f",
- "sha256:b4d7ff9957ee770cf03bd7156a68a2f2e838e60712d9608eadc8741c15d01e72",
- "sha256:c1db85c39e6a60588f855dbc7bd68fb0dab796096148ab5aa4abecaff19e1c6e",
- "sha256:cee2fc0b94e66e7230da12fc4b3d34793c49957e16ee04f6468a94e264a1e41d",
- "sha256:cf1dea28379a16b23e47db312883f07b3ba8d9d6abc1c59e51d4c8ae1820ab43",
- "sha256:d1cd175df7c8b5fc976bade78bf4d9fb5aa7ab465c0f59931e380bbe188ef8fc",
- "sha256:d48a94edf3cdd34524936a72ea01b352682b337f33a42db10ba29a96c37147d3",
- "sha256:d9cc103a4e97f78bc77a1d72759ab3722f6cdf0374ad4fb4b0c53bd3238bdf98",
- "sha256:fcb9ae8aa9158106c5d98a4349ec0d90b68f052d620b2d24622ba03b91e4d81d"
- ],
- "index": "pypi",
- "version": "==3.8.0"
- },
- "pymysql": {
- "hashes": [
- "sha256:95f057328357e0e13a30e67857a8c694878b0175797a9a203ee7adbfb9b1ec5f",
- "sha256:9ec760cbb251c158c19d6c88c17ca00a8632bac713890e465b2be01fdc30713f"
- ],
- "index": "pypi",
- "version": "==0.9.2"
- },
- "pynacl": {
- "hashes": [
- "sha256:05c26f93964373fc0abe332676cb6735f0ecad27711035b9472751faa8521255",
- "sha256:0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c",
- "sha256:0d0a8171a68edf51add1e73d2159c4bc19fc0718e79dec51166e940856c2f28e",
- "sha256:1c780712b206317a746ace34c209b8c29dbfd841dfbc02aa27f2084dd3db77ae",
- "sha256:2424c8b9f41aa65bbdbd7a64e73a7450ebb4aa9ddedc6a081e7afcc4c97f7621",
- "sha256:2d23c04e8d709444220557ae48ed01f3f1086439f12dbf11976e849a4926db56",
- "sha256:30f36a9c70450c7878053fa1344aca0145fd47d845270b43a7ee9192a051bf39",
- "sha256:37aa336a317209f1bb099ad177fef0da45be36a2aa664507c5d72015f956c310",
- "sha256:4943decfc5b905748f0756fdd99d4f9498d7064815c4cf3643820c9028b711d1",
- "sha256:57ef38a65056e7800859e5ba9e6091053cd06e1038983016effaffe0efcd594a",
- "sha256:5bd61e9b44c543016ce1f6aef48606280e45f892a928ca7068fba30021e9b786",
- "sha256:6482d3017a0c0327a49dddc8bd1074cc730d45db2ccb09c3bac1f8f32d1eb61b",
- "sha256:7d3ce02c0784b7cbcc771a2da6ea51f87e8716004512493a2b69016326301c3b",
- "sha256:a14e499c0f5955dcc3991f785f3f8e2130ed504fa3a7f44009ff458ad6bdd17f",
- "sha256:a39f54ccbcd2757d1d63b0ec00a00980c0b382c62865b61a505163943624ab20",
- "sha256:aabb0c5232910a20eec8563503c153a8e78bbf5459490c49ab31f6adf3f3a415",
- "sha256:bd4ecb473a96ad0f90c20acba4f0bf0df91a4e03a1f4dd6a4bdc9ca75aa3a715",
- "sha256:e2da3c13307eac601f3de04887624939aca8ee3c9488a0bb0eca4fb9401fc6b1",
- "sha256:f67814c38162f4deb31f68d590771a29d5ae3b1bd64b75cf232308e5c74777e0"
- ],
- "index": "pypi",
- "version": "==1.3.0"
- },
- "pynmea2": {
- "hashes": [
- "sha256:8b83fa7e3e668af5e182ef1c2fd4a535433ecadf60d7b627280172d695a1646b",
- "sha256:fe786594299588d1bfbd346ece2c2c1e5b24e160dcb740813c34bfa70d0a141d"
- ],
- "index": "pypi",
- "version": "==1.15.0"
- },
- "pyparsing": {
- "hashes": [
- "sha256:1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a",
- "sha256:9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03"
- ],
- "version": "==2.4.0"
- },
- "pypolyline": {
- "hashes": [
- "sha256:09cc2192bc12063c7afa2d2718b739cd4bf3f8ec29eacde0cb728c9f5f7f7858",
- "sha256:21acee0e31d867bde04583907ccb7afe4b21d33a63c23adc7cf0d82b6f2feab3",
- "sha256:5e0643454b4471f4f23d38530467ee7093d3b375898d5e1b054876e5a50a6b89",
- "sha256:6b0a1b573fe84c9ed0aa3a4eb9903d44864f37e405cdcc7396b61e6d00a937d6",
- "sha256:6bdbc9210f29d4fd44c3e4d510ffcc1276e46a50d63365831e2e422dc0b3cb43",
- "sha256:8efb93097c92c5894dcaf9e784b888f9426d170ae51d62164341bbb2b832c09a",
- "sha256:9c843a35b2d02b04c1226db851834b55f0de30eef47ba057fd6f8623cdef6f2d",
- "sha256:ad01fedf427536f391776b329c95e5f80f2b1a5d25c54ea7713c8cdb56947106",
- "sha256:e4e4c857790f6a3067dab3ae661edda99d5cee55d107b3b4d0186159431165ef",
- "sha256:f8c84f0d2aa6bd9ed14bdb671fab80f79b4ba93b4347b530ae4d3b56a3fb269a"
- ],
- "index": "pypi",
- "version": "==0.1.17"
- },
- "pyproj": {
- "hashes": [
- "sha256:1303b343a1c4d83d1ac17494571d958335c0a4597d4aa623cd64df1f36fb18bf",
- "sha256:1fd2f756f43ba762f5a1ae769c6cc9ae6f919996bf80c621f331e4a5d89ae74f",
- "sha256:2b3f59b16cde23c0d95b1d9ba3dd1c0be3937d877df3b47a522d3c9a74d31668",
- "sha256:2e5d8b892782db22c3d6ffcb272c8ac0a18995e22d45db762a893ec64cc039d6",
- "sha256:512a59bc20587f88df78a69872ed8cb4ec7905415ba85b4de0af35601770fba1",
- "sha256:5aa89b04855e439e2b96caf1f49fa2ab60e6e7c407034284d31d808abed0618a",
- "sha256:75b4c5eba36060a00867e16e81755a44e93a95b0bbaa4d6ee40f10c330b62108",
- "sha256:860fde3429f364767c88a8e7f14f330e3fdace9f438e0ef1b112108a44c1eee8",
- "sha256:86886f21af819553990f0da9ad7737d52cd32076dd277db34e40cf805919e839",
- "sha256:9417d46f2b5e6ba79bd6adea0aae9659501c8a0350a5a98c0d9cb1442d45b0b4",
- "sha256:9bb81141715832bb8682dda3c2f8f1ad0f43cf8aec5db52e0992c16c7664e227",
- "sha256:afe150d8f0b351df7a357cfce50a8a5c0a44bdfeec5e08075f873cfeddf63004",
- "sha256:cc2e21c09245c3eb47014c3d4c58888cc8d48a168a03533f9ed3f8b2ee82a352",
- "sha256:cefb4a1a5d51cd04c9dd31bb18047c2dafcb86bc33a0347746b5a0ef82c071d8",
- "sha256:cfa2cd0ee23bcfc9f165b4f8e9c5b7ba829c7b49175fb73420544619148d91af",
- "sha256:d3a78ce50e6c50e701d65929dc04ab751edaeae660455a9fef3c2231d609f8c1",
- "sha256:d772ee53c8d316de1b7f68244ab654f864553bca177357f8787a65dc09816ae3",
- "sha256:ddd99d6f2c813e44721c22039ddf333e4b95e8d0794b03d9962c94c01c823934",
- "sha256:ec89e68a0cf210af0cc2724b5f8601d4b6809ff0f556e16efc8c955e79672f7a",
- "sha256:f118762ed0abe8e988a20020241fe1e6133edb960d2665a44d6f48acc6d8e7c7"
- ],
- "index": "pypi",
- "version": "==2.2.1"
- },
- "pyrsistent": {
- "hashes": [
- "sha256:50cffebc87ca91b9d4be2dcc2e479272bcb466b5a0487b6c271f7ddea6917e14"
- ],
- "version": "==0.15.3"
- },
- "pysdl2": {
- "hashes": [
- "sha256:b52acab5493a77b08c2afee1f385769fc2005f17cfeaf1886eff22dc78da2123"
- ],
- "index": "pypi",
- "version": "==0.9.6"
- },
- "pysendfile": {
- "hashes": [
- "sha256:510a414b270986fba3c79cb76d90a4c910c701bfb43ff983a5d4e92846050e17"
- ],
- "index": "pypi",
- "version": "==2.0.1"
- },
- "python-dateutil": {
- "hashes": [
- "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb",
- "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
- ],
- "index": "pypi",
- "version": "==2.8.0"
- },
- "python-engineio": {
- "hashes": [
- "sha256:4850c3e04b2040e4fd262d1047797473d1815b37a073807e7b80304c1c5f4848",
- "sha256:89b90ee3816ed440c68ac7b6143244ae7d56a46a49295fbac8e6696482e596d1"
- ],
- "version": "==3.8.2.post1"
- },
- "python-logstash": {
- "hashes": [
- "sha256:10943e5df83f592b4d61b63ad1afff855ccc8c9467f78718f0a59809ba1fe68c"
- ],
- "index": "pypi",
- "version": "==0.4.6"
- },
- "python-logstash-async": {
- "hashes": [
- "sha256:994894e8b7e168e56f21e302334c08203af102c7bc760cacdb8d3d0f5aa74cea",
- "sha256:ccd528a0a9c6b7aabd9944c01d628e9d6cc2149156011aafd3484c7c0abbce45"
- ],
- "index": "pypi",
- "version": "==1.5.1"
- },
- "python-socketio": {
- "hashes": [
- "sha256:335bd0fab481d65edce4ab82c3bb5cac950afa843329ea7c38777cd56c8eba38",
- "sha256:efec4844456791b7d702efefd543ed67a8e314ca45efb8f0bfca7ae18fdee60a"
- ],
- "version": "==4.2.0"
- },
- "python-utils": {
- "hashes": [
- "sha256:34aaf26b39b0b86628008f2ae0ac001b30e7986a8d303b61e1357dfcdad4f6d3",
- "sha256:e25f840564554eaded56eaa395bca507b0b9e9f0ae5ecb13a8cb785305c56d25"
- ],
- "version": "==2.3.0"
- },
- "pytz": {
- "hashes": [
- "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda",
- "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"
- ],
- "version": "==2019.1"
- },
- "pyvcd": {
- "hashes": [
- "sha256:791fd7608fb8113c9658f699cb6292d66d7fb90bcab9ebc00b05adc40da7a5ce",
- "sha256:bdcb848b79cea2196ebf317178eff2c9c7d6354b85f9eb4991e9175f98e26937"
- ],
- "index": "pypi",
- "version": "==0.1.4"
- },
- "pywavelets": {
- "hashes": [
- "sha256:18b193b67937e805a8e79c036bd2aa4ea3a357737256efeefdabd19c95083c3b",
- "sha256:1d7ba03baa81938b17d4819db36f018e680d929af329062af4d4b6d6236d02ba",
- "sha256:21f39d86cc35e003576fc1400b15534e2999570418fcdb17ea62d1ff8773b076",
- "sha256:250412f482d5cb358b7ec323b2a783d91e5cfc337fdf8fde3c59bf2c35d6366f",
- "sha256:25c0c592bf43eaffb4d3c6b6444b14c7407db750b6f2d344d809d4af934319d9",
- "sha256:2f2cdd96e4882b0c18e75cc90c4710de429ac226ce53b58a90c7420e3e307631",
- "sha256:3abed8dcd3e94ead72ee8010b494df5a9bdbdd5e39129d52fbf8066efa323a51",
- "sha256:3e99ab8feeb47755738fb8deb8154c9604c4a7996b1b7db6b090475105ca7c92",
- "sha256:64926c4c78dd690ec0d61be20f7c27cfbde6de9fa66ab8205eb079d9db6927fc",
- "sha256:687ec8877c10e3a03595ad167d1ea2662bc1ab13ef43d63a6e207a53b2ee4c26",
- "sha256:6af0077c7a4c9935aa64301f6942468b494656b8812e801d4a635cf42088f96c",
- "sha256:7215856a5d2e1a2dccca1f71d912ee6a7387086f3b3adcb55d7c41314c6abb0c",
- "sha256:9e47b241533add77961093b1e40cfff031597d429e91ad7c675838be0f7cc0df",
- "sha256:9e782f49dca57bc0fd2a40c0917949d77be2ecc999ccd44fff57fb10aa214135",
- "sha256:a12c7a6258c0015d2c75d88b87393ee015494551f049009e8b63eafed2d78efc",
- "sha256:a5027d47484498e70391b311a2688c4f74294de629b982ed17be57be4c77ade7",
- "sha256:ab02363467ee3cb222c5b425bc53453270ddae72bce313e72fd14616692d725a",
- "sha256:adc79308c65a2007bdbd5846fda70088e7ead0ef0a5a6f44d08829e9478a907f",
- "sha256:afaaee392450785a346d9e5e5f6e5307b13958d8b0633818632cb38972a7752a",
- "sha256:b26b836c7f71df7b2779e62d1338367cfe37b98324e9b0d54b428ac030e3d1f0",
- "sha256:b9adbc27d70a2626c235a18b41315de2832c384651d03383db7a58c2a2bccc6f",
- "sha256:bd6e62efb7839fd6bf894b7b9aec6d58be0c44a38ea0c9f3c5bea834d84d05eb",
- "sha256:de083a3a71576a9c3d8ba73b6f0425e4690d6ac6e480562f30bec5cb20667324",
- "sha256:e89551257233a3da717a9e6e2e303243df75faffe0b6781d21c15eb9d682ec6d",
- "sha256:eafb7d609c41a04028144f4b6697792f448554960ef353244aaf0a5883263543",
- "sha256:fb3ee9f65d25ee5c89104e533d5f341c253cdb9543ef6fcd6dfa599b12e84f1c"
- ],
- "version": "==1.0.3"
- },
- "pyyaml": {
- "hashes": [
- "sha256:57acc1d8533cbe51f6662a55434f0dbecfa2b9eaf115bede8f6fd00115a0c0d3",
- "sha256:588c94b3d16b76cfed8e0be54932e5729cc185caffaa5a451e7ad2f7ed8b4043",
- "sha256:68c8dd247f29f9a0d09375c9c6b8fdc64b60810ebf07ba4cdd64ceee3a58c7b7",
- "sha256:70d9818f1c9cd5c48bb87804f2efc8692f1023dac7f1a1a5c61d454043c1d265",
- "sha256:86a93cccd50f8c125286e637328ff4eef108400dd7089b46a7be3445eecfa391",
- "sha256:a0f329125a926876f647c9fa0ef32801587a12328b4a3c741270464e3e4fa778",
- "sha256:a3c252ab0fa1bb0d5a3f6449a4826732f3eb6c0270925548cac342bc9b22c225",
- "sha256:b4bb4d3f5e232425e25dda21c070ce05168a786ac9eda43768ab7f3ac2770955",
- "sha256:cd0618c5ba5bda5f4039b9398bb7fb6a317bb8298218c3de25c47c4740e4b95e",
- "sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190",
- "sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd"
- ],
- "index": "pypi",
- "version": "==5.1.1"
- },
- "pyzmq": {
- "hashes": [
- "sha256:00dd015159eaeb1c0731ad49310e1f5d839c9a35a15e4f3267f5052233fad99b",
- "sha256:03913b6beb8e7b417b9910b0ee1fd5d62e9626d218faefbe879d70714ceab1a2",
- "sha256:13f17386df81d5e6efb9a4faea341d8de22cdc82e49a326dded26e33f42a3112",
- "sha256:16c6281d96885db1e15f7047ddc1a8f48ff4ea35d31ca709f4d2eb39f246d356",
- "sha256:17efab4a804e31f58361631256d660214204046f9e2b962738b171b9ad674ea7",
- "sha256:2b79919ddeff3d3c96aa6087c21d294c8db1c01f6bfeee73324944683685f419",
- "sha256:2f832e4711657bb8d16ea1feba860f676ec5f14fb9fe3b449b5953a60e89edae",
- "sha256:31a11d37ac73107363b47e14c94547dbfc6a550029c3fe0530be443199026fc2",
- "sha256:33a3e928e6c3138c675e1d6702dd11f6b7050177d7aab3fc322db6e1d2274490",
- "sha256:34a38195a6d3a9646cbcdaf8eb245b4d935c7a57f7e1b3af467814bc1a92467e",
- "sha256:42900054f1500acef6df7428edf806abbf641bf92eb9ceded24aa863397c3bae",
- "sha256:4ccc7f3c63aa9d744dadb62c49eda2d0e7de55649b80c45d7c684d70161a69af",
- "sha256:5b220c37c346e6575db8c88a940c1fc234f99ce8e0068c408919bb8896c4b6d2",
- "sha256:6074848da5c8b44a1ca40adf75cf65aa92bc80f635e8249aa8f37a69b2b9b6f5",
- "sha256:61a4155964bd4a14ef95bf46cb1651bcf8dcbbed8c0108e9c974c1fcbb57788f",
- "sha256:62b5774688326600c52f587f7a033ca6b6284bef4c8b1b5fda32480897759eac",
- "sha256:65a9ffa4f9f085d696f16fd7541f34b3c357d25fe99c90e3bce2ea59c3b5b4b6",
- "sha256:76a077d2c30f8adc5e919a55985a784b96aeca69b53c1ea6fd5723d3ae2e6f53",
- "sha256:8e5b4c51557071d6379d6dc1f54f35e9f6a137f5e84e102efb869c8d3c13c8ff",
- "sha256:917f73e07cc04f0678a96d93e7bb8b1adcccdde9ccfe202e622814f4d1d1ecfd",
- "sha256:91c75d3c4c357f9643e739db9e79ab9681b2f6ae8ec5678d6ef2ea0d01532596",
- "sha256:923dd91618b100bb4c92ab9ed7b65825a595b8524a094ce03c7cb2aaae7d353b",
- "sha256:9849054e0355e2bc7f4668766a25517ba76095031c9ff5e39ae8949cee5bb024",
- "sha256:c9d453933f0e3f44b9759189f2a18aa765f7f1a4345c727c18ebe8ad0d748d26",
- "sha256:cb7514936277abce64c2f4c56883e5704d85ed04d98d2d432d1c6764003bb003"
- ],
- "index": "pypi",
- "version": "==18.0.2"
- },
- "qtconsole": {
- "hashes": [
- "sha256:6a85456af7a98b0f554d140922b7b6a219757b039adb2b95e847cf115eaa20ae",
- "sha256:767eb9ec3f9943bc84270198b5ff95d2d86d68d6b57792fafa4df4fc6b16cd7c"
- ],
- "version": "==4.5.2"
- },
- "redis": {
- "hashes": [
- "sha256:6946b5dca72e86103edc8033019cc3814c031232d339d5f4533b02ea85685175",
- "sha256:8ca418d2ddca1b1a850afa1680a7d2fd1f3322739271de4b704e0d4668449273"
- ],
- "index": "pypi",
- "version": "==3.2.1"
- },
- "redlock": {
- "hashes": [
- "sha256:b718646239d300745475a76e81d350ec523e7146cf84d696b3c4a7dfdd5dd4d4",
- "sha256:ce7e6ab404882b64a9c5017c7a78b1a3714f2c712635bcb22cbb74d20719bbd1"
- ],
- "index": "pypi",
- "version": "==1.2.0"
- },
- "requests": {
- "hashes": [
- "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
- "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
- ],
- "index": "pypi",
- "version": "==2.22.0"
- },
- "requests-oauthlib": {
- "hashes": [
- "sha256:bd6533330e8748e94bf0b214775fed487d309b8b8fe823dc45641ebcd9a32f57",
- "sha256:d3ed0c8f2e3bbc6b344fa63d6f933745ab394469da38db16bdddb461c7e25140"
- ],
- "version": "==1.2.0"
- },
- "reverse-geocoder": {
- "hashes": [
- "sha256:2a2e781b5f69376d922b78fe8978f1350c84fce0ddb07e02c834ecf98b57c75c"
- ],
- "index": "pypi",
- "version": "==1.5.1"
- },
- "s2sphere": {
- "hashes": [
- "sha256:c2478c1ff7c601a59a7151a57b605435897514578fa6bdb8730721c182adbbaf",
- "sha256:d2340c9cf458ddc9a89afd1d8048a4195ce6fa6b0095ab900d4be5271e537401"
- ],
- "index": "pypi",
- "version": "==0.2.5"
- },
- "s3transfer": {
- "hashes": [
- "sha256:6efc926738a3cd576c2a79725fed9afde92378aa5c6a957e3af010cb019fac9d",
- "sha256:b780f2411b824cb541dbcd2c713d0cb61c7d1bcadae204cdddda2b35cef493ba"
- ],
- "version": "==0.2.1"
- },
- "scandir": {
- "hashes": [
- "sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e",
- "sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022",
- "sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f",
- "sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f",
- "sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae",
- "sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173",
- "sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4",
- "sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32",
- "sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188",
- "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d",
- "sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac"
- ],
- "markers": "python_version < '3.5'",
- "version": "==1.10.0"
- },
- "scikit-image": {
- "hashes": [
- "sha256:056632aa964528c484758829d295f11c86a405aa0294f2578eac4acd945d4300",
- "sha256:1600628c96b76f265dede2393115f77d93a427c617202622dfd6ba27e075efcc",
- "sha256:1e85573ed37e0205ea918475c1fbd12e6c118c6f1e166dd159af04bcd9d4fa30",
- "sha256:1fc4a596d6b7295bd05dce3df1105d1c7c7abe9c65f5d3ced2eace1cd746c15e",
- "sha256:24ebe2a9cf40f2196393bc575345bc514bc845366545361785696a76e3aeb89b",
- "sha256:331ee6db27e434e467831e21c8489bec23038ede790c53e0b6040e1e638fff45",
- "sha256:4c17f2919029bd68907e2bf80dfecfb8b601bee4f392ef01f835ba4aa8c616e9",
- "sha256:4e59c25be3e9760ba181832b9b33e27ff3cea9c362842260ac06644ae08b23c8",
- "sha256:4f12cdf72155f77b736902e87c6b4544e311241070e9548c03ac0fcf9aa0bbed",
- "sha256:62718e67f1f058501055c7e6b7206eea96f792039ea4c87af8e6b706a22ae11e",
- "sha256:6b88c64f8351f1755ccc7feec26a7e55359acba2375498409fa1380bd3789b6f",
- "sha256:755ee87e4b0332fd1645c67fd1e5780908937f35d28a6bd3377af304fd54a8d9",
- "sha256:8508b9a2fccaa52a30785316ae4b29aaf339ef8fc3dab1bb35d36468397e0b0d",
- "sha256:8541cefddad87b08105583e946132e822b196fff437f407afa92742e1e763387",
- "sha256:8d76474ad59e5339584a9c4317868e51c0fbf2c2d11a936e836279fc281633d6",
- "sha256:b26462abeee13ee249c814723a3038ccd74af2144349422d1b344e1378f9f702",
- "sha256:b7b5605c7737073c1bdffbfea1f6a257dd6e96ab109fc37f43a7bd3d1d581e2a",
- "sha256:c7afc4231e9bb9d0d2b44958e6e403117e6823bb16bca61ab95540e737f2941f",
- "sha256:cc97cfc239f1f7ee8cc5129e3cb29fe553237fa62380b62d6f7c0909974d1400",
- "sha256:ce114f536941348998665360ea6fbbf1577a3c49a5c2b4d416c71d3edde05ab7",
- "sha256:db9f4fb00db5ce5855737c22abbdc22d9663d44643cbdad674e2c9fc32ba9c16",
- "sha256:e312e914d6f97e525460268cd0d215cd9c9c4fe131457316bd32c6c760171660",
- "sha256:e50d053133c292efe0e70eefc6a6481002b32d7b4b72ef38bd7caae6b24fb7d6",
- "sha256:ef3fb33404fbf1717e3d268e1cc0983264fc3154036b29950fbc9c3fbed98ee3",
- "sha256:f05eab2df885fb6fde3df0e4d24c9c620d6474ea0eb949fd45f6f634925dd514",
- "sha256:fb1de3dabbc7a429b38a016d01502920226b59d277578291fb18a28888ed5792"
- ],
- "index": "pypi",
- "version": "==0.14.3"
- },
- "scipy": {
- "hashes": [
- "sha256:0bcababa06ff83138a7f30a68f334dee034ce1cc7604f9278b96f62265fe7fd7",
- "sha256:162b803984ebb76927990d7233cab825d146be8e2a3f6a0efb1b3a61ebacae73",
- "sha256:271c6e56c8f9a3d6c3f0bc857d7a6e7cf7a8415c879a3915701cd011e82a83a3",
- "sha256:2eb255b30dac7516c6f3c5237f2e0ad1f1213b5364de409d932249c9a8c5bffb",
- "sha256:447c40d33ec5e0020750fadbb8599220b9eb9fd8798030efe9b308247800f364",
- "sha256:4686d699f76068757a81269f1a111c0db689bf048a56b131a339803121534fa8",
- "sha256:47d4623efa71948dc4a92f978fbf6b9fb69dac5b0f0fae4c1a1f3d955ac8aea9",
- "sha256:49dcebc6f57bce0bd23cb55dbc6144f4990e5cbce9aab3128af03d6b1b4eab6a",
- "sha256:5fa84b467b5f77c243c5701628ed7a4238e53bc4120db87be7dafa416e842fb9",
- "sha256:67d2210c7f6f585e1055bee3dc9f15610b5ebb04e80bfaa757868937ee744fec",
- "sha256:682b210ff7a65f6f5245fdf73d26a348b57e42d2059bc5fcf7ed25d063f35c45",
- "sha256:7f58faa422aa493d7b70dd56d6e8783223e84dd6e7f4b4161bd776b39ecbac92",
- "sha256:7fb4efff9895116428ad65564d2232fb1cac4b9d84398512a858b09dd4a7fd59",
- "sha256:922e2370674c82dd1367fc13a08c8765f4e5281a584d871e7cb454828d84600f",
- "sha256:97f26b4b5d4456f44849fd35cad8801f7cae4e64b75fc4e522d26a54aef17391",
- "sha256:9a21d64d002cb3a9239a55c0aa100b48d58b5e38382c0fdfcdfc68cf417d8142",
- "sha256:a4331e0b8dab1ff75d2c67b5158a8bb9a83c799d7140094dda936d876c7cfbb1",
- "sha256:a9fc1fcaa560edf771d4545d7e6dd865a213fc5b485bb127de5dfd32f40094e1",
- "sha256:b074a83299a82eae617dc46a830cfa7aaa588d07523990507848ee1ded3c52ce",
- "sha256:bcd0d4b2de5cb3fab69007214a39737e917267f56f887ce9c7732ba3278fc33d",
- "sha256:c390f1721757ec983616149f00e1bd0432aa32d2c1d9398930d7e7cc9542c922",
- "sha256:c5b9db9e3f6537bf7b308de12c185b27f22fb9a66fd12efc7aefbcfa0adb4d82",
- "sha256:d0d41a9ee3264f95820138170b447f5d3e453e5ebd10b411bca37c99237aac69",
- "sha256:d18d1575d4a54f128c0f34422bd73ce0f177e462d6124f074388e211d8dc2616",
- "sha256:e99cd49daffe7384fd35046c3b14bee98ce87d97c95865469227001905534e13",
- "sha256:f4e355afa8fdda11010de308c2376edda29e064cec699974097364115f71e16f",
- "sha256:f64e29a8b32d672fb6078f456bfff3cae8f36b6c8b64c337ad0942f29404b03f",
- "sha256:fbdff021643c2dfa35efd29218e0318c4b4987f48ea432be7e8c02bdb1b0c314"
- ],
- "index": "pypi",
- "version": "==1.2.2"
- },
- "seaborn": {
- "hashes": [
- "sha256:42e627b24e849c2d3bbfd059e00005f6afbc4a76e4895baf44ae23fe8a4b09a5",
- "sha256:76c83f794ca320fb6b23a7c6192d5e185a5fcf4758966a0c0a54baee46d41e2f"
- ],
- "index": "pypi",
- "version": "==0.9.0"
- },
- "send2trash": {
- "hashes": [
- "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2",
- "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b"
- ],
- "version": "==1.5.0"
- },
- "shapely": {
- "hashes": [
- "sha256:0378964902f89b8dbc332e5bdfa08e0bc2f7ab39fecaeb17fbb2a7699a44fe71",
- "sha256:34e7c6f41fb27906ccdf2514ee44a5774b90b39a256b6511a6a57d11ffe64999",
- "sha256:3ca69d4b12e2b05b549465822744b6a3a1095d8488cc27b2728a06d3c07d0eee",
- "sha256:3e9388f29bd81fcd4fa5c35125e1fbd4975ee36971a87a90c093f032d0e9de24",
- "sha256:3ef28e3f20a1c37f5b99ea8cf8dcb58e2f1a8762d65ed2d21fd92bf1d4811182",
- "sha256:523c94403047eb6cacd7fc1863ebef06e26c04d8a4e7f8f182d49cd206fe787e",
- "sha256:5d22a1a705c2f70f61ccadc696e33d922c1a92e00df8e1d58a6ade14dd7e3b4f",
- "sha256:714b6680215554731389a1bbdae4cec61741aa4726921fa2b2b96a6f578a2534",
- "sha256:7dfe1528650c3f0dc82f41a74cf4f72018288db9bfb75dcd08f6f04233ec7e78",
- "sha256:ba58b21b9cf3c33725f7f530febff9ed6a6846f9d0bf8a120fc74683ff919f89",
- "sha256:c4b87bb61fc3de59fc1f85e71a79b0c709dc68364d9584473697aad4aa13240f",
- "sha256:ebb4d2bee7fac3f6c891fcdafaa17f72ab9c6480f6d00de0b2dc9a5137dfe342"
- ],
- "index": "pypi",
- "version": "==1.6.4.post2"
- },
- "simplegeneric": {
- "hashes": [
- "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173"
- ],
- "version": "==0.8.1"
- },
- "simplejson": {
- "hashes": [
- "sha256:067a7177ddfa32e1483ba5169ebea1bc2ea27f224853211ca669325648ca5642",
- "sha256:2fc546e6af49fb45b93bbe878dea4c48edc34083729c0abd09981fe55bdf7f91",
- "sha256:354fa32b02885e6dae925f1b5bbf842c333c1e11ea5453ddd67309dc31fdb40a",
- "sha256:37e685986cf6f8144607f90340cff72d36acf654f3653a6c47b84c5c38d00df7",
- "sha256:3af610ee72efbe644e19d5eaad575c73fb83026192114e5f6719f4901097fce2",
- "sha256:3b919fc9cf508f13b929a9b274c40786036b31ad28657819b3b9ba44ba651f50",
- "sha256:3dd289368bbd064974d9a5961101f080e939cbe051e6689a193c99fb6e9ac89b",
- "sha256:6c3258ffff58712818a233b9737fe4be943d306c40cf63d14ddc82ba563f483a",
- "sha256:75e3f0b12c28945c08f54350d91e624f8dd580ab74fd4f1bbea54bc6b0165610",
- "sha256:b1f329139ba647a9548aa05fb95d046b4a677643070dc2afc05fa2e975d09ca5",
- "sha256:ee9625fc8ee164902dfbb0ff932b26df112da9f871c32f0f9c1bcf20c350fe2a",
- "sha256:fb2530b53c28f0d4d84990e945c2ebb470edb469d63e389bf02ff409012fe7c5"
- ],
- "index": "pypi",
- "version": "==3.16.0"
- },
- "singledispatch": {
- "hashes": [
- "sha256:5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c",
- "sha256:833b46966687b3de7f438c761ac475213e53b306740f1abfaa86e1d1aae56aa8"
- ],
- "markers": "python_version < '3.4'",
- "version": "==3.4.0.3"
- },
- "six": {
- "hashes": [
- "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
- "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
- ],
- "index": "pypi",
- "version": "==1.12.0"
- },
- "sortedcontainers": {
- "hashes": [
- "sha256:974e9a32f56b17c1bac2aebd9dcf197f3eb9cd30553c5852a3187ad162e1a03a",
- "sha256:d9e96492dd51fae31e60837736b38fe42a187b5404c16606ff7ee7cd582d4c60"
- ],
- "version": "==2.1.0"
- },
- "sqlalchemy": {
- "hashes": [
- "sha256:d6cda03b0187d6ed796ff70e87c9a7dce2c2c9650a7bc3c022cd331416853c31"
- ],
- "index": "pypi",
- "version": "==1.2.7"
- },
- "subprocess32": {
- "hashes": [
- "sha256:88e37c1aac5388df41cc8a8456bb49ebffd321a3ad4d70358e3518176de3a56b",
- "sha256:eb2937c80497978d181efa1b839ec2d9622cf9600a039a79d0e108d1f9aec79d"
- ],
- "index": "pypi",
- "version": "==3.5.4"
- },
- "supervisor": {
- "hashes": [
- "sha256:43e87c7b572a94acdb586aaebb06844dae1aa02856b984c5a738032abd753fb7",
- "sha256:9644990d21a1ba03b1a7ac5e9a0c0c62e12822e258f9e98f4a0b128461b3f10a"
- ],
- "index": "pypi",
- "version": "==4.0.4"
- },
- "tenacity": {
- "hashes": [
- "sha256:a0c3c5f7ae0c33f5556c775ca059c12d6fd8ab7121613a713e8b7d649908571b",
- "sha256:b87c1934daa0b2ccc7db153c37b8bf91d12f165936ade8628e7b962b92dc7705"
- ],
- "index": "pypi",
- "version": "==5.0.4"
- },
- "tensorboard": {
- "hashes": [
- "sha256:6f194519f41762bfdf5eb410ccf33226d1c252caf5ad8893288648bfbcf4d135",
- "sha256:81170f66bf8f95c2e9f6b3fefe0ddc5472655a9e3793e73b5b5d4ec0ba395e76"
- ],
- "version": "==1.12.2"
- },
- "tensorflow-estimator": {
- "hashes": [
- "sha256:3e460f43682c7d789e5fe966630029558434d32502e632ee7f6703451258528c"
- ],
- "index": "pypi",
- "version": "==1.10.12"
- },
- "tensorflow-gpu": {
- "hashes": [
- "sha256:0c2fa74a53009f72eb73da46ef8e78ffc09514349ba3de179c6b419b69a4bf09",
- "sha256:17460b5f3525ddbbb1fb9f639955d3a999f9656cc7bf1be65bc78dea1a0cedea",
- "sha256:2f85fdfee4eb93432bf8ef11428f2b5e17fb3e1b733599612329e165bb74a3fd",
- "sha256:38be54cb1e757f95f24b2e03e71d7bcab359429267ff36c9e32de2ed17943a42",
- "sha256:42c13cf5538125d93177b7901f23a1f6759b64f9f3f2d8680099b1fbfec37b83",
- "sha256:b771297d3b93f93a20af1d2d7dc049bb9617e2c2ab25c36156b011bf1a49bd7c",
- "sha256:ca68f7eb91e6101300ffc59a59c3b5600359a0ab6f2e1e8cde4a8a65ec21bb92"
- ],
- "index": "pypi",
- "version": "==1.13.0rc0"
- },
- "termcolor": {
- "hashes": [
- "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"
- ],
- "version": "==1.1.0"
- },
- "terminado": {
- "hashes": [
- "sha256:d9d012de63acb8223ac969c17c3043337c2fcfd28f3aea1ee429b345d01ef460",
- "sha256:de08e141f83c3a0798b050ecb097ab6259c3f0331b2f7b7750c9075ced2c20c2"
- ],
- "version": "==0.8.2"
- },
- "testpath": {
- "hashes": [
- "sha256:46c89ebb683f473ffe2aab0ed9f12581d4d078308a3cb3765d79c6b2317b0109",
- "sha256:b694b3d9288dbd81685c5d2e7140b81365d46c29f5db4bc659de5aa6b98780f8"
- ],
- "version": "==0.4.2"
- },
- "theano": {
- "hashes": [
- "sha256:35c9bbef56b61ffa299265a42a4e8f8cb5a07b2997dabaef0f8830b397086913"
- ],
- "index": "pypi",
- "version": "==1.0.4"
- },
- "torchfile": {
- "hashes": [
- "sha256:a53dfe134b737845a9f2cb24fe0585317874f965932cebdb0439d13c8da4136e"
- ],
- "version": "==0.1.0"
- },
- "tornado": {
- "hashes": [
- "sha256:0662d28b1ca9f67108c7e3b77afabfb9c7e87bde174fbda78186ecedc2499a9d",
- "sha256:4e5158d97583502a7e2739951553cbd88a72076f152b4b11b64b9a10c4c49409",
- "sha256:732e836008c708de2e89a31cb2fa6c0e5a70cb60492bee6f1ea1047500feaf7f",
- "sha256:8154ec22c450df4e06b35f131adc4f2f3a12ec85981a203301d310abf580500f",
- "sha256:8e9d728c4579682e837c92fdd98036bd5cdefa1da2aaf6acf26947e6dd0c01c5",
- "sha256:d4b3e5329f572f055b587efc57d29bd051589fb5a43ec8898c77a47ec2fa2bbb",
- "sha256:e5f2585afccbff22390cddac29849df463b252b711aa2ce7c5f3f342a5b3b444"
- ],
- "version": "==5.1.1"
- },
- "traitlets": {
- "hashes": [
- "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835",
- "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9"
- ],
- "version": "==4.3.2"
- },
- "transforms3d": {
- "hashes": [
- "sha256:404c7797c78aa461cb8043081901fc5517cef342d5ff56becd74a7967ba88d78"
- ],
- "index": "pypi",
- "version": "==0.3.1"
- },
- "typing": {
- "hashes": [
- "sha256:38566c558a0a94d6531012c8e917b1b8518a41e418f7f15f00e129cc80162ad3",
- "sha256:53765ec4f83a2b720214727e319607879fec4acde22c4fbb54fa2604e79e44ce",
- "sha256:84698954b4e6719e912ef9a42a2431407fe3755590831699debda6fba92aac55"
- ],
- "markers": "python_version < '3.5'",
- "version": "==3.7.4"
- },
- "urllib3": {
- "hashes": [
- "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
- "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
- ],
- "index": "pypi",
- "version": "==1.25.3"
- },
- "utm": {
- "hashes": [
- "sha256:07e55707ed660eec1ae983bd54a406c437962618a6261b38d70592fe30f5f508"
- ],
- "index": "pypi",
- "version": "==0.5.0"
- },
- "uwsgi": {
- "hashes": [
- "sha256:4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583"
- ],
- "index": "pypi",
- "version": "==2.0.18"
- },
- "v4l2": {
- "hashes": [
- "sha256:0d8f31f9d554ded4d0b50a31a7be5590b861df9e1ba256ee757e1c09175dd4a2"
- ],
- "index": "pypi",
- "version": "==0.2"
- },
- "vine": {
- "hashes": [
- "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87",
- "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af"
- ],
- "version": "==1.3.0"
- },
- "visdom": {
- "hashes": [
- "sha256:77edd6811471282740846672a996348e963b5fa4220780f126c71481ad21d5a5"
- ],
- "index": "pypi",
- "version": "==0.1.8.8"
- },
- "wcwidth": {
- "hashes": [
- "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e",
- "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"
- ],
- "version": "==0.1.7"
- },
- "websocket-client": {
- "hashes": [
- "sha256:1151d5fb3a62dc129164292e1227655e4bbc5dd5340a5165dfae61128ec50aa9",
- "sha256:1fd5520878b68b84b5748bb30e592b10d0a91529d5383f74f4964e72b297fd3a"
- ],
- "index": "pypi",
- "version": "==0.56.0"
- },
- "werkzeug": {
- "hashes": [
- "sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4",
- "sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6"
- ],
- "version": "==0.15.5"
- },
- "wheel": {
- "hashes": [
- "sha256:5e79117472686ac0c4aef5bad5172ea73a1c2d1646b808c35926bd26bdfb0c08",
- "sha256:62fcfa03d45b5b722539ccbc07b190e4bfff4bb9e3a4d470dd9f6a0981002565"
- ],
- "markers": "python_version < '3'",
- "version": "==0.33.4"
- },
- "widgetsnbextension": {
- "hashes": [
- "sha256:120f85acc3976450220b03b8933ce48678e518905cca69fc3c856ea5a0144196",
- "sha256:8c9b4d73e388f2484296be18432d3cc0b8d59de243079a0db16a56c5571e1f86"
- ],
- "version": "==3.5.0"
- },
- "wrapt": {
- "hashes": [
- "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"
- ],
- "version": "==1.11.2"
- }
- }
-}
diff --git a/README.md b/README.md
index d4dd5b11da6980..56b83dc458c14a 100644
--- a/README.md
+++ b/README.md
@@ -1,184 +1,329 @@
-WARNING: TESLA ONLY OPENPILOT 0.6.3-T11
+WARNING: TESLA ONLY OPENPILOT 0.7.10
======
This repo contains code that was modified specifically for Tesla and will not work on other cars!
+Main Comma.ai code is Copyright (c) 2018, Comma.ai, Inc. Additonal work (ALCA, webcamera, any modifications to base Comma.ao code) is licensed under This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License .
-[![](https://i.imgur.com/UetIFyH.jpg)](#)
-
-Welcome to openpilot
-======
-
-[openpilot](http://github.com/commaai/openpilot) is an open source driving agent. Currently, it performs the functions of Adaptive Cruise Control (ACC) and Lane Keeping Assist System (LKAS) for selected Honda, Toyota, Acura, Lexus, Chevrolet, Hyundai, Kia. It's about on par with Tesla Autopilot and GM Super Cruise, and better than [all other manufacturers](http://www.thedrive.com/tech/5707/the-war-for-autonomous-driving-part-iii-us-vs-germany-vs-japan).
-
-The openpilot codebase has been written to be concise and to enable rapid prototyping. We look forward to your contributions - improving real vehicle automation has never been easier.
+[![](https://i.imgur.com/UelUjKAh.png)](#)
Table of Contents
=======================
-* [Community](#community)
-* [Hardware](#hardware)
+* [What is openpilot?](#what-is-openpilot)
+* [Integration with Stock Features](#integration-with-stock-features)
+* [Supported Hardware](#supported-hardware)
* [Supported Cars](#supported-cars)
-* [Community Maintained Cars](#community-maintained-cars)
-* [In Progress Cars](#in-progress-cars)
-* [How can I add support for my car?](#how-can-i-add-support-for-my-car)
-* [Directory structure](#directory-structure)
-* [User Data / chffr Account / Crash Reporting](#user-data--chffr-account--crash-reporting)
+* [Community Maintained Cars and Features](#community-maintained-cars-and-features)
+* [Installation Instructions](#installation-instructions)
+* [Limitations of openpilot ALC and LDW](#limitations-of-openpilot-alc-and-ldw)
+* [Limitations of openpilot ACC and FCW](#limitations-of-openpilot-acc-and-fcw)
+* [Limitations of openpilot DM](#limitations-of-openpilot-dm)
+* [User Data and comma Account](#user-data-and-comma-account)
+* [Safety and Testing](#safety-and-testing)
* [Testing on PC](#testing-on-pc)
-* [Contributing](#contributing)
+* [Community and Contributing](#community-and-contributing)
+* [Directory Structure](#directory-structure)
* [Licensing](#licensing)
---
-Community
+What is openpilot?
------
-openpilot is developed by [comma.ai](https://comma.ai/) and users like you.
-
-We have a [Twitter you should follow](https://twitter.com/comma_ai).
-
-Also, we have a several thousand people community on [Discord](https://discord.comma.ai).
+[openpilot](http://github.com/commaai/openpilot) is an open source driver assistance system. Currently, openpilot performs the functions of Adaptive Cruise Control (ACC), Automated Lane Centering (ALC), Forward Collision Warning (FCW) and Lane Departure Warning (LDW) for a growing variety of supported [car makes, models and model years](#supported-cars). In addition, while openpilot is engaged, a camera based Driver Monitoring (DM) feature alerts distracted and asleep drivers.
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-Hardware
+Integration with Stock Features
------
-At the moment openpilot supports the [EON Dashcam DevKit](https://comma.ai/shop/products/eon-dashcam-devkit). A [panda](https://shop.comma.ai/products/panda-obd-ii-dongle) and a [giraffe](https://comma.ai/shop/products/giraffe/) are recommended tools to interface the EON with the car. We'd like to support other platforms as well.
+In all supported cars:
+* Stock Lane Keep Assist (LKA) and stock ALC are replaced by openpilot ALC, which only functions when openpilot is engaged by the user.
+* Stock LDW is replaced by openpilot LDW.
+
+Additionally, on specific supported cars (see ACC column in [supported cars](#supported-cars)):
+* Stock ACC is replaced by openpilot ACC.
+* openpilot FCW operates in addition to stock FCW.
-Install openpilot on a neo device by entering ``https://openpilot.comma.ai`` during NEOS setup.
+openpilot should preserve all other vehicle's stock features, including, but are not limited to: FCW, Automatic Emergency Braking (AEB), auto high-beam, blind spot warning, and side collision warning.
+
+Supported Hardware
+------
+
+At the moment, openpilot supports the [EON DevKit](https://comma.ai/shop/products/eon-dashcam-devkit) and the [comma two](https://comma.ai/shop/products/comma-two-devkit). A [car harness](https://comma.ai/shop/products/car-harness) is recommended to connect the EON or comma two to the car. For experimental purposes, openpilot can also run on an Ubuntu computer with external [webcams](https://github.com/commaai/openpilot/tree/master/tools/webcam).
Supported Cars
------
-| Make | Model | Supported Package | Lateral | Longitudinal | No Accel Below | No Steer Below | Giraffe |
-| ---------------------| -------------------------| ---------------------| --------| ---------------| -----------------| ---------------|-------------------|
-| Acura | ILX 2016-18 | AcuraWatch Plus | Yes | Yes | 25mph1 | 25mph | Nidec |
-| Acura | RDX 2016-18 | AcuraWatch Plus | Yes | Yes | 25mph1 | 12mph | Nidec |
-| Buick3 | Regal 2018 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom7 |
-| Chevrolet3 | Malibu 2017 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom7 |
-| Chevrolet3 | Volt 2017-18 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom7 |
-| Cadillac3 | ATS 2018 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom7 |
-| Chrysler | Pacifica 2017-18 | Adaptive Cruise | Yes | Stock | 0mph | 9mph | FCA |
-| Chrysler | Pacifica Hybrid 2017-18 | Adaptive Cruise | Yes | Stock | 0mph | 9mph | FCA |
-| Chrysler | Pacifica Hybrid 2019 | Adaptive Cruise | Yes | Stock | 0mph | 39mph | FCA |
-| GMC3 | Acadia Denali 2018 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom7 |
-| Holden3 | Astra 2017 | Adaptive Cruise | Yes | Yes | 0mph | 7mph | Custom7 |
-| Honda | Accord 2018-19 | All | Yes | Stock | 0mph | 3mph | Bosch |
-| Honda | Accord Hybrid 2018-19 | All | Yes | Stock | 0mph | 3mph | Bosch |
-| Honda | Civic Sedan/Coupe 2016-18| Honda Sensing | Yes | Yes | 0mph | 12mph | Nidec |
-| Honda | Civic Sedan/Coupe 2019 | Honda Sensing | Yes | Stock | 0mph | 2mph | Bosch |
-| Honda | Civic Hatchback 2017-19 | Honda Sensing | Yes | Stock | 0mph | 12mph | Bosch |
-| Honda | CR-V 2015-16 | Touring | Yes | Yes | 25mph1 | 12mph | Nidec |
-| Honda | CR-V 2017-19 | Honda Sensing | Yes | Stock | 0mph | 12mph | Bosch |
-| Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Yes | Stock | 0mph | 12mph | Bosch |
-| Honda | Odyssey 2018-19 | Honda Sensing | Yes | Yes | 25mph1 | 0mph | Inverted Nidec |
-| Honda | Passport 2019 | All | Yes | Yes | 25mph1 | 12mph | Inverted Nidec |
-| Honda | Pilot 2016-18 | Honda Sensing | Yes | Yes | 25mph1 | 12mph | Nidec |
-| Honda | Pilot 2019 | All | Yes | Yes | 25mph1 | 12mph | Inverted Nidec |
-| Honda | Ridgeline 2017-19 | Honda Sensing | Yes | Yes | 25mph1 | 12mph | Nidec |
-| Hyundai | Santa Fe 2019 | All | Yes | Stock | 0mph | 0mph | Custom6 |
-| Hyundai | Elantra 2017-19 | SCC + LKAS | Yes | Stock | 19mph | 34mph | Custom6 |
-| Hyundai | Genesis 2018 | All | Yes | Stock | 19mph | 34mph | Custom6 |
-| Jeep | Grand Cherokee 2016-18 | Adaptive Cruise | Yes | Stock | 0mph | 9mph | FCA |
-| Jeep | Grand Cherokee 2019 | Adaptive Cruise | Yes | Stock | 0mph | 39mph | FCA |
-| Kia | Optima 2019 | SCC + LKAS | Yes | Stock | 0mph | 0mph | Custom6 |
-| Kia | Sorento 2018 | All | Yes | Stock | 0mph | 0mph | Custom6 |
-| Kia | Stinger 2018 | SCC + LKAS | Yes | Stock | 0mph | 0mph | Custom6 |
-| Lexus | ES Hybrid 2019 | All | Yes | Yes | 0mph | 0mph | Toyota |
-| Lexus | RX Hybrid 2016-19 | All | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Subaru | Crosstrek 2018 | EyeSight | Yes | Stock | 0mph | 0mph | Custom4 |
-| Subaru | Impreza 2019 | EyeSight | Yes | Stock | 0mph | 0mph | Custom4 |
-| Toyota | Avalon 2016 | TSS-P | Yes | Yes2 | 20mph1 | 0mph | Toyota |
-| Toyota | Avalon 2017-18 | All | Yes | Yes2 | 20mph1 | 0mph | Toyota |
-| Toyota | Camry 2018-19 | All | Yes | Stock | 0mph5 | 0mph | Toyota |
-| Toyota | Camry Hybrid 2018-19 | All | Yes | Stock | 0mph5 | 0mph | Toyota |
-| Toyota | C-HR 2017-19 | All | Yes | Stock | 0mph | 0mph | Toyota |
-| Toyota | C-HR Hybrid 2017-19 | All | Yes | Stock | 0mph | 0mph | Toyota |
-| Toyota | Corolla 2017-19 | All | Yes | Yes2 | 20mph1 | 0mph | Toyota |
-| Toyota | Corolla 2020 | All | Yes | Yes | 0mph | 0mph | Toyota |
-| Toyota | Corolla Hatchback 2019 | All | Yes | Yes | 0mph | 0mph | Toyota |
-| Toyota | Highlander 2017-19 | All | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Highlander Hybrid 2017-19| All | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Prius 2016 | TSS-P | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Prius 2017-19 | All | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Prius Prime 2017-19 | All | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Rav4 2016 | TSS-P | Yes | Yes2 | 20mph1 | 0mph | Toyota |
-| Toyota | Rav4 2017-18 | All | Yes | Yes2 | 20mph1 | 0mph | Toyota |
-| Toyota | Rav4 2019 | All | Yes | Yes | 0mph | 0mph | Toyota |
-| Toyota | Rav4 Hybrid 2016 | TSS-P | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Rav4 Hybrid 2017-18 | All | Yes | Yes2 | 0mph | 0mph | Toyota |
-| Toyota | Sienna 2018 | All | Yes | Yes2 | 0mph | 0mph | Toyota |
-
-1 [Comma Pedal](https://community.comma.ai/wiki/index.php/Comma_Pedal) is used to provide stop-and-go capability to some of the openpilot-supported cars that don't currently support stop-and-go. Here is how to [build a Comma Pedal](https://medium.com/@jfrux/comma-pedal-building-with-macrofab-6328bea791e8). ***NOTE: The Comma Pedal is not officially supported by [comma.ai](https://comma.ai).***
-2 When disconnecting the Driver Support Unit (DSU), otherwise longitudinal control is stock ACC. For DSU locations, see [Toyota Wiki page](https://community.comma.ai/wiki/index.php/Toyota).
-3 [GM installation guide](https://zoneos.com/volt/).
-4 Subaru Giraffe is DIY.
-5 28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.
-6 Open sourced [Hyundai Giraffe](https://github.com/commaai/neo/tree/master/giraffe/hyundai) is designed for the 2019 Sante Fe; pinout may differ for other Hyundais.
-7 Community built Giraffe, find more information [here](https://zoneos.com/shop/).
-
-Community Maintained Cars
+| Make | Model (US Market Reference) | Supported Package | ACC | No ACC accel below | No ALC below |
+| ----------| ------------------------------| ------------------| -----------------| -------------------| ------------------|
+| Acura | ILX 2016-19 | AcuraWatch Plus | openpilot | 25mph1 | 25mph |
+| Acura | RDX 2016-18 | AcuraWatch Plus | openpilot | 25mph1 | 12mph |
+| Acura | RDX 2020 | All | Stock | 0mph | 3mph |
+| Honda | Accord 2018-20 | All | Stock | 0mph | 3mph |
+| Honda | Accord Hybrid 2018-20 | All | Stock | 0mph | 3mph |
+| Honda | Civic Hatchback 2017-21 | Honda Sensing | Stock | 0mph | 12mph |
+| Honda | Civic Sedan/Coupe 2016-18 | Honda Sensing | openpilot | 0mph | 12mph |
+| Honda | Civic Sedan/Coupe 2019-20 | All | Stock | 0mph | 2mph2 |
+| Honda | CR-V 2015-16 | Touring | openpilot | 25mph1 | 12mph |
+| Honda | CR-V 2017-20 | Honda Sensing | Stock | 0mph | 12mph |
+| Honda | CR-V Hybrid 2017-2019 | Honda Sensing | Stock | 0mph | 12mph |
+| Honda | Fit 2018-19 | Honda Sensing | openpilot | 25mph1 | 12mph |
+| Honda | HR-V 2019-20 | Honda Sensing | openpilot | 25mph1 | 12mph |
+| Honda | Insight 2019-20 | All | Stock | 0mph | 3mph |
+| Honda | Inspire 2018 | All | Stock | 0mph | 3mph |
+| Honda | Odyssey 2018-20 | Honda Sensing | openpilot | 25mph1 | 0mph |
+| Honda | Passport 2019 | All | openpilot | 25mph1 | 12mph |
+| Honda | Pilot 2016-19 | Honda Sensing | openpilot | 25mph1 | 12mph |
+| Honda | Ridgeline 2017-20 | Honda Sensing | openpilot | 25mph1 | 12mph |
+| Hyundai | Palisade 2020 | All | Stock | 0mph | 0mph |
+| Hyundai | Sonata 2020-21 | All | Stock | 0mph | 0mph |
+| Lexus | CT Hybrid 2017-18 | LSS | Stock3 | 0mph | 0mph |
+| Lexus | ES 2019-20 | All | openpilot | 0mph | 0mph |
+| Lexus | ES Hybrid 2019 | All | openpilot | 0mph | 0mph |
+| Lexus | IS 2017-2019 | All | Stock | 22mph | 0mph |
+| Lexus | IS Hybrid 2017 | All | Stock | 0mph | 0mph |
+| Lexus | NX 2018 | All | Stock3 | 0mph | 0mph |
+| Lexus | NX Hybrid 2018 | All | Stock3 | 0mph | 0mph |
+| Lexus | RX 2016-18 | All | Stock3 | 0mph | 0mph |
+| Lexus | RX 2020-21 | All | openpilot | 0mph | 0mph |
+| Lexus | RX Hybrid 2016-19 | All | Stock3 | 0mph | 0mph |
+| Lexus | RX Hybrid 2020 | All | openpilot | 0mph | 0mph |
+| Toyota | Avalon 2016-18 | TSS-P | Stock3 | 20mph1 | 0mph |
+| Toyota | Camry 2018-20 | All | Stock | 0mph4 | 0mph |
+| Toyota | Camry 2021 | All | openpilot | 0mph | 0mph |
+| Toyota | Camry Hybrid 2018-20 | All | Stock | 0mph4 | 0mph |
+| Toyota | C-HR 2017-19 | All | Stock | 0mph | 0mph |
+| Toyota | C-HR Hybrid 2017-19 | All | Stock | 0mph | 0mph |
+| Toyota | Corolla 2017-19 | All | Stock3 | 20mph1 | 0mph |
+| Toyota | Corolla 2020-21 | All | openpilot | 0mph | 0mph |
+| Toyota | Corolla Hatchback 2019-20 | All | openpilot | 0mph | 0mph |
+| Toyota | Corolla Hybrid 2020-21 | All | openpilot | 0mph | 0mph |
+| Toyota | Highlander 2017-19 | All | Stock3 | 0mph | 0mph |
+| Toyota | Highlander 2020-21 | All | openpilot | 0mph | 0mph |
+| Toyota | Highlander Hybrid 2017-19 | All | Stock3 | 0mph | 0mph |
+| Toyota | Highlander Hybrid 2020-21 | All | openpilot | 0mph | 0mph |
+| Toyota | Prius 2016-20 | TSS-P | Stock3 | 0mph | 0mph |
+| Toyota | Prius 2021 | All | openpilot | 0mph | 0mph |
+| Toyota | Prius Prime 2017-20 | All | Stock3 | 0mph | 0mph |
+| Toyota | Rav4 2016-18 | TSS-P | Stock3 | 20mph1 | 0mph |
+| Toyota | Rav4 2019-21 | All | openpilot | 0mph | 0mph |
+| Toyota | Rav4 Hybrid 2016-18 | TSS-P | Stock3 | 0mph | 0mph |
+| Toyota | Rav4 Hybrid 2019-21 | All | openpilot | 0mph | 0mph |
+| Toyota | Sienna 2018-20 | All | Stock3 | 0mph | 0mph |
+
+1 [Comma Pedal](https://github.com/commaai/openpilot/wiki/comma-pedal) is used to provide stop-and-go capability to some of the openpilot-supported cars that don't currently support stop-and-go. ***NOTE: The Comma Pedal is not officially supported by [comma](https://comma.ai).***
+2 2019 Honda Civic 1.6L Diesel Sedan does not have ALC below 12mph.
+3 When disconnecting the Driver Support Unit (DSU), openpilot ACC will replace stock ACC. ***NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).***
+4 28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.
+
+Community Maintained Cars and Features
+------
+
+| Make | Model (US Market Reference) | Supported Package | ACC | No ACC accel below | No ALC below |
+| ----------| ------------------------------| ------------------| -----------------| -------------------| -------------|
+| Buick | Regal 20181 | Adaptive Cruise | openpilot | 0mph | 7mph |
+| Cadillac | ATS 20181 | Adaptive Cruise | openpilot | 0mph | 7mph |
+| Chevrolet | Malibu 20171 | Adaptive Cruise | openpilot | 0mph | 7mph |
+| Chevrolet | Volt 2017-181 | Adaptive Cruise | openpilot | 0mph | 7mph |
+| Chrysler | Pacifica 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
+| Chrysler | Pacifica 2020 | Adaptive Cruise | Stock | 0mph | 39mph |
+| Chrysler | Pacifica Hybrid 2017-18 | Adaptive Cruise | Stock | 0mph | 9mph |
+| Chrysler | Pacifica Hybrid 2019-20 | Adaptive Cruise | Stock | 0mph | 39mph |
+| Genesis | G70 2018 | All | Stock | 0mph | 0mph |
+| Genesis | G80 2018 | All | Stock | 0mph | 0mph |
+| Genesis | G90 2018 | All | Stock | 0mph | 0mph |
+| GMC | Acadia 20181 | Adaptive Cruise | openpilot | 0mph | 7mph |
+| Holden | Astra 20171 | Adaptive Cruise | openpilot | 0mph | 7mph |
+| Hyundai | Elantra 2017-19 | SCC + LKAS | Stock | 19mph | 34mph |
+| Hyundai | Genesis 2015-16 | SCC + LKAS | Stock | 19mph | 37mph |
+| Hyundai | Ioniq Electric 2019 | SCC + LKAS | Stock | 0mph | 32mph |
+| Hyundai | Ioniq Electric 2020 | SCC + LKAS | Stock | 0mph | 0mph |
+| Hyundai | Kona 2020 | SCC + LKAS | Stock | 0mph | 0mph |
+| Hyundai | Kona EV 2019 | SCC + LKAS | Stock | 0mph | 0mph |
+| Hyundai | Santa Fe 2019 | All | Stock | 0mph | 0mph |
+| Hyundai | Sonata 2019 | SCC + LKAS | Stock | 0mph | 0mph |
+| Hyundai | Veloster 2019 | SCC + LKAS | Stock | 5mph | 0mph |
+| Jeep | Grand Cherokee 2016-18 | Adaptive Cruise | Stock | 0mph | 9mph |
+| Jeep | Grand Cherokee 2019-20 | Adaptive Cruise | Stock | 0mph | 39mph |
+| Kia | Forte 2018-19 | SCC + LKAS | Stock | 0mph | 0mph |
+| Kia | Niro EV 2020 | SCC + LKAS | Stock | 0mph | 0mph |
+| Kia | Optima 2017 | SCC + LKAS | Stock | 0mph | 32mph |
+| Kia | Optima 2019 | SCC + LKAS | Stock | 0mph | 0mph |
+| Kia | Sorento 2018 | SCC + LKAS | Stock | 0mph | 0mph |
+| Kia | Stinger 2018 | SCC + LKAS | Stock | 0mph | 0mph |
+| Nissan | Leaf 2018-20 | ProPILOT | Stock | 0mph | 0mph |
+| Nissan | Rogue 2018-19 | ProPILOT | Stock | 0mph | 0mph |
+| Nissan | X-Trail 2017 | ProPILOT | Stock | 0mph | 0mph |
+| Subaru | Ascent 2019 | EyeSight | Stock | 0mph | 0mph |
+| Subaru | Crosstrek 2018-19 | EyeSight | Stock | 0mph | 0mph |
+| Subaru | Forester 2019-20 | EyeSight | Stock | 0mph | 0mph |
+| Subaru | Impreza 2017-19 | EyeSight | Stock | 0mph | 0mph |
+| Volkswagen| Golf 2015-19 | Driver Assistance | Stock | 0mph | 0mph |
+
+1 Requires an [OBD-II car harness](https://comma.ai/shop/products/comma-car-harness) and [community built ASCM harness](https://github.com/commaai/openpilot/wiki/GM#hardware). ***NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).***
+
+Although it's not upstream, there's a community of people getting openpilot to run on Tesla's [here](https://tinkla.us/)
+
+Community Maintained Cars and Features are not verified by comma to meet our [safety model](SAFETY.md). Be extra cautious using them. They are only available after enabling the toggle in `Settings->Developer->Enable Community Features`.
+
+To promote a car from community maintained, it must meet a few requirements. We must own one from the brand, we must sell the harness for it, has full ISO26262 in both panda and openpilot, there must be a path forward for longitudinal control, it must have AEB still enabled, and it must support fingerprinting 2.0
+
+Installation Instructions
------
-| Make | Model | Supported Package | Lateral | Longitudinal | No Accel Below | No Steer Below | Giraffe |
-| ---------------------| -------------------------| ---------------------| --------| ---------------| -----------------| ---------------|-------------------|
-| Honda | Fit 2018 | Honda Sensing | Yes | Yes | 25mph1 | 12mph | Inverted Nidec |
-| Tesla | Model S 2012-13 | All | Yes | Not yet | Not applicable | 0mph | Custom8 |
+Install openpilot on an EON or comma two by entering ``https://openpilot.comma.ai`` during the installer setup.
+
+Follow these [video instructions](https://youtu.be/lcjqxCymins) to properly mount the device on the windshield. Note: openpilot features an automatic pose calibration routine and openpilot performance should not be affected by small pitch and yaw misalignments caused by imprecise device mounting.
-[[Honda Fit Pull Request]](https://github.com/commaai/openpilot/pull/266).
-[[Tesla Model S Pull Request]](https://github.com/commaai/openpilot/pull/246)
-8 Community built Giraffe, find more information here [Community Tesla Giraffe](https://github.com/jeankalud/neo/tree/tesla_giraffe/giraffe/tesla)
+Before placing the device on your windshield, check the state and local laws and ordinances where you drive. Some state laws prohibit or restrict the placement of objects on the windshield of a motor vehicle.
-Community Maintained Cars are not confirmed by comma.ai to meet our [safety model](https://github.com/commaai/openpilot/blob/devel/SAFETY.md). Be extra cautious using them.
+You will be able to engage openpilot after reviewing the onboarding screens and finishing the calibration procedure.
-In Progress Cars
+Limitations of openpilot ALC and LDW
------
-- All TSS-P Toyota with Steering Assist and LSS-P Lexus with Steering Assist or Lane Keep Assist.
- - Only remaining Toyota cars with no port yet are the Avalon and the Sienna.
-- All Hyundai with SmartSense.
-- All Kia with SCC and LKAS.
-- All Chrysler, Jeep, Fiat with Adaptive Cruise Control and LaneSense.
-How can I add support for my car?
+openpilot ALC and openpilot LDW do not automatically drive the vehicle or reduce the amount of attention that must be paid to operate your vehicle. The driver must always keep control of the steering wheel and be ready to correct the openpilot ALC action at all times.
+
+While changing lanes, openpilot is not capable of looking next to you or checking your blind spot. Only nudge the wheel to initiate a lane change after you have confirmed it's safe to do so.
+
+Many factors can impact the performance of openpilot ALC and openpilot LDW, causing them to be unable to function as intended. These include, but are not limited to:
+
+* Poor visibility (heavy rain, snow, fog, etc.) or weather conditions that may interfere with sensor operation.
+* The road facing camera is obstructed, covered or damaged by mud, ice, snow, etc.
+* Obstruction caused by applying excessive paint or adhesive products (such as wraps, stickers, rubber coating, etc.) onto the vehicle.
+* The device is mounted incorrectly.
+* When in sharp curves, like on-off ramps, intersections etc...; openpilot is designed to be limited in the amount of steering torque it can produce.
+* In the presence of restricted lanes or construction zones.
+* When driving on highly banked roads or in presence of strong cross-wind.
+* Extremely hot or cold temperatures.
+* Bright light (due to oncoming headlights, direct sunlight, etc.).
+* Driving on hills, narrow, or winding roads.
+
+The list above does not represent an exhaustive list of situations that may interfere with proper operation of openpilot components. It is the driver's responsibility to be in control of the vehicle at all times.
+
+Limitations of openpilot ACC and FCW
+------
+
+openpilot ACC and openpilot FCW are not systems that allow careless or inattentive driving. It is still necessary for the driver to pay close attention to the vehicle’s surroundings and to be ready to re-take control of the gas and the brake at all times.
+
+Many factors can impact the performance of openpilot ACC and openpilot FCW, causing them to be unable to function as intended. These include, but are not limited to:
+
+* Poor visibility (heavy rain, snow, fog, etc.) or weather conditions that may interfere with sensor operation.
+* The road facing camera or radar are obstructed, covered, or damaged by mud, ice, snow, etc.
+* Obstruction caused by applying excessive paint or adhesive products (such as wraps, stickers, rubber coating, etc.) onto the vehicle.
+* The device is mounted incorrectly.
+* Approaching a toll booth, a bridge or a large metal plate.
+* When driving on roads with pedestrians, cyclists, etc...
+* In presence of traffic signs or stop lights, which are not detected by openpilot at this time.
+* When the posted speed limit is below the user selected set speed. openpilot does not detect speed limits at this time.
+* In presence of vehicles in the same lane that are not moving.
+* When abrupt braking maneuvers are required. openpilot is designed to be limited in the amount of deceleration and acceleration that it can produce.
+* When surrounding vehicles perform close cut-ins from neighbor lanes.
+* Driving on hills, narrow, or winding roads.
+* Extremely hot or cold temperatures.
+* Bright light (due to oncoming headlights, direct sunlight, etc.).
+* Interference from other equipment that generates radar waves.
+
+The list above does not represent an exhaustive list of situations that may interfere with proper operation of openpilot components. It is the driver's responsibility to be in control of the vehicle at all times.
+
+Limitations of openpilot DM
+------
+
+openpilot DM should not be considered an exact measurement of the alertness of the driver.
+
+Many factors can impact the performance of openpilot DM, causing it to be unable to function as intended. These include, but are not limited to:
+
+* Low light conditions, such as driving at night or in dark tunnels.
+* Bright light (due to oncoming headlights, direct sunlight, etc.).
+* The driver's face is partially or completely outside field of view of the driver facing camera.
+* The driver facing camera is obstructed, covered, or damaged.
+
+The list above does not represent an exhaustive list of situations that may interfere with proper operation of openpilot components. A driver should not rely on openpilot DM to assess their level of attention.
+
+User Data and comma Account
------
-If your car has adaptive cruise control and lane keep assist, you are in luck. Using a [panda](https://comma.ai/shop/products/panda-obd-ii-dongle/) and [cabana](https://community.comma.ai/cabana/), you can understand how to make your car drive by wire.
+By default, openpilot uploads the driving data to our servers. You can also access your data by pairing with the comma connect app ([iOS](https://apps.apple.com/us/app/comma-connect/id1456551889), [Android](https://play.google.com/store/apps/details?id=ai.comma.connect&hl=en_US)). We use your data to train better models and improve openpilot for everyone.
+
+openpilot is open source software: the user is free to disable data collection if they wish to do so.
+
+openpilot logs the road facing camera, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.
+The driver facing camera is only logged if you explicitly opt-in in settings. The microphone is not recorded.
+
+By using openpilot, you agree to [our Privacy Policy](https://my.comma.ai/privacy). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma for the use of this data.
-We've written guides for [Brand](https://medium.com/@comma_ai/how-to-write-a-car-port-for-openpilot-7ce0785eda84) and [Model](https://medium.com/@comma_ai/openpilot-port-guide-for-toyota-models-e5467f4b5fe6) ports. These guides might help you after you have the basics figured out.
+Safety and Testing
+----
-- BMW, Audi, Volvo, and Mercedes all use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) and can be supported after [FlexRay support](https://github.com/commaai/openpilot/pull/463) is merged.
-- We put time into a Ford port, but the steering has a 10 second cutout limitation that makes it unusable.
-- The 2016-2017 Honda Accord uses a custom signaling protocol for steering that's unlikely to ever be upstreamed.
+* openpilot observes ISO26262 guidelines, see [SAFETY.md](SAFETY.md) for more detail.
+* openpilot has software in the loop [tests](.github/workflows/test.yaml) that run on every commit.
+* The safety model code lives in panda and is written in C, see [code rigor](https://github.com/commaai/panda#code-rigor) for more details.
+* panda has software in the loop [safety tests](https://github.com/commaai/panda/tree/master/tests/safety).
+* Internally, we have a hardware in the loop Jenkins test suite that builds and unit tests the various processes.
+* panda has additional hardware in the loop [tests](https://github.com/commaai/panda/blob/master/Jenkinsfile).
+* We run the latest openpilot in a testing closet containing 10 EONs continuously replaying routes.
-Directory structure
+Testing on PC
+------
+For simplified development and experimentation, openpilot can be run in the CARLA driving simulator, which allows you to develop openpilot without a car. The whole setup should only take a few minutes.
+
+Steps:
+1) Start the CARLA server on first terminal
+```
+bash -c "$(curl https://raw.githubusercontent.com/commaai/openpilot/master/tools/sim/start_carla.sh)"
+```
+2) Start openpilot on second terminal
+```
+bash -c "$(curl https://raw.githubusercontent.com/commaai/openpilot/master/tools/sim/start_openpilot_docker.sh)"
+```
+3) Press 1 to engage openpilot
+
+See the full [README](tools/sim/README.md)
+
+You should also take a look at the tools directory in master: lots of tools you can use to replay driving data, test, and develop openpilot from your PC.
+
+
+Community and Contributing
+------
+
+openpilot is developed by [comma](https://comma.ai/) and by users like you. We welcome both pull requests and issues on [GitHub](http://github.com/commaai/openpilot). Bug fixes and new car ports are encouraged.
+
+You can add support for your car by following guides we have written for [Brand](https://medium.com/@comma_ai/how-to-write-a-car-port-for-openpilot-7ce0785eda84) and [Model](https://medium.com/@comma_ai/openpilot-port-guide-for-toyota-models-e5467f4b5fe6) ports. Generally, a car with adaptive cruise control and lane keep assist is a good candidate. [Join our Discord](https://discord.comma.ai) to discuss car ports: most car makes have a dedicated channel.
+
+Want to get paid to work on openpilot? [comma is hiring](https://comma.ai/jobs/).
+
+And [follow us on Twitter](https://twitter.com/comma_ai).
+
+Directory Structure
------
.
├── apk # The apk files used for the UI
- ├── cereal # The messaging spec used for all logs on EON
+ ├── cereal # The messaging spec and libs used for all logs
├── common # Library like functionality we've developed here
├── installer/updater # Manages auto-updates of openpilot
├── opendbc # Files showing how to interpret data from cars
- ├── panda # Code used to communicate on CAN and LIN
- ├── phonelibs # Libraries used on EON
- ├── pyextra # Libraries used on EON
+ ├── panda # Code used to communicate on CAN
+ ├── phonelibs # Libraries used on NEOS devices
+ ├── pyextra # Libraries used on NEOS devices
└── selfdrive # Code needed to drive the car
- ├── assets # Fonts and images for UI
+ ├── assets # Fonts, images and sounds for UI
├── athena # Allows communication with the app
├── boardd # Daemon to talk to the board
- ├── can # Helpers for parsing CAN messages
+ ├── camerad # Driver to capture images from the camera sensors
├── car # Car specific code to read states and control actuators
├── common # Shared C/C++ code for the daemons
├── controls # Perception, planning and controls
@@ -186,54 +331,20 @@ Directory structure
├── locationd # Soon to be home of precise location
├── logcatd # Android logcat as a service
├── loggerd # Logger and uploader of car data
+ ├── modeld # Driving and monitoring model runners
├── proclogd # Logs information from proc
├── sensord # IMU / GPS interface code
- ├── test # Car simulator running code through virtual maneuvers
- ├── ui # The UI
- └── visiond # Vision pipeline
-
-To understand how the services interact, see `selfdrive/service_list.yaml`
-
-User Data / chffr Account / Crash Reporting
-------
+ ├── test # Unit tests, system tests and a car simulator
+ └── ui # The UI
-By default, openpilot creates an account and includes a client for chffr, our dashcam app. We use your data to train better models and improve openpilot for everyone.
-
-It's open source software, so you are free to disable it if you wish.
-
-It logs the road facing camera, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.
-The user facing camera is only logged if you explicitly opt-in in settings.
-It does not log the microphone.
-
-By using it, you agree to [our privacy policy](https://community.comma.ai/privacy.html). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma.ai. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma.ai for the use of this data.
-
-Testing on PC
-------
-
-Check out [openpilot-tools](https://github.com/commaai/openpilot-tools): lots of tools you can use to replay driving data, test and develop openpilot from your pc.
-
-Also, within openpilot there is a rudimentary infrastructure to run a basic simulation and generate a report of openpilot's behavior in different longitudinal control scenarios.
-
-```bash
-# Requires working docker
-./run_docker_tests.sh
-```
-
-Contributing
-------
-
-We welcome both pull requests and issues on [github](http://github.com/commaai/openpilot). Bug fixes and new car ports encouraged.
-
-We also have a [bounty program](https://comma.ai/bounties.html).
-
-Want to get paid to work on openpilot? [comma.ai is hiring](https://comma.ai/jobs/)
+To understand how the services interact, see `cereal/service_list.yaml`.
Licensing
------
openpilot is released under the MIT license. Some parts of the software are released under other licenses as specified.
-Any user of this software shall indemnify and hold harmless Comma.ai, Inc. and its directors, officers, employees, agents, stockholders, affiliates, subcontractors and customers from and against all allegations, claims, actions, suits, demands, damages, liabilities, obligations, losses, settlements, judgments, costs and expenses (including without limitation attorneys’ fees and costs) which arise out of, relate to or result from any use of this software by user.
+Any user of this software shall indemnify and hold harmless comma.ai, Inc. and its directors, officers, employees, agents, stockholders, affiliates, subcontractors and customers from and against all allegations, claims, actions, suits, demands, damages, liabilities, obligations, losses, settlements, judgments, costs and expenses (including without limitation attorneys’ fees and costs) which arise out of, relate to or result from any use of this software by user.
**THIS IS ALPHA QUALITY SOFTWARE FOR RESEARCH PURPOSES ONLY. THIS IS NOT A PRODUCT.
YOU ARE RESPONSIBLE FOR COMPLYING WITH LOCAL LAWS AND REGULATIONS.
@@ -242,3 +353,9 @@ NO WARRANTY EXPRESSED OR IMPLIED.**
---
+
+[![openpilot tests](https://github.com/commaai/openpilot/workflows/openpilot%20tests/badge.svg?event=push)](https://github.com/commaai/openpilot/actions)
+[![Total alerts](https://img.shields.io/lgtm/alerts/g/commaai/openpilot.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/commaai/openpilot/alerts/)
+[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/commaai/openpilot.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/commaai/openpilot/context:python)
+[![Language grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/commaai/openpilot.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/commaai/openpilot/context:cpp)
+[![codecov](https://codecov.io/gh/commaai/openpilot/branch/master/graph/badge.svg)](https://codecov.io/gh/commaai/openpilot)
diff --git a/README_chffrplus.md b/README_chffrplus.md
deleted file mode 100644
index dc13e8c3f264c6..00000000000000
--- a/README_chffrplus.md
+++ /dev/null
@@ -1,36 +0,0 @@
-Welcome to chffrplus
-======
-
-[chffrplus](https://github.com/commaai/chffrplus) is an open source dashcam.
-
-This is the shipping reference software for the comma EON Dashcam DevKit. It keeps many of the niceities of [openpilot](https://github.com/commaai/openpilot), like high quality sensors, great camera, and good autostart and stop. Though unlike openpilot, it cannot control your car. chffrplus can interface with your car through a [panda](https://shop.comma.ai/products/panda-obd-ii-dongle), but just like our dashcam app [chffr](https://getchffr.com/), it is read only.
-
-It integrates with the rest of the comma ecosystem, so you can view your drives on the [chffr](https://getchffr.com/) app for Android or iOS, and reverse engineer your car with [cabana](https://community.comma.ai/cabana/?demo=1).
-
-
-Hardware
-------
-
-Right now chffrplus supports the [EON Dashcam DevKit](https://shop.comma.ai/products/eon-dashcam-devkit) for hardware to run on.
-
-Install chffrplus on a EON device by entering ``https://chffrplus.comma.ai`` during NEOS setup.
-
-
-User Data / chffr Account / Crash Reporting
-------
-
-By default chffrplus creates an account and includes a client for chffr, our dashcam app.
-
-It's open source software, so you are free to disable it if you wish.
-
-It logs the road facing camera, CAN, GPS, IMU, magnetometer, thermal sensors, crashes, and operating system logs.
-It does not log the user facing camera or the microphone.
-
-By using it, you agree to [our privacy policy](https://beta.comma.ai/privacy.html). You understand that use of this software or its related services will generate certain types of user data, which may be logged and stored at the sole discretion of comma.ai. By accepting this agreement, you grant an irrevocable, perpetual, worldwide right to comma.ai for the use of this data.
-
-
-Licensing
-------
-
-chffrplus is released under the MIT license.
-
diff --git a/RELEASES.md b/RELEASES.md
index d847bb3f05bc8b..c427e60ddb5fcc 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,3 +1,173 @@
+Version 0.8.1 (2020-12-21)
+========================
+ * Original EON is deprecated, upgrade to comma two
+ * Better model performance in heavy rain
+ * Better lane positioning in turns
+ * Fixed bug where model would cut turns on empty roads at night
+ * Fixed issue where some Toyotas would not completely stop thanks to briskspirit!
+ * Toyota Camry 2021 with TSS2.5 support
+ * Hyundai Ioniq Electric 2020 support thanks to baldwalker!
+
+Version 0.8.0 (2020-11-30)
+========================
+ * New driving model: fully 3D and improved cut-in detection
+ * UI draws 2 road edges, 4 lanelines and paths in 3D
+ * Major fixes to cut-in detection for openpilot longitudinal
+ * Grey panda is no longer supported, upgrade to comma two or black panda
+ * Lexus NX 2018 support thanks to matt12eagles!
+ * Kia Niro EV 2020 support thanks to nickn17!
+ * Toyota Prius 2021 support thanks to rav4kumar!
+ * Improved lane positioning with uncertain lanelines, wide lanes and exits
+ * Improved lateral control for Prius and Subaru
+
+Version 0.7.10 (2020-10-29)
+========================
+ * Grey panda is deprecated, upgrade to comma two or black panda
+ * NEOS update: update to Python 3.8.2 and lower CPU frequency
+ * Improved thermals due to reduced CPU frequency
+ * Update SNPE to 1.41.0
+ * Reduced offroad power consumption
+ * Various system stability improvements
+ * Acura RDX 2020 support thanks to csouers!
+
+Version 0.7.9 (2020-10-09)
+========================
+ * Improved car battery power management
+ * Improved updater robustness
+ * Improved realtime performance
+ * Reduced UI and modeld lags
+ * Increased torque on 2020 Hyundai Sonata and Palisade
+
+Version 0.7.8 (2020-08-19)
+========================
+ * New driver monitoring model: improved face detection and better compatibility with sunglasses
+ * Download NEOS operating system updates in the background
+ * Improved updater reliability and responsiveness
+ * Hyundai Kona 2020, Veloster 2019, and Genesis G70 2018 support thanks to xps-genesis!
+
+Version 0.7.7 (2020-07-20)
+========================
+ * White panda is no longer supported, upgrade to comma two or black panda
+ * Improved vehicle model estimation using high precision localizer
+ * Improved thermal management on comma two
+ * Improved autofocus for road-facing camera
+ * Improved noise performance for driver-facing camera
+ * Block lane change start using blindspot monitor on select Toyota, Hyundai, and Subaru
+ * Fix GM ignition detection
+ * Code cleanup and smaller release sizes
+ * Hyundai Sonata 2020 promoted to officially supported car
+ * Hyundai Ioniq Electric Limited 2019 and Ioniq SE 2020 support thanks to baldwalker!
+ * Subaru Forester 2019 and Ascent 2019 support thanks to martinl!
+
+Version 0.7.6.1 (2020-06-16)
+========================
+ * Hotfix: update kernel on some comma twos (orders #8570-#8680)
+
+Version 0.7.6 (2020-06-05)
+========================
+ * White panda is deprecated, upgrade to comma two or black panda
+ * 2017 Nissan X-Trail, 2018-19 Leaf and 2019 Rogue support thanks to avolmensky!
+ * 2017 Mazda CX-5 support in dashcam mode thanks to Jafaral!
+ * Huge CPU savings in modeld by using thneed!
+ * Lots of code cleanup and refactors
+
+Version 0.7.5 (2020-05-13)
+========================
+ * Right-Hand Drive support for both driving and driver monitoring!
+ * New driving model: improved at sharp turns and lead speed estimation
+ * New driver monitoring model: overall improvement on comma two
+ * Driver camera preview in settings to improve mounting position
+ * Added support for many Hyundai, Kia, Genesis models thanks to xx979xx!
+ * Improved lateral tuning for 2020 Toyota Rav 4 (hybrid)
+
+Version 0.7.4 (2020-03-20)
+========================
+ * New driving model: improved lane changes and lead car detection
+ * Improved driver monitoring model: improve eye detection
+ * Improved calibration stability
+ * Improved lateral control on some 2019 and 2020 Toyota Prius
+ * Improved lateral control on VW Golf: 20% more steering torque
+ * Fixed bug where some 2017 and 2018 Toyota C-HR would use the wrong steering angle sensor
+ * Support for Honda Insight thanks to theantihero!
+ * Code cleanup in car abstraction layers and ui
+
+Version 0.7.3 (2020-02-21)
+========================
+ * Support for 2020 Highlander thanks to che220!
+ * Support for 2018 Lexus NX 300h thanks to kengggg!
+ * Speed up ECU firmware query
+ * Fix bug where manager would sometimes hang after shutting down the car
+
+Version 0.7.2 (2020-02-07)
+========================
+ * ECU firmware version based fingerprinting for Honda & Toyota
+ * New driving model: improved path prediction during turns and lane changes and better lead speed tracking
+ * Improve driver monitoring under extreme lighting and add low accuracy alert
+ * Support for 2019 Rav4 Hybrid thanks to illumiN8i!
+ * Support for 2016, 2017 and 2020 Lexus RX thanks to illumiN8i!
+ * Support for 2020 Chrysler Pacifica Hybrid thanks to adhintz!
+
+Version 0.7.1 (2020-01-20)
+========================
+ * comma two support!
+ * Lane Change Assist above 45 mph!
+ * Replace zmq with custom messaging library, msgq!
+ * Supercombo model: calibration and driving models are combined for better lead estimate
+ * More robust updater thanks to jyoung8607! Requires NEOS update
+ * Improve low speed ACC tuning
+
+Version 0.7 (2019-12-13)
+========================
+ * Move to SCons build system!
+ * Add Lane Departure Warning (LDW) for all supported vehicles!
+ * NEOS update: increase wifi speed thanks to jyoung8607!
+ * Adaptive driver monitoring based on scene
+ * New driving model trained end-to-end: improve lane lines and lead detection
+ * Smarter torque limit alerts for all cars
+ * Improve GM longitudinal control: proper computations for 15Hz radar
+ * Move GM port, Toyota with DSU removed, comma pedal in community features; toggle switch required
+ * Remove upload over cellular toggle: only upload qlog and qcamera files if not on wifi
+ * Refactor Panda code towards ISO26262 and SIL2 compliancy
+ * Forward stock FCW for Honda Nidec
+ * Volkswagen port now standard: comma Harness intercepts stock camera
+
+Version 0.6.6 (2019-11-05)
+========================
+ * Volkswagen support thanks to jyoung8607!
+ * Toyota Corolla Hybrid with TSS 2.0 support thanks to u8511049!
+ * Lexus ES with TSS 2.0 support thanks to energee!
+ * Fix GM ignition detection and lock safety mode not required anymore
+ * Log panda firmware and dongle ID thanks to martinl!
+ * New driving model: improve path prediction and lead detection
+ * New driver monitoring model, 4x smaller and running on DSP
+ * Display an alert and don't start openpilot if panda has wrong firmware
+ * Fix bug preventing EON from terminating processes after a drive
+ * Remove support for Toyota giraffe without the 120Ohm resistor
+
+Version 0.6.5 (2019-10-07)
+========================
+ * NEOS update: upgrade to Python3 and new installer!
+ * comma Harness support!
+ * New driving model: improve path prediction
+ * New driver monitoring model: more accurate face and eye detection
+ * Redesign offroad screen to display updates and alerts
+ * Increase maximum allowed acceleration
+ * Prevent car 12V battery drain by cutting off EON charge after 3 days of no drive
+ * Lexus CT Hybrid support thanks to thomaspich!
+ * Louder chime for critical alerts
+ * Add toggle to switch to dashcam mode
+ * Fix "invalid vehicle params" error on DSU-less Toyota
+
+Version 0.6.4 (2019-09-08)
+========================
+ * Forward stock AEB for Honda Nidec
+ * Improve lane centering on banked roads
+ * Always-on forward collision warning
+ * Always-on driver monitoring, except for right hand drive countries
+ * Driver monitoring learns the user's normal driving position
+ * Honda Fit support thanks to energee!
+ * Lexus IS support
+
Version 0.6.3 (2019-08-12)
========================
* Alert sounds from EON: requires NEOS update
@@ -38,7 +208,7 @@ Version 0.6 (2019-07-01)
* Panda safety code is MISRA compliant and ships with a signed version on release2
* New NEOS is 500MB smaller and has a reproducible usr/pipenv
* Lexus ES Hybrid support thanks to wocsor!
- * Improve tuning for supported Toyota with TSS2
+ * Improve tuning for supported Toyota with TSS 2.0
* Various other stability improvements
Version 0.5.13 (2019-05-31)
@@ -344,96 +514,96 @@ Version 0.3.4 (2017-07-28)
Version 0.3.3 (2017-06-28)
===========================
- * Improved model trained on more data
- * Alpha CR-V support thanks to energee and johnnwvs!
- * Using the opendbc project for DBC files
- * Minor performance improvements
- * UI update thanks to pjlao307
- * Power off button
- * 6% more torque on the Civic
+ * Improved model trained on more data
+ * Alpha CR-V support thanks to energee and johnnwvs!
+ * Using the opendbc project for DBC files
+ * Minor performance improvements
+ * UI update thanks to pjlao307
+ * Power off button
+ * 6% more torque on the Civic
Version 0.3.2 (2017-05-22)
===========================
- * Minor stability bugfixes
- * Added metrics and rear view mirror disable to settings
- * Update model with more crowdsourced data
+ * Minor stability bugfixes
+ * Added metrics and rear view mirror disable to settings
+ * Update model with more crowdsourced data
Version 0.3.1 (2017-05-17)
===========================
- * visiond stability bugfix
- * Add logging for angle and flashing
+ * visiond stability bugfix
+ * Add logging for angle and flashing
Version 0.3.0 (2017-05-12)
===========================
- * Add CarParams struct to improve the abstraction layer
- * Refactor visiond IPC to support multiple clients
- * Add raw GPS and beginning support for navigation
- * Improve model in visiond using crowdsourced data
- * Add improved system logging to diagnose instability
- * Rewrite baseui in React Native
- * Moved calibration to the cloud
+ * Add CarParams struct to improve the abstraction layer
+ * Refactor visiond IPC to support multiple clients
+ * Add raw GPS and beginning support for navigation
+ * Improve model in visiond using crowdsourced data
+ * Add improved system logging to diagnose instability
+ * Rewrite baseui in React Native
+ * Moved calibration to the cloud
Version 0.2.9 (2017-03-01)
===========================
- * Retain compatibility with NEOS v1
+ * Retain compatibility with NEOS v1
Version 0.2.8 (2017-02-27)
===========================
- * Fix bug where frames were being dropped in minute 71
+ * Fix bug where frames were being dropped in minute 71
Version 0.2.7 (2017-02-08)
===========================
- * Better performance and pictures at night
- * Fix ptr alignment issue in boardd
- * Fix brake error light, fix crash if too cold
+ * Better performance and pictures at night
+ * Fix ptr alignment issue in boardd
+ * Fix brake error light, fix crash if too cold
Version 0.2.6 (2017-01-31)
===========================
- * Fix bug in visiond model execution
+ * Fix bug in visiond model execution
Version 0.2.5 (2017-01-30)
===========================
- * Fix race condition in manager
+ * Fix race condition in manager
Version 0.2.4 (2017-01-27)
===========================
- * OnePlus 3T support
- * Enable installation as NEOS app
- * Various minor bugfixes
+ * OnePlus 3T support
+ * Enable installation as NEOS app
+ * Various minor bugfixes
Version 0.2.3 (2017-01-11)
===========================
- * Reduce space usage by 80%
- * Add better logging
- * Add Travis CI
+ * Reduce space usage by 80%
+ * Add better logging
+ * Add Travis CI
Version 0.2.2 (2017-01-10)
===========================
- * Board triggers started signal on CAN messages
- * Improved autoexposure
- * Handle out of space, improve upload status
+ * Board triggers started signal on CAN messages
+ * Improved autoexposure
+ * Handle out of space, improve upload status
Version 0.2.1 (2016-12-14)
===========================
- * Performance improvements, removal of more numpy
- * Fix boardd process priority
- * Make counter timer reset on use of steering wheel
+ * Performance improvements, removal of more numpy
+ * Fix boardd process priority
+ * Make counter timer reset on use of steering wheel
Version 0.2 (2016-12-12)
=========================
- * Car/Radar abstraction layers have shipped, see cereal/car.capnp
- * controlsd has been refactored
- * Shipped plant model and testing maneuvers
- * visiond exits more gracefully now
- * Hardware encoder in visiond should always init
- * ui now turns off the screen after 30 seconds
- * Switch to openpilot release branch for future releases
- * Added preliminary Docker container to run tests on PC
+ * Car/Radar abstraction layers have shipped, see cereal/car.capnp
+ * controlsd has been refactored
+ * Shipped plant model and testing maneuvers
+ * visiond exits more gracefully now
+ * Hardware encoder in visiond should always init
+ * ui now turns off the screen after 30 seconds
+ * Switch to openpilot release branch for future releases
+ * Added preliminary Docker container to run tests on PC
Version 0.1 (2016-11-29)
=========================
- * Initial release of openpilot
- * Adaptive cruise control is working
- * Lane keep assist is working
- * Support for Acura ILX 2016 with AcuraWatch Plus
- * Support for Honda Civic 2016 Touring Edition
+ * Initial release of openpilot
+ * Adaptive cruise control is working
+ * Lane keep assist is working
+ * Support for Acura ILX 2016 with AcuraWatch Plus
+ * Support for Honda Civic 2016 Touring Edition
diff --git a/SAFETY.md b/SAFETY.md
index 3cda811e0cd9f9..9cf8933b930987 100644
--- a/SAFETY.md
+++ b/SAFETY.md
@@ -1,151 +1,34 @@
openpilot Safety
======
-openpilot is an Adaptive Cruise Control (ACC) and Lane Keeping Assist (LKA) system.
-Like other ACC and LKA systems, openpilot requires the driver to be alert and to
-pay attention at all times. We repeat, **driver alertness is necessary, but not
-sufficient, for openpilot to be used safely**.
+openpilot is an Adaptive Cruise Control (ACC) and Automated Lane Centering (ALC) system.
+Like other ACC and ALC systems, openpilot is a failsafe passive system and it requires the
+driver to be alert and to pay attention at all times.
In order to enforce driver alertness, openpilot includes a driver monitoring feature
that alerts the driver when distracted.
However, even with an attentive driver, we must make further efforts for the system to be
-safe. We have designed openpilot with two other safety considerations.
+safe. We repeat, **driver alertness is necessary, but not sufficient, for openpilot to be
+used safely** and openpilot is provided with no warranty of fitness for any purpose.
-1. The driver must always be capable to immediately retake manual control of the vehicle,
+openpilot is developed in good faith to be compliant with FMVSS requirements and to follow
+industry standards of safety for Level 2 Driver Assistance Systems. In particular, we observe
+ISO26262 guidelines, including those from [pertinent documents](https://www.nhtsa.gov/sites/nhtsa.dot.gov/files/documents/13498a_812_573_alcsystemreport.pdf)
+released by NHTSA. In addition, we impose strict coding guidelines (like [MISRA C : 2012](https://www.misra.org.uk/MISRAHome/MISRAC2012/tabid/196/Default.aspx))
+on parts of openpilot that are safety relevant. We also perform software-in-the-loop,
+hardware-in-the-loop and in-vehicle tests before each software release.
+
+Following Hazard and Risk Analysis and FMEA, at a very high level, we have designed openpilot
+ensuring two main safety requirements.
+
+1. The driver must always be capable to immediately retake manual control of the vehicle,
by stepping on either pedal or by pressing the cancel button.
2. The vehicle must not alter its trajectory too quickly for the driver to safely
react. This means that while the system is engaged, the actuators are constrained
to operate within reasonable limits.
-Following are details of the car specific safety implementations:
-
-Honda/Acura
-------
-
- - While the system is engaged, gas, brake and steer commands are subject to the same limits used by
- the stock system.
-
- - Without an interceptor, the gas is controlled by the Powertrain Control Module (PCM).
- The PCM limits acceleration to what is reasonable for a cruise control system. With an
- interceptor, the gas is clipped to 60%.
-
- - The brake is controlled by the 0x1FA CAN message. This message allows full
- braking, although the panda firmware and openpilot clip it to 1/4th of the max.
- This is approximately 0.3g of braking.
-
- - Steering is controlled by the 0xE4 CAN message. The Electronic Power Steering (EPS)
- controller in the car limits the torque to a very small amount, so regardless of the
- message, the controller cannot jerk the wheel.
-
- - Brake and gas pedal pressed signals are contained in the 0x17C CAN message. A rising edge of
- either signals triggers a disengagement, which is enforced by the panda firmware and by openpilot. The
- white led on the panda signifies if the panda is allowing control messages.
-
- - Honda CAN uses both a counter and a checksum to ensure integrity and prevent
- replay of the same message.
-
-Toyota/Lexus
-------
-
- - While the system is engaged, gas, brake and steer commands are subject to the same limits used by
- the stock system.
-
- - With the stock Driving Support Unit (DSU) connected (or in DSU-less models like Camry and C-HR),
- the acceleration is controlled by the stock system and is subject to the stock adaptive cruise
- control limits. Without the stock DSU connected, the acceleration command is controlled by the
- 0x343 CAN message and its value is limited between .3g of deceleration and .15g of acceleration
- by the panda firmware and by openpilot. The acceleration command is ignored by the Engine Control
- Module (ECM) while the cruise control system is disengaged.
-
- - Steering torque is controlled through the 0x2E4 CAN message and it's limited by the panda firmware and by
- openpilot to a value between -1500 and 1500. In addition, the vehicle EPS unit will not respond to
- commands outside these limits. A steering torque rate limit is enforced by the panda firmware and by
- openpilot, so that the commanded steering torque must rise from 0 to max value no faster than
- 1.5s. Commanded steering torque is limited by the panda firmware and by openpilot to be no more than 350
- units above the actual EPS generated motor torque to ensure limited differences between
- commanded and actual torques.
-
- - Brake and gas pedal pressed signals are contained in the 0x224 and 0x1D2 CAN messages,
- respectively. A rising edge of either signals triggers a disengagement, which is enforced by the
- panda firmware and by openpilot. Additionally, the cruise control system disengages on the rising edge of
- the brake pedal pressed signal.
-
- - The cruise control system state is contained in the 0x1D2 message. No control messages are
- allowed if the cruise control system is not active. This is enforced by openpilot and the
- panda firmware. The white led on the panda signifies if the panda is allowing control messages.
-
-GM/Chevrolet
-------
-
- - While the system is engaged, gas, brake and steer commands are subject to the same limits used by
- the stock system.
-
- - The gas and regen are controlled by the 0x2CB message and it's limited by the panda firmware and by
- openpilot to a value between 1404 and 3072. the minimum value correspond to a mild decel due to regen,
- while 3072 correspond to approximately 0.18g of acceleration from stop.
-
- - The friction brakes are controlled by the 0x315 message and its value is limited by the panda firmware
- and openpilot to 350. This is approximately 0.3g of braking.
-
- - Steering torque is controlled through the 0x180 CAN message and it's limited by the panda firmware and by
- openpilot to a value between -300 and 300. In addition, the vehicle EPS unit will fault for
- commands outside these limits. A steering torque rate limit is enforced by the panda firmware and by
- openpilot, so that the commanded steering torque must rise from 0 to max value no faster than
- 0.75s. Commanded steering torque is gradually limited by the panda firmware and by openpilot if the driver's
- torque exceeds 12 units in the opposite dicrection to ensure limited applied torque against the
- driver's will.
-
- - Brake pedal and gas pedal potentiometer signals are contained in the 0xF1 and 0x1A1 CAN messages,
- respectively. A rising edge of either signals triggers a disengagement, which is enforced by the
- panda firmware and by openpilot. Additionally, the cruise control system disengages on the rising edge of
- the brake pedal pressed signal. The regen paddle pressed signal is in the 0xBD message. When the
- regen paddle is pressed, a disengagement is enforced by both the firmware and by openpilot.
-
- - GM CAN uses both a counter and a checksum to ensure integrity and prevent
- replay of the same message.
-
-Hyundai/Kia (Lateral only)
-------
-
- - While the system is engaged, steer commands are subject to the same limits used by
- the stock system.
-
- - Steering torque is controlled through the 0x340 CAN message and it's limited by the panda firmware and by
- openpilot to a value between -255 and 255. In addition, the vehicle EPS unit will fault for
- commands outside the values of -409 and 409. A steering torque rate limit is enforced by the panda firmware and by
- openpilot, so that the commanded steering torque must rise from 0 to max value no faster than
- 0.85s. Commanded steering torque is gradually limited by the panda firmware and by openpilot if the driver's
- torque exceeds 50 units in the opposite dicrection to ensure limited applied torque against the
- driver's will.
-
-Chrysler/Jeep/Fiat (Lateral only)
-------
-
- - While the system is engaged, steer commands are subject to the same limits used by
- the stock system.
-
- - Steering torque is controlled through the 0x292 CAN message and it's limited by the panda firmware and by
- openpilot to a value between -261 and 261. In addition, the vehicle EPS unit will fault for
- commands outside these limits. A steering torque rate limit is enforced by the panda firmware and by
- openpilot, so that the commanded steering torque must rise from 0 to max value no faster than
- 0.87s. Commanded steering torque is limited by the panda firmware and by openpilot to be no more than 80
- units above the actual EPS generated motor torque to ensure limited differences between
- commanded and actual torques.
-
-Subaru (Lateral only)
-------
-
- - While the system is engaged, steer commands are subject to the same limits used by
- the stock system.
-
- - Steering torque is controlled through the 0x122 CAN message and it's limited by the panda firmware and by
- openpilot to a value between -255 and 255. In addition, the vehicle EPS unit will fault for
- commands outside the values of -2047 and 2047. A steering torque rate limit is enforced by the panda firmware and by
- openpilot, so that the commanded steering torque must rise from 0 to max value no faster than
- 0.41s. Commanded steering torque is gradually limited by the panda firmware and by openpilot if the driver's
- torque exceeds 60 units in the opposite dicrection to ensure limited applied torque against the
- driver's will.
+For vehicle specific implementation of the safety concept, refer to `panda/board/safety/`.
**Extra note**: comma.ai strongly discourages the use of openpilot forks with safety code either missing or
not fully meeting the above requirements.
diff --git a/SConstruct b/SConstruct
new file mode 100644
index 00000000000000..609cea334af813
--- /dev/null
+++ b/SConstruct
@@ -0,0 +1,305 @@
+import os
+import shutil
+import subprocess
+import sys
+import sysconfig
+import platform
+import numpy as np
+
+TICI = os.path.isfile('/TICI')
+Decider('MD5-timestamp')
+
+AddOption('--test',
+ action='store_true',
+ help='build test files')
+
+AddOption('--asan',
+ action='store_true',
+ help='turn on ASAN')
+
+real_arch = arch = subprocess.check_output(["uname", "-m"], encoding='utf8').rstrip()
+is_tbp = os.path.isfile('/data/tinkla_buddy_pro')
+if arch == "aarch64" and is_tbp:
+ arch = "jarch64"
+if platform.system() == "Darwin":
+ arch = "Darwin"
+
+if arch == "aarch64" and TICI:
+ arch = "larch64"
+
+USE_WEBCAM = os.getenv("USE_WEBCAM") is not None
+QCOM_REPLAY = arch == "aarch64" and os.getenv("QCOM_REPLAY") is not None
+
+if arch == "aarch64" or arch == "larch64":
+ lenv = {
+ "LD_LIBRARY_PATH": '/data/data/com.termux/files/usr/lib',
+ "PATH": os.environ['PATH'],
+ }
+
+ if arch == "aarch64":
+ # android
+ lenv["ANDROID_DATA"] = os.environ['ANDROID_DATA']
+ lenv["ANDROID_ROOT"] = os.environ['ANDROID_ROOT']
+
+ cpppath = [
+ "#phonelibs/opencl/include",
+ "#phonelibs/snpe/include",
+ ]
+
+ libpath = [
+ "/usr/lib",
+ "/system/vendor/lib64",
+ "/system/comma/usr/lib",
+ "#phonelibs/nanovg",
+ ]
+
+ if arch == "larch64":
+ cpppath += ["#phonelibs/capnp-cpp/include", "#phonelibs/capnp-c/include"]
+ libpath += [
+ "#phonelibs/snpe/larch64",
+ "#phonelibs/libyuv/larch64/lib",
+ "/usr/lib/aarch64-linux-gnu"
+ ]
+ cflags = ["-DQCOM2", "-mcpu=cortex-a57"]
+ cxxflags = ["-DQCOM2", "-mcpu=cortex-a57"]
+ rpath = ["/usr/local/lib"]
+ else:
+ libpath += [
+ "#phonelibs/snpe/aarch64",
+ "#phonelibs/libyuv/lib",
+ "/system/vendor/lib64"
+ ]
+ cflags = ["-DQCOM", "-mcpu=cortex-a57"]
+ cxxflags = ["-DQCOM", "-mcpu=cortex-a57"]
+ rpath = []
+
+ if QCOM_REPLAY:
+ cflags += ["-DQCOM_REPLAY"]
+ cxxflags += ["-DQCOM_REPLAY"]
+
+else:
+ cflags = []
+ cxxflags = []
+
+ lenv = {
+ "PATH": "#external/bin:" + os.environ['PATH'],
+ }
+ cpppath = [
+ "#external/tensorflow/include",
+ "#phonelibs/snpe/include",
+ ]
+
+ if arch == "Darwin":
+ libpath = [
+ "#phonelibs/libyuv/mac/lib",
+ "#cereal",
+ "#selfdrive/common",
+ "/usr/local/lib",
+ "/System/Library/Frameworks/OpenGL.framework/Libraries",
+ ]
+ cflags += ["-DGL_SILENCE_DEPRECATION"]
+ cxxflags += ["-DGL_SILENCE_DEPRECATION"]
+ else:
+ libpath = [
+ "#phonelibs/snpe/x86_64-linux-clang",
+ "#phonelibs/libyuv/x64/lib",
+ "#external/tensorflow/lib",
+ "#cereal",
+ "#selfdrive/common",
+ "/usr/lib",
+ "/usr/local/lib",
+ ]
+
+ rpath = [
+ "phonelibs/snpe/x86_64-linux-clang",
+ "external/tensorflow/lib",
+ "cereal",
+ "selfdrive/common"
+ ]
+
+ # allows shared libraries to work globally
+ rpath = [os.path.join(os.getcwd(), x) for x in rpath]
+
+if GetOption('asan'):
+ ccflags_asan = ["-fsanitize=address", "-fno-omit-frame-pointer"]
+ ldflags_asan = ["-fsanitize=address"]
+else:
+ ccflags_asan = []
+ ldflags_asan = []
+
+# change pythonpath to this
+lenv["PYTHONPATH"] = Dir("#").path
+
+env = Environment(
+ ENV=lenv,
+ CCFLAGS=[
+ "-g",
+ "-fPIC",
+ "-O2",
+ "-Wunused",
+ "-Werror",
+ "-Wno-unknown-warning-option",
+ "-Wno-deprecated-register",
+ "-Wno-register",
+ "-Wno-inconsistent-missing-override",
+ "-Wno-c99-designator",
+ "-Wno-reorder-init-list",
+ ] + cflags + ccflags_asan,
+
+ CPPPATH=cpppath + [
+ "#",
+ "#selfdrive",
+ "#phonelibs/bzip2",
+ "#phonelibs/libyuv/include",
+ "#phonelibs/openmax/include",
+ "#phonelibs/json11",
+ "#phonelibs/curl/include",
+ "#phonelibs/libgralloc/include",
+ "#phonelibs/android_frameworks_native/include",
+ "#phonelibs/android_hardware_libhardware/include",
+ "#phonelibs/android_system_core/include",
+ "#phonelibs/linux/include",
+ "#phonelibs/snpe/include",
+ "#phonelibs/nanovg",
+ "#selfdrive/boardd",
+ "#selfdrive/common",
+ "#selfdrive/camerad",
+ "#selfdrive/camerad/include",
+ "#selfdrive/loggerd/include",
+ "#selfdrive/modeld",
+ "#selfdrive/sensord",
+ "#selfdrive/ui",
+ "#cereal/messaging",
+ "#cereal",
+ "#opendbc/can",
+ ],
+
+ CC='clang',
+ CXX='clang++',
+ LINKFLAGS=ldflags_asan,
+
+ RPATH=rpath,
+
+ CFLAGS=["-std=gnu11"] + cflags,
+ CXXFLAGS=["-std=c++1z"] + cxxflags,
+ LIBPATH=libpath + [
+ "#cereal",
+ "#phonelibs",
+ "#opendbc/can",
+ "#selfdrive/boardd",
+ "#selfdrive/common",
+ ],
+ CYTHONCFILESUFFIX=".cpp",
+ COMPILATIONDB_USE_ABSPATH=True,
+ tools=["default", "cython", "compilation_db"],
+)
+
+if GetOption('test'):
+ env.CompilationDatabase('compile_commands.json')
+
+if os.environ.get('SCONS_CACHE'):
+ cache_dir = '/tmp/scons_cache'
+ if TICI:
+ cache_dir = '/data/scons_cache'
+
+ if QCOM_REPLAY:
+ cache_dir = '/tmp/scons_cache_qcom_replay'
+
+ CacheDir(cache_dir)
+
+node_interval = 5
+node_count = 0
+def progress_function(node):
+ global node_count
+ node_count += node_interval
+ sys.stderr.write("progress: %d\n" % node_count)
+
+if os.environ.get('SCONS_PROGRESS'):
+ Progress(progress_function, interval=node_interval)
+
+SHARED = False
+
+def abspath(x):
+ if arch == 'aarch64':
+ pth = os.path.join("/data/pythonpath", x[0].path)
+ env.Depends(pth, x)
+ return File(pth)
+ else:
+ # rpath works elsewhere
+ return x[0].path.rsplit("/", 1)[1][:-3]
+
+# Cython build enviroment
+py_include = sysconfig.get_paths()['include']
+envCython = env.Clone()
+envCython["CPPPATH"] += [py_include, np.get_include()]
+envCython["CCFLAGS"] += ["-Wno-#warnings", "-Wno-deprecated-declarations"]
+
+envCython["LIBS"] = []
+if arch == "Darwin":
+ envCython["LINKFLAGS"] = ["-bundle", "-undefined", "dynamic_lookup"]
+elif arch == "aarch64":
+ envCython["LINKFLAGS"] = ["-shared"]
+ envCython["LIBS"] = [os.path.basename(py_include)]
+else:
+ envCython["LINKFLAGS"] = ["-pthread", "-shared"]
+
+Export('envCython')
+
+# still needed for apks
+zmq = 'zmq'
+Export('env', 'arch', 'real_arch', 'zmq', 'SHARED', 'USE_WEBCAM', 'QCOM_REPLAY')
+
+# cereal and messaging are shared with the system
+SConscript(['cereal/SConscript'])
+if SHARED:
+ cereal = abspath([File('cereal/libcereal_shared.so')])
+ messaging = abspath([File('cereal/libmessaging_shared.so')])
+else:
+ cereal = [File('#cereal/libcereal.a')]
+ messaging = [File('#cereal/libmessaging.a')]
+Export('cereal', 'messaging')
+
+SConscript(['selfdrive/common/SConscript'])
+Import('_common', '_visionipc', '_gpucommon', '_gpu_libs')
+
+if SHARED:
+ common, visionipc, gpucommon = abspath(common), abspath(visionipc), abspath(gpucommon)
+else:
+ common = [_common, 'json11']
+ visionipc = _visionipc
+ gpucommon = [_gpucommon] + _gpu_libs
+
+Export('common', 'visionipc', 'gpucommon')
+
+SConscript(['opendbc/can/SConscript'])
+
+SConscript(['common/SConscript'])
+SConscript(['common/kalman/SConscript'])
+SConscript(['common/transformations/SConscript'])
+SConscript(['phonelibs/SConscript'])
+
+SConscript(['selfdrive/camerad/SConscript'])
+SConscript(['selfdrive/modeld/SConscript'])
+
+SConscript(['selfdrive/controls/lib/cluster/SConscript'])
+SConscript(['selfdrive/controls/lib/lateral_mpc/SConscript'])
+SConscript(['selfdrive/controls/lib/longitudinal_mpc/SConscript'])
+SConscript(['selfdrive/controls/lib/longitudinal_mpc_model/SConscript'])
+
+SConscript(['selfdrive/boardd/SConscript'])
+SConscript(['selfdrive/proclogd/SConscript'])
+SConscript(['selfdrive/clocksd/SConscript'])
+
+SConscript(['selfdrive/loggerd/SConscript'])
+
+SConscript(['selfdrive/locationd/SConscript'])
+SConscript(['selfdrive/locationd/models/SConscript'])
+SConscript(['selfdrive/sensord/SConscript'])
+SConscript(['selfdrive/ui/SConscript'])
+
+if arch != "Darwin":
+ SConscript(['selfdrive/logcatd/SConscript'])
+
+if arch == "x86_64":
+ SConscript(['tools/lib/index_log/SConscript'])
+
diff --git a/apk/ai.comma.plus.black.apk b/apk/ai.comma.plus.black.apk
deleted file mode 100644
index 94b3a6a1915a8c..00000000000000
Binary files a/apk/ai.comma.plus.black.apk and /dev/null differ
diff --git a/apk/ai.comma.plus.frame.apk b/apk/ai.comma.plus.frame.apk
deleted file mode 100644
index 374862a792d77a..00000000000000
Binary files a/apk/ai.comma.plus.frame.apk and /dev/null differ
diff --git a/apk/ai.comma.plus.offroad.apk b/apk/ai.comma.plus.offroad.apk
index 5dd8b8f204fa3e..90570253edabdb 100644
Binary files a/apk/ai.comma.plus.offroad.apk and b/apk/ai.comma.plus.offroad.apk differ
diff --git a/cereal/.gitignore b/cereal/.gitignore
index 3f6de09fb90f69..40b416ea603930 100644
--- a/cereal/.gitignore
+++ b/cereal/.gitignore
@@ -1,6 +1,15 @@
gen
node_modules
package-lock.json
+*.tmp
*.pyc
__pycache__
-
+.*.swp
+.*.swo
+libcereal*.a
+libmessaging.*
+libmessaging_shared.*
+services.h
+.sconsign.dblite
+libcereal_shared.*
+.mypy_cache/
diff --git a/cereal/Makefile b/cereal/Makefile
deleted file mode 100644
index 9a206a7c106322..00000000000000
--- a/cereal/Makefile
+++ /dev/null
@@ -1,62 +0,0 @@
-PWD := $(shell pwd)
-
-SRCS := log.capnp car.capnp ui.capnp tinkla.capnp tesla.capnp
-
-GENS := gen/cpp/car.capnp.c++ gen/cpp/log.capnp.c++ gen/cpp/ui.capnp.c++ gen/cpp/tinkla.capnp.c++ gen/cpp/tesla.capnp.c++
-JS := gen/js/car.capnp.js gen/js/log.capnp.js gen/js/ui.capnp.js gen/js/tinkla.capnp.js gen/js/tesla.capnp.js
-
-UNAME_M ?= $(shell uname -m)
-
-GENS += gen/c/car.capnp.c gen/c/log.capnp.c gen/c/ui.capnp.c gen/c/tinkla.capnp.c gen/c/tesla.capnp.c gen/c/include/c++.capnp.h gen/c/include/java.capnp.h
-
-ifeq ($(UNAME_M),x86_64)
-
-ifneq (, $(shell which capnpc-java))
-GENS += gen/java/Car.java gen/java/Log.java gen/java/Tesla.java gen/java/Ui.java
-else
-$(warning capnpc-java not found, skipping java build)
-endif
-
-endif
-
-
-ifeq ($(UNAME_M),aarch64)
-CAPNPC=PATH=$(PWD)/../phonelibs/capnp-cpp/aarch64/bin/:$$PATH capnpc
-else
-CAPNPC=capnpc
-endif
-
-.PHONY: all
-all: $(GENS)
-js: $(JS)
-
-.PHONY: clean
-clean:
- rm -rf gen
- rm -rf node_modules
- rm -rf package-lock.json
-
-gen/c/%.capnp.c: %.capnp
- @echo "[ CAPNPC C ] $@"
- mkdir -p gen/c/
- $(CAPNPC) '$<' -o c:gen/c/
-
-gen/js/%.capnp.js: %.capnp
- @echo "[ CAPNPC JavaScript ] $@"
- mkdir -p gen/js/
- sh ./generate_javascript.sh
-
-gen/cpp/%.capnp.c++: %.capnp
- @echo "[ CAPNPC C++ ] $@"
- mkdir -p gen/cpp/
- $(CAPNPC) '$<' -o c++:gen/cpp/
-
-gen/java/Car.java gen/java/Log.java: $(SRCS)
- @echo "[ CAPNPC java ] $@"
- mkdir -p gen/java/
- $(CAPNPC) $^ -o java:gen/java
-
-# c-capnproto needs some empty headers
-gen/c/include/c++.capnp.h gen/c/include/java.capnp.h:
- mkdir -p gen/c/include
- touch '$@'
diff --git a/cereal/SConscript b/cereal/SConscript
new file mode 100644
index 00000000000000..5c9221445f9cf3
--- /dev/null
+++ b/cereal/SConscript
@@ -0,0 +1,69 @@
+Import('env', 'envCython', 'arch', 'zmq')
+
+import shutil
+
+cereal_dir = Dir('.')
+gen_dir = Dir('gen')
+messaging_dir = Dir('messaging')
+
+# TODO: remove src-prefix and cereal from command string. can we set working directory?
+env.Command(["gen/c/include/c++.capnp.h", "gen/c/include/java.capnp.h"], [], "mkdir -p " + gen_dir.path + "/c/include && touch $TARGETS")
+env.Command(['gen/cpp/car.capnp.c++', 'gen/cpp/log.capnp.c++', 'gen/cpp/car.capnp.h', 'gen/cpp/log.capnp.h',
+'gen/cpp/tesla.capnp.c++', 'gen/cpp/tesla.capnp.h', 'gen/cpp/tinkla.capnp.c++', 'gen/cpp/tinkla.capnp.h', 'gen/cpp/ui.capnp.c++', 'gen/cpp/ui.capnp.h'],
+ ['car.capnp', 'log.capnp',
+'tesla.capnp', 'tinkla.capnp', 'ui.capnp'],
+ f"capnpc --src-prefix={cereal_dir.path} $SOURCES -o c++:{gen_dir.path}/cpp/")
+
+if shutil.which('capnpc-java'):
+ env.Command(['gen/java/Car.java', 'gen/java/Log.java',
+'gen/java/Tesla.java', 'gen/java/Tinkla.java', 'gen/java/Ui.java'],
+ ['car.capnp', 'log.capnp',
+'tesla.capnp', 'tinkla.capnp', 'ui.capnp'],
+ f"capnpc $SOURCES --src-prefix={cereal_dir.path} -o java:{gen_dir.path}/java/")
+
+# TODO: remove non shared cereal and messaging
+cereal_objects = env.SharedObject([
+ 'gen/cpp/car.capnp.c++',
+ 'gen/cpp/log.capnp.c++',
+ 'gen/cpp/tesla.capnp.c++',
+ 'messaging/socketmaster.cc',
+ 'gen/cpp/ui.capnp.c++',
+ 'gen/cpp/tinkla.capnp.c++',
+])
+
+env.Library('cereal', cereal_objects)
+env.SharedLibrary('cereal_shared', cereal_objects)
+
+cereal_dir = Dir('.')
+services_h = env.Command(['services.h'],
+ ['service_list.yaml', 'services.py'],
+ 'python3 ' + cereal_dir.path + '/services.py > $TARGET')
+
+messaging_objects = env.SharedObject([
+ 'messaging/messaging.cc',
+ 'messaging/impl_zmq.cc',
+ 'messaging/impl_msgq.cc',
+ 'messaging/msgq.cc',
+ 'messaging/socketmaster.cc',
+])
+
+messaging_lib = env.Library('messaging', messaging_objects)
+Depends('messaging/impl_zmq.cc', services_h)
+
+# note, this rebuilds the deps shared, zmq is statically linked to make APK happy
+# TODO: get APK to load system zmq to remove the static link
+if arch == "aarch64":
+ zmq_static = FindFile("libzmq.a", "/usr/lib")
+ shared_lib_shared_lib = [zmq_static, 'm', 'stdc++', "gnustl_shared", "kj", "capnp"]
+ env.SharedLibrary('messaging_shared', messaging_objects, LIBS=shared_lib_shared_lib)
+
+env.Program('messaging/bridge', ['messaging/bridge.cc'], LIBS=[messaging_lib, 'zmq'])
+Depends('messaging/bridge.cc', services_h)
+
+# different target?
+#env.Program('messaging/demo', ['messaging/demo.cc'], LIBS=[messaging_lib, 'zmq'])
+
+envCython.Program('messaging/messaging_pyx.so', 'messaging/messaging_pyx.pyx', LIBS=envCython["LIBS"]+[messaging_lib, "zmq"])
+
+if GetOption('test'):
+ env.Program('messaging/test_runner', ['messaging/test_runner.cc', 'messaging/msgq_tests.cc'], LIBS=[messaging_lib])
diff --git a/cereal/__init__.py b/cereal/__init__.py
index 45c5c65e72550c..a9074bf9eeae82 100644
--- a/cereal/__init__.py
+++ b/cereal/__init__.py
@@ -1,3 +1,4 @@
+# pylint: skip-file
import os
import capnp
diff --git a/cereal/car.capnp b/cereal/car.capnp
index 6306abc759a218..a9f2e9034d258e 100644
--- a/cereal/car.capnp
+++ b/cereal/car.capnp
@@ -13,19 +13,18 @@ struct CarEvent @0x9b1657f34caf3ad3 {
name @0 :EventName;
enable @1 :Bool;
noEntry @2 :Bool;
- warning @3 :Bool;
+ warning @3 :Bool; # alerts presented only when enabled or soft disabling
userDisable @4 :Bool;
softDisable @5 :Bool;
immediateDisable @6 :Bool;
preEnable @7 :Bool;
- permanent @8 :Bool;
+ permanent @8 :Bool; # alerts presented regardless of openpilot state
enum EventName @0xbaa8c5d505f727de {
# TODO: copy from error list
canError @0;
steerUnavailable @1;
brakeUnavailable @2;
- gasUnavailable @3;
wrongGear @4;
doorOpen @5;
seatbeltNotLatched @6;
@@ -38,7 +37,6 @@ struct CarEvent @0x9b1657f34caf3ad3 {
pedalPressed @13;
cruiseDisabled @14;
radarCanError @15;
- dataNeeded @16;
speedTooLow @17;
outOfSpace @18;
overheat @19;
@@ -49,29 +47,22 @@ struct CarEvent @0x9b1657f34caf3ad3 {
pcmDisable @24;
noTarget @25;
radarFault @26;
- modelCommIssueDEPRECATED @27;
brakeHold @28;
parkBrake @29;
manualRestart @30;
lowSpeedLockout @31;
plannerError @32;
- ipasOverride @33;
debugAlert @34;
steerTempUnavailableMute @35;
resumeRequired @36;
preDriverDistracted @37;
promptDriverDistracted @38;
driverDistracted @39;
- geofence @40;
- driverMonitorOn @41;
- driverMonitorOff @42;
preDriverUnresponsive @43;
promptDriverUnresponsive @44;
driverUnresponsive @45;
belowSteerSpeed @46;
- calibrationProgress @47;
lowBattery @48;
- invalidGiraffeHonda @49;
vehicleModelInvalid @50;
controlsFailed @51;
sensorDataInvalid @52;
@@ -79,6 +70,54 @@ struct CarEvent @0x9b1657f34caf3ad3 {
tooDistracted @54;
posenetInvalid @55;
soundsUnavailable @56;
+ preLaneChangeLeft @57;
+ preLaneChangeRight @58;
+ laneChange @59;
+ internetConnectivityNeeded @61;
+ communityFeatureDisallowed @62;
+ lowMemory @63;
+ stockAeb @64;
+ ldw @65;
+ carUnrecognized @66;
+ radarCommIssue @67;
+ driverMonitorLowAcc @68;
+ invalidLkasSetting @69;
+ speedTooHigh @70;
+ laneChangeBlocked @71;
+ relayMalfunction @72;
+ gasPressed @73;
+ stockFcw @74;
+ startup @75;
+ startupNoCar @76;
+ startupNoControl @77;
+ startupMaster @78;
+ fcw @79;
+ steerSaturated @80;
+ belowEngageSpeed @84;
+ noGps @85;
+ wrongCruiseMode @87;
+ modeldLagging @89;
+ deviceFalling @90;
+ fanMalfunction @91;
+ cameraMalfunction @92;
+
+ startupOneplus @82;
+
+ gasUnavailableDEPRECATED @3;
+ dataNeededDEPRECATED @16;
+ modelCommIssueDEPRECATED @27;
+ ipasOverrideDEPRECATED @33;
+ geofenceDEPRECATED @40;
+ driverMonitorOnDEPRECATED @41;
+ driverMonitorOffDEPRECATED @42;
+ calibrationProgressDEPRECATED @47;
+ invalidGiraffeHondaDEPRECATED @49;
+ invalidGiraffeToyotaDEPRECATED @60;
+ whitePandaUnsupportedDEPRECATED @81;
+ commIssueWarningDEPRECATED @83;
+ focusRecoverActiveDEPRECATED @86;
+ neosUpdateRequiredDEPRECATED @88;
+ modelLagWarningDEPRECATED @93;
}
}
@@ -107,11 +146,17 @@ struct CarState {
brakeLights @19 :Bool;
# steering wheel
- steeringAngle @7 :Float32; # deg
- steeringRate @15 :Float32; # deg/s
- steeringTorque @8 :Float32; # TODO: standardize units
+ steeringAngle @7 :Float32; # deg
+ steeringRate @15 :Float32; # deg/s
+ steeringTorque @8 :Float32; # TODO: standardize units
steeringTorqueEps @27 :Float32; # TODO: standardize units
- steeringPressed @9 :Bool; # if the user is using the steering wheel
+ steeringPressed @9 :Bool; # if the user is using the steering wheel
+ steeringRateLimited @29 :Bool; # if the torque is limited by the rate limiter
+ steerWarning @35 :Bool; # temporary steer unavailble
+ steerError @36 :Bool; # permanent steer error
+ stockAeb @30 :Bool;
+ stockFcw @31 :Bool;
+ espDisabled @32 :Bool;
# cruise state
cruiseState @10 :CruiseState;
@@ -130,9 +175,16 @@ struct CarState {
seatbeltUnlatched @25 :Bool;
canValid @26 :Bool;
+ # clutch (manual transmission only)
+ clutchPressed @28 :Bool;
+
# which packets this state came from
canMonoTimes @12: List(UInt64);
+ # blindspot sensors
+ leftBlindspot @33 :Bool; # Is there something blocking the left lane change
+ rightBlindspot @34 :Bool; # Is there something blocking the right lane change
+
struct WheelSpeeds {
# optional wheel speeds
fl @0 :Float32;
@@ -147,6 +199,7 @@ struct CarState {
available @2 :Bool;
speedOffset @3 :Float32;
standstill @4 :Bool;
+ nonAdaptive @5 :Bool;
}
enum GearShifter {
@@ -158,9 +211,10 @@ struct CarState {
sport @5;
low @6;
brake @7;
+ eco @8;
+ manumatic @9;
}
-
# send on change
struct ButtonEvent {
pressed @0 :Bool;
@@ -176,6 +230,9 @@ struct CarState {
altButton1 @6;
altButton2 @7;
altButton3 @8;
+ setCruise @9;
+ resumeCruise @10;
+ gapAdjustCruise @11;
}
}
}
@@ -268,6 +325,7 @@ struct CarControl {
wrongGear @4;
seatbeltUnbuckled @5;
speedTooHigh @6;
+ ldw @7;
}
enum AudibleAlert {
@@ -281,6 +339,7 @@ struct CarControl {
chimeWarning2 @5;
chimeWarningRepeat @6;
chimePrompt @7;
+ chimeWarning2Repeat @8;
}
}
}
@@ -300,6 +359,7 @@ struct CarParams {
minEnableSpeed @7 :Float32;
minSteerSpeed @8 :Float32;
safetyModel @9 :SafetyModel;
+ safetyModelPassive @42 :SafetyModel = silent;
safetyParam @10 :Int16;
steerMaxBP @11 :List(Float32);
@@ -309,7 +369,6 @@ struct CarParams {
brakeMaxBP @15 :List(Float32);
brakeMaxV @16 :List(Float32);
-
# things about the car in the manual
mass @17 :Float32; # [kg] running weight
wheelbase @18 :Float32; # [m] distance from rear to front axle
@@ -323,6 +382,7 @@ struct CarParams {
tireStiffnessRear @24 :Float32; # [N/rad] rear tire coeff of stiff
longitudinalTuning @25 :LongitudinalPIDTuning;
+ lateralParams @48 :LateralParams;
lateralTuning :union {
pid @26 :LateralPIDTuning;
indi @27 :LateralINDITuning;
@@ -330,6 +390,7 @@ struct CarParams {
}
steerLimitAlert @28 :Bool;
+ steerLimitTimer @47 :Float32; # time before steerLimitAlert is issued
vEgoStopping @29 :Float32; # Speed at which the car goes into stopping state
directAccelControl @30 :Bool; # Does the car have direct accel control or just gas/brake
@@ -338,11 +399,26 @@ struct CarParams {
steerRateCost @33 :Float32; # Lateral MPC cost on steering rate
steerControlType @34 :SteerControlType;
radarOffCan @35 :Bool; # True when radar objects aren't visible on CAN
+ minSpeedCan @51 :Float32; # Minimum vehicle speed from CAN (below this value drops to 0)
+ stoppingBrakeRate @52 :Float32; # brake_travel/s while trying to stop
+ startingBrakeRate @53 :Float32; # brake_travel/s while releasing on restart
steerActuatorDelay @36 :Float32; # Steering wheel actuator delay in seconds
openpilotLongitudinalControl @37 :Bool; # is openpilot doing the longitudinal control?
carVin @38 :Text; # VIN number queried during fingerprinting
isPandaBlack @39: Bool;
+ dashcamOnly @41: Bool;
+ transmissionType @43 :TransmissionType;
+ carFw @44 :List(CarFw);
+ radarTimeStep @45: Float32 = 0.05; # time delta between radar updates, 20Hz is very standard
+ communityFeature @46: Bool; # true if a community maintained feature is detected
+ fingerprintSource @49: FingerprintSource;
+ networkLocation @50 :NetworkLocation; # Where Panda/C2 is integrated into the car's CAN network
+
+ struct LateralParams {
+ torqueBP @0 :List(Int32);
+ torqueV @1 :List(Int32);
+ }
struct LateralPIDTuning {
kpBP @0 :List(Float32);
@@ -361,7 +437,6 @@ struct CarParams {
deadzoneV @5 :List(Float32);
}
-
struct LateralINDITuning {
outerLoopGain @0 :Float32;
innerLoopGain @1 :Float32;
@@ -383,25 +458,85 @@ struct CarParams {
l @7 :List(Float32); # Kalman gain
}
-
enum SafetyModel {
- # does NOT match board setting
- noOutput @0;
- honda @1;
+ silent @0;
+ hondaNidec @1;
toyota @2;
elm327 @3;
gm @4;
- hondaBosch @5;
+ hondaBoschGiraffe @5;
ford @6;
cadillac @7;
hyundai @8;
chrysler @9;
tesla @10;
subaru @11;
+ gmPassive @12;
+ mazda @13;
+ nissan @14;
+ volkswagen @15;
+ toyotaIpas @16;
+ allOutput @17;
+ gmAscm @18;
+ noOutput @19; # like silent but without silent CAN TXs
+ hondaBoschHarness @20;
+ volkswagenPq @21;
+ subaruLegacy @22; # pre-Global platform
+ hyundaiLegacy @23;
+ hyundaiCommunity @24;
}
enum SteerControlType {
torque @0;
angle @1;
}
-}
\ No newline at end of file
+
+ enum TransmissionType {
+ unknown @0;
+ automatic @1; # Traditional auto, including DSG
+ manual @2; # True "stick shift" only
+ direct @3; # Electric vehicle or other direct drive
+ }
+
+ struct CarFw {
+ ecu @0 :Ecu;
+ fwVersion @1 :Data;
+ address @2: UInt32;
+ subAddress @3: UInt8;
+ }
+
+ enum Ecu {
+ eps @0;
+ esp @1;
+ fwdRadar @2;
+ fwdCamera @3;
+ engine @4;
+ unknown @5;
+ transmission @8; # Transmission Control Module
+ srs @9; # airbag
+ gateway @10; # can gateway
+ hud @11; # heads up display
+ combinationMeter @12; # instrument cluster
+
+ # Toyota only
+ dsu @6;
+ apgs @7;
+
+ # Honda only
+ vsa @13; # Vehicle Stability Assist
+ programmedFuelInjection @14;
+ electricBrakeBooster @15;
+ shiftByWire @16;
+ }
+
+ enum FingerprintSource {
+ can @0;
+ fw @1;
+ fixed @2;
+ }
+
+ enum NetworkLocation {
+ fwdCamera @0; # Standard/default integration at LKAS camera
+ gateway @1; # Integration at vehicle's CAN gateway
+ }
+}
diff --git a/cereal/generate_javascript.sh b/cereal/generate_javascript.sh
deleted file mode 100755
index d6525a64d95eed..00000000000000
--- a/cereal/generate_javascript.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-rm -r gen/ts
-rm -r gen/js
-
-mkdir gen/ts
-mkdir gen/js
-
-echo "Installing needed npm modules"
-npm i capnpc-ts capnp-ts
-
-capnpc -o node_modules/.bin/capnpc-ts:gen/ts log.capnp car.capnp
-capnpc -o node_modules/.bin/capnpc-ts:gen/ts car.capnp
-
-cat log.capnp | egrep '\([a-zA-Z]*\.[^\s]+\.[^s]+\)' | sed 's/^.*([a-zA-Z]*\.\([a-zA-Z.]*\)).*/\1/' | while read line
-do
- TOKEN=`echo $line | sed 's/\./_/g'`
- ROOT=`echo $line | sed 's/\..*$//g'`
- cat gen/ts/log.capnp.ts | grep '^import.*'${TOKEN}
- if [[ "$?" == "1" ]]
- then
- sed -i 's/^\(import {.*\)'${ROOT}'\(,*\) \(.*\)$/\1'${ROOT}', '${TOKEN}'\2 \3/' ./gen/ts/log.capnp.ts
- fi
-done
-
-tsc ./gen/ts/* --lib es2015 --outDir ./gen/js
diff --git a/cereal/install_capnp.sh b/cereal/install_capnp.sh
deleted file mode 100755
index b83e1ffda1d221..00000000000000
--- a/cereal/install_capnp.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-set -e
-echo "Installing capnp"
-
-cd /tmp
-VERSION=0.6.1
-wget https://capnproto.org/capnproto-c++-${VERSION}.tar.gz
-tar xvf capnproto-c++-${VERSION}.tar.gz
-cd capnproto-c++-${VERSION}
-CXXFLAGS="-fPIC" ./configure
-
-make -j4
-
-# manually build binaries statically
-g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR=\"/usr/local/include\" -pthread -O2 -DNDEBUG -pthread -pthread -o .libs/capnp src/capnp/compiler/module-loader.o src/capnp/compiler/capnp.o ./.libs/libcapnpc.a ./.libs/libcapnp.a ./.libs/libkj.a -lpthread -pthread
-
-g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR=\"/usr/local/include\" -pthread -O2 -DNDEBUG -pthread -pthread -o .libs/capnpc-c++ src/capnp/compiler/capnpc-c++.o ./.libs/libcapnp.a ./.libs/libkj.a -lpthread -pthread
-
-g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR=\"/usr/local/include\" -pthread -O2 -DNDEBUG -pthread -pthread -o .libs/capnpc-capnp src/capnp/compiler/capnpc-capnp.o ./.libs/libcapnp.a ./.libs/libkj.a -lpthread -pthread
-
-cp .libs/capnp /usr/local/bin/
-ln -s /usr/local/bin/capnp /usr/local/bin/capnpc
-cp .libs/capnpc-c++ /usr/local/bin/
-cp .libs/capnpc-capnp /usr/local/bin/
-cp .libs/*.a /usr/local/lib
-
-cd /tmp
-echo "Installing c-capnp"
-git clone https://github.com/commaai/c-capnproto.git
-cd c-capnproto
-git submodule update --init --recursive
-autoreconf -f -i -s
-CXXFLAGS="-fPIC" ./configure
-make -j4
-
-# manually build binaries statically
-gcc -fPIC -o .libs/capnpc-c compiler/capnpc-c.o compiler/schema.capnp.o compiler/str.o ./.libs/libcapnp_c.a
-
-cp .libs/capnpc-c /usr/local/bin/
-cp .libs/*.a /usr/local/lib
diff --git a/cereal/log.capnp b/cereal/log.capnp
index 053c452113a838..11f49fa12f1ede 100644
--- a/cereal/log.capnp
+++ b/cereal/log.capnp
@@ -49,6 +49,8 @@ struct InitData {
neo @1;
chffrAndroid @2;
chffrIos @3;
+ tici @4;
+ pc @5;
}
struct AndroidBuildInfo {
@@ -126,6 +128,11 @@ struct FrameData {
lensErr @13 :Float32;
lensTruePos @14 :Float32;
image @6 :Data;
+ gainFrac @15 :Float32;
+ focusVal @16 :List(Int16);
+ focusConf @17 :List(UInt8);
+ sharpnessScore @18 :List(UInt16);
+ recoverState @19 :Int32;
frameType @7 :FrameType;
timestampSof @8 :UInt64;
@@ -137,6 +144,7 @@ struct FrameData {
unknown @0;
neo @1;
chffrAndroid @2;
+ front @3;
}
struct AndroidCaptureResult {
@@ -180,6 +188,7 @@ struct SensorEventData {
gyroUncalibrated @12 :SensorVec;
proximity @13: Float32;
light @14: Float32;
+ temperature @15: Float32;
}
source @8 :SensorSource;
@@ -197,6 +206,8 @@ struct SensorEventData {
lsm6ds3 @5; # accelerometer (c2)
bmp280 @6; # barometer (c2)
mmc3416x @7; # magnetometer (c2)
+ bmx055 @8;
+ rpr0521 @9;
}
}
@@ -261,13 +272,15 @@ struct CanData {
}
struct ThermalData {
- cpu0 @0 :UInt16;
- cpu1 @1 :UInt16;
- cpu2 @2 :UInt16;
- cpu3 @3 :UInt16;
- mem @4 :UInt16;
- gpu @5 :UInt16;
- bat @6 :UInt32;
+ # Deprecated
+ cpu0DEPRECATED @0 :UInt16;
+ cpu1DEPRECATED @1 :UInt16;
+ cpu2DEPRECATED @2 :UInt16;
+ cpu3DEPRECATED @3 :UInt16;
+ memDEPRECATED @4 :UInt16;
+ gpuDEPRECATED @5 :UInt16;
+ batDEPRECATED @6 :UInt32;
+ pa0DEPRECATED @21 :UInt16;
# not thermal
freeSpace @7 :Float32;
@@ -276,6 +289,10 @@ struct ThermalData {
batteryCurrent @15 :Int32;
batteryVoltage @16 :Int32;
usbOnline @12 :Bool;
+ networkType @22 :NetworkType;
+ offroadPowerUsage @23 :UInt32; # Power usage since going offroad in uWh
+ networkStrength @24 :NetworkStrength;
+ carBatteryCapacity @25 :UInt32; # Estimated remaining car battery capacity in uWh
fanSpeed @10 :UInt16;
started @11 :Bool;
@@ -285,27 +302,94 @@ struct ThermalData {
chargingError @17 :Bool;
chargingDisabled @18 :Bool;
+ memUsedPercent @19 :Int8;
+ cpuPerc @20 :Int8;
+
+ cpu @26 :List(Float32);
+ gpu @27 :List(Float32);
+ mem @28 :Float32;
+ bat @29 :Float32;
+ ambient @30 :Float32;
+
enum ThermalStatus {
green @0; # all processes run
yellow @1; # critical processes run (kill uploader), engage still allowed
red @2; # no engage, will disengage
danger @3; # immediate process shutdown
}
+
+ enum NetworkType {
+ none @0;
+ wifi @1;
+ cell2G @2;
+ cell3G @3;
+ cell4G @4;
+ cell5G @5;
+ }
+
+ enum NetworkStrength {
+ unknown @0;
+ poor @1;
+ moderate @2;
+ good @3;
+ great @4;
+ }
}
struct HealthData {
# from can health
voltage @0 :UInt32;
current @1 :UInt32;
- started @2 :Bool;
+ ignitionLine @2 :Bool;
controlsAllowed @3 :Bool;
gasInterceptorDetected @4 :Bool;
startedSignalDetectedDeprecated @5 :Bool;
hasGps @6 :Bool;
canSendErrs @7 :UInt32;
canFwdErrs @8 :UInt32;
+ canRxErrs @19 :UInt32;
gmlanSendErrs @9 :UInt32;
- hwType @10: HwType;
+ hwType @10 :HwType;
+ fanSpeedRpm @11 :UInt16;
+ usbPowerMode @12 :UsbPowerMode;
+ ignitionCan @13 :Bool;
+ safetyModel @14 :Car.CarParams.SafetyModel;
+ faultStatus @15 :FaultStatus;
+ powerSaveEnabled @16 :Bool;
+ uptime @17 :UInt32;
+ faults @18 :List(FaultType);
+
+ enum FaultStatus {
+ none @0;
+ faultTemp @1;
+ faultPerm @2;
+ }
+
+ enum FaultType {
+ relayMalfunction @0;
+ unusedInterruptHandled @1;
+ interruptRateCan1 @2;
+ interruptRateCan2 @3;
+ interruptRateCan3 @4;
+ interruptRateTach @5;
+ interruptRateGmlan @6;
+ interruptRateInterrupts @7;
+ interruptRateSpiDma @8;
+ interruptRateSpiCs @9;
+ interruptRateUart1 @10;
+ interruptRateUart2 @11;
+ interruptRateUart3 @12;
+ interruptRateUart5 @13;
+ interruptRateUartDma @14;
+ interruptRateUsb @15;
+ interruptRateTim1 @16;
+ interruptRateTim3 @17;
+ registerDivergent @18;
+ interruptRateKlineInit @19;
+ interruptRateClockSource @20;
+ interruptRateTim9 @21;
+ # Update max fault type in boardd when adding faults
+ }
enum HwType {
unknown @0;
@@ -313,6 +397,15 @@ struct HealthData {
greyPanda @2;
blackPanda @3;
pedal @4;
+ uno @5;
+ dos @6;
+ }
+
+ enum UsbPowerMode {
+ none @0;
+ client @1;
+ cdp @2;
+ dcp @3;
}
}
@@ -363,18 +456,22 @@ struct RadarState @0x9a185389d6fdd05f {
struct LiveCalibrationData {
# deprecated
warpMatrix @0 :List(Float32);
+
# camera_frame_from_model_frame
warpMatrix2 @5 :List(Float32);
warpMatrixBig @6 :List(Float32);
+
calStatus @1 :Int8;
calCycle @2 :Int32;
calPerc @3 :Int8;
+ validBlocks @9 :Int32;
# view_frame_from_road_frame
# ui's is inversed needs new
extrinsicMatrix @4 :List(Float32);
# the direction of travel vector in device frame
rpyCalib @7 :List(Float32);
+ rpyCalibSpread @8 :List(Float32);
}
struct LiveTracks {
@@ -442,7 +539,7 @@ struct ControlsState @0x97ff69c53601abf1 {
alertSoundDEPRECATED @45 :Text;
alertSound @56 :Car.CarControl.HUDControl.AudibleAlert;
awarenessStatus @26 :Float32;
- angleModelBias @27 :Float32;
+ angleModelBiasDEPRECATED @27 :Float32;
gpsPlannerActive @40 :Bool;
engageable @41 :Bool; # can OP be engaged?
driverMonitoringOn @43 :Bool;
@@ -452,6 +549,7 @@ struct ControlsState @0x97ff69c53601abf1 {
decelForTurn @47 :Bool;
decelForModel @54 :Bool;
+ canErrorCounter @57 :UInt32;
lateralControlState :union {
indiState @52 :LateralINDIState;
@@ -475,7 +573,7 @@ struct ControlsState @0x97ff69c53601abf1 {
enum AlertStatus {
normal @0; # low priority alert for user's convenience
- userPrompt @1; # mid piority alert that might require user intervention
+ userPrompt @1; # mid priority alert that might require user intervention
critical @2; # high priority alert that needs immediate user intervention
}
@@ -497,6 +595,7 @@ struct ControlsState @0x97ff69c53601abf1 {
delayedOutput @7 :Float32;
delta @8 :Float32;
output @9 :Float32;
+ saturated @10 :Bool;
}
struct LateralPIDState {
@@ -516,8 +615,9 @@ struct ControlsState @0x97ff69c53601abf1 {
steerAngle @1 :Float32;
i @2 :Float32;
output @3 :Float32;
- }
-
+ lqrOutput @4 :Float32;
+ saturated @5 :Bool;
+ }
}
struct LiveEventData {
@@ -527,6 +627,12 @@ struct LiveEventData {
struct ModelData {
frameId @0 :UInt32;
+ frameAge @12 :UInt32;
+ frameDropPerc @13 :Float32;
+ timestampEof @9 :UInt64;
+ modelExecutionTime @14 :Float32;
+ gpuExecutionTime @16 :Float32;
+ rawPred @15 :Data;
path @1 :PathData;
leftLane @2 :PathData;
@@ -537,6 +643,8 @@ struct ModelData {
settings @5 :ModelSettings;
leadFuture @7 :LeadData;
speed @8 :List(Float32);
+ meta @10 :MetaData;
+ longitudinal @11 :LongitudinalData;
struct PathData {
points @0 :List(Float32);
@@ -544,6 +652,7 @@ struct ModelData {
std @2 :Float32;
stds @3 :List(Float32);
poly @4 :List(Float32);
+ validLen @5 :Float32;
}
struct LeadData {
@@ -567,8 +676,74 @@ struct ModelData {
yuvCorrection @5 :List(Float32);
inputTransform @6 :List(Float32);
}
+
+ struct MetaData {
+ engagedProb @0 :Float32;
+ desirePrediction @1 :List(Float32);
+ brakeDisengageProb @2 :Float32;
+ gasDisengageProb @3 :Float32;
+ steerOverrideProb @4 :Float32;
+ desireState @5 :List(Float32);
+ }
+
+ struct LongitudinalData {
+ distances @2 :List(Float32);
+ speeds @0 :List(Float32);
+ accelerations @1 :List(Float32);
+ }
+}
+
+
+struct ModelDataV2 {
+ frameId @0 :UInt32;
+ frameAge @1 :UInt32;
+ frameDropPerc @2 :Float32;
+ timestampEof @3 :UInt64;
+ modelExecutionTime @15 :Float32;
+ gpuExecutionTime @17 :Float32;
+ rawPred @16 :Data;
+
+ position @4 :XYZTData;
+ orientation @5 :XYZTData;
+ velocity @6 :XYZTData;
+ orientationRate @7 :XYZTData;
+ laneLines @8 :List(XYZTData);
+ laneLineProbs @9 :List(Float32);
+ laneLineStds @13 :List(Float32);
+ roadEdges @10 :List(XYZTData);
+ roadEdgeStds @14 :List(Float32);
+ leads @11 :List(LeadDataV2);
+
+ meta @12 :MetaData;
+
+ struct XYZTData {
+ x @0 :List(Float32);
+ y @1 :List(Float32);
+ z @2 :List(Float32);
+ t @3 :List(Float32);
+ xStd @4 :List(Float32);
+ yStd @5 :List(Float32);
+ zStd @6 :List(Float32);
+ }
+
+ struct LeadDataV2 {
+ prob @0 :Float32;
+ t @1 :Float32;
+ xyva @2 :List(Float32);
+ xyvaStd @3 :List(Float32);
+ }
+
+ struct MetaData {
+ engagedProb @0 :Float32;
+ desirePrediction @1 :List(Float32);
+ brakeDisengageProb @2 :Float32;
+ gasDisengageProb @3 :Float32;
+ steerOverrideProb @4 :Float32;
+ desireState @5 :List(Float32);
+ }
}
+
struct CalibrationFeatures {
frameId @0 :UInt32;
@@ -589,6 +764,8 @@ struct EncodeIndex {
segmentId @4 :UInt32;
# index into camera file in segment in encode order
segmentIdEncode @5 :UInt32;
+ timestampSof @6 :UInt64;
+ timestampEof @7 :UInt64;
enum Type {
bigBoxLossless @0; # rcamera.mkv
@@ -697,6 +874,84 @@ struct PathPlan {
sensorValid @14 :Bool;
commIssue @15 :Bool;
posenetValid @16 :Bool;
+ desire @17 :Desire;
+ laneChangeState @18 :LaneChangeState;
+ laneChangeDirection @19 :LaneChangeDirection;
+
+ enum Desire {
+ none @0;
+ turnLeft @1;
+ turnRight @2;
+ laneChangeLeft @3;
+ laneChangeRight @4;
+ keepLeft @5;
+ keepRight @6;
+ }
+
+ enum LaneChangeState {
+ off @0;
+ preLaneChange @1;
+ laneChangeStarting @2;
+ laneChangeFinishing @3;
+ }
+
+ enum LaneChangeDirection {
+ none @0;
+ left @1;
+ right @2;
+ }
+}
+
+struct LiveLocationKalman {
+
+ # More info on reference frames:
+ # https://github.com/commaai/openpilot/tree/master/common/transformations
+
+ positionECEF @0 : Measurement;
+ positionGeodetic @1 : Measurement;
+ velocityECEF @2 : Measurement;
+ velocityNED @3 : Measurement;
+ velocityDevice @4 : Measurement;
+ accelerationDevice @5: Measurement;
+
+
+ # These angles are all eulers and roll, pitch, yaw
+ # orientationECEF transforms to rot matrix: ecef_from_device
+ orientationECEF @6 : Measurement;
+ calibratedOrientationECEF @20 : Measurement;
+ orientationNED @7 : Measurement;
+ angularVelocityDevice @8 : Measurement;
+
+ # orientationNEDCalibrated transforms to rot matrix: NED_from_calibrated
+ orientationNEDCalibrated @9 : Measurement;
+
+ # Calibrated frame is simply device frame
+ # aligned with the vehicle
+ velocityCalibrated @10 : Measurement;
+ accelerationCalibrated @11 : Measurement;
+ angularVelocityCalibrated @12 : Measurement;
+
+ gpsWeek @13 :Int32;
+ gpsTimeOfWeek @14 :Float64;
+ status @15 :Status;
+ unixTimestampMillis @16 :Int64;
+ inputsOK @17 :Bool = true;
+ posenetOK @18 :Bool = true;
+ gpsOK @19 :Bool = true;
+ sensorsOK @21 :Bool = true;
+ deviceStable @22 :Bool = true;
+
+ enum Status {
+ uninitialized @0;
+ uncalibrated @1;
+ valid @2;
+ }
+
+ struct Measurement {
+ value @0 : List(Float64);
+ std @1 : List(Float64);
+ valid @2 : Bool;
+ }
}
struct LiveLocationData {
@@ -1342,6 +1597,7 @@ struct UbloxGnss {
measurementReport @0 :MeasurementReport;
ephemeris @1 :Ephemeris;
ionoData @2 :IonoData;
+ hwStatus @3 :HwStatus;
}
struct MeasurementReport {
@@ -1465,8 +1721,29 @@ struct UbloxGnss {
healthValid @5 :Bool;
ionoCoeffsValid @6 :Bool;
}
-}
+ struct HwStatus {
+ noisePerMS @0 :UInt16;
+ agcCnt @1 :UInt16;
+ aStatus @2 :AntennaSupervisorState;
+ aPower @3 :AntennaPowerStatus;
+ jamInd @4 :UInt8;
+
+ enum AntennaSupervisorState {
+ init @0;
+ dontknow @1;
+ ok @2;
+ short @3;
+ open @4;
+ }
+
+ enum AntennaPowerStatus {
+ off @0;
+ on @1;
+ dontknow @2;
+ }
+ }
+}
struct Clocks {
bootTimeNanos @0 :UInt64;
@@ -1603,11 +1880,14 @@ struct UiLayoutState {
activeApp @0 :App;
sidebarCollapsed @1 :Bool;
mapEnabled @2 :Bool;
+ mockEngaged @3 :Bool;
enum App {
home @0;
music @1;
nav @2;
+ settings @3;
+ none @4;
}
}
@@ -1673,8 +1953,12 @@ struct OrbKeyFrame {
descriptors @3 :Data;
}
-struct DriverMonitoring {
+struct DriverState {
frameId @0 :UInt32;
+ modelExecutionTime @14 :Float32;
+ dspExecutionTime @16 :Float32;
+ rawPred @15 :Data;
+
descriptorDEPRECATED @1 :List(Float32);
stdDEPRECATED @2 :Float32;
faceOrientation @3 :List(Float32);
@@ -1684,12 +1968,38 @@ struct DriverMonitoring {
rightEyeProb @7 :Float32;
leftBlinkProb @8 :Float32;
rightBlinkProb @9 :Float32;
+ irPwrDEPRECATED @10 :Float32;
+ faceOrientationStd @11 :List(Float32);
+ facePositionStd @12 :List(Float32);
+ sgProb @13 :Float32;
+}
+
+struct DMonitoringState {
+ # TODO: deprecate old fields in controlsState
+ events @0 :List(Car.CarEvent);
+ faceDetected @1 :Bool;
+ isDistracted @2 :Bool;
+ awarenessStatus @3 :Float32;
+ isRHD @4 :Bool;
+ posePitchOffset @6 :Float32;
+ posePitchValidCount @7 :UInt32;
+ poseYawOffset @8 :Float32;
+ poseYawValidCount @9 :UInt32;
+ stepChange @10 :Float32;
+ awarenessActive @11 :Float32;
+ awarenessPassive @12 :Float32;
+ isLowStd @13 :Bool;
+ hiStdCount @14 :UInt32;
+ isPreview @15 :Bool;
+
+ rhdCheckedDEPRECATED @5 :Bool;
}
struct Boot {
wallTimeNanos @0 :UInt64;
lastKmsg @1 :Data;
lastPmsg @2 :Data;
+ launchLog @3 :Text;
}
struct LiveParametersData {
@@ -1726,6 +2036,8 @@ struct LiveMapData {
}
struct CameraOdometry {
+ frameId @4 :UInt32;
+ timestampEof @5 :UInt64;
trans @0 :List(Float32); # m/s in device frame
rot @1 :List(Float32); # rad/s in device frame
transStd @2 :List(Float32); # std m/s in device frame
@@ -1739,6 +2051,16 @@ struct KalmanOdometry {
rotStd @3 :List(Float32); # std rad/s in device frame
}
+struct Sentinel {
+ enum SentinelType {
+ endOfSegment @0;
+ endOfRoute @1;
+ startOfSegment @2;
+ startOfRoute @3;
+ }
+ type @0 :SentinelType;
+}
+
struct Event {
# in nanoseconds?
logMonoTime @0 :UInt64;
@@ -1764,7 +2086,7 @@ struct Event {
sendcan @17 :List(CanData);
logMessage @18 :Text;
liveCalibration @19 :LiveCalibrationData;
- androidLogEntry @20 :AndroidLogEntry;
+ androidLog @20 :AndroidLogEntry;
gpsLocation @21 :GpsLocationData;
carState @22 :Car.CarState;
carControl @23 :Car.CarControl;
@@ -1795,7 +2117,7 @@ struct Event {
gpsLocationExternal @48 :GpsLocationData;
location @49 :LiveLocationData;
uiNavigationEvent @50 :UiNavigationEvent;
- liveLocationKalman @51 :LiveLocationData;
+ liveLocationKalmanDEPRECATED @51 :LiveLocationData;
testJoystick @52 :Joystick;
orbOdometry @53 :OrbOdometry;
orbFeatures @54 :OrbFeatures;
@@ -1803,7 +2125,7 @@ struct Event {
orbKeyFrame @56 :OrbKeyFrame;
uiLayoutState @57 :UiLayoutState;
orbFeaturesSummary @58 :OrbFeaturesSummary;
- driverMonitoring @59 :DriverMonitoring;
+ driverState @59 :DriverState;
boot @60 :Boot;
liveParameters @61 :LiveParametersData;
liveMapData @62 :LiveMapData;
@@ -1813,5 +2135,13 @@ struct Event {
thumbnail @66: Thumbnail;
carEvents @68: List(Car.CarEvent);
carParams @69: Car.CarParams;
+ frontFrame @70: FrameData; # driver facing camera
+ dMonitoringState @71: DMonitoringState;
+ liveLocationKalman @72 :LiveLocationKalman;
+ sentinel @73 :Sentinel;
+ wideFrame @74: FrameData;
+ modelV2 @75 :ModelDataV2;
+ frontEncodeIdx @76 :EncodeIndex; # driver facing camera
+ wideEncodeIdx @77 :EncodeIndex;
}
-}
\ No newline at end of file
+}
diff --git a/cereal/maptile.capnp b/cereal/maptile.capnp
deleted file mode 100644
index 336901392aa306..00000000000000
--- a/cereal/maptile.capnp
+++ /dev/null
@@ -1,53 +0,0 @@
-using Cxx = import "./include/c++.capnp";
-$Cxx.namespace("cereal");
-
-using Java = import "./include/java.capnp";
-$Java.package("ai.comma.openpilot.cereal");
-$Java.outerClassname("Map");
-
-@0xa086df597ef5d7a0;
-
-# Geometry
-struct Point {
- x @0: Float64;
- y @1: Float64;
- z @2: Float64;
-}
-
-struct PolyLine {
- points @0: List(Point);
-}
-
-# Map features
-struct Lane {
- id @0 :Text;
-
- leftBoundary @1 :LaneBoundary;
- rightBoundary @2 :LaneBoundary;
-
- leftAdjacentId @3 :Text;
- rightAdjacentId @4 :Text;
-
- inboundIds @5 :List(Text);
- outboundIds @6 :List(Text);
-
- struct LaneBoundary {
- polyLine @0 :PolyLine;
- startHeading @1 :Float32; # WRT north
- }
-}
-
-# Map tiles
-struct TileSummary {
- version @0 :Text;
- updatedAt @1 :UInt64; # Millis since epoch
-
- level @2 :UInt8;
- x @3 :UInt16;
- y @4 :UInt16;
-}
-
-struct MapTile {
- summary @0 :TileSummary;
- lanes @1 :List(Lane);
-}
diff --git a/cereal/messaging/.gitignore b/cereal/messaging/.gitignore
new file mode 100644
index 00000000000000..dbbe8e22aee488
--- /dev/null
+++ b/cereal/messaging/.gitignore
@@ -0,0 +1,10 @@
+demo
+bridge
+test_runner
+*.o
+*.os
+*.d
+*.a
+*.so
+messaging_pyx.cpp
+build/
diff --git a/cereal/messaging/__init__.py b/cereal/messaging/__init__.py
new file mode 100644
index 00000000000000..0b1204b47a550a
--- /dev/null
+++ b/cereal/messaging/__init__.py
@@ -0,0 +1,225 @@
+# must be build with scons
+from .messaging_pyx import Context, Poller, SubSocket, PubSocket # pylint: disable=no-name-in-module, import-error
+from .messaging_pyx import MultiplePublishersError, MessagingError # pylint: disable=no-name-in-module, import-error
+import capnp
+
+from typing import Optional, List, Union
+
+from cereal import log
+from cereal.services import service_list
+
+assert MultiplePublishersError
+assert MessagingError
+
+# sec_since_boot is faster, but allow to run standalone too
+try:
+ from common.realtime import sec_since_boot
+except ImportError:
+ import time
+ sec_since_boot = time.time
+ print("Warning, using python time.time() instead of faster sec_since_boot")
+
+context = Context()
+
+def new_message(service: Optional[str] = None, size: Optional[int] = None) -> capnp.lib.capnp._DynamicStructBuilder:
+ dat = log.Event.new_message()
+ dat.logMonoTime = int(sec_since_boot() * 1e9)
+ dat.valid = True
+ if service is not None:
+ if size is None:
+ dat.init(service)
+ else:
+ dat.init(service, size)
+ return dat
+
+def pub_sock(endpoint: str) -> PubSocket:
+ sock = PubSocket()
+ sock.connect(context, endpoint)
+ return sock
+
+def sub_sock(endpoint: str, poller: Optional[Poller] = None, addr: str = "127.0.0.1",
+ conflate: bool = False, timeout: Optional[int] = None) -> SubSocket:
+ sock = SubSocket()
+ sock.connect(context, endpoint, addr.encode('utf8'), conflate)
+
+ if timeout is not None:
+ sock.setTimeout(timeout)
+
+ if poller is not None:
+ poller.registerSocket(sock)
+ return sock
+
+
+def drain_sock_raw(sock: SubSocket, wait_for_one: bool = False) -> List[bytes]:
+ """Receive all message currently available on the queue"""
+ ret: List[bytes] = []
+ while 1:
+ if wait_for_one and len(ret) == 0:
+ dat = sock.receive()
+ else:
+ dat = sock.receive(non_blocking=True)
+
+ if dat is None:
+ break
+
+ ret.append(dat)
+
+ return ret
+
+def drain_sock(sock: SubSocket, wait_for_one: bool = False) -> List[capnp.lib.capnp._DynamicStructReader]:
+ """Receive all message currently available on the queue"""
+ ret: List[capnp.lib.capnp._DynamicStructReader] = []
+ while 1:
+ if wait_for_one and len(ret) == 0:
+ dat = sock.receive()
+ else:
+ dat = sock.receive(non_blocking=True)
+
+ if dat is None: # Timeout hit
+ break
+
+ dat = log.Event.from_bytes(dat)
+ ret.append(dat)
+
+ return ret
+
+
+# TODO: print when we drop packets?
+def recv_sock(sock: SubSocket, wait: bool = False) -> Union[None, capnp.lib.capnp._DynamicStructReader]:
+ """Same as drain sock, but only returns latest message. Consider using conflate instead."""
+ dat = None
+
+ while 1:
+ if wait and dat is None:
+ rcv = sock.receive()
+ else:
+ rcv = sock.receive(non_blocking=True)
+
+ if rcv is None: # Timeout hit
+ break
+
+ dat = rcv
+
+ if dat is not None:
+ dat = log.Event.from_bytes(dat)
+
+ return dat
+
+def recv_one(sock: SubSocket) -> Union[None, capnp.lib.capnp._DynamicStructReader]:
+ dat = sock.receive()
+ if dat is not None:
+ dat = log.Event.from_bytes(dat)
+ return dat
+
+def recv_one_or_none(sock: SubSocket) -> Union[None, capnp.lib.capnp._DynamicStructReader]:
+ dat = sock.receive(non_blocking=True)
+ if dat is not None:
+ dat = log.Event.from_bytes(dat)
+ return dat
+
+def recv_one_retry(sock: SubSocket) -> capnp.lib.capnp._DynamicStructReader:
+ """Keep receiving until we get a message"""
+ while True:
+ dat = sock.receive()
+ if dat is not None:
+ return log.Event.from_bytes(dat)
+
+class SubMaster():
+ def __init__(self, services: List[str], poll: Optional[List[str]] = None,
+ ignore_alive: Optional[List[str]] = None, addr:str ="127.0.0.1"):
+ self.frame = -1
+ self.updated = {s: False for s in services}
+ self.rcv_time = {s: 0. for s in services}
+ self.rcv_frame = {s: 0 for s in services}
+ self.alive = {s: False for s in services}
+ self.sock = {}
+ self.freq = {}
+ self.data = {}
+ self.valid = {}
+ self.logMonoTime = {}
+
+ self.poller = Poller()
+ self.non_polled_services = [s for s in services if poll is not None and
+ len(poll) and s not in poll]
+
+ if ignore_alive is not None:
+ self.ignore_alive = ignore_alive
+ else:
+ self.ignore_alive = []
+
+ for s in services:
+ if addr is not None:
+ p = self.poller if s not in self.non_polled_services else None
+ self.sock[s] = sub_sock(s, poller=p, addr=addr, conflate=True)
+ self.freq[s] = service_list[s].frequency
+
+ try:
+ data = new_message(s)
+ except capnp.lib.capnp.KjException: # pylint: disable=c-extension-no-member
+ data = new_message(s, 0) # lists
+
+ self.data[s] = getattr(data, s)
+ self.logMonoTime[s] = 0
+ self.valid[s] = data.valid
+
+ def __getitem__(self, s: str) -> capnp.lib.capnp._DynamicStructReader:
+ return self.data[s]
+
+ def update(self, timeout: int = 1000) -> None:
+ msgs = []
+ for sock in self.poller.poll(timeout):
+ msgs.append(recv_one_or_none(sock))
+
+ # non-blocking receive for non-polled sockets
+ for s in self.non_polled_services:
+ msgs.append(recv_one_or_none(self.sock[s]))
+ self.update_msgs(sec_since_boot(), msgs)
+
+ def update_msgs(self, cur_time: float, msgs: List[capnp.lib.capnp._DynamicStructReader]) -> None:
+ self.frame += 1
+ self.updated = dict.fromkeys(self.updated, False)
+ for msg in msgs:
+ if msg is None:
+ continue
+
+ s = msg.which()
+ self.updated[s] = True
+ self.rcv_time[s] = cur_time
+ self.rcv_frame[s] = self.frame
+ self.data[s] = getattr(msg, s)
+ self.logMonoTime[s] = msg.logMonoTime
+ self.valid[s] = msg.valid
+
+ for s in self.data:
+ # arbitrary small number to avoid float comparison. If freq is 0, we can skip the check
+ if self.freq[s] > 1e-5:
+ # alive if delay is within 10x the expected frequency
+ self.alive[s] = (cur_time - self.rcv_time[s]) < (10. / self.freq[s])
+ else:
+ self.alive[s] = True
+
+ def all_alive(self, service_list=None) -> bool:
+ if service_list is None: # check all
+ service_list = self.alive.keys()
+ return all(self.alive[s] for s in service_list if s not in self.ignore_alive)
+
+ def all_valid(self, service_list=None) -> bool:
+ if service_list is None: # check all
+ service_list = self.valid.keys()
+ return all(self.valid[s] for s in service_list)
+
+ def all_alive_and_valid(self, service_list=None) -> bool:
+ if service_list is None: # check all
+ service_list = self.alive.keys()
+ return self.all_alive(service_list=service_list) and self.all_valid(service_list=service_list)
+
+class PubMaster():
+ def __init__(self, services: List[str]):
+ self.sock = {}
+ for s in services:
+ self.sock[s] = pub_sock(s)
+
+ def send(self, s: str, dat: Union[bytes, capnp.lib.capnp._DynamicStructBuilder]) -> None:
+ if not isinstance(dat, bytes):
+ dat = dat.to_bytes()
+ self.sock[s].send(dat)
diff --git a/cereal/messaging/bridge.cc b/cereal/messaging/bridge.cc
new file mode 100644
index 00000000000000..8e29566ca26c64
--- /dev/null
+++ b/cereal/messaging/bridge.cc
@@ -0,0 +1,64 @@
+#include
+#include
+#include
+#include
+#include
+
+typedef void (*sighandler_t)(int sig);
+
+#include "services.h"
+
+#include "impl_msgq.hpp"
+#include "impl_zmq.hpp"
+
+void sigpipe_handler(int sig) {
+ assert(sig == SIGPIPE);
+ std::cout << "SIGPIPE received" << std::endl;
+}
+
+static std::vector get_services() {
+ std::vector name_list;
+
+ for (const auto& it : services) {
+ std::string name = it.name;
+ if (name == "plusFrame" || name == "uiLayoutState") continue;
+ name_list.push_back(name);
+ }
+
+ return name_list;
+}
+
+
+int main(void){
+ signal(SIGPIPE, (sighandler_t)sigpipe_handler);
+
+ auto endpoints = get_services();
+
+ std::map sub2pub;
+
+ Context *zmq_context = new ZMQContext();
+ Context *msgq_context = new MSGQContext();
+ Poller *poller = new MSGQPoller();
+
+ for (auto endpoint: endpoints){
+ SubSocket * msgq_sock = new MSGQSubSocket();
+ msgq_sock->connect(msgq_context, endpoint, "127.0.0.1", false);
+ poller->registerSocket(msgq_sock);
+
+ PubSocket * zmq_sock = new ZMQPubSocket();
+ zmq_sock->connect(zmq_context, endpoint);
+
+ sub2pub[msgq_sock] = zmq_sock;
+ }
+
+
+ while (true){
+ for (auto sub_sock : poller->poll(100)){
+ Message * msg = sub_sock->receive();
+ if (msg == NULL) continue;
+ sub2pub[sub_sock]->sendMessage(msg);
+ delete msg;
+ }
+ }
+ return 0;
+}
diff --git a/cereal/messaging/impl_msgq.cc b/cereal/messaging/impl_msgq.cc
new file mode 100644
index 00000000000000..7da9a227c90d18
--- /dev/null
+++ b/cereal/messaging/impl_msgq.cc
@@ -0,0 +1,210 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+#include "impl_msgq.hpp"
+
+volatile sig_atomic_t msgq_do_exit = 0;
+
+void sig_handler(int signal) {
+ assert(signal == SIGINT || signal == SIGTERM);
+ msgq_do_exit = 1;
+}
+
+static size_t get_size(std::string endpoint){
+ size_t sz = DEFAULT_SEGMENT_SIZE;
+
+#if !defined(QCOM) && !defined(QCOM2)
+ if (endpoint == "frame" || endpoint == "frontFrame" || endpoint == "wideFrame"){
+ sz *= 10;
+ }
+#endif
+
+ return sz;
+}
+
+
+MSGQContext::MSGQContext() {
+}
+
+MSGQContext::~MSGQContext() {
+}
+
+void MSGQMessage::init(size_t sz) {
+ size = sz;
+ data = new char[size];
+}
+
+void MSGQMessage::init(char * d, size_t sz) {
+ size = sz;
+ data = new char[size];
+ memcpy(data, d, size);
+}
+
+void MSGQMessage::takeOwnership(char * d, size_t sz) {
+ size = sz;
+ data = d;
+}
+
+void MSGQMessage::close() {
+ if (size > 0){
+ delete[] data;
+ }
+ size = 0;
+}
+
+MSGQMessage::~MSGQMessage() {
+ this->close();
+}
+
+int MSGQSubSocket::connect(Context *context, std::string endpoint, std::string address, bool conflate){
+ assert(context);
+ assert(address == "127.0.0.1");
+
+ q = new msgq_queue_t;
+ int r = msgq_new_queue(q, endpoint.c_str(), get_size(endpoint));
+ if (r != 0){
+ return r;
+ }
+
+ msgq_init_subscriber(q);
+
+ if (conflate){
+ q->read_conflate = true;
+ }
+
+ timeout = -1;
+
+ return 0;
+}
+
+
+Message * MSGQSubSocket::receive(bool non_blocking){
+ msgq_do_exit = 0;
+
+ void (*prev_handler_sigint)(int);
+ void (*prev_handler_sigterm)(int);
+ if (!non_blocking){
+ prev_handler_sigint = std::signal(SIGINT, sig_handler);
+ prev_handler_sigterm = std::signal(SIGTERM, sig_handler);
+ }
+
+ msgq_msg_t msg;
+
+ MSGQMessage *r = NULL;
+
+ int rc = msgq_msg_recv(&msg, q);
+
+ // Hack to implement blocking read with a poller. Don't use this
+ while (!non_blocking && rc == 0 && msgq_do_exit == 0){
+ msgq_pollitem_t items[1];
+ items[0].q = q;
+
+ int t = (timeout != -1) ? timeout : 100;
+
+ int n = msgq_poll(items, 1, t);
+ rc = msgq_msg_recv(&msg, q);
+
+ // The poll indicated a message was ready, but the receive failed. Try again
+ if (n == 1 && rc == 0){
+ continue;
+ }
+
+ if (timeout != -1){
+ break;
+ }
+ }
+
+
+ if (!non_blocking){
+ std::signal(SIGINT, prev_handler_sigint);
+ std::signal(SIGTERM, prev_handler_sigterm);
+ }
+
+ errno = msgq_do_exit ? EINTR : 0;
+
+ if (rc > 0){
+ if (msgq_do_exit){
+ msgq_msg_close(&msg); // Free unused message on exit
+ } else {
+ r = new MSGQMessage;
+ r->takeOwnership(msg.data, msg.size);
+ }
+ }
+
+ return (Message*)r;
+}
+
+void MSGQSubSocket::setTimeout(int t){
+ timeout = t;
+}
+
+MSGQSubSocket::~MSGQSubSocket(){
+ if (q != NULL){
+ msgq_close_queue(q);
+ delete q;
+ }
+}
+
+int MSGQPubSocket::connect(Context *context, std::string endpoint){
+ assert(context);
+
+ q = new msgq_queue_t;
+ int r = msgq_new_queue(q, endpoint.c_str(), get_size(endpoint));
+ if (r != 0){
+ return r;
+ }
+
+ msgq_init_publisher(q);
+
+ return 0;
+}
+
+int MSGQPubSocket::sendMessage(Message *message){
+ msgq_msg_t msg;
+ msg.data = message->getData();
+ msg.size = message->getSize();
+
+ return msgq_msg_send(&msg, q);
+}
+
+int MSGQPubSocket::send(char *data, size_t size){
+ msgq_msg_t msg;
+ msg.data = data;
+ msg.size = size;
+
+ return msgq_msg_send(&msg, q);
+}
+
+MSGQPubSocket::~MSGQPubSocket(){
+ if (q != NULL){
+ msgq_close_queue(q);
+ delete q;
+ }
+}
+
+
+void MSGQPoller::registerSocket(SubSocket * socket){
+ assert(num_polls + 1 < MAX_POLLERS);
+ polls[num_polls].q = (msgq_queue_t*)socket->getRawSocket();
+
+ sockets.push_back(socket);
+ num_polls++;
+}
+
+std::vector MSGQPoller::poll(int timeout){
+ std::vector r;
+
+ msgq_poll(polls, num_polls, timeout);
+ for (size_t i = 0; i < num_polls; i++){
+ if (polls[i].revents){
+ r.push_back(sockets[i]);
+ }
+ }
+
+ return r;
+}
diff --git a/cereal/messaging/impl_msgq.hpp b/cereal/messaging/impl_msgq.hpp
new file mode 100644
index 00000000000000..98e6809457df6d
--- /dev/null
+++ b/cereal/messaging/impl_msgq.hpp
@@ -0,0 +1,64 @@
+#pragma once
+#include "messaging.hpp"
+#include "msgq.hpp"
+#include
+#include
+
+#define MAX_POLLERS 128
+
+class MSGQContext : public Context {
+private:
+ void * context = NULL;
+public:
+ MSGQContext();
+ void * getRawContext() {return context;}
+ ~MSGQContext();
+};
+
+class MSGQMessage : public Message {
+private:
+ char * data;
+ size_t size;
+public:
+ void init(size_t size);
+ void init(char *data, size_t size);
+ void takeOwnership(char *data, size_t size);
+ size_t getSize(){return size;}
+ char * getData(){return data;}
+ void close();
+ ~MSGQMessage();
+};
+
+class MSGQSubSocket : public SubSocket {
+private:
+ msgq_queue_t * q = NULL;
+ int timeout;
+public:
+ int connect(Context *context, std::string endpoint, std::string address, bool conflate=false);
+ void setTimeout(int timeout);
+ void * getRawSocket() {return (void*)q;}
+ Message *receive(bool non_blocking=false);
+ ~MSGQSubSocket();
+};
+
+class MSGQPubSocket : public PubSocket {
+private:
+ msgq_queue_t * q = NULL;
+public:
+ int connect(Context *context, std::string endpoint);
+ int sendMessage(Message *message);
+ int send(char *data, size_t size);
+ ~MSGQPubSocket();
+};
+
+class MSGQPoller : public Poller {
+private:
+ std::vector sockets;
+ msgq_pollitem_t polls[MAX_POLLERS];
+ size_t num_polls = 0;
+
+public:
+ void registerSocket(SubSocket *socket);
+ std::vector poll(int timeout);
+ ~MSGQPoller(){};
+};
diff --git a/cereal/messaging/impl_zmq.cc b/cereal/messaging/impl_zmq.cc
new file mode 100644
index 00000000000000..195124de684121
--- /dev/null
+++ b/cereal/messaging/impl_zmq.cc
@@ -0,0 +1,155 @@
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "services.h"
+#include "impl_zmq.hpp"
+
+static int get_port(std::string endpoint) {
+ int port = -1;
+ for (const auto& it : services) {
+ std::string name = it.name;
+ if (name == endpoint) {
+ port = it.port;
+ break;
+ }
+ }
+
+ assert(port >= 0);
+ return port;
+}
+
+ZMQContext::ZMQContext() {
+ context = zmq_ctx_new();
+}
+
+ZMQContext::~ZMQContext() {
+ zmq_ctx_term(context);
+}
+
+void ZMQMessage::init(size_t sz) {
+ size = sz;
+ data = new char[size];
+}
+
+void ZMQMessage::init(char * d, size_t sz) {
+ size = sz;
+ data = new char[size];
+ memcpy(data, d, size);
+}
+
+void ZMQMessage::close() {
+ if (size > 0){
+ delete[] data;
+ }
+ size = 0;
+}
+
+ZMQMessage::~ZMQMessage() {
+ this->close();
+}
+
+
+int ZMQSubSocket::connect(Context *context, std::string endpoint, std::string address, bool conflate){
+ sock = zmq_socket(context->getRawContext(), ZMQ_SUB);
+ if (sock == NULL){
+ return -1;
+ }
+
+ zmq_setsockopt(sock, ZMQ_SUBSCRIBE, "", 0);
+
+ if (conflate){
+ int arg = 1;
+ zmq_setsockopt(sock, ZMQ_CONFLATE, &arg, sizeof(int));
+ }
+
+ int reconnect_ivl = 500;
+ zmq_setsockopt(sock, ZMQ_RECONNECT_IVL_MAX, &reconnect_ivl, sizeof(reconnect_ivl));
+
+ full_endpoint = "tcp://" + address + ":";
+ full_endpoint += std::to_string(get_port(endpoint));
+
+ return zmq_connect(sock, full_endpoint.c_str());
+}
+
+
+Message * ZMQSubSocket::receive(bool non_blocking){
+ zmq_msg_t msg;
+ assert(zmq_msg_init(&msg) == 0);
+
+ int flags = non_blocking ? ZMQ_DONTWAIT : 0;
+ int rc = zmq_msg_recv(&msg, sock, flags);
+ Message *r = NULL;
+
+ if (rc >= 0){
+ // Make a copy to ensure the data is aligned
+ r = new ZMQMessage;
+ r->init((char*)zmq_msg_data(&msg), zmq_msg_size(&msg));
+ }
+
+ zmq_msg_close(&msg);
+ return r;
+}
+
+void ZMQSubSocket::setTimeout(int timeout){
+ zmq_setsockopt(sock, ZMQ_RCVTIMEO, &timeout, sizeof(int));
+}
+
+ZMQSubSocket::~ZMQSubSocket(){
+ zmq_close(sock);
+}
+
+int ZMQPubSocket::connect(Context *context, std::string endpoint){
+ sock = zmq_socket(context->getRawContext(), ZMQ_PUB);
+ if (sock == NULL){
+ return -1;
+ }
+
+ full_endpoint = "tcp://*:";
+ full_endpoint += std::to_string(get_port(endpoint));
+
+ return zmq_bind(sock, full_endpoint.c_str());
+}
+
+int ZMQPubSocket::sendMessage(Message *message){
+ return zmq_send(sock, message->getData(), message->getSize(), ZMQ_DONTWAIT);
+}
+
+int ZMQPubSocket::send(char *data, size_t size){
+ return zmq_send(sock, data, size, ZMQ_DONTWAIT);
+}
+
+ZMQPubSocket::~ZMQPubSocket(){
+ zmq_close(sock);
+}
+
+
+void ZMQPoller::registerSocket(SubSocket * socket){
+ assert(num_polls + 1 < MAX_POLLERS);
+ polls[num_polls].socket = socket->getRawSocket();
+ polls[num_polls].events = ZMQ_POLLIN;
+
+ sockets.push_back(socket);
+ num_polls++;
+}
+
+std::vector ZMQPoller::poll(int timeout){
+ std::vector r;
+
+ int rc = zmq_poll(polls, num_polls, timeout);
+ if (rc < 0){
+ return r;
+ }
+
+ for (size_t i = 0; i < num_polls; i++){
+ if (polls[i].revents){
+ r.push_back(sockets[i]);
+ }
+ }
+
+ return r;
+}
diff --git a/cereal/messaging/impl_zmq.hpp b/cereal/messaging/impl_zmq.hpp
new file mode 100644
index 00000000000000..bfa9b74cdc30d8
--- /dev/null
+++ b/cereal/messaging/impl_zmq.hpp
@@ -0,0 +1,63 @@
+#pragma once
+#include "messaging.hpp"
+#include
+#include
+
+#define MAX_POLLERS 128
+
+class ZMQContext : public Context {
+private:
+ void * context = NULL;
+public:
+ ZMQContext();
+ void * getRawContext() {return context;}
+ ~ZMQContext();
+};
+
+class ZMQMessage : public Message {
+private:
+ char * data;
+ size_t size;
+public:
+ void init(size_t size);
+ void init(char *data, size_t size);
+ size_t getSize(){return size;}
+ char * getData(){return data;}
+ void close();
+ ~ZMQMessage();
+};
+
+class ZMQSubSocket : public SubSocket {
+private:
+ void * sock;
+ std::string full_endpoint;
+public:
+ int connect(Context *context, std::string endpoint, std::string address, bool conflate=false);
+ void setTimeout(int timeout);
+ void * getRawSocket() {return sock;}
+ Message *receive(bool non_blocking=false);
+ ~ZMQSubSocket();
+};
+
+class ZMQPubSocket : public PubSocket {
+private:
+ void * sock;
+ std::string full_endpoint;
+public:
+ int connect(Context *context, std::string endpoint);
+ int sendMessage(Message *message);
+ int send(char *data, size_t size);
+ ~ZMQPubSocket();
+};
+
+class ZMQPoller : public Poller {
+private:
+ std::vector sockets;
+ zmq_pollitem_t polls[MAX_POLLERS];
+ size_t num_polls = 0;
+
+public:
+ void registerSocket(SubSocket *socket);
+ std::vector poll(int timeout);
+ ~ZMQPoller(){};
+};
diff --git a/cereal/messaging/messaging.cc b/cereal/messaging/messaging.cc
new file mode 100644
index 00000000000000..9e2ae409d1dc08
--- /dev/null
+++ b/cereal/messaging/messaging.cc
@@ -0,0 +1,123 @@
+#include "messaging.hpp"
+#include "impl_zmq.hpp"
+#include "impl_msgq.hpp"
+
+#ifdef __APPLE__
+const bool MUST_USE_ZMQ = true;
+#else
+const bool MUST_USE_ZMQ = false;
+#endif
+
+Context * Context::create(){
+ Context * c;
+ if (std::getenv("ZMQ") || MUST_USE_ZMQ){
+ c = new ZMQContext();
+ } else {
+ c = new MSGQContext();
+ }
+ return c;
+}
+
+SubSocket * SubSocket::create(){
+ SubSocket * s;
+ if (std::getenv("ZMQ") || MUST_USE_ZMQ){
+ s = new ZMQSubSocket();
+ } else {
+ s = new MSGQSubSocket();
+ }
+ return s;
+}
+
+SubSocket * SubSocket::create(Context * context, std::string endpoint){
+ SubSocket *s = SubSocket::create();
+ int r = s->connect(context, endpoint, "127.0.0.1");
+
+ if (r == 0) {
+ return s;
+ } else {
+ delete s;
+ return NULL;
+ }
+}
+
+SubSocket * SubSocket::create(Context * context, std::string endpoint, std::string address){
+ SubSocket *s = SubSocket::create();
+ int r = s->connect(context, endpoint, address);
+
+ if (r == 0) {
+ return s;
+ } else {
+ delete s;
+ return NULL;
+ }
+}
+
+SubSocket * SubSocket::create(Context * context, std::string endpoint, std::string address, bool conflate){
+ SubSocket *s = SubSocket::create();
+ int r = s->connect(context, endpoint, address, conflate);
+
+ if (r == 0) {
+ return s;
+ } else {
+ delete s;
+ return NULL;
+ }
+}
+
+PubSocket * PubSocket::create(){
+ PubSocket * s;
+ if (std::getenv("ZMQ") || MUST_USE_ZMQ){
+ s = new ZMQPubSocket();
+ } else {
+ s = new MSGQPubSocket();
+ }
+ return s;
+}
+
+PubSocket * PubSocket::create(Context * context, std::string endpoint){
+ PubSocket *s = PubSocket::create();
+ int r = s->connect(context, endpoint);
+
+ if (r == 0) {
+ return s;
+ } else {
+ delete s;
+ return NULL;
+ }
+}
+
+Poller * Poller::create(){
+ Poller * p;
+ if (std::getenv("ZMQ") || MUST_USE_ZMQ){
+ p = new ZMQPoller();
+ } else {
+ p = new MSGQPoller();
+ }
+ return p;
+}
+
+Poller * Poller::create(std::vector sockets){
+ Poller * p = Poller::create();
+
+ for (auto s : sockets){
+ p->registerSocket(s);
+ }
+ return p;
+}
+
+extern "C" Context * messaging_context_create() {
+ return Context::create();
+}
+
+extern "C" SubSocket * messaging_subsocket_create(Context* context, const char* endpoint) {
+ return SubSocket::create(context, std::string(endpoint));
+}
+
+extern "C" PubSocket * messaging_pubsocket_create(Context* context, const char* endpoint) {
+ return PubSocket::create(context, std::string(endpoint));
+}
+
+extern "C" Poller * messaging_poller_create(SubSocket** sockets, int size) {
+ std::vector socketsVec(sockets, sockets + size);
+ return Poller::create(socketsVec);
+}
diff --git a/cereal/messaging/messaging.hpp b/cereal/messaging/messaging.hpp
new file mode 100644
index 00000000000000..9ade8bf2b4381b
--- /dev/null
+++ b/cereal/messaging/messaging.hpp
@@ -0,0 +1,121 @@
+#pragma once
+#include
+#include
+#include
+#include
+#include
+#include "../gen/cpp/log.capnp.h"
+
+#ifdef __APPLE__
+#define CLOCK_BOOTTIME CLOCK_MONOTONIC
+#endif
+
+#define MSG_MULTIPLE_PUBLISHERS 100
+
+class Context {
+public:
+ virtual void * getRawContext() = 0;
+ static Context * create();
+ virtual ~Context(){};
+};
+
+class Message {
+public:
+ virtual void init(size_t size) = 0;
+ virtual void init(char * data, size_t size) = 0;
+ virtual void close() = 0;
+ virtual size_t getSize() = 0;
+ virtual char * getData() = 0;
+ virtual ~Message(){};
+};
+
+
+class SubSocket {
+public:
+ virtual int connect(Context *context, std::string endpoint, std::string address, bool conflate=false) = 0;
+ virtual void setTimeout(int timeout) = 0;
+ virtual Message *receive(bool non_blocking=false) = 0;
+ virtual void * getRawSocket() = 0;
+ static SubSocket * create();
+ static SubSocket * create(Context * context, std::string endpoint);
+ static SubSocket * create(Context * context, std::string endpoint, std::string address);
+ static SubSocket * create(Context * context, std::string endpoint, std::string address, bool conflate);
+ virtual ~SubSocket(){};
+};
+
+class PubSocket {
+public:
+ virtual int connect(Context *context, std::string endpoint) = 0;
+ virtual int sendMessage(Message *message) = 0;
+ virtual int send(char *data, size_t size) = 0;
+ static PubSocket * create();
+ static PubSocket * create(Context * context, std::string endpoint);
+ virtual ~PubSocket(){};
+};
+
+class Poller {
+public:
+ virtual void registerSocket(SubSocket *socket) = 0;
+ virtual std::vector poll(int timeout) = 0;
+ static Poller * create();
+ static Poller * create(std::vector sockets);
+ virtual ~Poller(){};
+};
+
+class SubMaster {
+public:
+ SubMaster(const std::initializer_list &service_list,
+ const char *address = nullptr, const std::initializer_list &ignore_alive = {});
+ int update(int timeout = 1000);
+ inline bool allAlive(const std::initializer_list &service_list = {}) { return all_(service_list, false, true); }
+ inline bool allValid(const std::initializer_list &service_list = {}) { return all_(service_list, true, false); }
+ inline bool allAliveAndValid(const std::initializer_list &service_list = {}) { return all_(service_list, true, true); }
+ void drain();
+ ~SubMaster();
+
+ uint64_t frame = 0;
+ bool updated(const char *name) const;
+ uint64_t rcv_frame(const char *name) const;
+ cereal::Event::Reader &operator[](const char *name);
+
+private:
+ bool all_(const std::initializer_list &service_list, bool valid, bool alive);
+ Poller *poller_ = nullptr;
+ struct SubMessage;
+ std::map messages_;
+ std::map services_;
+};
+
+class MessageBuilder : public capnp::MallocMessageBuilder {
+public:
+ MessageBuilder() = default;
+
+ cereal::Event::Builder initEvent(bool valid = true) {
+ cereal::Event::Builder event = initRoot();
+ struct timespec t;
+ clock_gettime(CLOCK_BOOTTIME, &t);
+ uint64_t current_time = t.tv_sec * 1000000000ULL + t.tv_nsec;
+ event.setLogMonoTime(current_time);
+ event.setValid(valid);
+ return event;
+ }
+
+ kj::ArrayPtr toBytes() {
+ heapArray_ = capnp::messageToFlatArray(*this);
+ return heapArray_.asBytes();
+ }
+
+private:
+ kj::Array heapArray_;
+};
+
+class PubMaster {
+public:
+ PubMaster(const std::initializer_list &service_list);
+ inline int send(const char *name, capnp::byte *data, size_t size) { return sockets_.at(name)->send((char *)data, size); }
+ int send(const char *name, MessageBuilder &msg);
+ ~PubMaster();
+
+private:
+ std::map sockets_;
+};
diff --git a/cereal/messaging/messaging.pxd b/cereal/messaging/messaging.pxd
new file mode 100644
index 00000000000000..8bbb2c7ab0564b
--- /dev/null
+++ b/cereal/messaging/messaging.pxd
@@ -0,0 +1,39 @@
+# distutils: language = c++
+#cython: language_level=3
+
+from libcpp.string cimport string
+from libcpp.vector cimport vector
+from libcpp cimport bool
+
+
+cdef extern from "messaging.hpp":
+ cdef cppclass Context:
+ @staticmethod
+ Context * create()
+
+ cdef cppclass Message:
+ void init(size_t)
+ void init(char *, size_t)
+ void close()
+ size_t getSize()
+ char *getData()
+
+ cdef cppclass SubSocket:
+ @staticmethod
+ SubSocket * create()
+ int connect(Context *, string, string, bool)
+ Message * receive(bool)
+ void setTimeout(int)
+
+ cdef cppclass PubSocket:
+ @staticmethod
+ PubSocket * create()
+ int connect(Context *, string)
+ int sendMessage(Message *)
+ int send(char *, size_t)
+
+ cdef cppclass Poller:
+ @staticmethod
+ Poller * create()
+ void registerSocket(SubSocket *)
+ vector[SubSocket*] poll(int) nogil
diff --git a/cereal/messaging/messaging_pyx.pyx b/cereal/messaging/messaging_pyx.pyx
new file mode 100644
index 00000000000000..fa220c43543b73
--- /dev/null
+++ b/cereal/messaging/messaging_pyx.pyx
@@ -0,0 +1,151 @@
+# distutils: language = c++
+# cython: c_string_encoding=ascii, language_level=3
+
+import sys
+from libcpp.string cimport string
+from libcpp cimport bool
+from libc cimport errno
+
+
+from .messaging cimport Context as cppContext
+from .messaging cimport SubSocket as cppSubSocket
+from .messaging cimport PubSocket as cppPubSocket
+from .messaging cimport Poller as cppPoller
+from .messaging cimport Message as cppMessage
+
+
+class MessagingError(Exception):
+ pass
+
+
+class MultiplePublishersError(MessagingError):
+ pass
+
+
+cdef class Context:
+ cdef cppContext * context
+
+ def __cinit__(self):
+ self.context = cppContext.create()
+
+ def term(self):
+ del self.context
+ self.context = NULL
+
+ def __dealloc__(self):
+ pass
+ # Deleting the context will hang if sockets are still active
+ # TODO: Figure out a way to make sure the context is closed last
+ # del self.context
+
+
+cdef class Poller:
+ cdef cppPoller * poller
+ cdef list sub_sockets
+
+ def __cinit__(self):
+ self.sub_sockets = []
+ self.poller = cppPoller.create()
+
+ def __dealloc__(self):
+ del self.poller
+
+ def registerSocket(self, SubSocket socket):
+ self.sub_sockets.append(socket)
+ self.poller.registerSocket(socket.socket)
+
+ def poll(self, timeout):
+ sockets = []
+ cdef int t = timeout
+
+ with nogil:
+ result = self.poller.poll(t)
+
+ for s in result:
+ socket = SubSocket()
+ socket.setPtr(s)
+ sockets.append(socket)
+
+ return sockets
+
+cdef class SubSocket:
+ cdef cppSubSocket * socket
+ cdef bool is_owner
+
+ def __cinit__(self):
+ self.socket = cppSubSocket.create()
+ self.is_owner = True
+
+ if self.socket == NULL:
+ raise MessagingError
+
+ def __dealloc__(self):
+ if self.is_owner:
+ del self.socket
+
+ cdef setPtr(self, cppSubSocket * ptr):
+ if self.is_owner:
+ del self.socket
+
+ self.is_owner = False
+ self.socket = ptr
+
+ def connect(self, Context context, string endpoint, string address=b"127.0.0.1", bool conflate=False):
+ r = self.socket.connect(context.context, endpoint, address, conflate)
+
+ if r != 0:
+ if errno.errno == errno.EADDRINUSE:
+ raise MultiplePublishersError
+ else:
+ raise MessagingError
+
+ def setTimeout(self, int timeout):
+ self.socket.setTimeout(timeout)
+
+ def receive(self, bool non_blocking=False):
+ msg = self.socket.receive(non_blocking)
+
+ if msg == NULL:
+ # If a blocking read returns no message check errno if SIGINT was caught in the C++ code
+ if errno.errno == errno.EINTR:
+ print("SIGINT received, exiting")
+ sys.exit(1)
+
+ return None
+ else:
+ sz = msg.getSize()
+ m = msg.getData()[:sz]
+ del msg
+
+ return m
+
+
+cdef class PubSocket:
+ cdef cppPubSocket * socket
+
+ def __cinit__(self):
+ self.socket = cppPubSocket.create()
+ if self.socket == NULL:
+ raise MessagingError
+
+ def __dealloc__(self):
+ del self.socket
+
+ def connect(self, Context context, string endpoint):
+ r = self.socket.connect(context.context, endpoint)
+
+ if r != 0:
+ if errno.errno == errno.EADDRINUSE:
+ raise MultiplePublishersError
+ else:
+ raise MessagingError
+
+ def send(self, bytes data):
+ length = len(data)
+ r = self.socket.send(data, length)
+
+ if r != length:
+ if errno.errno == errno.EADDRINUSE:
+ raise MultiplePublishersError
+ else:
+ raise MessagingError
diff --git a/cereal/messaging/msgq.cc b/cereal/messaging/msgq.cc
new file mode 100644
index 00000000000000..30b0225cd7e77c
--- /dev/null
+++ b/cereal/messaging/msgq.cc
@@ -0,0 +1,467 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "services.h"
+
+#include "msgq.hpp"
+
+void sigusr2_handler(int signal) {
+ assert(signal == SIGUSR2);
+}
+
+uint64_t msgq_get_uid(void){
+ std::random_device rd("/dev/urandom");
+ std::uniform_int_distribution distribution(0,std::numeric_limits::max());
+
+ #ifdef __APPLE__
+ // TODO: this doesn't work
+ uint64_t uid = distribution(rd) << 32 | getpid();
+ #else
+ uint64_t uid = distribution(rd) << 32 | syscall(SYS_gettid);
+ #endif
+
+ return uid;
+}
+
+int msgq_msg_init_size(msgq_msg_t * msg, size_t size){
+ msg->size = size;
+ msg->data = new(std::nothrow) char[size];
+
+ return (msg->data == NULL) ? -1 : 0;
+}
+
+
+int msgq_msg_init_data(msgq_msg_t * msg, char * data, size_t size) {
+ int r = msgq_msg_init_size(msg, size);
+
+ if (r == 0)
+ memcpy(msg->data, data, size);
+
+ return r;
+}
+
+int msgq_msg_close(msgq_msg_t * msg){
+ if (msg->size > 0)
+ delete[] msg->data;
+
+ msg->size = 0;
+
+ return 0;
+}
+
+void msgq_reset_reader(msgq_queue_t * q){
+ int id = q->reader_id;
+ q->read_valids[id]->store(true);
+ q->read_pointers[id]->store(*q->write_pointer);
+}
+
+void msgq_wait_for_subscriber(msgq_queue_t *q){
+ while (*q->num_readers == 0){
+ ;
+ }
+
+ return;
+}
+
+bool service_exists(std::string path){
+ for (const auto& it : services) {
+ if (it.name == path) {
+ return true;
+ }
+ }
+ return false;
+}
+
+int msgq_new_queue(msgq_queue_t * q, const char * path, size_t size){
+ assert(size < 0xFFFFFFFF); // Buffer must be smaller than 2^32 bytes
+ if (!service_exists(std::string(path))){
+ std::cout << "Warning, " << std::string(path) << " is not in service list." << std::endl;
+ }
+ std::signal(SIGUSR2, sigusr2_handler);
+
+ const char * prefix = "/dev/shm/";
+ char * full_path = new char[strlen(path) + strlen(prefix) + 1];
+ strcpy(full_path, prefix);
+ strcat(full_path, path);
+
+ auto fd = open(full_path, O_RDWR | O_CREAT, 0777);
+ if (fd < 0) {
+ std::cout << "Warning, could not open: " << full_path << std::endl;
+ delete[] full_path;
+ return -1;
+ }
+ delete[] full_path;
+
+ int rc = ftruncate(fd, size + sizeof(msgq_header_t));
+ if (rc < 0){
+ close(fd);
+ return -1;
+ }
+ char * mem = (char*)mmap(NULL, size + sizeof(msgq_header_t), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ close(fd);
+
+ if (mem == NULL){
+ return -1;
+ }
+ q->mmap_p = mem;
+
+ msgq_header_t *header = (msgq_header_t *)mem;
+
+ // Setup pointers to header segment
+ q->num_readers = reinterpret_cast*>(&header->num_readers);
+ q->write_pointer = reinterpret_cast*>(&header->write_pointer);
+ q->write_uid = reinterpret_cast*>(&header->write_uid);
+
+ for (size_t i = 0; i < NUM_READERS; i++){
+ q->read_pointers[i] = reinterpret_cast*>(&header->read_pointers[i]);
+ q->read_valids[i] = reinterpret_cast*>(&header->read_valids[i]);
+ q->read_uids[i] = reinterpret_cast*>(&header->read_uids[i]);
+ }
+
+ q->data = mem + sizeof(msgq_header_t);
+ q->size = size;
+ q->reader_id = -1;
+
+ q->endpoint = path;
+ q->read_conflate = false;
+
+ return 0;
+}
+
+void msgq_close_queue(msgq_queue_t *q){
+ if (q->mmap_p != NULL){
+ munmap(q->mmap_p, q->size + sizeof(msgq_header_t));
+ }
+}
+
+
+void msgq_init_publisher(msgq_queue_t * q) {
+ //std::cout << "Starting publisher" << std::endl;
+ uint64_t uid = msgq_get_uid();
+
+ *q->write_uid = uid;
+ *q->num_readers = 0;
+
+ for (size_t i = 0; i < NUM_READERS; i++){
+ *q->read_valids[i] = false;
+ *q->read_uids[i] = 0;
+ }
+
+ q->write_uid_local = uid;
+}
+
+static void thread_signal(uint32_t tid) {
+ #ifndef SYS_tkill
+ // TODO: this won't work for multithreaded programs
+ kill(tid, SIGUSR2);
+ #else
+ syscall(SYS_tkill, tid, SIGUSR2);
+ #endif
+}
+
+void msgq_init_subscriber(msgq_queue_t * q) {
+ assert(q != NULL);
+ assert(q->num_readers != NULL);
+
+ uint64_t uid = msgq_get_uid();
+
+ // Get reader id
+ while (true){
+ uint64_t cur_num_readers = *q->num_readers;
+ uint64_t new_num_readers = cur_num_readers + 1;
+
+ // No more slots available. Reset all subscribers to kick out inactive ones
+ if (new_num_readers > NUM_READERS){
+ std::cout << "Warning, evicting all subscribers!" << std::endl;
+ *q->num_readers = 0;
+
+ for (size_t i = 0; i < NUM_READERS; i++){
+ *q->read_valids[i] = false;
+
+ uint64_t old_uid = *q->read_uids[i];
+ *q->read_uids[i] = 0;
+
+ // Wake up reader in case they are in a poll
+ thread_signal(old_uid & 0xFFFFFFFF);
+ }
+
+ continue;
+ }
+
+ // Use atomic compare and swap to handle race condition
+ // where two subscribers start at the same time
+ if (std::atomic_compare_exchange_strong(q->num_readers,
+ &cur_num_readers,
+ new_num_readers)){
+ q->reader_id = cur_num_readers;
+ q->read_uid_local = uid;
+
+ // We start with read_valid = false,
+ // on the first read the read pointer will be synchronized with the write pointer
+ *q->read_valids[cur_num_readers] = false;
+ *q->read_pointers[cur_num_readers] = 0;
+ *q->read_uids[cur_num_readers] = uid;
+ break;
+ }
+ }
+
+ //std::cout << "New subscriber id: " << q->reader_id << " uid: " << q->read_uid_local << " " << q->endpoint << std::endl;
+ msgq_reset_reader(q);
+}
+
+int msgq_msg_send(msgq_msg_t * msg, msgq_queue_t *q){
+ // Die if we are no longer the active publisher
+ if (q->write_uid_local != *q->write_uid){
+ std::cout << "Killing old publisher: " << q->endpoint << std::endl;
+ errno = EADDRINUSE;
+ return -1;
+ }
+
+ uint64_t total_msg_size = ALIGN(msg->size + sizeof(int64_t));
+
+ // We need to fit at least three messages in the queue,
+ // then we can always safely access the last message
+ assert(3 * total_msg_size <= q->size);
+
+ uint64_t num_readers = *q->num_readers;
+
+ uint32_t write_cycles, write_pointer;
+ UNPACK64(write_cycles, write_pointer, *q->write_pointer);
+
+ char *p = q->data + write_pointer; // add base offset
+
+ // Check remaining space
+ // Always leave space for a wraparound tag for the next message, including alignment
+ int64_t remaining_space = q->size - write_pointer - total_msg_size - sizeof(int64_t);
+ if (remaining_space <= 0){
+ // Write -1 size tag indicating wraparound
+ *(int64_t*)p = -1;
+
+ // Invalidate all readers that are beyond the write pointer
+ // TODO: should we handle the case where a new reader shows up while this is running?
+ for (uint64_t i = 0; i < num_readers; i++){
+ uint64_t read_pointer = *q->read_pointers[i];
+ uint64_t read_cycles = read_pointer >> 32;
+ read_pointer &= 0xFFFFFFFF;
+
+ if ((read_pointer > write_pointer) && (read_cycles != write_cycles)) {
+ *q->read_valids[i] = false;
+ }
+ }
+
+ // Update global and local copies of write pointer and write_cycles
+ write_pointer = 0;
+ write_cycles = write_cycles + 1;
+ PACK64(*q->write_pointer, write_cycles, write_pointer);
+
+ // Set actual pointer to the beginning of the data segment
+ p = q->data;
+ }
+
+ // Invalidate readers that are in the area that will be written
+ uint64_t start = write_pointer;
+ uint64_t end = ALIGN(start + sizeof(int64_t) + msg->size);
+
+ for (uint64_t i = 0; i < num_readers; i++){
+ uint32_t read_cycles, read_pointer;
+ UNPACK64(read_cycles, read_pointer, *q->read_pointers[i]);
+
+ if ((read_pointer >= start) && (read_pointer < end) && (read_cycles != write_cycles)) {
+ *q->read_valids[i] = false;
+ }
+ }
+
+
+ // Write size tag
+ std::atomic *size_p = reinterpret_cast*>(p);
+ *size_p = msg->size;
+
+ // Copy data
+ memcpy(p + sizeof(int64_t), msg->data, msg->size);
+ __sync_synchronize();
+
+ // Update write pointer
+ uint32_t new_ptr = ALIGN(write_pointer + msg->size + sizeof(int64_t));
+ PACK64(*q->write_pointer, write_cycles, new_ptr);
+
+ // Notify readers
+ for (uint64_t i = 0; i < num_readers; i++){
+ uint64_t reader_uid = *q->read_uids[i];
+ thread_signal(reader_uid & 0xFFFFFFFF);
+ }
+
+ return msg->size;
+}
+
+
+int msgq_msg_ready(msgq_queue_t * q){
+ start:
+ int id = q->reader_id;
+ assert(id >= 0); // Make sure subscriber is initialized
+
+ if (q->read_uid_local != *q->read_uids[id]){
+ std::cout << q->endpoint << ": Reader was evicted, reconnecting" << std::endl;
+ msgq_init_subscriber(q);
+ goto start;
+ }
+
+ // Check valid
+ if (!*q->read_valids[id]){
+ msgq_reset_reader(q);
+ goto start;
+ }
+
+ uint32_t read_cycles, read_pointer;
+ UNPACK64(read_cycles, read_pointer, *q->read_pointers[id]);
+
+ uint32_t write_cycles, write_pointer;
+ UNPACK64(write_cycles, write_pointer, *q->write_pointer);
+
+ // Check if new message is available
+ return (read_pointer != write_pointer);
+}
+
+int msgq_msg_recv(msgq_msg_t * msg, msgq_queue_t * q){
+ start:
+ int id = q->reader_id;
+ assert(id >= 0); // Make sure subscriber is initialized
+
+ if (q->read_uid_local != *q->read_uids[id]){
+ std::cout << q->endpoint << ": Reader was evicted, reconnecting" << std::endl;
+ msgq_init_subscriber(q);
+ goto start;
+ }
+
+ // Check valid
+ if (!*q->read_valids[id]){
+ msgq_reset_reader(q);
+ goto start;
+ }
+
+ uint32_t read_cycles, read_pointer;
+ UNPACK64(read_cycles, read_pointer, *q->read_pointers[id]);
+
+ uint32_t write_cycles, write_pointer;
+ UNPACK64(write_cycles, write_pointer, *q->write_pointer);
+
+ char * p = q->data + read_pointer;
+
+ // Check if new message is available
+ if (read_pointer == write_pointer) {
+ msg->size = 0;
+ return 0;
+ }
+
+ // Read potential message size
+ std::atomic *size_p = reinterpret_cast*>(p);
+ std::int64_t size = *size_p;
+
+ // Check if the size that was read is valid
+ if (!*q->read_valids[id]){
+ msgq_reset_reader(q);
+ goto start;
+ }
+
+ // If size is -1 the buffer was full, and we need to wrap around
+ if (size == -1){
+ read_cycles++;
+ PACK64(*q->read_pointers[id], read_cycles, 0);
+ goto start;
+ }
+
+ // crashing is better than passing garbage data to the consumer
+ // the size will have weird value if it was overwritten by data accidentally
+ assert((uint64_t)size < q->size);
+ assert(size > 0);
+
+ uint32_t new_read_pointer = ALIGN(read_pointer + sizeof(std::int64_t) + size);
+
+ // If conflate is true, check if this is the latest message, else start over
+ if (q->read_conflate){
+ if (new_read_pointer != write_pointer){
+ // Update read pointer
+ PACK64(*q->read_pointers[id], read_cycles, new_read_pointer);
+ goto start;
+ }
+ }
+
+ // Copy message
+ if (msgq_msg_init_size(msg, size) < 0)
+ return -1;
+
+ __sync_synchronize();
+ memcpy(msg->data, p + sizeof(int64_t), size);
+ __sync_synchronize();
+
+ // Update read pointer
+ PACK64(*q->read_pointers[id], read_cycles, new_read_pointer);
+
+ // Check if the actual data that was copied is valid
+ if (!*q->read_valids[id]){
+ msgq_msg_close(msg);
+ msgq_reset_reader(q);
+ goto start;
+ }
+
+
+ return msg->size;
+}
+
+
+
+int msgq_poll(msgq_pollitem_t * items, size_t nitems, int timeout){
+ int num = 0;
+
+ // Check if messages ready
+ for (size_t i = 0; i < nitems; i++) {
+ items[i].revents = msgq_msg_ready(items[i].q);
+ if (items[i].revents) num++;
+ }
+
+ int ms = (timeout == -1) ? 100 : timeout;
+ struct timespec ts;
+ ts.tv_sec = ms / 1000;
+ ts.tv_nsec = (ms % 1000) * 1000 * 1000;
+
+
+ while (num == 0) {
+ int ret;
+
+ ret = nanosleep(&ts, &ts);
+
+ // Check if messages ready
+ for (size_t i = 0; i < nitems; i++) {
+ if (items[i].revents == 0 && msgq_msg_ready(items[i].q)){
+ num += 1;
+ items[i].revents = 1;
+ }
+ }
+
+ // exit if we had a timeout and the sleep finished
+ if (timeout != -1 && ret == 0){
+ break;
+ }
+ }
+
+ return num;
+}
diff --git a/cereal/messaging/msgq.hpp b/cereal/messaging/msgq.hpp
new file mode 100644
index 00000000000000..3bead13d9d7e67
--- /dev/null
+++ b/cereal/messaging/msgq.hpp
@@ -0,0 +1,66 @@
+#pragma once
+#include
+#include
+#include
+#include
+
+#define DEFAULT_SEGMENT_SIZE (10 * 1024 * 1024)
+#define NUM_READERS 8
+#define ALIGN(n) ((n + (8 - 1)) & -8)
+
+#define UNPACK64(higher, lower, input) do {uint64_t tmp = input; higher = tmp >> 32; lower = tmp & 0xFFFFFFFF;} while (0)
+#define PACK64(output, higher, lower) output = ((uint64_t)higher << 32 ) | ((uint64_t)lower & 0xFFFFFFFF)
+
+struct msgq_header_t {
+ uint64_t num_readers;
+ uint64_t write_pointer;
+ uint64_t write_uid;
+ uint64_t read_pointers[NUM_READERS];
+ uint64_t read_valids[NUM_READERS];
+ uint64_t read_uids[NUM_READERS];
+};
+
+struct msgq_queue_t {
+ std::atomic *num_readers;
+ std::atomic *write_pointer;
+ std::atomic *write_uid;
+ std::atomic *read_pointers[NUM_READERS];
+ std::atomic *read_valids[NUM_READERS];
+ std::atomic *read_uids[NUM_READERS];
+ char * mmap_p;
+ char * data;
+ size_t size;
+ int reader_id;
+ uint64_t read_uid_local;
+ uint64_t write_uid_local;
+
+ bool read_conflate;
+ std::string endpoint;
+};
+
+struct msgq_msg_t {
+ size_t size;
+ char * data;
+};
+
+struct msgq_pollitem_t {
+ msgq_queue_t *q;
+ int revents;
+};
+
+void msgq_wait_for_subscriber(msgq_queue_t *q);
+void msgq_reset_reader(msgq_queue_t *q);
+
+int msgq_msg_init_size(msgq_msg_t *msg, size_t size);
+int msgq_msg_init_data(msgq_msg_t *msg, char * data, size_t size);
+int msgq_msg_close(msgq_msg_t *msg);
+
+int msgq_new_queue(msgq_queue_t * q, const char * path, size_t size);
+void msgq_close_queue(msgq_queue_t *q);
+void msgq_init_publisher(msgq_queue_t * q);
+void msgq_init_subscriber(msgq_queue_t * q);
+
+int msgq_msg_send(msgq_msg_t *msg, msgq_queue_t *q);
+int msgq_msg_recv(msgq_msg_t *msg, msgq_queue_t *q);
+int msgq_msg_ready(msgq_queue_t * q);
+int msgq_poll(msgq_pollitem_t * items, size_t nitems, int timeout);
diff --git a/cereal/messaging/socketmaster.cc b/cereal/messaging/socketmaster.cc
new file mode 100644
index 00000000000000..53821aa21fd039
--- /dev/null
+++ b/cereal/messaging/socketmaster.cc
@@ -0,0 +1,170 @@
+#include
+#include
+#include "messaging.hpp"
+#include "services.h"
+
+static inline uint64_t nanos_since_boot() {
+ struct timespec t;
+ clock_gettime(CLOCK_BOOTTIME, &t);
+ return t.tv_sec * 1000000000ULL + t.tv_nsec;
+}
+
+static const service *get_service(const char *name) {
+ for (const auto &it : services) {
+ if (strcmp(it.name, name) == 0) return ⁢
+ }
+ return nullptr;
+}
+
+static inline bool inList(const std::initializer_list &list, const char *value) {
+ for (auto &v : list) {
+ if (strcmp(value, v) == 0) return true;
+ }
+ return false;
+}
+
+class MessageContext {
+public:
+ MessageContext() { ctx_ = Context::create(); }
+ ~MessageContext() { delete ctx_; }
+ Context *ctx_;
+};
+MessageContext ctx;
+
+struct SubMaster::SubMessage {
+ std::string name;
+ SubSocket *socket = nullptr;
+ int freq = 0;
+ bool updated = false, alive = false, valid = false, ignore_alive;
+ uint64_t rcv_time = 0, rcv_frame = 0;
+ void *allocated_msg_reader = nullptr;
+ capnp::FlatArrayMessageReader *msg_reader = nullptr;
+ kj::Array buf;
+ cereal::Event::Reader event;
+};
+
+SubMaster::SubMaster(const std::initializer_list &service_list, const char *address,
+ const std::initializer_list &ignore_alive) {
+ poller_ = Poller::create();
+ for (auto name : service_list) {
+ const service *serv = get_service(name);
+ assert(serv != nullptr);
+ SubSocket *socket = SubSocket::create(ctx.ctx_, name, address ? address : "127.0.0.1", true);
+ assert(socket != 0);
+ poller_->registerSocket(socket);
+ SubMessage *m = new SubMessage{
+ .socket = socket,
+ .freq = serv->frequency,
+ .ignore_alive = inList(ignore_alive, name),
+ .allocated_msg_reader = malloc(sizeof(capnp::FlatArrayMessageReader)),
+ .buf = kj::heapArray(1024)};
+ messages_[socket] = m;
+ services_[name] = m;
+ }
+}
+
+int SubMaster::update(int timeout) {
+ if (++frame == UINT64_MAX) frame = 1;
+ for (auto &kv : messages_) kv.second->updated = false;
+
+ int updated = 0;
+ auto sockets = poller_->poll(timeout);
+ uint64_t current_time = nanos_since_boot();
+ for (auto s : sockets) {
+ Message *msg = s->receive(true);
+ if (msg == nullptr) continue;
+
+ SubMessage *m = messages_.at(s);
+ const size_t size = (msg->getSize() / sizeof(capnp::word)) + 1;
+ if (m->buf.size() < size) {
+ m->buf = kj::heapArray(size);
+ }
+ memcpy(m->buf.begin(), msg->getData(), msg->getSize());
+ delete msg;
+
+ if (m->msg_reader) {
+ m->msg_reader->~FlatArrayMessageReader();
+ }
+ m->msg_reader = new (m->allocated_msg_reader) capnp::FlatArrayMessageReader(kj::ArrayPtr(m->buf.begin(), size));
+ m->event = m->msg_reader->getRoot();
+ m->updated = true;
+ m->rcv_time = current_time;
+ m->rcv_frame = frame;
+ m->valid = m->event.getValid();
+
+ ++updated;
+ }
+
+ for (auto &kv : messages_) {
+ SubMessage *m = kv.second;
+ m->alive = (m->freq <= (1e-5) || ((current_time - m->rcv_time) * (1e-9)) < (10.0 / m->freq));
+ }
+ return updated;
+}
+
+bool SubMaster::all_(const std::initializer_list &service_list, bool valid, bool alive) {
+ int found = 0;
+ for (auto &kv : messages_) {
+ SubMessage *m = kv.second;
+ if (service_list.size() == 0 || inList(service_list, m->name.c_str())) {
+ found += (!valid || m->valid) && (!alive || (m->alive && !m->ignore_alive));
+ }
+ }
+ return service_list.size() == 0 ? found == messages_.size() : found == service_list.size();
+}
+
+void SubMaster::drain() {
+ while (true) {
+ auto polls = poller_->poll(0);
+ if (polls.size() == 0)
+ break;
+
+ for (auto sock : polls) {
+ Message *msg = sock->receive(true);
+ delete msg;
+ }
+ }
+}
+
+bool SubMaster::updated(const char *name) const {
+ return services_.at(name)->updated;
+}
+
+uint64_t SubMaster::rcv_frame(const char *name) const {
+ return services_.at(name)->rcv_frame;
+}
+
+cereal::Event::Reader &SubMaster::operator[](const char *name) {
+ return services_.at(name)->event;
+};
+
+SubMaster::~SubMaster() {
+ delete poller_;
+ for (auto &kv : messages_) {
+ SubMessage *m = kv.second;
+ if (m->msg_reader) {
+ m->msg_reader->~FlatArrayMessageReader();
+ }
+ free(m->allocated_msg_reader);
+ delete m->socket;
+ delete m;
+ }
+}
+
+PubMaster::PubMaster(const std::initializer_list &service_list) {
+ for (auto name : service_list) {
+ assert(get_service(name) != nullptr);
+ PubSocket *socket = PubSocket::create(ctx.ctx_, name);
+ assert(socket);
+ sockets_[name] = socket;
+ }
+}
+
+int PubMaster::send(const char *name, MessageBuilder &msg) {
+ auto bytes = msg.toBytes();
+ return send(name, bytes.begin(), bytes.size());
+}
+
+PubMaster::~PubMaster() {
+ for (auto s : sockets_) delete s.second;
+}
diff --git a/selfdrive/service_list.yaml b/cereal/service_list.yaml
similarity index 79%
rename from selfdrive/service_list.yaml
rename to cereal/service_list.yaml
index 2d4535ca20035f..6d2e728c4da9e5 100644
--- a/selfdrive/service_list.yaml
+++ b/cereal/service_list.yaml
@@ -16,22 +16,22 @@ thermal: [8005, true, 2., 1]
can: [8006, true, 100.]
controlsState: [8007, true, 100., 100]
#liveEvent: [8008, true, 0.]
-model: [8009, true, 20.]
+model: [8009, true, 20., 5]
features: [8010, true, 0.]
health: [8011, true, 2., 1]
-radarState: [8012, true, 20.]
+radarState: [8012, true, 20., 5]
#liveUI: [8014, true, 0.]
encodeIdx: [8015, true, 20.]
liveTracks: [8016, true, 20.]
sendcan: [8017, true, 100.]
logMessage: [8018, true, 0.]
-liveCalibration: [8019, true, 5.]
+liveCalibration: [8019, true, 4., 4]
androidLog: [8020, true, 0.]
carState: [8021, true, 100., 10]
# 8022 is reserved for sshd
carControl: [8023, true, 100., 10]
-plan: [8024, true, 20.]
-liveLocation: [8025, true, 0.]
+plan: [8024, true, 20., 2]
+liveLocation: [8025, true, 0., 1]
gpsLocation: [8026, true, 1., 1]
ethernetData: [8027, true, 0.]
navUpdate: [8028, true, 0.]
@@ -40,10 +40,9 @@ lidarPts: [8030, true, 0.]
procLog: [8031, true, 0.5]
gpsLocationExternal: [8032, true, 10., 1]
ubloxGnss: [8033, true, 10.]
-clocks: [8034, true, 1.]
+clocks: [8034, true, 1., 1]
liveMpc: [8035, false, 20.]
liveLongitudinalMpc: [8036, false, 20.]
-plusFrame: [8037, false, 0.]
navStatus: [8038, true, 0.]
gpsLocationTrimble: [8039, true, 0.]
trimbleGnss: [8041, true, 0.]
@@ -58,23 +57,29 @@ orbslamCorrection: [8050, true, 0.]
liveLocationCorrected: [8051, true, 0.]
orbObservation: [8052, true, 0.]
applanixLocation: [8053, true, 0.]
-liveLocationKalman: [8054, true, 0.]
+liveLocationKalman: [8054, true, 20., 2]
uiNavigationEvent: [8055, true, 0.]
orbOdometry: [8057, true, 0.]
orbFeatures: [8058, false, 0.]
orbKeyFrame: [8059, true, 0.]
uiLayoutState: [8060, true, 0.]
-frontEncodeIdx: [8061, true, 5.]
+frontEncodeIdx: [8061, true, 5.] # should be 20fps on tici
orbFeaturesSummary: [8062, true, 0.]
-driverMonitoring: [8063, true, 5., 1]
-liveParameters: [8064, true, 10.]
+driverState: [8063, true, 5., 1]
+liveParameters: [8064, true, 20., 2]
liveMapData: [8065, true, 0.]
-cameraOdometry: [8066, true, 5.]
-pathPlan: [8067, true, 20.]
+cameraOdometry: [8066, true, 20., 5]
+pathPlan: [8067, true, 20., 2]
kalmanOdometry: [8068, true, 0.]
thumbnail: [8069, true, 0.2, 1]
carEvents: [8070, true, 1., 1]
carParams: [8071, true, 0.02, 1]
+frontFrame: [8072, true, 10.]
+dMonitoringState: [8073, true, 5., 1]
+offroadLayout: [8074, false, 0.]
+wideEncodeIdx: [8075, true, 20.]
+wideFrame: [8076, true, 20.]
+modelV2: [8077, true, 20., 20]
testModel: [8040, false, 0.]
testLiveLocation: [8045, false, 0.]
@@ -97,6 +102,9 @@ uiIcLeads: [8211, false, 0.]
alcaStatus: [8209, false, 0.]
alcaState: [8210, false, 0.]
+#auto high beam Events
+ahbInfo: [8212, false, 0.]
+
# 8080 is reserved for slave testing daemon
# 8762 is reserved for logserver
@@ -119,19 +127,31 @@ alcaState: [8210, false, 0.]
# gpsd -- publishes EON's gps
# publishes: gpsNMEA
-# visiond -- talks to the cameras, runs the model, saves the videos
-# publishes: frame, model, driverMonitoring, cameraOdometry, thumbnail
+# camerad -- publishes camera frames
+# publishes: frame, frontFrame, thumbnail
+# subscribes: driverState
+
+# dmonitoringmodeld -- runs face detection on camera frames
+# publishes: driverState
# **** stateful data transformers ****
+# modeld -- runs & publishes the model
+# publishes: model, cameraOdometry
+# subscribes: liveCalibration, pathPlan
+
# plannerd -- decides where to drive the car
# subscribes: carState, model, radarState, controlsState, liveParameters
# publishes: plan, pathPlan, liveMpc, liveLongitudinalMpc
# controlsd -- drives the car by sending CAN messages to panda
-# subscribes: can, thermal, health, plan, pathPlan, driverMonitoring, liveCalibration
+# subscribes: can, thermal, health, plan, pathPlan, dMonitoringState, liveCalibration, model
# publishes: carState, carControl, sendcan, controlsState, carEvents, carParams
+# dmonitoringd -- processes driver monitoring data and publishes driver awareness
+# subscribes: driverState, liveCalibration, carState, model, gpsLocation
+# publishes: dMonitoringState
+
# radard -- processes the radar and vision data
# subscribes: can, controlsState, model, liveParameters
# publishes: radarState, liveTracks
diff --git a/cereal/services.py b/cereal/services.py
new file mode 100755
index 00000000000000..b22305945fe7cd
--- /dev/null
+++ b/cereal/services.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+import os
+import yaml
+
+
+class Service():
+ def __init__(self, port, should_log, frequency, decimation=None):
+ self.port = port
+ self.should_log = should_log
+ self.frequency = frequency
+ self.decimation = decimation
+
+
+service_list_path = os.path.join(os.path.dirname(__file__), "service_list.yaml")
+
+service_list = {}
+with open(service_list_path, "r") as f:
+ for k, v in yaml.safe_load(f).items():
+ decimation = None
+ if len(v) == 4:
+ decimation = v[3]
+
+ service_list[k] = Service(v[0], v[1], v[2], decimation)
+
+if __name__ == "__main__":
+ print("/* THIS IS AN AUTOGENERATED FILE, PLEASE EDIT service_list.yaml */")
+ print("#ifndef __SERVICES_H")
+ print("#define __SERVICES_H")
+ print("struct service { char name[0x100]; int port; bool should_log; int frequency; int decimation; };")
+ print("static struct service services[] = {")
+ for k, v in service_list.items():
+ print(' { .name = "%s", .port = %d, .should_log = %s, .frequency = %d, .decimation = %d },' % (k, v.port, "true" if v.should_log else "false", v.frequency, -1 if v.decimation is None else v.decimation))
+ print("};")
+ print("#endif")
diff --git a/cereal/tesla.capnp b/cereal/tesla.capnp
index 5f31f98edeb0e0..56134ef183c8e8 100644
--- a/cereal/tesla.capnp
+++ b/cereal/tesla.capnp
@@ -7,7 +7,7 @@ $Java.outerClassname("Alca");
@0xca61a35dedbd6327;
-const interfaceVersion :Float32 = 4.0;
+#const interfaceVersion :Float32 = 4.0;
struct ALCAStatus {
# ALCA info
@@ -35,6 +35,7 @@ struct TeslaRadarPoint {
movingState @3 :UInt8; # 0-indeterminate 1-moving 2-stopped 3-standing
length @4 :Float32; # length in meters
obstacleProb @5 :Float32; # probability to be an obstacle
+ timeStamp @6 :UInt64; #timestamp when the pair was received
}
struct ICCarsLR {
@@ -69,6 +70,12 @@ struct ICLeads {
lead2length @5 :Float32;
}
+struct AHBinfo {
+ source @0 :UInt8; #use 0 for radar, 1 for camera, 2 for other
+ radarCarDetected @1 :Bool;
+ cameraCarDetected @2 :Bool;
+}
+
struct TeslaLeadPoint {
trackId @0 :UInt8; # no trackId reuse
oClass @1 :UInt8; # 0-unknown 1-four wheel vehicle 2-two wheel vehicle 3-pedestrian 4-construction element
diff --git a/cereal/tinkla.capnp b/cereal/tinkla.capnp
index 9e71cb789a07b7..ab35b430b4e7f9 100644
--- a/cereal/tinkla.capnp
+++ b/cereal/tinkla.capnp
@@ -7,7 +7,7 @@ $Java.outerClassname("Tinkla");
@0xfc8dda643156b95d;
-const interfaceVersion :Float32 = 2.2;
+const interfaceVersion :Float32 = 3; # Use integer values here
struct Interface {
diff --git a/check_code_quality.sh b/check_code_quality.sh
deleted file mode 100644
index 854d757a847254..00000000000000
--- a/check_code_quality.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-pyflakes $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda")
-RESULT=$?
-if [ $RESULT -eq 0 ]; then
- pylint $(find . -iname "*.py" | grep -vi "^\./pyextra.*" | grep -vi "^\./panda")
- RESULT=$? & 3
-fi
-
-[ $RESULT -ne 0 ] && exit 1
-exit 0
diff --git a/common/.gitignore b/common/.gitignore
new file mode 100644
index 00000000000000..ce1da4c53c0301
--- /dev/null
+++ b/common/.gitignore
@@ -0,0 +1 @@
+*.cpp
diff --git a/common/SConscript b/common/SConscript
new file mode 100644
index 00000000000000..542e10d437b658
--- /dev/null
+++ b/common/SConscript
@@ -0,0 +1,4 @@
+Import('envCython')
+
+envCython.Program('clock.so', 'clock.pyx')
+envCython.Program('params_pyx.so', 'params_pyx.pyx')
diff --git a/common/api/__init__.py b/common/api/__init__.py
index e457272a12d8c8..b030c333343a78 100644
--- a/common/api/__init__.py
+++ b/common/api/__init__.py
@@ -1,13 +1,14 @@
import jwt
import requests
from datetime import datetime, timedelta
-
+from common.basedir import PERSIST
from selfdrive.version import version
-class Api(object):
- def __init__(self, dongle_id, private_key):
+class Api():
+ def __init__(self, dongle_id):
self.dongle_id = dongle_id
- self.private_key = private_key
+ with open(PERSIST+'/comma/id_rsa') as f:
+ self.private_key = f.read()
def get(self, *args, **kwargs):
return self.request('GET', *args, **kwargs)
@@ -19,7 +20,14 @@ def request(self, method, endpoint, timeout=None, access_token=None, **params):
return api_get(endpoint, method=method, timeout=timeout, access_token=access_token, **params)
def get_token(self):
- return jwt.encode({'identity': self.dongle_id, 'exp': datetime.utcnow() + timedelta(hours=1)}, self.private_key, algorithm='RS256')
+ now = datetime.utcnow()
+ payload = {
+ 'identity': self.dongle_id,
+ 'nbf': now,
+ 'iat': now,
+ 'exp': now + timedelta(hours=1)
+ }
+ return jwt.encode(payload, self.private_key, algorithm='RS256').decode('utf8')
def api_get(endpoint, method='GET', timeout=None, access_token=None, **params):
backend = "https://api.commadotai.com/"
@@ -30,5 +38,4 @@ def api_get(endpoint, method='GET', timeout=None, access_token=None, **params):
headers['User-Agent'] = "openpilot-" + version
- return requests.request(method, backend+endpoint, timeout=timeout, headers = headers, params=params)
-
+ return requests.request(method, backend+endpoint, timeout=timeout, headers=headers, params=params)
diff --git a/common/basedir.py b/common/basedir.py
index 99760fa3343653..4511c6657ee829 100644
--- a/common/basedir.py
+++ b/common/basedir.py
@@ -1,4 +1,12 @@
import os
BASEDIR = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../"))
-
+from selfdrive.hardware import PC
+is_tbp = os.path.isfile('/data/tinkla_buddy_pro')
+if PC:
+ PERSIST = os.path.join(BASEDIR, "persist")
+elif is_tbp:
+ PERSIST = "/data/params/persist"
+ PARAMS = "/data/params"
+else:
+ PERSIST = "/persist"
diff --git a/common/clock.pyx b/common/clock.pyx
index 6205eca10c2d54..81333565c58089 100644
--- a/common/clock.pyx
+++ b/common/clock.pyx
@@ -1,16 +1,24 @@
-from posix.time cimport clock_gettime, timespec, CLOCK_BOOTTIME, CLOCK_MONOTONIC_RAW
+# distutils: language = c++
+# cython: language_level = 3
+from posix.time cimport clock_gettime, timespec, CLOCK_MONOTONIC_RAW, clockid_t
-cdef double readclock(int clock_id):
- cdef timespec ts
- cdef double current
+IF UNAME_SYSNAME == "Darwin":
+ # Darwin doesn't have a CLOCK_BOOTTIME
+ CLOCK_BOOTTIME = CLOCK_MONOTONIC_RAW
+ELSE:
+ from posix.time cimport CLOCK_BOOTTIME
- clock_gettime(clock_id, &ts)
- current = ts.tv_sec + (ts.tv_nsec / 1000000000.)
- return current
+cdef double readclock(clockid_t clock_id):
+ cdef timespec ts
+ cdef double current
+ clock_gettime(clock_id, &ts)
+ current = ts.tv_sec + (ts.tv_nsec / 1000000000.)
+ return current
def monotonic_time():
- return readclock(CLOCK_MONOTONIC_RAW)
+ return readclock(CLOCK_MONOTONIC_RAW)
def sec_since_boot():
- return readclock(CLOCK_BOOTTIME)
+ return readclock(CLOCK_BOOTTIME)
+
diff --git a/common/cython_hacks.py b/common/cython_hacks.py
new file mode 100644
index 00000000000000..d0e154746d3455
--- /dev/null
+++ b/common/cython_hacks.py
@@ -0,0 +1,23 @@
+import os
+import sysconfig
+from Cython.Distutils import build_ext
+
+def get_ext_filename_without_platform_suffix(filename):
+ name, ext = os.path.splitext(filename)
+ ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
+
+ if ext_suffix == ext:
+ return filename
+
+ ext_suffix = ext_suffix.replace(ext, '')
+ idx = name.find(ext_suffix)
+
+ if idx == -1:
+ return filename
+ else:
+ return name[:idx] + ext
+
+class BuildExtWithoutPlatformSuffix(build_ext):
+ def get_ext_filename(self, ext_name):
+ filename = super().get_ext_filename(ext_name)
+ return get_ext_filename_without_platform_suffix(filename)
diff --git a/common/ffi_wrapper.py b/common/ffi_wrapper.py
index f41115d1ce721f..e6ee2c23f7af86 100644
--- a/common/ffi_wrapper.py
+++ b/common/ffi_wrapper.py
@@ -2,14 +2,20 @@
import sys
import fcntl
import hashlib
+import platform
from cffi import FFI
+def suffix():
+ if platform.system() == "Darwin":
+ return ".dylib"
+ else:
+ return ".so"
def ffi_wrap(name, c_code, c_header, tmpdir="/tmp/ccache", cflags="", libraries=None):
if libraries is None:
libraries = []
- cache = name + "_" + hashlib.sha1(c_code).hexdigest()
+ cache = name + "_" + hashlib.sha1(c_code.encode('utf-8')).hexdigest()
try:
os.mkdir(tmpdir)
except OSError:
@@ -38,7 +44,7 @@ def compile_code(name, c_code, c_header, directory, cflags="", libraries=None):
ffibuilder = FFI()
ffibuilder.set_source(name, c_code, source_extension='.cpp', libraries=libraries)
ffibuilder.cdef(c_header)
- os.environ['OPT'] = "-fwrapv -O2 -DNDEBUG -std=c++11"
+ os.environ['OPT'] = "-fwrapv -O2 -DNDEBUG -std=c++1z"
os.environ['CFLAGS'] = cflags
ffibuilder.compile(verbose=True, debug=False, tmpdir=directory)
diff --git a/common/file_helpers.py b/common/file_helpers.py
index 3300ae595afe17..c7a70ab8791393 100644
--- a/common/file_helpers.py
+++ b/common/file_helpers.py
@@ -3,13 +3,17 @@
import tempfile
from atomicwrites import AtomicWriter
+
def mkdirs_exists_ok(path):
+ if path.startswith('http://') or path.startswith('https://'):
+ raise ValueError('URL path')
try:
os.makedirs(path)
except OSError:
if not os.path.isdir(path):
raise
+
def rm_not_exists_ok(path):
try:
os.remove(path)
@@ -17,31 +21,25 @@ def rm_not_exists_ok(path):
if os.path.exists(path):
raise
+
def rm_tree_or_link(path):
if os.path.islink(path):
os.unlink(path)
elif os.path.isdir(path):
shutil.rmtree(path)
+
def get_tmpdir_on_same_filesystem(path):
- # TODO(mgraczyk): HACK, we should actually check for which filesystem.
normpath = os.path.normpath(path)
parts = normpath.split("/")
- if len(parts) > 1:
- if parts[1].startswith("raid") or parts[1].startswith("datasets"):
- if len(parts) > 2 and parts[2] == "runner":
- return "/{}/runner/tmp".format(parts[1])
- elif len(parts) > 2 and parts[2] == "aws":
- return "/{}/aws/tmp".format(parts[1])
- else:
- return "/{}/tmp".format(parts[1])
- elif parts[1] == "aws":
- return "/aws/tmp"
- elif parts[1] == "scratch":
- return "/scratch/tmp"
+ if len(parts) > 1 and parts[1] == "scratch":
+ return "/scratch/tmp"
+ elif len(parts) > 2 and parts[2] == "runner":
+ return "/{}/runner/tmp".format(parts[1])
return "/tmp"
-class AutoMoveTempdir(object):
+
+class AutoMoveTempdir():
def __init__(self, target_path, temp_dir=None):
self._target_path = target_path
self._path = tempfile.mkdtemp(dir=temp_dir)
@@ -53,15 +51,17 @@ def name(self):
def close(self):
os.rename(self._path, self._target_path)
- def __enter__(self): return self
+ def __enter__(self):
+ return self
- def __exit__(self, type, value, traceback):
- if type is None:
+ def __exit__(self, exc_type, exc_value, traceback):
+ if exc_type is None:
self.close()
else:
shutil.rmtree(self._path)
-class NamedTemporaryDir(object):
+
+class NamedTemporaryDir():
def __init__(self, temp_dir=None):
self._path = tempfile.mkdtemp(dir=temp_dir)
@@ -72,11 +72,13 @@ def name(self):
def close(self):
shutil.rmtree(self._path)
- def __enter__(self): return self
+ def __enter__(self):
+ return self
- def __exit__(self, type, value, traceback):
+ def __exit__(self, exc_type, exc_value, traceback):
self.close()
+
def _get_fileobject_func(writer, temp_dir):
def _get_fileobject():
file_obj = writer.get_fileobject(dir=temp_dir)
@@ -84,6 +86,7 @@ def _get_fileobject():
return file_obj
return _get_fileobject
+
def atomic_write_on_fs_tmp(path, **kwargs):
"""Creates an atomic writer using a temporary file in a temporary directory
on the same filesystem as path.
@@ -101,6 +104,7 @@ def atomic_write_in_dir(path, **kwargs):
writer = AtomicWriter(path, **kwargs)
return writer._open(_get_fileobject_func(writer, os.path.dirname(path)))
+
def atomic_write_in_dir_neos(path, contents, mode=None):
"""
Atomically writes contents to path using a temporary file in the same directory
diff --git a/common/filter_simple.py b/common/filter_simple.py
index a3206db1cc5684..fa291bcb6fdba6 100644
--- a/common/filter_simple.py
+++ b/common/filter_simple.py
@@ -6,5 +6,4 @@ def __init__(self, x0, ts, dt):
def update(self, x):
self.x = (1. - self.k) * self.x + self.k * x
-
-
+ return self.x
diff --git a/common/fingerprints.py b/common/fingerprints.py
deleted file mode 100644
index 0e29e6c1e71139..00000000000000
--- a/common/fingerprints.py
+++ /dev/null
@@ -1,62 +0,0 @@
-import os
-from common.basedir import BASEDIR
-
-def get_fingerprint_list():
- # read all the folders in selfdrive/car and return a dict where:
- # - keys are all the car models for which we have a fingerprint
- # - values are lists dicts of messages that constitute the unique
- # CAN fingerprint of each car model and all its variants
- fingerprints = {}
- for car_folder in [x[0] for x in os.walk(BASEDIR + '/selfdrive/car')]:
- try:
- car_name = car_folder.split('/')[-1]
- values = __import__('selfdrive.car.%s.values' % car_name, fromlist=['FINGERPRINTS'])
- if hasattr(values, 'FINGERPRINTS'):
- car_fingerprints = values.FINGERPRINTS
- else:
- continue
- for f, v in car_fingerprints.items():
- fingerprints[f] = v
- except (ImportError, IOError):
- pass
- return fingerprints
-
-
-_FINGERPRINTS = get_fingerprint_list()
-
-_DEBUG_ADDRESS = {1880: 8} # reserved for debug purposes
-
-def is_valid_for_fingerprint(msg, car_fingerprint):
- adr = msg.address
- # ignore addresses that are more than 11 bits
- return (adr in car_fingerprint and car_fingerprint[adr] == len(msg.dat)) or adr >= 0x800
-
-
-def eliminate_incompatible_cars(msg, candidate_cars):
- """Removes cars that could not have sent msg.
-
- Inputs:
- msg: A cereal/log CanData message from the car.
- candidate_cars: A list of cars to consider.
-
- Returns:
- A list containing the subset of candidate_cars that could have sent msg.
- """
- compatible_cars = []
-
- for car_name in candidate_cars:
- car_fingerprints = _FINGERPRINTS[car_name]
-
- for fingerprint in car_fingerprints:
- fingerprint.update(_DEBUG_ADDRESS) # add alien debug address
-
- if is_valid_for_fingerprint(msg, fingerprint):
- compatible_cars.append(car_name)
- break
-
- return compatible_cars
-
-
-def all_known_cars():
- """Returns a list of all known car strings."""
- return list(_FINGERPRINTS.keys())
diff --git a/common/gpio.py b/common/gpio.py
new file mode 100644
index 00000000000000..cb0322146c14da
--- /dev/null
+++ b/common/gpio.py
@@ -0,0 +1,14 @@
+def gpio_init(pin, output):
+ try:
+ with open(f"/sys/class/gpio/gpio{pin}/direction", 'wb') as f:
+ f.write(b"out" if output else b"in")
+ except Exception as e:
+ print(f"Failed to set gpio {pin} direction: {e}")
+
+
+def gpio_set(pin, high):
+ try:
+ with open(f"/sys/class/gpio/gpio{pin}/value", 'wb') as f:
+ f.write(b"1" if high else b"0")
+ except Exception as e:
+ print(f"Failed to set gpio {pin} value: {e}")
diff --git a/common/kalman/.gitignore b/common/kalman/.gitignore
new file mode 100644
index 00000000000000..d86912e7d04c50
--- /dev/null
+++ b/common/kalman/.gitignore
@@ -0,0 +1 @@
+simple_kalman_impl.c
diff --git a/common/kalman/Makefile b/common/kalman/Makefile
deleted file mode 100644
index 88b032af1bc4f5..00000000000000
--- a/common/kalman/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all: simple_kalman_impl.so
-
-simple_kalman_impl.so: simple_kalman_impl.pyx simple_kalman_impl.pxd simple_kalman_setup.py
- python2 simple_kalman_setup.py build_ext --inplace
- rm -rf build
- rm simple_kalman_impl.c
-
-.PHONY: clean
-clean:
- rm -f simple_kalman_impl.so
diff --git a/common/kalman/SConscript b/common/kalman/SConscript
new file mode 100644
index 00000000000000..d60354c987ab60
--- /dev/null
+++ b/common/kalman/SConscript
@@ -0,0 +1,3 @@
+Import('envCython')
+
+envCython.Program('simple_kalman_impl.so', 'simple_kalman_impl.pyx')
diff --git a/common/kalman/simple_kalman.py b/common/kalman/simple_kalman.py
index 97b6d792dc967b..33289e4f509fbc 100644
--- a/common/kalman/simple_kalman.py
+++ b/common/kalman/simple_kalman.py
@@ -1,10 +1,3 @@
# pylint: skip-file
-import os
-import subprocess
-
-kalman_dir = os.path.dirname(os.path.abspath(__file__))
-subprocess.check_call(["make", "simple_kalman_impl.so"], cwd=kalman_dir)
-
-from simple_kalman_impl import KF1D as KF1D
-# Silence pyflakes
+from common.kalman.simple_kalman_impl import KF1D as KF1D
assert KF1D
diff --git a/common/kalman/simple_kalman_impl.pxd b/common/kalman/simple_kalman_impl.pxd
index c81f959272610f..cb39a45bca2c36 100644
--- a/common/kalman/simple_kalman_impl.pxd
+++ b/common/kalman/simple_kalman_impl.pxd
@@ -1,3 +1,5 @@
+# cython: language_level = 3
+
cdef class KF1D:
cdef public:
double x0_0
@@ -13,4 +15,4 @@ cdef class KF1D:
double A_K_0
double A_K_1
double A_K_2
- double A_K_3
\ No newline at end of file
+ double A_K_3
diff --git a/common/kalman/simple_kalman_impl.pyx b/common/kalman/simple_kalman_impl.pyx
index 43acf7e2a086fa..16aefba2e5b796 100644
--- a/common/kalman/simple_kalman_impl.pyx
+++ b/common/kalman/simple_kalman_impl.pyx
@@ -1,3 +1,5 @@
+# distutils: language = c++
+# cython: language_level=3
cdef class KF1D:
def __init__(self, x0, A, C, K):
@@ -32,4 +34,4 @@ cdef class KF1D:
@x.setter
def x(self, x):
self.x0_0 = x[0][0]
- self.x1_0 = x[1][0]
\ No newline at end of file
+ self.x1_0 = x[1][0]
diff --git a/common/kalman/simple_kalman_old.py b/common/kalman/simple_kalman_old.py
index 3f7d049cc55342..d11770faf6cc74 100644
--- a/common/kalman/simple_kalman_old.py
+++ b/common/kalman/simple_kalman_old.py
@@ -8,7 +8,7 @@ class KF1D:
def __init__(self, x0, A, C, K):
self.x = x0
self.A = A
- self.C = C
+ self.C = np.atleast_2d(C)
self.K = K
self.A_K = self.A - np.dot(self.K, self.C)
diff --git a/common/kalman/simple_kalman_setup.py b/common/kalman/simple_kalman_setup.py
deleted file mode 100644
index bccd9f888f33b7..00000000000000
--- a/common/kalman/simple_kalman_setup.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from distutils.core import setup, Extension
-from Cython.Build import cythonize
-
-setup(name='Simple Kalman Implementation',
- ext_modules=cythonize(Extension("simple_kalman_impl", ["simple_kalman_impl.pyx"])))
\ No newline at end of file
diff --git a/common/kalman/tests/test_simple_kalman.py b/common/kalman/tests/test_simple_kalman.py
index c1f9f7b03cd573..7b327918a3d33d 100644
--- a/common/kalman/tests/test_simple_kalman.py
+++ b/common/kalman/tests/test_simple_kalman.py
@@ -21,10 +21,10 @@ def setUp(self):
K0_0 = 0.12287673
K1_0 = 0.29666309
- self.kf_old = KF1D_old(x0=np.matrix([[x0_0], [x1_0]]),
- A=np.matrix([[A0_0, A0_1], [A1_0, A1_1]]),
- C=np.matrix([C0_0, C0_1]),
- K=np.matrix([[K0_0], [K1_0]]))
+ self.kf_old = KF1D_old(x0=np.array([[x0_0], [x1_0]]),
+ A=np.array([[A0_0, A0_1], [A1_0, A1_1]]),
+ C=np.array([C0_0, C0_1]),
+ K=np.array([[K0_0], [K1_0]]))
self.kf = KF1D(x0=[[x0_0], [x1_0]],
A=[[A0_0, A0_1], [A1_0, A1_1]],
@@ -47,9 +47,8 @@ def test_old_equal_new(self):
x = self.kf.update(v_wheel)
# Compare the output x, verify that the error is less than 1e-4
- self.assertAlmostEqual(x_old[0], x[0])
- self.assertAlmostEqual(x_old[1], x[1])
-
+ np.testing.assert_almost_equal(x_old[0], x[0])
+ np.testing.assert_almost_equal(x_old[1], x[1])
def test_new_is_faster(self):
setup = """
@@ -70,10 +69,10 @@ def test_new_is_faster(self):
K0_0 = 0.12287673
K1_0 = 0.29666309
-kf_old = KF1D_old(x0=np.matrix([[x0_0], [x1_0]]),
- A=np.matrix([[A0_0, A0_1], [A1_0, A1_1]]),
- C=np.matrix([C0_0, C0_1]),
- K=np.matrix([[K0_0], [K1_0]]))
+kf_old = KF1D_old(x0=np.array([[x0_0], [x1_0]]),
+ A=np.array([[A0_0, A0_1], [A1_0, A1_1]]),
+ C=np.array([C0_0, C0_1]),
+ K=np.array([[K0_0], [K1_0]]))
kf = KF1D(x0=[[x0_0], [x1_0]],
A=[[A0_0, A0_1], [A1_0, A1_1]],
@@ -83,3 +82,6 @@ def test_new_is_faster(self):
kf_speed = timeit.timeit("kf.update(1234)", setup=setup, number=10000)
kf_old_speed = timeit.timeit("kf_old.update(1234)", setup=setup, number=10000)
self.assertTrue(kf_speed < kf_old_speed / 4)
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/common/logging_extra.py b/common/logging_extra.py
index 43ae48882b956e..ce8889b410583c 100644
--- a/common/logging_extra.py
+++ b/common/logging_extra.py
@@ -1,9 +1,11 @@
+import io
import os
import sys
import copy
import json
import socket
import logging
+import traceback
from threading import local
from collections import OrderedDict
from contextlib import contextmanager
@@ -66,8 +68,11 @@ class SwagErrorFilter(logging.Filter):
def filter(self, record):
return record.levelno < logging.ERROR
-_tmpfunc = lambda: 0
-_srcfile = os.path.normcase(_tmpfunc.__code__.co_filename)
+def _tmpfunc():
+ return 0
+
+def _srcfile():
+ return os.path.normcase(_tmpfunc.__code__.co_filename)
class SwagLogger(logging.Logger):
def __init__(self):
@@ -78,28 +83,6 @@ def __init__(self):
self.log_local = local()
self.log_local.ctx = {}
- def findCaller(self, stack_info=None):
- """
- Find the stack frame of the caller so that we can note the source
- file name, line number and function name.
- """
- # f = currentframe()
- f = sys._getframe(3)
- #On some versions of IronPython, currentframe() returns None if
- #IronPython isn't run with -X:Frames.
- if f is not None:
- f = f.f_back
- rv = "(unknown file)", 0, "(unknown function)"
- while hasattr(f, "f_code"):
- co = f.f_code
- filename = os.path.normcase(co.co_filename)
- if filename in (logging._srcfile, _srcfile):
- f = f.f_back
- continue
- rv = (co.co_filename, f.f_lineno, co.co_name)
- break
- return rv
-
def local_ctx(self):
try:
return self.log_local.ctx
@@ -132,14 +115,49 @@ def event(self, event_name, *args, **kwargs):
if args:
evt['args'] = args
evt.update(kwargs)
- ctx = self.get_ctx()
- if ctx:
- evt['ctx'] = self.get_ctx()
if 'error' in kwargs:
self.error(evt)
else:
self.info(evt)
+ def findCaller(self, stack_info=False, stacklevel=1):
+ """
+ Find the stack frame of the caller so that we can note the source
+ file name, line number and function name.
+ """
+ f = sys._getframe(3)
+ #On some versions of IronPython, currentframe() returns None if
+ #IronPython isn't run with -X:Frames.
+ if f is not None:
+ f = f.f_back
+ orig_f = f
+ while f and stacklevel > 1:
+ f = f.f_back
+ stacklevel -= 1
+ if not f:
+ f = orig_f
+ rv = "(unknown file)", 0, "(unknown function)", None
+ while hasattr(f, "f_code"):
+ co = f.f_code
+ filename = os.path.normcase(co.co_filename)
+
+ # TODO: is this pylint exception correct?
+ if filename == _srcfile: # pylint: disable=comparison-with-callable
+ f = f.f_back
+ continue
+ sinfo = None
+ if stack_info:
+ sio = io.StringIO()
+ sio.write('Stack (most recent call last):\n')
+ traceback.print_stack(f, file=sio)
+ sinfo = sio.getvalue()
+ if sinfo[-1] == '\n':
+ sinfo = sinfo[:-1]
+ sio.close()
+ rv = (co.co_filename, f.f_lineno, co.co_name, sinfo)
+ break
+ return rv
+
if __name__ == "__main__":
log = SwagLogger()
diff --git a/common/numpy_fast.py b/common/numpy_fast.py
index eb706a908ff643..a8361214d1ae44 100644
--- a/common/numpy_fast.py
+++ b/common/numpy_fast.py
@@ -6,13 +6,17 @@ def clip(x, lo, hi):
def interp(x, xp, fp):
N = len(xp)
+
def get_interp(xv):
hi = 0
while hi < N and xv > xp[hi]:
hi += 1
low = hi - 1
return fp[-1] if hi == N and xv > xp[low] else (
- fp[0] if hi == 0 else
+ fp[0] if hi == 0 else
(xv - xp[low]) * (fp[hi] - fp[low]) / (xp[hi] - xp[low]) + fp[low])
- return [get_interp(v) for v in x] if hasattr(
- x, '__iter__') else get_interp(x)
+
+ return [get_interp(v) for v in x] if hasattr(x, '__iter__') else get_interp(x)
+
+def mean(x):
+ return sum(x) / len(x)
diff --git a/common/params.py b/common/params.py
old mode 100755
new mode 100644
index 461e53817ad7cc..5a7a0d41023f64
--- a/common/params.py
+++ b/common/params.py
@@ -1,369 +1,4 @@
-#!/usr/bin/env python
-"""ROS has a parameter server, we have files.
-
-The parameter store is a persistent key value store, implemented as a directory with a writer lock.
-On Android, we store params under params_dir = /data/params. The writer lock is a file
-"/.lock" taken using flock(), and data is stored in a directory symlinked to by
-"/d".
-
-Each key, value pair is stored as a file with named with contents , located in
- /d/
-
-Readers of a single key can just open("/d/") and read the file contents.
-Readers who want a consistent snapshot of multiple keys should take the lock.
-
-Writers should take the lock before modifying anything. Writers should also leave the DB in a
-consistent state after a crash. The implementation below does this by copying all params to a temp
-directory /, then atomically symlinking / to /
-before deleting the old / directory.
-
-Writers that only modify a single key can simply take the lock, then swap the corresponding value
-file in place without messing with /d.
-"""
-import time
-import os
-import errno
-import sys
-import shutil
-import fcntl
-import tempfile
-from enum import Enum
-
-
-def mkdirs_exists_ok(path):
- try:
- os.makedirs(path)
- except OSError:
- if not os.path.isdir(path):
- raise
-
-
-class TxType(Enum):
- PERSISTENT = 1
- CLEAR_ON_MANAGER_START = 2
- CLEAR_ON_PANDA_DISCONNECT = 3
- CLEAR_ON_CAR_START = 4
-
-
-class UnknownKeyName(Exception):
- pass
-
-
-keys = {
- "AccessToken": [TxType.PERSISTENT],
- "AthenadPid": [TxType.PERSISTENT],
- "CalibrationParams": [TxType.PERSISTENT],
- "CarParams": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT], #[TxType.CLEAR_ON_CAR_START],
- "CarVin": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT], #[TxType.PERSISTENT], #[TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
- "CompletedTrainingVersion": [TxType.PERSISTENT],
- "ControlsParams": [TxType.PERSISTENT],
- "DoUninstall": [TxType.CLEAR_ON_MANAGER_START],
- "DongleId": [TxType.PERSISTENT],
- "GithubSshKeys": [TxType.PERSISTENT],
- "GitBranch": [TxType.PERSISTENT],
- "GitCommit": [TxType.PERSISTENT],
- "GitRemote": [TxType.PERSISTENT],
- "HasAcceptedTerms": [TxType.PERSISTENT],
- "IsDriverMonitoringEnabled": [TxType.PERSISTENT],
- "IsFcwEnabled": [TxType.PERSISTENT],
- "IsGeofenceEnabled": [TxType.PERSISTENT],
- "IsMetric": [TxType.PERSISTENT],
- "IsUpdateAvailable": [TxType.PERSISTENT],
- "IsUploadRawEnabled": [TxType.PERSISTENT],
- "IsUploadVideoOverCellularEnabled": [TxType.PERSISTENT],
- "LimitSetSpeed": [TxType.PERSISTENT],
- "LimitSetSpeedNeural": [TxType.PERSISTENT],
- "LiveParameters": [TxType.PERSISTENT],
- "LongitudinalControl": [TxType.PERSISTENT],
- "Passive": [TxType.PERSISTENT],
- "RecordFront": [TxType.PERSISTENT],
- "ShouldDoUpdate": [TxType.CLEAR_ON_MANAGER_START],
- "SpeedLimitOffset": [TxType.PERSISTENT],
- "SubscriberInfo": [TxType.PERSISTENT],
- "TermsVersion": [TxType.PERSISTENT],
- "TrainingVersion": [TxType.PERSISTENT],
- "Version": [TxType.PERSISTENT],
-}
-
-
-def fsync_dir(path):
- fd = os.open(path, os.O_RDONLY)
- try:
- os.fsync(fd)
- finally:
- os.close(fd)
-
-
-class FileLock(object):
- def __init__(self, path, create):
- self._path = path
- self._create = create
- self._fd = None
-
- def acquire(self):
- self._fd = os.open(self._path, os.O_CREAT if self._create else 0)
- fcntl.flock(self._fd, fcntl.LOCK_EX)
-
- def release(self):
- if self._fd is not None:
- os.close(self._fd)
- self._fd = None
-
-
-class DBAccessor(object):
- def __init__(self, path):
- self._path = path
- self._vals = None
-
- def keys(self):
- self._check_entered()
- return self._vals.keys()
-
- def get(self, key):
- self._check_entered()
- try:
- return self._vals[key]
- except KeyError:
- return None
-
- def _get_lock(self, create):
- lock = FileLock(os.path.join(self._path, ".lock"), create)
- lock.acquire()
- return lock
-
- def _read_values_locked(self):
- """Callers should hold a lock while calling this method."""
- vals = {}
- try:
- data_path = self._data_path()
- keys = os.listdir(data_path)
- for key in keys:
- with open(os.path.join(data_path, key), "rb") as f:
- vals[key] = f.read()
- except (OSError, IOError) as e:
- # Either the DB hasn't been created yet, or somebody wrote a bug and left the DB in an
- # inconsistent state. Either way, return empty.
- if e.errno == errno.ENOENT:
- return {}
-
- return vals
-
- def _data_path(self):
- return os.path.join(self._path, "d")
-
- def _check_entered(self):
- if self._vals is None:
- raise Exception("Must call __enter__ before using DB")
-
-
-class DBReader(DBAccessor):
- def __enter__(self):
- try:
- lock = self._get_lock(False)
- except OSError as e:
- # Do not create lock if it does not exist.
- if e.errno == errno.ENOENT:
- self._vals = {}
- return self
-
- try:
- # Read everything.
- self._vals = self._read_values_locked()
- return self
- finally:
- lock.release()
-
- def __exit__(self, type, value, traceback): pass
-
-
-class DBWriter(DBAccessor):
- def __init__(self, path):
- super(DBWriter, self).__init__(path)
- self._lock = None
- self._prev_umask = None
-
- def put(self, key, value):
- self._vals[key] = value
-
- def delete(self, key):
- self._vals.pop(key, None)
-
- def __enter__(self):
- mkdirs_exists_ok(self._path)
-
- # Make sure we can write and that permissions are correct.
- self._prev_umask = os.umask(0)
-
- try:
- os.chmod(self._path, 0o777)
- self._lock = self._get_lock(True)
- self._vals = self._read_values_locked()
- except:
- os.umask(self._prev_umask)
- self._prev_umask = None
- raise
-
- return self
-
- def __exit__(self, type, value, traceback):
- self._check_entered()
-
- try:
- # data_path refers to the externally used path to the params. It is a symlink.
- # old_data_path is the path currently pointed to by data_path.
- # tempdir_path is a path where the new params will go, which the new data path will point to.
- # new_data_path is a temporary symlink that will atomically overwrite data_path.
- #
- # The current situation is:
- # data_path -> old_data_path
- # We're going to write params data to tempdir_path
- # tempdir_path -> params data
- # Then point new_data_path to tempdir_path
- # new_data_path -> tempdir_path
- # Then atomically overwrite data_path with new_data_path
- # data_path -> tempdir_path
- old_data_path = None
- new_data_path = None
- tempdir_path = tempfile.mkdtemp(prefix=".tmp", dir=self._path)
-
- try:
- # Write back all keys.
- os.chmod(tempdir_path, 0o777)
- for k, v in self._vals.items():
- with open(os.path.join(tempdir_path, k), "wb") as f:
- f.write(v)
- f.flush()
- os.fsync(f.fileno())
- fsync_dir(tempdir_path)
-
- data_path = self._data_path()
- try:
- old_data_path = os.path.join(self._path, os.readlink(data_path))
- except (OSError, IOError):
- # NOTE(mgraczyk): If other DB implementations have bugs, this could cause
- # copies to be left behind, but we still want to overwrite.
- pass
-
- new_data_path = "{}.link".format(tempdir_path)
- os.symlink(os.path.basename(tempdir_path), new_data_path)
- os.rename(new_data_path, data_path)
- fsync_dir(self._path)
- finally:
- # If the rename worked, we can delete the old data. Otherwise delete the new one.
- success = new_data_path is not None and os.path.exists(data_path) and (
- os.readlink(data_path) == os.path.basename(tempdir_path))
-
- if success:
- if old_data_path is not None:
- shutil.rmtree(old_data_path)
- else:
- shutil.rmtree(tempdir_path)
-
- # Regardless of what happened above, there should be no link at new_data_path.
- if new_data_path is not None and os.path.islink(new_data_path):
- os.remove(new_data_path)
- finally:
- os.umask(self._prev_umask)
- self._prev_umask = None
-
- # Always release the lock.
- self._lock.release()
- self._lock = None
-
-
-def read_db(params_path, key):
- path = "%s/d/%s" % (params_path, key)
- try:
- with open(path, "rb") as f:
- return f.read()
- except IOError:
- return None
-
-def write_db(params_path, key, value):
- prev_umask = os.umask(0)
- lock = FileLock(params_path+"/.lock", True)
- lock.acquire()
-
- try:
- tmp_path = tempfile.mktemp(prefix=".tmp", dir=params_path)
- with open(tmp_path, "wb") as f:
- f.write(value)
- f.flush()
- os.fsync(f.fileno())
-
- path = "%s/d/%s" % (params_path, key)
- os.rename(tmp_path, path)
- fsync_dir(os.path.dirname(path))
- finally:
- os.umask(prev_umask)
- lock.release()
-
-class Params(object):
- def __init__(self, db='/data/params'):
- self.db = db
-
- # create the database if it doesn't exist...
- if not os.path.exists(self.db+"/d"):
- with self.transaction(write=True):
- pass
-
- def transaction(self, write=False):
- if write:
- return DBWriter(self.db)
- else:
- return DBReader(self.db)
-
- def _clear_keys_with_type(self, tx_type):
- with self.transaction(write=True) as txn:
- for key in keys:
- if tx_type in keys[key]:
- txn.delete(key)
-
- def manager_start(self):
- self._clear_keys_with_type(TxType.CLEAR_ON_MANAGER_START)
-
- def panda_disconnect(self):
- self._clear_keys_with_type(TxType.CLEAR_ON_PANDA_DISCONNECT)
-
- def car_start(self):
- self._clear_keys_with_type(TxType.CLEAR_ON_CAR_START)
-
- def delete(self, key):
- with self.transaction(write=True) as txn:
- txn.delete(key)
-
- def get(self, key, block=False):
- if key not in keys:
- raise UnknownKeyName(key)
-
- while 1:
- ret = read_db(self.db, key)
- if not block or ret is not None:
- break
- # is polling really the best we can do?
- time.sleep(0.05)
- return ret
-
- def put(self, key, dat):
- if key not in keys:
- raise UnknownKeyName(key)
-
- write_db(self.db, key, dat)
-
-if __name__ == "__main__":
- params = Params()
- if len(sys.argv) > 2:
- params.put(sys.argv[1], sys.argv[2])
- else:
- for k in keys:
- pp = params.get(k)
- if pp is None:
- print("%s is None" % k)
- elif all(ord(c) < 128 and ord(c) >= 32 for c in pp):
- print("%s = %s" % (k, pp))
- else:
- print("%s = %s" % (k, pp.encode("hex")))
-
- # Test multiprocess:
- # seq 0 100000 | xargs -P20 -I{} python common/params.py DongleId {} && sleep 0.05
- # while python common/params.py DongleId; do sleep 0.05; done
+from common.params_pyx import Params, UnknownKeyName, put_nonblocking # pylint: disable=no-name-in-module, import-error
+assert Params
+assert UnknownKeyName
+assert put_nonblocking
diff --git a/common/params_pxd.pxd b/common/params_pxd.pxd
new file mode 100644
index 00000000000000..e437a09b043e66
--- /dev/null
+++ b/common/params_pxd.pxd
@@ -0,0 +1,16 @@
+from libcpp.string cimport string
+from libcpp cimport bool
+
+cdef extern from "selfdrive/common/params.cc":
+ pass
+
+cdef extern from "selfdrive/common/util.c":
+ pass
+
+cdef extern from "selfdrive/common/params.h":
+ cdef cppclass Params:
+ Params(bool)
+ Params(string)
+ string get(string, bool) nogil
+ int delete_db_value(string)
+ int write_db_value(string, string)
diff --git a/common/params_pyx.pyx b/common/params_pyx.pyx
new file mode 100755
index 00000000000000..643501cd918e97
--- /dev/null
+++ b/common/params_pyx.pyx
@@ -0,0 +1,172 @@
+# distutils: language = c++
+# cython: language_level = 3
+from libcpp cimport bool
+from libcpp.string cimport string
+from common.params_pxd cimport Params as c_Params
+
+import os
+import threading
+from common.basedir import BASEDIR
+
+cdef enum TxType:
+ PERSISTENT = 1
+ CLEAR_ON_MANAGER_START = 2
+ CLEAR_ON_PANDA_DISCONNECT = 3
+
+keys = {
+ b"AccessToken": [TxType.CLEAR_ON_MANAGER_START],
+ b"AthenadPid": [TxType.PERSISTENT],
+ b"CalibrationParams": [TxType.PERSISTENT],
+ b"CarBatteryCapacity": [TxType.PERSISTENT],
+ b"CarParams": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"CarParamsCache": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"CarVin": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"CommunityFeaturesToggle": [TxType.PERSISTENT],
+ b"CompletedTrainingVersion": [TxType.PERSISTENT],
+ b"DisablePowerDown": [TxType.PERSISTENT],
+ b"DisableUpdates": [TxType.PERSISTENT],
+ b"DoUninstall": [TxType.CLEAR_ON_MANAGER_START],
+ b"DongleId": [TxType.PERSISTENT],
+ b"GitBranch": [TxType.PERSISTENT],
+ b"GitCommit": [TxType.PERSISTENT],
+ b"GitRemote": [TxType.PERSISTENT],
+ b"GithubSshKeys": [TxType.PERSISTENT],
+ b"HasAcceptedTerms": [TxType.PERSISTENT],
+ b"HasCompletedSetup": [TxType.PERSISTENT],
+ b"IsDriverViewEnabled": [TxType.CLEAR_ON_MANAGER_START],
+ b"IsLdwEnabled": [TxType.PERSISTENT],
+ b"IsMetric": [TxType.PERSISTENT],
+ b"IsOffroad": [TxType.CLEAR_ON_MANAGER_START],
+ b"IsRHD": [TxType.PERSISTENT],
+ b"IsTakingSnapshot": [TxType.CLEAR_ON_MANAGER_START],
+ b"IsUpdateAvailable": [TxType.CLEAR_ON_MANAGER_START],
+ b"IsUploadRawEnabled": [TxType.PERSISTENT],
+ b"LastAthenaPingTime": [TxType.PERSISTENT],
+ b"LastUpdateTime": [TxType.PERSISTENT],
+ b"LastUpdateException": [TxType.PERSISTENT],
+ b"LiveParameters": [TxType.PERSISTENT],
+ b"OpenpilotEnabledToggle": [TxType.PERSISTENT],
+ b"LaneChangeEnabled": [TxType.PERSISTENT],
+ b"PandaFirmware": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"PandaFirmwareHex": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"PandaDongleId": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"Passive": [TxType.PERSISTENT],
+ b"RecordFront": [TxType.PERSISTENT],
+ b"ReleaseNotes": [TxType.PERSISTENT],
+ b"ShouldDoUpdate": [TxType.CLEAR_ON_MANAGER_START],
+ b"SubscriberInfo": [TxType.PERSISTENT],
+ b"TermsVersion": [TxType.PERSISTENT],
+ b"TrainingVersion": [TxType.PERSISTENT],
+ b"UpdateAvailable": [TxType.CLEAR_ON_MANAGER_START],
+ b"UpdateFailedCount": [TxType.CLEAR_ON_MANAGER_START],
+ b"Version": [TxType.PERSISTENT],
+ b"Offroad_ChargeDisabled": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"Offroad_ConnectivityNeeded": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_ConnectivityNeededPrompt": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_TemperatureTooHigh": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_PandaFirmwareMismatch": [TxType.CLEAR_ON_MANAGER_START, TxType.CLEAR_ON_PANDA_DISCONNECT],
+ b"Offroad_InvalidTime": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_IsTakingSnapshot": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_NeosUpdate": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_UpdateFailed": [TxType.CLEAR_ON_MANAGER_START],
+ b"Offroad_HardwareUnsupported": [TxType.CLEAR_ON_MANAGER_START],
+
+ #Tesla
+ b"DriverUsbCameraID": [TxType.PERSISTENT],
+ b"RoadUsbCameraID": [TxType.PERSISTENT],
+ b"DriverUsbCameraFx": [TxType.PERSISTENT],
+ b"DriverUsbCameraFlip": [TxType.PERSISTENT],
+ b"RoadUsbCameraFx": [TxType.PERSISTENT],
+ b"RoadUsbCameraFlip": [TxType.PERSISTENT],
+ b"TeslaModel": [TxType.PERSISTENT],
+ b"SpeedLimitOffset": [TxType.PERSISTENT],
+ b"LimitSetSpeed": [TxType.PERSISTENT],
+}
+
+def ensure_bytes(v):
+ if isinstance(v, str):
+ return v.encode()
+ else:
+ return v
+
+
+class UnknownKeyName(Exception):
+ pass
+
+cdef class Params:
+ cdef c_Params* p
+
+ def __cinit__(self, d=None, bool persistent_params=False):
+ if d is None:
+ self.p = new c_Params(persistent_params)
+ else:
+ self.p = new c_Params(d.encode())
+
+ def __dealloc__(self):
+ del self.p
+
+ def clear_all(self, tx_type=None):
+ for key in keys:
+ if tx_type is None or tx_type in keys[key]:
+ self.delete(key)
+
+ def manager_start(self):
+ self.clear_all(TxType.CLEAR_ON_MANAGER_START)
+
+ def panda_disconnect(self):
+ self.clear_all(TxType.CLEAR_ON_PANDA_DISCONNECT)
+
+ def get(self, key, block=False, encoding=None):
+ key = ensure_bytes(key)
+
+ if key not in keys:
+ raise UnknownKeyName(key)
+
+ cdef string k = key
+ cdef bool b = block
+
+ cdef string val
+ with nogil:
+ val = self.p.get(k, b)
+
+ if val == b"":
+ if block:
+ # If we got no value while running in blocked mode
+ # it means we got an interrupt while waiting
+ raise KeyboardInterrupt
+ else:
+ return None
+
+ if encoding is not None:
+ return val.decode(encoding)
+ else:
+ return val
+
+ def put(self, key, dat):
+ """
+ Warning: This function blocks until the param is written to disk!
+ In very rare cases this can take over a second, and your code will hang.
+ Use the put_nonblocking helper function in time sensitive code, but
+ in general try to avoid writing params as much as possible.
+ """
+ key = ensure_bytes(key)
+ dat = ensure_bytes(dat)
+
+ if key not in keys:
+ raise UnknownKeyName(key)
+
+ self.p.write_db_value(key, dat)
+
+ def delete(self, key):
+ key = ensure_bytes(key)
+ self.p.delete_db_value(key)
+
+
+def put_nonblocking(key, val, d=None):
+ def f(key, val):
+ params = Params(d)
+ params.put(key, val)
+
+ t = threading.Thread(target=f, args=(key, val))
+ t.start()
+ return t
diff --git a/common/profiler.py b/common/profiler.py
index 7f9b1a41ffb188..e4d208acaeb058 100644
--- a/common/profiler.py
+++ b/common/profiler.py
@@ -1,6 +1,6 @@
import time
-class Profiler(object):
+class Profiler():
def __init__(self, enabled=False):
self.enabled = enabled
self.cp = {}
@@ -36,11 +36,10 @@ def display(self):
if not self.enabled:
return
self.iter += 1
- print("******* Profiling *******")
+ print("******* Profiling %d *******" % self.iter)
for n, ms in sorted(self.cp.items(), key=lambda x: -x[1]):
if n in self.cp_ignored:
- print("%30s: %7.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms/self.tot*100))
+ print("%30s: %9.2f avg: %7.2f percent: %3.0f IGNORED" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100))
else:
- print("%30s: %7.2f percent: %3.0f" % (n, ms*1000.0, ms/self.tot*100))
+ print("%30s: %9.2f avg: %7.2f percent: %3.0f" % (n, ms*1000.0, ms*1000.0/self.iter, ms/self.tot*100))
print("Iter clock: %2.6f TOTAL: %2.2f" % (self.tot/self.iter, self.tot))
-
diff --git a/common/realtime.py b/common/realtime.py
index 0c3d43476d5616..86029aba60e86a 100644
--- a/common/realtime.py
+++ b/common/realtime.py
@@ -1,49 +1,56 @@
"""Utilities for reading real time clocks and keeping soft real time constraints."""
+import gc
import os
import time
-import platform
-import subprocess
import multiprocessing
-from cffi import FFI
-# Build and load cython module
-import pyximport
-installer = pyximport.install(inplace=True, build_dir='/tmp')
-from common.clock import monotonic_time, sec_since_boot # pylint: disable=no-name-in-module, import-error
-pyximport.uninstall(*installer)
-assert monotonic_time
-assert sec_since_boot
+from common.clock import sec_since_boot # pylint: disable=no-name-in-module, import-error
+from selfdrive.hardware import PC, TICI
# time step for each process
DT_CTRL = 0.01 # controlsd
-DT_PLAN = 0.05 # mpc
DT_MDL = 0.05 # model
-DT_DMON = 0.1 # driver monitoring
DT_TRML = 0.5 # thermald and manager
+# driver monitoring
+if TICI:
+ DT_DMON = 0.05
+else:
+ DT_DMON = 0.1
-ffi = FFI()
-ffi.cdef("long syscall(long number, ...);")
-libc = ffi.dlopen(None)
+
+class Priority:
+ # CORE 2
+ # - modeld = 55
+ # - camerad = 54
+ CTRL_LOW = 51 # plannerd & radard
+
+ # CORE 3
+ # - boardd = 55
+ CTRL_HIGH = 53
def set_realtime_priority(level):
- if os.getuid() != 0:
- print("not setting priority, not root")
- return
- if platform.machine() == "x86_64":
- NR_gettid = 186
- elif platform.machine() == "aarch64":
- NR_gettid = 178
- else:
- raise NotImplementedError
+ if not PC:
+ os.sched_setscheduler(0, os.SCHED_FIFO, os.sched_param(level))
+
+
+def set_core_affinity(core):
+ if not PC:
+ try:
+ os.sched_setaffinity(0, [core,])
+ except OSError:
+ print("Unable to set core affinity")
+
- tid = libc.syscall(NR_gettid)
- return subprocess.call(['chrt', '-f', '-p', str(level), str(tid)])
+def config_realtime_process(core, priority):
+ gc.disable()
+ set_realtime_priority(priority)
+ set_core_affinity(core)
-class Ratekeeper(object):
+class Ratekeeper():
def __init__(self, rate, print_delay_threshold=0.):
"""Rate in Hz for ratekeeping. print_delay_threshold must be nonnegative."""
self._interval = 1. / rate
@@ -62,12 +69,10 @@ def remaining(self):
return self._remaining
# Maintain loop rate by calling this at the end of each loop
- def keep_time(self, offset=0.):
+ def keep_time(self):
lagged = self.monitor_time()
if self._remaining > 0:
time.sleep(self._remaining)
- elif not offset == 0.:
- self._next_frame_time += offset
return lagged
# this only monitor the cumulative lag, but does not enforce a rate
diff --git a/common/spinner.py b/common/spinner.py
new file mode 100644
index 00000000000000..1232371d8ffe5b
--- /dev/null
+++ b/common/spinner.py
@@ -0,0 +1,49 @@
+import os
+import subprocess
+from common.basedir import BASEDIR
+
+
+class Spinner():
+ def __init__(self):
+ try:
+ self.spinner_proc = subprocess.Popen(["./spinner"],
+ stdin=subprocess.PIPE,
+ cwd=os.path.join(BASEDIR, "selfdrive", "ui"),
+ close_fds=True)
+ except OSError:
+ self.spinner_proc = None
+
+ def __enter__(self):
+ return self
+
+ def update(self, spinner_text):
+ if self.spinner_proc is not None:
+ self.spinner_proc.stdin.write(spinner_text.encode('utf8') + b"\n")
+ try:
+ self.spinner_proc.stdin.flush()
+ except BrokenPipeError:
+ pass
+
+ def close(self):
+ if self.spinner_proc is not None:
+ try:
+ self.spinner_proc.stdin.close()
+ except BrokenPipeError:
+ pass
+ self.spinner_proc.terminate()
+ self.spinner_proc = None
+
+ def __del__(self):
+ self.close()
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.close()
+
+
+if __name__ == "__main__":
+ import time
+ with Spinner() as s:
+ s.update("Spinner text")
+ time.sleep(5.0)
+ print("gone")
+ time.sleep(5.0)
diff --git a/common/stat_live.py b/common/stat_live.py
new file mode 100644
index 00000000000000..a91c1819bb9149
--- /dev/null
+++ b/common/stat_live.py
@@ -0,0 +1,73 @@
+import numpy as np
+
+class RunningStat():
+ # tracks realtime mean and standard deviation without storing any data
+ def __init__(self, priors=None, max_trackable=-1):
+ self.max_trackable = max_trackable
+ if priors is not None:
+ # initialize from history
+ self.M = priors[0]
+ self.S = priors[1]
+ self.n = priors[2]
+ self.M_last = self.M
+ self.S_last = self.S
+
+ else:
+ self.reset()
+
+ def reset(self):
+ self.M = 0.
+ self.S = 0.
+ self.M_last = 0.
+ self.S_last = 0.
+ self.n = 0
+
+ def push_data(self, new_data):
+ # short term memory hack
+ if self.max_trackable < 0 or self.n < self.max_trackable:
+ self.n += 1
+ if self.n == 0:
+ self.M_last = new_data
+ self.M = self.M_last
+ self.S_last = 0.
+ else:
+ self.M = self.M_last + (new_data - self.M_last) / self.n
+ self.S = self.S_last + (new_data - self.M_last) * (new_data - self.M)
+ self.M_last = self.M
+ self.S_last = self.S
+
+ def mean(self):
+ return self.M
+
+ def variance(self):
+ if self.n >= 2:
+ return self.S / (self.n - 1.)
+ else:
+ return 0
+
+ def std(self):
+ return np.sqrt(self.variance())
+
+ def params_to_save(self):
+ return [self.M, self.S, self.n]
+
+class RunningStatFilter():
+ def __init__(self, raw_priors=None, filtered_priors=None, max_trackable=-1):
+ self.raw_stat = RunningStat(raw_priors, -1)
+ self.filtered_stat = RunningStat(filtered_priors, max_trackable)
+
+ def reset(self):
+ self.raw_stat.reset()
+ self.filtered_stat.reset()
+
+ def push_and_update(self, new_data):
+ _std_last = self.raw_stat.std()
+ self.raw_stat.push_data(new_data)
+ _delta_std = self.raw_stat.std() - _std_last
+ if _delta_std <= 0:
+ self.filtered_stat.push_data(new_data)
+ else:
+ pass
+ # self.filtered_stat.push_data(self.filtered_stat.mean())
+
+# class SequentialBayesian():
diff --git a/common/sympy_helpers.py b/common/sympy_helpers.py
deleted file mode 100644
index f20bdb08a7132b..00000000000000
--- a/common/sympy_helpers.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-import sympy as sp
-import numpy as np
-
-def cross(x):
- ret = sp.Matrix(np.zeros((3,3)))
- ret[0,1], ret[0,2] = -x[2], x[1]
- ret[1,0], ret[1,2] = x[2], -x[0]
- ret[2,0], ret[2,1] = -x[1], x[0]
- return ret
-
-def euler_rotate(roll, pitch, yaw):
- # make symbolic rotation matrix from eulers
- matrix_roll = sp.Matrix([[1, 0, 0],
- [0, sp.cos(roll), -sp.sin(roll)],
- [0, sp.sin(roll), sp.cos(roll)]])
- matrix_pitch = sp.Matrix([[sp.cos(pitch), 0, sp.sin(pitch)],
- [0, 1, 0],
- [-sp.sin(pitch), 0, sp.cos(pitch)]])
- matrix_yaw = sp.Matrix([[sp.cos(yaw), -sp.sin(yaw), 0],
- [sp.sin(yaw), sp.cos(yaw), 0],
- [0, 0, 1]])
- return matrix_yaw*matrix_pitch*matrix_roll
-
-def quat_rotate(q0, q1, q2, q3):
- # make symbolic rotation matrix from quat
- return sp.Matrix([[q0**2 + q1**2 - q2**2 - q3**2, 2*(q1*q2 + q0*q3), 2*(q1*q3 - q0*q2)],
- [2*(q1*q2 - q0*q3), q0**2 - q1**2 + q2**2 - q3**2, 2*(q2*q3 + q0*q1)],
- [2*(q1*q3 + q0*q2), 2*(q2*q3 - q0*q1), q0**2 - q1**2 - q2**2 + q3**2]]).T
-
-def quat_matrix_l(p):
- return sp.Matrix([[p[0], -p[1], -p[2], -p[3]],
- [p[1], p[0], -p[3], p[2]],
- [p[2], p[3], p[0], -p[1]],
- [p[3], -p[2], p[1], p[0]]])
-
-def quat_matrix_r(p):
- return sp.Matrix([[p[0], -p[1], -p[2], -p[3]],
- [p[1], p[0], p[3], -p[2]],
- [p[2], -p[3], p[0], p[1]],
- [p[3], p[2], -p[1], p[0]]])
-
-
-def sympy_into_c(sympy_functions):
- from sympy.utilities import codegen
- routines = []
- for name, expr, args in sympy_functions:
- r = codegen.make_routine(name, expr, language="C99")
-
- # argument ordering input to sympy is broken with function with output arguments
- nargs = []
- # reorder the input arguments
- for aa in args:
- if aa is None:
- nargs.append(codegen.InputArgument(sp.Symbol('unused'), dimensions=[1,1]))
- continue
- found = False
- for a in r.arguments:
- if str(aa.name) == str(a.name):
- nargs.append(a)
- found = True
- break
- if not found:
- # [1,1] is a hack for Matrices
- nargs.append(codegen.InputArgument(aa, dimensions=[1,1]))
- # add the output arguments
- for a in r.arguments:
- if type(a) == codegen.OutputArgument:
- nargs.append(a)
-
- #assert len(r.arguments) == len(args)+1
- r.arguments = nargs
-
- # add routine to list
- routines.append(r)
-
- [(c_name, c_code), (h_name, c_header)] = codegen.get_code_generator('C', 'ekf', 'C99').write(routines, "ekf")
- c_code = '\n'.join(x for x in c_code.split("\n") if len(x) > 0 and x[0] != '#')
- c_header = '\n'.join(x for x in c_header.split("\n") if len(x) > 0 and x[0] != '#')
-
- return c_header, c_code
diff --git a/common/testing.py b/common/testing.py
deleted file mode 100644
index 7e8b16d5cfefc3..00000000000000
--- a/common/testing.py
+++ /dev/null
@@ -1,9 +0,0 @@
-import os
-from nose.tools import nottest
-
-def phone_only(x):
- if os.path.isfile("/init.qcom.rc"):
- return x
- else:
- return nottest(x)
-
diff --git a/common/text_window.py b/common/text_window.py
new file mode 100755
index 00000000000000..bea3a149f8d193
--- /dev/null
+++ b/common/text_window.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+import os
+import time
+import subprocess
+from common.basedir import BASEDIR
+
+
+class TextWindow:
+ def __init__(self, text):
+ try:
+ self.text_proc = subprocess.Popen(["./text", text],
+ stdin=subprocess.PIPE,
+ cwd=os.path.join(BASEDIR, "selfdrive", "ui"),
+ close_fds=True)
+ except OSError:
+ self.text_proc = None
+
+ def get_status(self):
+ if self.text_proc is not None:
+ self.text_proc.poll()
+ return self.text_proc.returncode
+ return None
+
+ def __enter__(self):
+ return self
+
+ def close(self):
+ if self.text_proc is not None:
+ self.text_proc.terminate()
+ self.text_proc = None
+
+ def wait_for_exit(self):
+ if self.text_proc is not None:
+ while True:
+ if self.get_status() == 1:
+ return
+ time.sleep(0.1)
+
+ def __del__(self):
+ self.close()
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.close()
+
+
+if __name__ == "__main__":
+ text = """Traceback (most recent call last):
+ File "./controlsd.py", line 608, in
+ main()
+ File "./controlsd.py", line 604, in main
+ controlsd_thread(sm, pm, logcan)
+ File "./controlsd.py", line 455, in controlsd_thread
+ 1/0
+ZeroDivisionError: division by zero"""
+ print(text)
+
+ with TextWindow(text) as s:
+ for _ in range(100):
+ if s.get_status() == 1:
+ print("Got exit button")
+ break
+ time.sleep(0.1)
+ print("gone")
diff --git a/common/timeout.py b/common/timeout.py
index c2c1f69712f208..4d424cdc0a865c 100644
--- a/common/timeout.py
+++ b/common/timeout.py
@@ -25,4 +25,3 @@ def __enter__(self):
def __exit__(self, exc_type, exc_val, exc_tb):
signal.alarm(0)
-
diff --git a/common/transformations/SConscript b/common/transformations/SConscript
new file mode 100644
index 00000000000000..adc9642a49aa5c
--- /dev/null
+++ b/common/transformations/SConscript
@@ -0,0 +1,3 @@
+Import('envCython')
+
+envCython.Program('transformations.so', 'transformations.pyx')
diff --git a/common/transformations/camera.py b/common/transformations/camera.py
index 2e04c5ac220747..9c365dc7e3adb8 100644
--- a/common/transformations/camera.py
+++ b/common/transformations/camera.py
@@ -1,30 +1,67 @@
import numpy as np
+
import common.transformations.orientation as orient
-import math
+from selfdrive.hardware import TICI
-FULL_FRAME_SIZE = (1164, 874)
-W, H = FULL_FRAME_SIZE[0], FULL_FRAME_SIZE[1]
-eon_focal_length = FOCAL = 910.0
+## -- hardcoded hardware params --
+eon_f_focal_length = 910.0
+eon_d_focal_length = 860.0
+leon_d_focal_length = 650.0
+tici_f_focal_length = 2648.0
+tici_e_focal_length = tici_d_focal_length = 567.0 # probably wrong? magnification is not consistent across frame
-# aka 'K' aka camera_frame_from_view_frame
-eon_intrinsics = np.array([
- [FOCAL, 0., W/2.],
- [ 0., FOCAL, H/2.],
- [ 0., 0., 1.]])
+eon_f_frame_size = (1164, 874)
+eon_d_frame_size = (1152, 864)
+leon_d_frame_size = (816, 612)
+tici_f_frame_size = tici_e_frame_size = tici_d_frame_size = (1928, 1208)
+# aka 'K' aka camera_frame_from_view_frame
+eon_fcam_intrinsics = np.array([
+ [eon_f_focal_length, 0.0, float(eon_f_frame_size[0])/2],
+ [0.0, eon_f_focal_length, float(eon_f_frame_size[1])/2],
+ [0.0, 0.0, 1.0]])
+eon_intrinsics = eon_fcam_intrinsics # xx
leon_dcam_intrinsics = np.array([
- [650, 0, 816//2],
- [ 0, 650, 612//2],
- [ 0, 0, 1]])
+ [leon_d_focal_length, 0.0, float(leon_d_frame_size[0])/2],
+ [0.0, leon_d_focal_length, float(leon_d_frame_size[1])/2],
+ [0.0, 0.0, 1.0]])
eon_dcam_intrinsics = np.array([
- [860, 0, 1152//2],
- [ 0, 860, 864//2],
- [ 0, 0, 1]])
+ [eon_d_focal_length, 0.0, float(eon_d_frame_size[0])/2],
+ [0.0, eon_d_focal_length, float(eon_d_frame_size[1])/2],
+ [0.0, 0.0, 1.0]])
+
+tici_fcam_intrinsics = np.array([
+ [tici_f_focal_length, 0.0, float(tici_f_frame_size[0])/2],
+ [0.0, tici_f_focal_length, float(tici_f_frame_size[1])/2],
+ [0.0, 0.0, 1.0]])
+
+tici_dcam_intrinsics = np.array([
+ [tici_d_focal_length, 0.0, float(tici_d_frame_size[0])/2],
+ [0.0, tici_d_focal_length, float(tici_d_frame_size[1])/2],
+ [0.0, 0.0, 1.0]])
+
+tici_ecam_intrinsics = tici_dcam_intrinsics
# aka 'K_inv' aka view_frame_from_camera_frame
-eon_intrinsics_inv = np.linalg.inv(eon_intrinsics)
+eon_fcam_intrinsics_inv = np.linalg.inv(eon_fcam_intrinsics)
+eon_intrinsics_inv = eon_fcam_intrinsics_inv # xx
+
+tici_fcam_intrinsics_inv = np.linalg.inv(tici_fcam_intrinsics)
+tici_ecam_intrinsics_inv = np.linalg.inv(tici_ecam_intrinsics)
+
+
+if not TICI:
+ FULL_FRAME_SIZE = eon_f_frame_size
+ FOCAL = eon_f_focal_length
+ fcam_intrinsics = eon_fcam_intrinsics
+else:
+ FULL_FRAME_SIZE = tici_f_frame_size
+ FOCAL = tici_f_focal_length
+ fcam_intrinsics = tici_fcam_intrinsics
+
+W, H = FULL_FRAME_SIZE[0], FULL_FRAME_SIZE[1]
# device/mesh : x->forward, y-> right, z->down
@@ -44,6 +81,7 @@ def get_calib_from_vp(vp):
roll_calib = 0
return roll_calib, pitch_calib, yaw_calib
+
# aka 'extrinsic_matrix'
# road : x->forward, y -> left, z->up
def get_view_frame_from_road_frame(roll, pitch, yaw, height):
@@ -52,6 +90,13 @@ def get_view_frame_from_road_frame(roll, pitch, yaw, height):
return np.hstack((view_from_road, [[0], [height], [0]]))
+# aka 'extrinsic_matrix'
+def get_view_frame_from_calib_frame(roll, pitch, yaw, height):
+ device_from_calib= orient.rot_from_euler([roll, pitch, yaw])
+ view_from_calib = view_frame_from_device_frame.dot(device_from_calib)
+ return np.hstack((view_from_calib, [[0], [height], [0]]))
+
+
def vp_from_ke(m):
"""
Computes the vanishing point from the product of the intrinsic and extrinsic
@@ -59,7 +104,14 @@ def vp_from_ke(m):
The vanishing point is defined as lim x->infinity C (x, 0, 0, 1).T
"""
- return (m[0, 0]/m[2,0], m[1,0]/m[2,0])
+ return (m[0, 0]/m[2, 0], m[1, 0]/m[2, 0])
+
+
+def vp_from_rpy(rpy, intrinsics=fcam_intrinsics):
+ e = get_view_frame_from_road_frame(rpy[0], rpy[1], rpy[2], 1.22)
+ ke = np.dot(intrinsics, e)
+ return vp_from_ke(ke)
+
def roll_from_ke(m):
# note: different from calibration.h/RollAnglefromKE: i think that one's just wrong
@@ -67,32 +119,32 @@ def roll_from_ke(m):
-(m[0, 0] - m[0, 1] * m[2, 0] / m[2, 1]))
-def normalize(img_pts, intrinsics=eon_intrinsics):
+def normalize(img_pts, intrinsics=fcam_intrinsics):
# normalizes image coordinates
# accepts single pt or array of pts
intrinsics_inv = np.linalg.inv(intrinsics)
img_pts = np.array(img_pts)
input_shape = img_pts.shape
img_pts = np.atleast_2d(img_pts)
- img_pts = np.hstack((img_pts, np.ones((img_pts.shape[0],1))))
+ img_pts = np.hstack((img_pts, np.ones((img_pts.shape[0], 1))))
img_pts_normalized = img_pts.dot(intrinsics_inv.T)
img_pts_normalized[(img_pts < 0).any(axis=1)] = np.nan
- return img_pts_normalized[:,:2].reshape(input_shape)
+ return img_pts_normalized[:, :2].reshape(input_shape)
-def denormalize(img_pts, intrinsics=eon_intrinsics):
+def denormalize(img_pts, intrinsics=fcam_intrinsics, width=W, height=H):
# denormalizes image coordinates
# accepts single pt or array of pts
img_pts = np.array(img_pts)
input_shape = img_pts.shape
img_pts = np.atleast_2d(img_pts)
- img_pts = np.hstack((img_pts, np.ones((img_pts.shape[0],1))))
+ img_pts = np.hstack((img_pts, np.ones((img_pts.shape[0], 1))))
img_pts_denormalized = img_pts.dot(intrinsics.T)
- img_pts_denormalized[img_pts_denormalized[:,0] > W] = np.nan
- img_pts_denormalized[img_pts_denormalized[:,0] < 0] = np.nan
- img_pts_denormalized[img_pts_denormalized[:,1] > H] = np.nan
- img_pts_denormalized[img_pts_denormalized[:,1] < 0] = np.nan
- return img_pts_denormalized[:,:2].reshape(input_shape)
+ img_pts_denormalized[img_pts_denormalized[:, 0] > width] = np.nan
+ img_pts_denormalized[img_pts_denormalized[:, 0] < 0] = np.nan
+ img_pts_denormalized[img_pts_denormalized[:, 1] > height] = np.nan
+ img_pts_denormalized[img_pts_denormalized[:, 1] < 0] = np.nan
+ return img_pts_denormalized[:, :2].reshape(input_shape)
def device_from_ecef(pos_ecef, orientation_ecef, pt_ecef):
@@ -117,100 +169,16 @@ def img_from_device(pt_device):
pt_view = np.einsum('jk,ik->ij', view_frame_from_device_frame, pt_device)
# This function should never return negative depths
- pt_view[pt_view[:,2] < 0] = np.nan
-
- pt_img = pt_view/pt_view[:,2:3]
- return pt_img.reshape(input_shape)[:,:2]
-
-
-#TODO please use generic img transform below
-def rotate_img(img, eulers, crop=None, intrinsics=eon_intrinsics):
- import cv2
-
- size = img.shape[:2]
- rot = orient.rot_from_euler(eulers)
- quadrangle = np.array([[0, 0],
- [size[1]-1, 0],
- [0, size[0]-1],
- [size[1]-1, size[0]-1]], dtype=np.float32)
- quadrangle_norm = np.hstack((normalize(quadrangle, intrinsics=intrinsics), np.ones((4,1))))
- warped_quadrangle_full = np.einsum('ij, kj->ki', intrinsics.dot(rot), quadrangle_norm)
- warped_quadrangle = np.column_stack((warped_quadrangle_full[:,0]/warped_quadrangle_full[:,2],
- warped_quadrangle_full[:,1]/warped_quadrangle_full[:,2])).astype(np.float32)
- if crop:
- W_border = (size[1] - crop[0])/2
- H_border = (size[0] - crop[1])/2
- outside_crop = (((warped_quadrangle[:,0] < W_border) |
- (warped_quadrangle[:,0] >= size[1] - W_border)) &
- ((warped_quadrangle[:,1] < H_border) |
- (warped_quadrangle[:,1] >= size[0] - H_border)))
- if not outside_crop.all():
- raise ValueError("warped image not contained inside crop")
- else:
- H_border, W_border = 0, 0
- M = cv2.getPerspectiveTransform(quadrangle, warped_quadrangle)
- img_warped = cv2.warpPerspective(img, M, size[::-1])
- return img_warped[H_border: size[0] - H_border,
- W_border: size[1] - W_border]
-
-
-def transform_img(base_img,
- augment_trans=np.array([0,0,0]),
- augment_eulers=np.array([0,0,0]),
- from_intr=eon_intrinsics,
- to_intr=eon_intrinsics,
- calib_rot_view=None,
- output_size=None,
- pretransform=None,
- top_hacks=True):
- import cv2
-
- size = base_img.shape[:2]
- if not output_size:
- output_size = size[::-1]
-
- cy = from_intr[1,2]
- def get_M(h=1.22):
- quadrangle = np.array([[0, cy + 20],
- [size[1]-1, cy + 20],
- [0, size[0]-1],
- [size[1]-1, size[0]-1]], dtype=np.float32)
- quadrangle_norm = np.hstack((normalize(quadrangle, intrinsics=from_intr), np.ones((4,1))))
- quadrangle_world = np.column_stack((h*quadrangle_norm[:,0]/quadrangle_norm[:,1],
- h*np.ones(4),
- h/quadrangle_norm[:,1]))
- rot = orient.rot_from_euler(augment_eulers)
- if calib_rot_view is not None:
- rot = calib_rot_view.dot(rot)
- to_extrinsics = np.hstack((rot.T, -augment_trans[:,None]))
- to_KE = to_intr.dot(to_extrinsics)
- warped_quadrangle_full = np.einsum('jk,ik->ij', to_KE, np.hstack((quadrangle_world, np.ones((4,1)))))
- warped_quadrangle = np.column_stack((warped_quadrangle_full[:,0]/warped_quadrangle_full[:,2],
- warped_quadrangle_full[:,1]/warped_quadrangle_full[:,2])).astype(np.float32)
- M = cv2.getPerspectiveTransform(quadrangle, warped_quadrangle.astype(np.float32))
- return M
-
- M = get_M()
- if pretransform is not None:
- M = M.dot(pretransform)
- augmented_rgb = cv2.warpPerspective(base_img, M, output_size, borderMode=cv2.BORDER_REPLICATE)
-
- if top_hacks:
- cyy = int(math.ceil(to_intr[1,2]))
- M = get_M(1000)
- if pretransform is not None:
- M = M.dot(pretransform)
- augmented_rgb[:cyy] = cv2.warpPerspective(base_img, M, (output_size[0], cyy), borderMode=cv2.BORDER_REPLICATE)
-
- return augmented_rgb
-
-def yuv_crop(frame, output_size, center=None):
- # output_size in camera coordinates so u,v
- # center in array coordinates so row, column
- import cv2
- rgb = cv2.cvtColor(frame, cv2.COLOR_YUV2RGB_I420)
- if not center:
- center = (rgb.shape[0]/2, rgb.shape[1]/2)
- rgb_crop = rgb[center[0] - output_size[1]/2: center[0] + output_size[1]/2,
- center[1] - output_size[0]/2: center[1] + output_size[0]/2]
- return cv2.cvtColor(rgb_crop, cv2.COLOR_RGB2YUV_I420)
+ pt_view[pt_view[:, 2] < 0] = np.nan
+
+ pt_img = pt_view/pt_view[:, 2:3]
+ return pt_img.reshape(input_shape)[:, :2]
+
+
+def get_camera_frame_from_calib_frame(camera_frame_from_road_frame, intrinsics=fcam_intrinsics):
+ camera_frame_from_ground = camera_frame_from_road_frame[:, (0, 1, 3)]
+ calib_frame_from_ground = np.dot(intrinsics,
+ get_view_frame_from_road_frame(0, 0, 0, 1.22))[:, (0, 1, 3)]
+ ground_from_calib_frame = np.linalg.inv(calib_frame_from_ground)
+ camera_frame_from_calib_frame = np.dot(camera_frame_from_ground, ground_from_calib_frame)
+ return camera_frame_from_calib_frame
diff --git a/common/transformations/coordinates.cc b/common/transformations/coordinates.cc
new file mode 100644
index 00000000000000..8a1aa0ad723250
--- /dev/null
+++ b/common/transformations/coordinates.cc
@@ -0,0 +1,104 @@
+#define _USE_MATH_DEFINES
+
+#include
+#include
+#include
+
+#include "coordinates.hpp"
+
+#define DEG2RAD(x) ((x) * M_PI / 180.0)
+#define RAD2DEG(x) ((x) * 180.0 / M_PI)
+
+
+double a = 6378137; // lgtm [cpp/short-global-name]
+double b = 6356752.3142; // lgtm [cpp/short-global-name]
+double esq = 6.69437999014 * 0.001; // lgtm [cpp/short-global-name]
+double e1sq = 6.73949674228 * 0.001;
+
+
+static Geodetic to_degrees(Geodetic geodetic){
+ geodetic.lat = RAD2DEG(geodetic.lat);
+ geodetic.lon = RAD2DEG(geodetic.lon);
+ return geodetic;
+}
+
+static Geodetic to_radians(Geodetic geodetic){
+ geodetic.lat = DEG2RAD(geodetic.lat);
+ geodetic.lon = DEG2RAD(geodetic.lon);
+ return geodetic;
+}
+
+
+ECEF geodetic2ecef(Geodetic g){
+ g = to_radians(g);
+ double xi = sqrt(1.0 - esq * pow(sin(g.lat), 2));
+ double x = (a / xi + g.alt) * cos(g.lat) * cos(g.lon);
+ double y = (a / xi + g.alt) * cos(g.lat) * sin(g.lon);
+ double z = (a / xi * (1.0 - esq) + g.alt) * sin(g.lat);
+ return {x, y, z};
+}
+
+Geodetic ecef2geodetic(ECEF e){
+ // Convert from ECEF to geodetic using Ferrari's methods
+ // https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#Ferrari.27s_solution
+ double x = e.x;
+ double y = e.y;
+ double z = e.z;
+
+ double r = sqrt(x * x + y * y);
+ double Esq = a * a - b * b;
+ double F = 54 * b * b * z * z;
+ double G = r * r + (1 - esq) * z * z - esq * Esq;
+ double C = (esq * esq * F * r * r) / (pow(G, 3));
+ double S = cbrt(1 + C + sqrt(C * C + 2 * C));
+ double P = F / (3 * pow((S + 1 / S + 1), 2) * G * G);
+ double Q = sqrt(1 + 2 * esq * esq * P);
+ double r_0 = -(P * esq * r) / (1 + Q) + sqrt(0.5 * a * a*(1 + 1.0 / Q) - P * (1 - esq) * z * z / (Q * (1 + Q)) - 0.5 * P * r * r);
+ double U = sqrt(pow((r - esq * r_0), 2) + z * z);
+ double V = sqrt(pow((r - esq * r_0), 2) + (1 - esq) * z * z);
+ double Z_0 = b * b * z / (a * V);
+ double h = U * (1 - b * b / (a * V));
+
+ double lat = atan((z + e1sq * Z_0) / r);
+ double lon = atan2(y, x);
+
+ return to_degrees({lat, lon, h});
+}
+
+LocalCoord::LocalCoord(Geodetic g, ECEF e){
+ init_ecef << e.x, e.y, e.z;
+
+ g = to_radians(g);
+
+ ned2ecef_matrix <<
+ -sin(g.lat)*cos(g.lon), -sin(g.lon), -cos(g.lat)*cos(g.lon),
+ -sin(g.lat)*sin(g.lon), cos(g.lon), -cos(g.lat)*sin(g.lon),
+ cos(g.lat), 0, -sin(g.lat);
+ ecef2ned_matrix = ned2ecef_matrix.transpose();
+}
+
+NED LocalCoord::ecef2ned(ECEF e) {
+ Eigen::Vector3d ecef;
+ ecef << e.x, e.y, e.z;
+
+ Eigen::Vector3d ned = (ecef2ned_matrix * (ecef - init_ecef));
+ return {ned[0], ned[1], ned[2]};
+}
+
+ECEF LocalCoord::ned2ecef(NED n) {
+ Eigen::Vector3d ned;
+ ned << n.n, n.e, n.d;
+
+ Eigen::Vector3d ecef = (ned2ecef_matrix * ned) + init_ecef;
+ return {ecef[0], ecef[1], ecef[2]};
+}
+
+NED LocalCoord::geodetic2ned(Geodetic g) {
+ ECEF e = ::geodetic2ecef(g);
+ return ecef2ned(e);
+}
+
+Geodetic LocalCoord::ned2geodetic(NED n){
+ ECEF e = ned2ecef(n);
+ return ::ecef2geodetic(e);
+}
diff --git a/common/transformations/coordinates.hpp b/common/transformations/coordinates.hpp
new file mode 100644
index 00000000000000..d8beb59ea9286a
--- /dev/null
+++ b/common/transformations/coordinates.hpp
@@ -0,0 +1,35 @@
+#pragma once
+
+struct ECEF {
+ double x, y, z;
+ Eigen::Vector3d to_vector(){
+ return Eigen::Vector3d(x, y, z);
+ }
+};
+
+struct NED {
+ double n, e, d;
+};
+
+struct Geodetic {
+ double lat, lon, alt;
+ bool radians=false;
+};
+
+ECEF geodetic2ecef(Geodetic g);
+Geodetic ecef2geodetic(ECEF e);
+
+class LocalCoord {
+public:
+ Eigen::Matrix3d ned2ecef_matrix;
+ Eigen::Matrix3d ecef2ned_matrix;
+ Eigen::Vector3d init_ecef;
+ LocalCoord(Geodetic g, ECEF e);
+ LocalCoord(Geodetic g) : LocalCoord(g, ::geodetic2ecef(g)) {}
+ LocalCoord(ECEF e) : LocalCoord(::ecef2geodetic(e), e) {}
+
+ NED ecef2ned(ECEF e);
+ ECEF ned2ecef(NED n);
+ NED geodetic2ned(Geodetic g);
+ Geodetic ned2geodetic(NED n);
+};
diff --git a/common/transformations/coordinates.py b/common/transformations/coordinates.py
index 568fb9bf2b3f4e..46cc0ded0d91fe 100644
--- a/common/transformations/coordinates.py
+++ b/common/transformations/coordinates.py
@@ -1,108 +1,19 @@
-import numpy as np
-"""
-Coordinate transformation module. All methods accept arrays as input
-with each row as a position.
-"""
+# pylint: skip-file
+from common.transformations.orientation import numpy_wrap
+from common.transformations.transformations import (ecef2geodetic_single,
+ geodetic2ecef_single)
+from common.transformations.transformations import LocalCoord as LocalCoord_single
+class LocalCoord(LocalCoord_single):
+ ecef2ned = numpy_wrap(LocalCoord_single.ecef2ned_single, (3,), (3,))
+ ned2ecef = numpy_wrap(LocalCoord_single.ned2ecef_single, (3,), (3,))
+ geodetic2ned = numpy_wrap(LocalCoord_single.geodetic2ned_single, (3,), (3,))
+ ned2geodetic = numpy_wrap(LocalCoord_single.ned2geodetic_single, (3,), (3,))
-a = 6378137
-b = 6356752.3142
-esq = 6.69437999014 * 0.001
-e1sq = 6.73949674228 * 0.001
+geodetic2ecef = numpy_wrap(geodetic2ecef_single, (3,), (3,))
+ecef2geodetic = numpy_wrap(ecef2geodetic_single, (3,), (3,))
-def geodetic2ecef(geodetic, radians=False):
- geodetic = np.array(geodetic)
- input_shape = geodetic.shape
- geodetic = np.atleast_2d(geodetic)
-
- ratio = 1.0 if radians else (np.pi / 180.0)
- lat = ratio*geodetic[:,0]
- lon = ratio*geodetic[:,1]
- alt = geodetic[:,2]
-
- xi = np.sqrt(1 - esq * np.sin(lat)**2)
- x = (a / xi + alt) * np.cos(lat) * np.cos(lon)
- y = (a / xi + alt) * np.cos(lat) * np.sin(lon)
- z = (a / xi * (1 - esq) + alt) * np.sin(lat)
- ecef = np.array([x, y, z]).T
- return ecef.reshape(input_shape)
-
-
-def ecef2geodetic(ecef, radians=False):
- """
- Convert ECEF coordinates to geodetic using ferrari's method
- """
- # Save shape and export column
- ecef = np.atleast_1d(ecef)
- input_shape = ecef.shape
- ecef = np.atleast_2d(ecef)
- x, y, z = ecef[:, 0], ecef[:, 1], ecef[:, 2]
-
- ratio = 1.0 if radians else (180.0 / np.pi)
-
- # Conver from ECEF to geodetic using Ferrari's methods
- # https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#Ferrari.27s_solution
- r = np.sqrt(x * x + y * y)
- Esq = a * a - b * b
- F = 54 * b * b * z * z
- G = r * r + (1 - esq) * z * z - esq * Esq
- C = (esq * esq * F * r * r) / (pow(G, 3))
- S = np.cbrt(1 + C + np.sqrt(C * C + 2 * C))
- P = F / (3 * pow((S + 1 / S + 1), 2) * G * G)
- Q = np.sqrt(1 + 2 * esq * esq * P)
- r_0 = -(P * esq * r) / (1 + Q) + np.sqrt(0.5 * a * a*(1 + 1.0 / Q) - \
- P * (1 - esq) * z * z / (Q * (1 + Q)) - 0.5 * P * r * r)
- U = np.sqrt(pow((r - esq * r_0), 2) + z * z)
- V = np.sqrt(pow((r - esq * r_0), 2) + (1 - esq) * z * z)
- Z_0 = b * b * z / (a * V)
- h = U * (1 - b * b / (a * V))
- lat = ratio*np.arctan((z + e1sq * Z_0) / r)
- lon = ratio*np.arctan2(y, x)
-
- # stack the new columns and return to the original shape
- geodetic = np.column_stack((lat, lon, h))
- return geodetic.reshape(input_shape)
-
-class LocalCoord(object):
- """
- Allows conversions to local frames. In this case NED.
- That is: North East Down from the start position in
- meters.
- """
- def __init__(self, init_geodetic, init_ecef):
- self.init_ecef = init_ecef
- lat, lon, _ = (np.pi/180)*np.array(init_geodetic)
- self.ned2ecef_matrix = np.array([[-np.sin(lat)*np.cos(lon), -np.sin(lon), -np.cos(lat)*np.cos(lon)],
- [-np.sin(lat)*np.sin(lon), np.cos(lon), -np.cos(lat)*np.sin(lon)],
- [np.cos(lat), 0, -np.sin(lat)]])
- self.ecef2ned_matrix = self.ned2ecef_matrix.T
-
- @classmethod
- def from_geodetic(cls, init_geodetic):
- init_ecef = geodetic2ecef(init_geodetic)
- return LocalCoord(init_geodetic, init_ecef)
-
- @classmethod
- def from_ecef(cls, init_ecef):
- init_geodetic = ecef2geodetic(init_ecef)
- return LocalCoord(init_geodetic, init_ecef)
-
-
- def ecef2ned(self, ecef):
- ecef = np.array(ecef)
- return np.dot(self.ecef2ned_matrix, (ecef - self.init_ecef).T).T
-
- def ned2ecef(self, ned):
- ned = np.array(ned)
- # Transpose so that init_ecef will broadcast correctly for 1d or 2d ned.
- return (np.dot(self.ned2ecef_matrix, ned.T).T + self.init_ecef)
-
- def geodetic2ned(self, geodetic):
- ecef = geodetic2ecef(geodetic)
- return self.ecef2ned(ecef)
-
- def ned2geodetic(self, ned):
- ecef = self.ned2ecef(ned)
- return ecef2geodetic(ecef)
+geodetic_from_ecef = ecef2geodetic
+ecef_from_geodetic = geodetic2ecef
diff --git a/common/transformations/model.py b/common/transformations/model.py
index e832cb7ee9f219..481240f99943b9 100644
--- a/common/transformations/model.py
+++ b/common/transformations/model.py
@@ -1,33 +1,33 @@
import numpy as np
-from common.transformations.camera import eon_focal_length, \
- vp_from_ke, get_view_frame_from_road_frame, \
- FULL_FRAME_SIZE
+from common.transformations.camera import (FULL_FRAME_SIZE,
+ FOCAL,
+ get_view_frame_from_road_frame,
+ get_view_frame_from_calib_frame,
+ vp_from_ke)
# segnet
-
SEGNET_SIZE = (512, 384)
-segnet_frame_from_camera_frame = np.array([
- [float(SEGNET_SIZE[0])/FULL_FRAME_SIZE[0], 0., ],
- [ 0., float(SEGNET_SIZE[1])/FULL_FRAME_SIZE[1]]])
-
+def get_segnet_frame_from_camera_frame(segnet_size=SEGNET_SIZE, full_frame_size=FULL_FRAME_SIZE):
+ return np.array([[float(segnet_size[0]) / full_frame_size[0], 0.0],
+ [0.0, float(segnet_size[1]) / full_frame_size[1]]])
+segnet_frame_from_camera_frame = get_segnet_frame_from_camera_frame() # xx
# model
-
MODEL_INPUT_SIZE = (320, 160)
MODEL_YUV_SIZE = (MODEL_INPUT_SIZE[0], MODEL_INPUT_SIZE[1] * 3 // 2)
-MODEL_CX = MODEL_INPUT_SIZE[0]/2.
+MODEL_CX = MODEL_INPUT_SIZE[0] / 2.
MODEL_CY = 21.
-model_zoom = 1.25
+model_fl = 728.0
model_height = 1.22
# canonical model transform
-model_intrinsics = np.array(
- [[ eon_focal_length / model_zoom, 0. , MODEL_CX],
- [ 0. , eon_focal_length / model_zoom, MODEL_CY],
- [ 0. , 0. , 1.]])
+model_intrinsics = np.array([
+ [model_fl, 0.0, MODEL_CX],
+ [0.0, model_fl, MODEL_CY],
+ [0.0, 0.0, 1.0]])
# MED model
@@ -35,32 +35,45 @@
MEDMODEL_YUV_SIZE = (MEDMODEL_INPUT_SIZE[0], MEDMODEL_INPUT_SIZE[1] * 3 // 2)
MEDMODEL_CY = 47.6
-medmodel_zoom = 1.
-medmodel_intrinsics = np.array(
- [[ eon_focal_length / medmodel_zoom, 0. , 0.5 * MEDMODEL_INPUT_SIZE[0]],
- [ 0. , eon_focal_length / medmodel_zoom, MEDMODEL_CY],
- [ 0. , 0. , 1.]])
+medmodel_fl = 910.0
+medmodel_intrinsics = np.array([
+ [medmodel_fl, 0.0, 0.5 * MEDMODEL_INPUT_SIZE[0]],
+ [0.0, medmodel_fl, MEDMODEL_CY],
+ [0.0, 0.0, 1.0]])
-# BIG model
+# CAL model
+CALMODEL_INPUT_SIZE = (512, 256)
+CALMODEL_YUV_SIZE = (CALMODEL_INPUT_SIZE[0], CALMODEL_INPUT_SIZE[1] * 3 // 2)
+CALMODEL_CY = 47.6
+
+calmodel_fl = 606.7
+calmodel_intrinsics = np.array([
+ [calmodel_fl, 0.0, 0.5 * CALMODEL_INPUT_SIZE[0]],
+ [0.0, calmodel_fl, CALMODEL_CY],
+ [0.0, 0.0, 1.0]])
-BIGMODEL_INPUT_SIZE = (864, 288)
+
+# BIG model
+BIGMODEL_INPUT_SIZE = (1024, 512)
BIGMODEL_YUV_SIZE = (BIGMODEL_INPUT_SIZE[0], BIGMODEL_INPUT_SIZE[1] * 3 // 2)
-bigmodel_zoom = 1.
-bigmodel_intrinsics = np.array(
- [[ eon_focal_length / bigmodel_zoom, 0. , 0.5 * BIGMODEL_INPUT_SIZE[0]],
- [ 0. , eon_focal_length / bigmodel_zoom, 0.2 * BIGMODEL_INPUT_SIZE[1]],
- [ 0. , 0. , 1.]])
+bigmodel_fl = 910.0
+bigmodel_intrinsics = np.array([
+ [bigmodel_fl, 0.0, 0.5 * BIGMODEL_INPUT_SIZE[0]],
+ [0.0, bigmodel_fl, 256 + MEDMODEL_CY],
+ [0.0, 0.0, 1.0]])
-bigmodel_border = np.array([
- [0,0,1],
- [BIGMODEL_INPUT_SIZE[0], 0, 1],
- [BIGMODEL_INPUT_SIZE[0], BIGMODEL_INPUT_SIZE[1], 1],
- [0, BIGMODEL_INPUT_SIZE[1], 1],
-])
+# SBIG model (big model with the size of small model)
+SBIGMODEL_INPUT_SIZE = (512, 256)
+SBIGMODEL_YUV_SIZE = (SBIGMODEL_INPUT_SIZE[0], SBIGMODEL_INPUT_SIZE[1] * 3 // 2)
+sbigmodel_fl = 455.0
+sbigmodel_intrinsics = np.array([
+ [sbigmodel_fl, 0.0, 0.5 * SBIGMODEL_INPUT_SIZE[0]],
+ [0.0, sbigmodel_fl, 0.5 * (256 + MEDMODEL_CY)],
+ [0.0, 0.0, 1.0]])
model_frame_from_road_frame = np.dot(model_intrinsics,
get_view_frame_from_road_frame(0, 0, 0, model_height))
@@ -71,22 +84,27 @@
medmodel_frame_from_road_frame = np.dot(medmodel_intrinsics,
get_view_frame_from_road_frame(0, 0, 0, model_height))
+medmodel_frame_from_calib_frame = np.dot(medmodel_intrinsics,
+ get_view_frame_from_calib_frame(0, 0, 0, 0))
+
model_frame_from_bigmodel_frame = np.dot(model_intrinsics, np.linalg.inv(bigmodel_intrinsics))
+medmodel_frame_from_bigmodel_frame = np.dot(medmodel_intrinsics, np.linalg.inv(bigmodel_intrinsics))
+
# 'camera from model camera'
def get_model_height_transform(camera_frame_from_road_frame, height):
camera_frame_from_road_ground = np.dot(camera_frame_from_road_frame, np.array([
- [1, 0, 0],
- [0, 1, 0],
- [0, 0, 0],
- [0, 0, 1],
+ [1, 0, 0],
+ [0, 1, 0],
+ [0, 0, 0],
+ [0, 0, 1],
]))
camera_frame_from_road_high = np.dot(camera_frame_from_road_frame, np.array([
- [1, 0, 0],
- [0, 1, 0],
- [0, 0, height - model_height],
- [0, 0, 1],
+ [1, 0, 0],
+ [0, 1, 0],
+ [0, 0, height - model_height],
+ [0, 0, 1],
]))
road_high_from_camera_frame = np.linalg.inv(camera_frame_from_road_high)
@@ -97,18 +115,19 @@ def get_model_height_transform(camera_frame_from_road_frame, height):
# camera_frame_from_model_frame aka 'warp matrix'
# was: calibration.h/CalibrationTransform
-def get_camera_frame_from_model_frame(camera_frame_from_road_frame, height=model_height):
+def get_camera_frame_from_model_frame(camera_frame_from_road_frame, height=model_height, camera_fl=FOCAL):
vp = vp_from_ke(camera_frame_from_road_frame)
+ model_zoom = camera_fl / model_fl
model_camera_from_model_frame = np.array([
- [model_zoom, 0., vp[0] - MODEL_CX * model_zoom],
- [ 0., model_zoom, vp[1] - MODEL_CY * model_zoom],
- [ 0., 0., 1.],
+ [model_zoom, 0.0, vp[0] - MODEL_CX * model_zoom],
+ [0.0, model_zoom, vp[1] - MODEL_CY * model_zoom],
+ [0.0, 0.0, 1.0],
])
# This function is super slow, so skip it if height is very close to canonical
# TODO: speed it up!
- if abs(height - model_height) > 0.001: #
+ if abs(height - model_height) > 0.001:
camera_from_model_camera = get_model_height_transform(camera_frame_from_road_frame, height)
else:
camera_from_model_camera = np.eye(3)
@@ -138,9 +157,9 @@ def get_camera_frame_from_bigmodel_frame(camera_frame_from_road_frame):
def get_model_frame(snu_full, camera_frame_from_model_frame, size):
idxs = camera_frame_from_model_frame.dot(np.column_stack([np.tile(np.arange(size[0]), size[1]),
- np.tile(np.arange(size[1]), (size[0],1)).T.flatten(),
+ np.tile(np.arange(size[1]), (size[0], 1)).T.flatten(),
np.ones(size[0] * size[1])]).T).T.astype(int)
- calib_flat = snu_full[idxs[:,1], idxs[:,0]]
+ calib_flat = snu_full[idxs[:, 1], idxs[:, 0]]
if len(snu_full.shape) == 3:
calib = calib_flat.reshape((size[1], size[0], 3))
elif len(snu_full.shape) == 2:
diff --git a/common/transformations/orientation.cc b/common/transformations/orientation.cc
new file mode 100644
index 00000000000000..086219d234d014
--- /dev/null
+++ b/common/transformations/orientation.cc
@@ -0,0 +1,147 @@
+#define _USE_MATH_DEFINES
+
+#include
+#include
+#include
+
+#include "orientation.hpp"
+#include "coordinates.hpp"
+
+Eigen::Quaterniond ensure_unique(Eigen::Quaterniond quat){
+ if (quat.w() > 0){
+ return quat;
+ } else {
+ return Eigen::Quaterniond(-quat.w(), -quat.x(), -quat.y(), -quat.z());
+ }
+}
+
+Eigen::Quaterniond euler2quat(Eigen::Vector3d euler){
+ Eigen::Quaterniond q;
+
+ q = Eigen::AngleAxisd(euler(2), Eigen::Vector3d::UnitZ())
+ * Eigen::AngleAxisd(euler(1), Eigen::Vector3d::UnitY())
+ * Eigen::AngleAxisd(euler(0), Eigen::Vector3d::UnitX());
+ return ensure_unique(q);
+}
+
+
+Eigen::Vector3d quat2euler(Eigen::Quaterniond quat){
+ // TODO: switch to eigen implementation if the range of the Euler angles doesn't matter anymore
+ // Eigen::Vector3d euler = quat.toRotationMatrix().eulerAngles(2, 1, 0);
+ // return {euler(2), euler(1), euler(0)};
+ double gamma = atan2(2 * (quat.w() * quat.x() + quat.y() * quat.z()), 1 - 2 * (quat.x()*quat.x() + quat.y()*quat.y()));
+ double theta = asin(2 * (quat.w() * quat.y() - quat.z() * quat.x()));
+ double psi = atan2(2 * (quat.w() * quat.z() + quat.x() * quat.y()), 1 - 2 * (quat.y()*quat.y() + quat.z()*quat.z()));
+ return {gamma, theta, psi};
+}
+
+Eigen::Matrix3d quat2rot(Eigen::Quaterniond quat){
+ return quat.toRotationMatrix();
+}
+
+Eigen::Quaterniond rot2quat(Eigen::Matrix3d rot){
+ return ensure_unique(Eigen::Quaterniond(rot));
+}
+
+Eigen::Matrix3d euler2rot(Eigen::Vector3d euler){
+ return quat2rot(euler2quat(euler));
+}
+
+Eigen::Vector3d rot2euler(Eigen::Matrix3d rot){
+ return quat2euler(rot2quat(rot));
+}
+
+Eigen::Matrix3d rot_matrix(double roll, double pitch, double yaw){
+ return euler2rot({roll, pitch, yaw});
+}
+
+Eigen::Matrix3d rot(Eigen::Vector3d axis, double angle){
+ Eigen::Quaterniond q;
+ q = Eigen::AngleAxisd(angle, axis);
+ return q.toRotationMatrix();
+}
+
+
+Eigen::Vector3d ecef_euler_from_ned(ECEF ecef_init, Eigen::Vector3d ned_pose) {
+ /*
+ Using Rotations to Build Aerospace Coordinate Systems
+ Don Koks
+ https://apps.dtic.mil/dtic/tr/fulltext/u2/a484864.pdf
+ */
+ LocalCoord converter = LocalCoord(ecef_init);
+ Eigen::Vector3d zero = ecef_init.to_vector();
+
+ Eigen::Vector3d x0 = converter.ned2ecef({1, 0, 0}).to_vector() - zero;
+ Eigen::Vector3d y0 = converter.ned2ecef({0, 1, 0}).to_vector() - zero;
+ Eigen::Vector3d z0 = converter.ned2ecef({0, 0, 1}).to_vector() - zero;
+
+ Eigen::Vector3d x1 = rot(z0, ned_pose(2)) * x0;
+ Eigen::Vector3d y1 = rot(z0, ned_pose(2)) * y0;
+ Eigen::Vector3d z1 = rot(z0, ned_pose(2)) * z0;
+
+ Eigen::Vector3d x2 = rot(y1, ned_pose(1)) * x1;
+ Eigen::Vector3d y2 = rot(y1, ned_pose(1)) * y1;
+ Eigen::Vector3d z2 = rot(y1, ned_pose(1)) * z1;
+
+ Eigen::Vector3d x3 = rot(x2, ned_pose(0)) * x2;
+ Eigen::Vector3d y3 = rot(x2, ned_pose(0)) * y2;
+
+
+ x0 = Eigen::Vector3d(1, 0, 0);
+ y0 = Eigen::Vector3d(0, 1, 0);
+ z0 = Eigen::Vector3d(0, 0, 1);
+
+ double psi = atan2(x3.dot(y0), x3.dot(x0));
+ double theta = atan2(-x3.dot(z0), sqrt(pow(x3.dot(x0), 2) + pow(x3.dot(y0), 2)));
+
+ y2 = rot(z0, psi) * y0;
+ z2 = rot(y2, theta) * z0;
+
+ double phi = atan2(y3.dot(z2), y3.dot(y2));
+
+ return {phi, theta, psi};
+}
+
+Eigen::Vector3d ned_euler_from_ecef(ECEF ecef_init, Eigen::Vector3d ecef_pose){
+ /*
+ Using Rotations to Build Aerospace Coordinate Systems
+ Don Koks
+ https://apps.dtic.mil/dtic/tr/fulltext/u2/a484864.pdf
+ */
+ LocalCoord converter = LocalCoord(ecef_init);
+
+ Eigen::Vector3d x0 = Eigen::Vector3d(1, 0, 0);
+ Eigen::Vector3d y0 = Eigen::Vector3d(0, 1, 0);
+ Eigen::Vector3d z0 = Eigen::Vector3d(0, 0, 1);
+
+ Eigen::Vector3d x1 = rot(z0, ecef_pose(2)) * x0;
+ Eigen::Vector3d y1 = rot(z0, ecef_pose(2)) * y0;
+ Eigen::Vector3d z1 = rot(z0, ecef_pose(2)) * z0;
+
+ Eigen::Vector3d x2 = rot(y1, ecef_pose(1)) * x1;
+ Eigen::Vector3d y2 = rot(y1, ecef_pose(1)) * y1;
+ Eigen::Vector3d z2 = rot(y1, ecef_pose(1)) * z1;
+
+ Eigen::Vector3d x3 = rot(x2, ecef_pose(0)) * x2;
+ Eigen::Vector3d y3 = rot(x2, ecef_pose(0)) * y2;
+
+ Eigen::Vector3d zero = ecef_init.to_vector();
+ x0 = converter.ned2ecef({1, 0, 0}).to_vector() - zero;
+ y0 = converter.ned2ecef({0, 1, 0}).to_vector() - zero;
+ z0 = converter.ned2ecef({0, 0, 1}).to_vector() - zero;
+
+ double psi = atan2(x3.dot(y0), x3.dot(x0));
+ double theta = atan2(-x3.dot(z0), sqrt(pow(x3.dot(x0), 2) + pow(x3.dot(y0), 2)));
+
+ y2 = rot(z0, psi) * y0;
+ z2 = rot(y2, theta) * z0;
+
+ double phi = atan2(y3.dot(z2), y3.dot(y2));
+
+ return {phi, theta, psi};
+}
+
+
+
+int main(void){
+}
diff --git a/common/transformations/orientation.hpp b/common/transformations/orientation.hpp
new file mode 100644
index 00000000000000..da95f7099d58d1
--- /dev/null
+++ b/common/transformations/orientation.hpp
@@ -0,0 +1,17 @@
+#pragma once
+#include
+#include "coordinates.hpp"
+
+
+Eigen::Quaterniond ensure_unique(Eigen::Quaterniond quat);
+
+Eigen::Quaterniond euler2quat(Eigen::Vector3d euler);
+Eigen::Vector3d quat2euler(Eigen::Quaterniond quat);
+Eigen::Matrix3d quat2rot(Eigen::Quaterniond quat);
+Eigen::Quaterniond rot2quat(Eigen::Matrix3d rot);
+Eigen::Matrix3d euler2rot(Eigen::Vector3d euler);
+Eigen::Vector3d rot2euler(Eigen::Matrix3d rot);
+Eigen::Matrix3d rot_matrix(double roll, double pitch, double yaw);
+Eigen::Matrix3d rot(Eigen::Vector3d axis, double angle);
+Eigen::Vector3d ecef_euler_from_ned(ECEF ecef_init, Eigen::Vector3d ned_pose);
+Eigen::Vector3d ned_euler_from_ecef(ECEF ecef_init, Eigen::Vector3d ecef_pose);
diff --git a/common/transformations/orientation.py b/common/transformations/orientation.py
index 33a822ca3fd498..415e247ab26323 100644
--- a/common/transformations/orientation.py
+++ b/common/transformations/orientation.py
@@ -1,295 +1,52 @@
+# pylint: skip-file
import numpy as np
-from numpy import dot, inner, array, linalg
-from common.transformations.coordinates import LocalCoord
-
-
-'''
-Vectorized functions that transform between
-rotation matrices, euler angles and quaternions.
-All support lists, array or array of arrays as inputs.
-Supports both x2y and y_from_x format (y_from_x preferred!).
-'''
-
-def euler2quat(eulers):
- eulers = array(eulers)
- if len(eulers.shape) > 1:
- output_shape = (-1,4)
- else:
- output_shape = (4,)
- eulers = np.atleast_2d(eulers)
- gamma, theta, psi = eulers[:,0], eulers[:,1], eulers[:,2]
-
- q0 = np.cos(gamma / 2) * np.cos(theta / 2) * np.cos(psi / 2) + \
- np.sin(gamma / 2) * np.sin(theta / 2) * np.sin(psi / 2)
- q1 = np.sin(gamma / 2) * np.cos(theta / 2) * np.cos(psi / 2) - \
- np.cos(gamma / 2) * np.sin(theta / 2) * np.sin(psi / 2)
- q2 = np.cos(gamma / 2) * np.sin(theta / 2) * np.cos(psi / 2) + \
- np.sin(gamma / 2) * np.cos(theta / 2) * np.sin(psi / 2)
- q3 = np.cos(gamma / 2) * np.cos(theta / 2) * np.sin(psi / 2) - \
- np.sin(gamma / 2) * np.sin(theta / 2) * np.cos(psi / 2)
-
- quats = array([q0, q1, q2, q3]).T
- for i in xrange(len(quats)):
- if quats[i,0] < 0:
- quats[i] = -quats[i]
- return quats.reshape(output_shape)
-
-
-def quat2euler(quats):
- quats = array(quats)
- if len(quats.shape) > 1:
- output_shape = (-1,3)
- else:
- output_shape = (3,)
- quats = np.atleast_2d(quats)
- q0, q1, q2, q3 = quats[:,0], quats[:,1], quats[:,2], quats[:,3]
-
- gamma = np.arctan2(2 * (q0 * q1 + q2 * q3), 1 - 2 * (q1**2 + q2**2))
- theta = np.arcsin(2 * (q0 * q2 - q3 * q1))
- psi = np.arctan2(2 * (q0 * q3 + q1 * q2), 1 - 2 * (q2**2 + q3**2))
-
- eulers = array([gamma, theta, psi]).T
- return eulers.reshape(output_shape)
-
-
-def quat2rot(quats):
- quats = array(quats)
- input_shape = quats.shape
- quats = np.atleast_2d(quats)
- Rs = np.zeros((quats.shape[0], 3, 3))
- q0 = quats[:, 0]
- q1 = quats[:, 1]
- q2 = quats[:, 2]
- q3 = quats[:, 3]
- Rs[:, 0, 0] = q0 * q0 + q1 * q1 - q2 * q2 - q3 * q3
- Rs[:, 0, 1] = 2 * (q1 * q2 - q0 * q3)
- Rs[:, 0, 2] = 2 * (q0 * q2 + q1 * q3)
- Rs[:, 1, 0] = 2 * (q1 * q2 + q0 * q3)
- Rs[:, 1, 1] = q0 * q0 - q1 * q1 + q2 * q2 - q3 * q3
- Rs[:, 1, 2] = 2 * (q2 * q3 - q0 * q1)
- Rs[:, 2, 0] = 2 * (q1 * q3 - q0 * q2)
- Rs[:, 2, 1] = 2 * (q0 * q1 + q2 * q3)
- Rs[:, 2, 2] = q0 * q0 - q1 * q1 - q2 * q2 + q3 * q3
-
- if len(input_shape) < 2:
- return Rs[0]
- else:
- return Rs
-
-
-def rot2quat(rots):
- input_shape = rots.shape
- if len(input_shape) < 3:
- rots = array([rots])
- K3 = np.empty((len(rots), 4, 4))
- K3[:, 0, 0] = (rots[:, 0, 0] - rots[:, 1, 1] - rots[:, 2, 2]) / 3.0
- K3[:, 0, 1] = (rots[:, 1, 0] + rots[:, 0, 1]) / 3.0
- K3[:, 0, 2] = (rots[:, 2, 0] + rots[:, 0, 2]) / 3.0
- K3[:, 0, 3] = (rots[:, 1, 2] - rots[:, 2, 1]) / 3.0
- K3[:, 1, 0] = K3[:, 0, 1]
- K3[:, 1, 1] = (rots[:, 1, 1] - rots[:, 0, 0] - rots[:, 2, 2]) / 3.0
- K3[:, 1, 2] = (rots[:, 2, 1] + rots[:, 1, 2]) / 3.0
- K3[:, 1, 3] = (rots[:, 2, 0] - rots[:, 0, 2]) / 3.0
- K3[:, 2, 0] = K3[:, 0, 2]
- K3[:, 2, 1] = K3[:, 1, 2]
- K3[:, 2, 2] = (rots[:, 2, 2] - rots[:, 0, 0] - rots[:, 1, 1]) / 3.0
- K3[:, 2, 3] = (rots[:, 0, 1] - rots[:, 1, 0]) / 3.0
- K3[:, 3, 0] = K3[:, 0, 3]
- K3[:, 3, 1] = K3[:, 1, 3]
- K3[:, 3, 2] = K3[:, 2, 3]
- K3[:, 3, 3] = (rots[:, 0, 0] + rots[:, 1, 1] + rots[:, 2, 2]) / 3.0
- q = np.empty((len(rots), 4))
- for i in xrange(len(rots)):
- _, eigvecs = linalg.eigh(K3[i].T)
- eigvecs = eigvecs[:,3:]
- q[i, 0] = eigvecs[-1]
- q[i, 1:] = -eigvecs[:-1].flatten()
- if q[i, 0] < 0:
- q[i] = -q[i]
-
- if len(input_shape) < 3:
- return q[0]
- else:
- return q
-
-
-def euler2rot(eulers):
- return rotations_from_quats(euler2quat(eulers))
-
-
-def rot2euler(rots):
- return quat2euler(quats_from_rotations(rots))
+from common.transformations.transformations import (ecef_euler_from_ned_single,
+ euler2quat_single,
+ euler2rot_single,
+ ned_euler_from_ecef_single,
+ quat2euler_single,
+ quat2rot_single,
+ rot2euler_single,
+ rot2quat_single)
+
+
+def numpy_wrap(function, input_shape, output_shape):
+ """Wrap a function to take either an input or list of inputs and return the correct shape"""
+ def f(*inps):
+ *args, inp = inps
+ inp = np.array(inp)
+ shape = inp.shape
+
+ if len(shape) == len(input_shape):
+ out_shape = output_shape
+ else:
+ out_shape = (shape[0],) + output_shape
+
+ # Add empty dimension if inputs is not a list
+ if len(shape) == len(input_shape):
+ inp.shape = (1, ) + inp.shape
+
+ result = np.asarray([function(*args, i) for i in inp])
+ result.shape = out_shape
+ return result
+ return f
+
+
+euler2quat = numpy_wrap(euler2quat_single, (3,), (4,))
+quat2euler = numpy_wrap(quat2euler_single, (4,), (3,))
+quat2rot = numpy_wrap(quat2rot_single, (4,), (3, 3))
+rot2quat = numpy_wrap(rot2quat_single, (3, 3), (4,))
+euler2rot = numpy_wrap(euler2rot_single, (3,), (3, 3))
+rot2euler = numpy_wrap(rot2euler_single, (3, 3), (3,))
+ecef_euler_from_ned = numpy_wrap(ecef_euler_from_ned_single, (3,), (3,))
+ned_euler_from_ecef = numpy_wrap(ned_euler_from_ecef_single, (3,), (3,))
quats_from_rotations = rot2quat
quat_from_rot = rot2quat
rotations_from_quats = quat2rot
-rot_from_quat= quat2rot
-rot_from_quat= quat2rot
+rot_from_quat = quat2rot
euler_from_rot = rot2euler
euler_from_quat = quat2euler
rot_from_euler = euler2rot
quat_from_euler = euler2quat
-
-
-
-
-
-
-'''
-Random helpers below
-'''
-
-
-def quat_product(q, r):
- t = np.zeros(4)
- t[0] = r[0] * q[0] - r[1] * q[1] - r[2] * q[2] - r[3] * q[3]
- t[1] = r[0] * q[1] + r[1] * q[0] - r[2] * q[3] + r[3] * q[2]
- t[2] = r[0] * q[2] + r[1] * q[3] + r[2] * q[0] - r[3] * q[1]
- t[3] = r[0] * q[3] - r[1] * q[2] + r[2] * q[1] + r[3] * q[0]
- return t
-
-
-def rot_matrix(roll, pitch, yaw):
- cr, sr = np.cos(roll), np.sin(roll)
- cp, sp = np.cos(pitch), np.sin(pitch)
- cy, sy = np.cos(yaw), np.sin(yaw)
- rr = array([[1,0,0],[0, cr,-sr],[0, sr, cr]])
- rp = array([[cp,0,sp],[0, 1,0],[-sp, 0, cp]])
- ry = array([[cy,-sy,0],[sy, cy,0],[0, 0, 1]])
- return ry.dot(rp.dot(rr))
-
-
-def rot(axis, angle):
- # Rotates around an arbitrary axis
- ret_1 = (1 - np.cos(angle)) * array([[axis[0]**2, axis[0] * axis[1], axis[0] * axis[2]], [
- axis[1] * axis[0], axis[1]**2, axis[1] * axis[2]
- ], [axis[2] * axis[0], axis[2] * axis[1], axis[2]**2]])
- ret_2 = np.cos(angle) * np.eye(3)
- ret_3 = np.sin(angle) * array([[0, -axis[2], axis[1]], [axis[2], 0, -axis[0]],
- [-axis[1], axis[0], 0]])
- return ret_1 + ret_2 + ret_3
-
-
-def ecef_euler_from_ned(ned_ecef_init, ned_pose):
- '''
- Got it from here:
- Using Rotations to Build Aerospace Coordinate Systems
- -Don Koks
- '''
- converter = LocalCoord.from_ecef(ned_ecef_init)
- x0 = converter.ned2ecef([1, 0, 0]) - converter.ned2ecef([0, 0, 0])
- y0 = converter.ned2ecef([0, 1, 0]) - converter.ned2ecef([0, 0, 0])
- z0 = converter.ned2ecef([0, 0, 1]) - converter.ned2ecef([0, 0, 0])
-
- x1 = rot(z0, ned_pose[2]).dot(x0)
- y1 = rot(z0, ned_pose[2]).dot(y0)
- z1 = rot(z0, ned_pose[2]).dot(z0)
-
- x2 = rot(y1, ned_pose[1]).dot(x1)
- y2 = rot(y1, ned_pose[1]).dot(y1)
- z2 = rot(y1, ned_pose[1]).dot(z1)
-
- x3 = rot(x2, ned_pose[0]).dot(x2)
- y3 = rot(x2, ned_pose[0]).dot(y2)
- #z3 = rot(x2, ned_pose[0]).dot(z2)
-
- x0 = array([1, 0, 0])
- y0 = array([0, 1, 0])
- z0 = array([0, 0, 1])
-
- psi = np.arctan2(inner(x3, y0), inner(x3, x0))
- theta = np.arctan2(-inner(x3, z0), np.sqrt(inner(x3, x0)**2 + inner(x3, y0)**2))
- y2 = rot(z0, psi).dot(y0)
- z2 = rot(y2, theta).dot(z0)
- phi = np.arctan2(inner(y3, z2), inner(y3, y2))
-
- ret = array([phi, theta, psi])
- return ret
-
-
-def ned_euler_from_ecef(ned_ecef_init, ecef_poses):
- '''
- Got the math from here:
- Using Rotations to Build Aerospace Coordinate Systems
- -Don Koks
-
- Also accepts array of ecef_poses and array of ned_ecef_inits.
- Where each row is a pose and an ecef_init.
- '''
- ned_ecef_init = array(ned_ecef_init)
- ecef_poses = array(ecef_poses)
- output_shape = ecef_poses.shape
- ned_ecef_init = np.atleast_2d(ned_ecef_init)
- if ned_ecef_init.shape[0] == 1:
- ned_ecef_init = np.tile(ned_ecef_init[0], (output_shape[0], 1))
- ecef_poses = np.atleast_2d(ecef_poses)
-
- ned_poses = np.zeros(ecef_poses.shape)
- for i, ecef_pose in enumerate(ecef_poses):
- converter = LocalCoord.from_ecef(ned_ecef_init[i])
- x0 = array([1, 0, 0])
- y0 = array([0, 1, 0])
- z0 = array([0, 0, 1])
-
- x1 = rot(z0, ecef_pose[2]).dot(x0)
- y1 = rot(z0, ecef_pose[2]).dot(y0)
- z1 = rot(z0, ecef_pose[2]).dot(z0)
-
- x2 = rot(y1, ecef_pose[1]).dot(x1)
- y2 = rot(y1, ecef_pose[1]).dot(y1)
- z2 = rot(y1, ecef_pose[1]).dot(z1)
-
- x3 = rot(x2, ecef_pose[0]).dot(x2)
- y3 = rot(x2, ecef_pose[0]).dot(y2)
- #z3 = rot(x2, ecef_pose[0]).dot(z2)
-
- x0 = converter.ned2ecef([1, 0, 0]) - converter.ned2ecef([0, 0, 0])
- y0 = converter.ned2ecef([0, 1, 0]) - converter.ned2ecef([0, 0, 0])
- z0 = converter.ned2ecef([0, 0, 1]) - converter.ned2ecef([0, 0, 0])
-
- psi = np.arctan2(inner(x3, y0), inner(x3, x0))
- theta = np.arctan2(-inner(x3, z0), np.sqrt(inner(x3, x0)**2 + inner(x3, y0)**2))
- y2 = rot(z0, psi).dot(y0)
- z2 = rot(y2, theta).dot(z0)
- phi = np.arctan2(inner(y3, z2), inner(y3, y2))
- ned_poses[i] = array([phi, theta, psi])
-
- return ned_poses.reshape(output_shape)
-
-
-def ecef2car(car_ecef, psi, theta, points_ecef, ned_converter):
- """
- TODO: add roll rotation
- Converts an array of points in ecef coordinates into
- x-forward, y-left, z-up coordinates
- Parameters
- ----------
- psi: yaw, radian
- theta: pitch, radian
- Returns
- -------
- [x, y, z] coordinates in car frame
- """
-
- # input is an array of points in ecef cocrdinates
- # output is an array of points in car's coordinate (x-front, y-left, z-up)
-
- # convert points to NED
- points_ned = []
- for p in points_ecef:
- points_ned.append(ned_converter.ecef2ned_matrix.dot(array(p) - car_ecef))
-
- points_ned = np.vstack(points_ned).T
-
- # n, e, d -> x, y, z
- # Calculate relative postions and rotate wrt to heading and pitch of car
- invert_R = array([[1., 0., 0.], [0., -1., 0.], [0., 0., -1.]])
-
- c, s = np.cos(psi), np.sin(psi)
- yaw_R = array([[c, s, 0.], [-s, c, 0.], [0., 0., 1.]])
-
- c, s = np.cos(theta), np.sin(theta)
- pitch_R = array([[c, 0., -s], [0., 1., 0.], [s, 0., c]])
-
- return dot(pitch_R, dot(yaw_R, dot(invert_R, points_ned)))
diff --git a/common/transformations/transformations.pxd b/common/transformations/transformations.pxd
new file mode 100644
index 00000000000000..7af009870198ad
--- /dev/null
+++ b/common/transformations/transformations.pxd
@@ -0,0 +1,72 @@
+#cython: language_level=3
+from libcpp cimport bool
+
+cdef extern from "orientation.cc":
+ pass
+
+cdef extern from "orientation.hpp":
+ cdef cppclass Quaternion "Eigen::Quaterniond":
+ Quaternion()
+ Quaternion(double, double, double, double)
+ double w()
+ double x()
+ double y()
+ double z()
+
+ cdef cppclass Vector3 "Eigen::Vector3d":
+ Vector3()
+ Vector3(double, double, double)
+ double operator()(int)
+
+ cdef cppclass Matrix3 "Eigen::Matrix3d":
+ Matrix3()
+ Matrix3(double*)
+
+ double operator()(int, int)
+
+ Quaternion euler2quat(Vector3)
+ Vector3 quat2euler(Quaternion)
+ Matrix3 quat2rot(Quaternion)
+ Quaternion rot2quat(Matrix3)
+ Vector3 rot2euler(Matrix3)
+ Matrix3 euler2rot(Vector3)
+ Matrix3 rot_matrix(double, double, double)
+ Vector3 ecef_euler_from_ned(ECEF, Vector3)
+ Vector3 ned_euler_from_ecef(ECEF, Vector3)
+
+
+cdef extern from "coordinates.cc":
+ cdef struct ECEF:
+ double x
+ double y
+ double z
+
+ cdef struct NED:
+ double n
+ double e
+ double d
+
+ cdef struct Geodetic:
+ double lat
+ double lon
+ double alt
+ bool radians
+
+ ECEF geodetic2ecef(Geodetic)
+ Geodetic ecef2geodetic(ECEF)
+
+ cdef cppclass LocalCoord_c "LocalCoord":
+ Matrix3 ned2ecef_matrix
+ Matrix3 ecef2ned_matrix
+
+ LocalCoord_c(Geodetic, ECEF)
+ LocalCoord_c(Geodetic)
+ LocalCoord_c(ECEF)
+
+ NED ecef2ned(ECEF)
+ ECEF ned2ecef(NED)
+ NED geodetic2ned(Geodetic)
+ Geodetic ned2geodetic(NED)
+
+cdef extern from "coordinates.hpp":
+ pass
diff --git a/common/transformations/transformations.pyx b/common/transformations/transformations.pyx
new file mode 100644
index 00000000000000..ce80d90d29ed07
--- /dev/null
+++ b/common/transformations/transformations.pyx
@@ -0,0 +1,174 @@
+# distutils: language = c++
+# cython: language_level = 3
+from common.transformations.transformations cimport Matrix3, Vector3, Quaternion
+from common.transformations.transformations cimport ECEF, NED, Geodetic
+
+from common.transformations.transformations cimport euler2quat as euler2quat_c
+from common.transformations.transformations cimport quat2euler as quat2euler_c
+from common.transformations.transformations cimport quat2rot as quat2rot_c
+from common.transformations.transformations cimport rot2quat as rot2quat_c
+from common.transformations.transformations cimport euler2rot as euler2rot_c
+from common.transformations.transformations cimport rot2euler as rot2euler_c
+from common.transformations.transformations cimport rot_matrix as rot_matrix_c
+from common.transformations.transformations cimport ecef_euler_from_ned as ecef_euler_from_ned_c
+from common.transformations.transformations cimport ned_euler_from_ecef as ned_euler_from_ecef_c
+from common.transformations.transformations cimport geodetic2ecef as geodetic2ecef_c
+from common.transformations.transformations cimport ecef2geodetic as ecef2geodetic_c
+from common.transformations.transformations cimport LocalCoord_c
+
+
+import cython
+import numpy as np
+cimport numpy as np
+
+cdef np.ndarray[double, ndim=2] matrix2numpy(Matrix3 m):
+ return np.array([
+ [m(0, 0), m(0, 1), m(0, 2)],
+ [m(1, 0), m(1, 1), m(1, 2)],
+ [m(2, 0), m(2, 1), m(2, 2)],
+ ])
+
+cdef Matrix3 numpy2matrix(np.ndarray[double, ndim=2, mode="fortran"] m):
+ assert m.shape[0] == 3
+ assert m.shape[1] == 3
+ return Matrix3(m.data)
+
+cdef ECEF list2ecef(ecef):
+ cdef ECEF e;
+ e.x = ecef[0]
+ e.y = ecef[1]
+ e.z = ecef[2]
+ return e
+
+cdef NED list2ned(ned):
+ cdef NED n;
+ n.n = ned[0]
+ n.e = ned[1]
+ n.d = ned[2]
+ return n
+
+cdef Geodetic list2geodetic(geodetic):
+ cdef Geodetic g
+ g.lat = geodetic[0]
+ g.lon = geodetic[1]
+ g.alt = geodetic[2]
+ return g
+
+def euler2quat_single(euler):
+ cdef Vector3 e = Vector3(euler[0], euler[1], euler[2])
+ cdef Quaternion q = euler2quat_c(e)
+ return [q.w(), q.x(), q.y(), q.z()]
+
+def quat2euler_single(quat):
+ cdef Quaternion q = Quaternion(quat[0], quat[1], quat[2], quat[3])
+ cdef Vector3 e = quat2euler_c(q);
+ return [e(0), e(1), e(2)]
+
+def quat2rot_single(quat):
+ cdef Quaternion q = Quaternion(quat[0], quat[1], quat[2], quat[3])
+ cdef Matrix3 r = quat2rot_c(q)
+ return matrix2numpy(r)
+
+def rot2quat_single(rot):
+ cdef Matrix3 r = numpy2matrix(np.asfortranarray(rot, dtype=np.double))
+ cdef Quaternion q = rot2quat_c(r)
+ return [q.w(), q.x(), q.y(), q.z()]
+
+def euler2rot_single(euler):
+ cdef Vector3 e = Vector3(euler[0], euler[1], euler[2])
+ cdef Matrix3 r = euler2rot_c(e)
+ return matrix2numpy(r)
+
+def rot2euler_single(rot):
+ cdef Matrix3 r = numpy2matrix(np.asfortranarray(rot, dtype=np.double))
+ cdef Vector3 e = rot2euler_c(r)
+ return [e(0), e(1), e(2)]
+
+def rot_matrix(roll, pitch, yaw):
+ return matrix2numpy(rot_matrix_c(roll, pitch, yaw))
+
+def ecef_euler_from_ned_single(ecef_init, ned_pose):
+ cdef ECEF init = list2ecef(ecef_init)
+ cdef Vector3 pose = Vector3(ned_pose[0], ned_pose[1], ned_pose[2])
+
+ cdef Vector3 e = ecef_euler_from_ned_c(init, pose)
+ return [e(0), e(1), e(2)]
+
+def ned_euler_from_ecef_single(ecef_init, ecef_pose):
+ cdef ECEF init = list2ecef(ecef_init)
+ cdef Vector3 pose = Vector3(ecef_pose[0], ecef_pose[1], ecef_pose[2])
+
+ cdef Vector3 e = ned_euler_from_ecef_c(init, pose)
+ return [e(0), e(1), e(2)]
+
+def geodetic2ecef_single(geodetic):
+ cdef Geodetic g = list2geodetic(geodetic)
+ cdef ECEF e = geodetic2ecef_c(g)
+ return [e.x, e.y, e.z]
+
+def ecef2geodetic_single(ecef):
+ cdef ECEF e = list2ecef(ecef)
+ cdef Geodetic g = ecef2geodetic_c(e)
+ return [g.lat, g.lon, g.alt]
+
+
+cdef class LocalCoord:
+ cdef LocalCoord_c * lc
+
+ def __init__(self, geodetic=None, ecef=None):
+ assert (geodetic is not None) or (ecef is not None)
+ if geodetic is not None:
+ self.lc = new LocalCoord_c(list2geodetic(geodetic))
+ elif ecef is not None:
+ self.lc = new LocalCoord_c(list2ecef(ecef))
+
+ @property
+ def ned2ecef_matrix(self):
+ return matrix2numpy(self.lc.ned2ecef_matrix)
+
+ @property
+ def ecef2ned_matrix(self):
+ return matrix2numpy(self.lc.ecef2ned_matrix)
+
+ @property
+ def ned_from_ecef_matrix(self):
+ return self.ecef2ned_matrix
+
+ @property
+ def ecef_from_ned_matrix(self):
+ return self.ned2ecef_matrix
+
+ @classmethod
+ def from_geodetic(cls, geodetic):
+ return cls(geodetic=geodetic)
+
+ @classmethod
+ def from_ecef(cls, ecef):
+ return cls(ecef=ecef)
+
+ def ecef2ned_single(self, ecef):
+ assert self.lc
+ cdef ECEF e = list2ecef(ecef)
+ cdef NED n = self.lc.ecef2ned(e)
+ return [n.n, n.e, n.d]
+
+ def ned2ecef_single(self, ned):
+ assert self.lc
+ cdef NED n = list2ned(ned)
+ cdef ECEF e = self.lc.ned2ecef(n)
+ return [e.x, e.y, e.z]
+
+ def geodetic2ned_single(self, geodetic):
+ assert self.lc
+ cdef Geodetic g = list2geodetic(geodetic)
+ cdef NED n = self.lc.geodetic2ned(g)
+ return [n.n, n.e, n.d]
+
+ def ned2geodetic_single(self, ned):
+ assert self.lc
+ cdef NED n = list2ned(ned)
+ cdef Geodetic g = self.lc.ned2geodetic(n)
+ return [g.lat, g.lon, g.alt]
+
+ def __dealloc__(self):
+ del self.lc
diff --git a/common/vin.py b/common/vin.py
deleted file mode 100755
index 989aa0fa13f5bb..00000000000000
--- a/common/vin.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-import selfdrive.messaging as messaging
-from selfdrive.boardd.boardd import can_list_to_can_capnp
-
-VIN_UNKNOWN = "0" * 17
-
-# sanity checks on response messages from vin query
-def is_vin_response_valid(can_dat, step, cnt):
-
- can_dat = [ord(i) for i in can_dat]
-
- if len(can_dat) != 8:
- # ISO-TP meesages are all 8 bytes
- return False
-
- if step == 0:
- # VIN does not fit in a single message and it's 20 bytes of data
- if can_dat[0] != 0x10 or can_dat[1] != 0x14:
- return False
-
- if step == 1 and cnt == 0:
- # first response after a CONTINUE query is sent
- if can_dat[0] != 0x21:
- return False
-
- if step == 1 and cnt == 1:
- # second response after a CONTINUE query is sent
- if can_dat[0] != 0x22:
- return False
-
- return True
-
-
-class VinQuery():
- def __init__(self, bus):
- self.bus = bus
- # works on standard 11-bit addresses for diagnostic. Tested on Toyota and Subaru;
- # Honda uses the extended 29-bit addresses, and unfortunately only works from OBDII
- self.query_ext_msgs = [[0x18DB33F1, 0, '\x02\x09\x02'.ljust(8, "\x00"), bus],
- [0x18DA10f1, 0, '\x30'.ljust(8, "\x00"), bus]]
- self.query_nor_msgs = [[0x7df, 0, '\x02\x09\x02'.ljust(8, "\x00"), bus],
- [0x7e0, 0, '\x30'.ljust(8, "\x00"), bus]]
-
- self.cnts = [1, 2] # number of messages to wait for at each iteration
- self.step = 0
- self.cnt = 0
- self.responded = False
- self.never_responded = True
- self.dat = []
- self.vin = VIN_UNKNOWN
-
- def check_response(self, msg):
- # have we got a VIN query response?
- if msg.src == self.bus and msg.address in [0x18daf110, 0x7e8]:
- self.never_responded = False
- # basic sanity checks on ISO-TP response
- if is_vin_response_valid(msg.dat, self.step, self.cnt):
- self.dat += msg.dat[2:] if self.step == 0 else msg.dat[1:]
- self.cnt += 1
- if self.cnt == self.cnts[self.step]:
- self.responded = True
- self.step += 1
-
- def send_query(self, sendcan):
- # keep sending VIN qury if ECU isn't responsing.
- # sendcan is probably not ready due to the zmq slow joiner syndrome
- if self.never_responded or (self.responded and self.step < len(self.cnts)):
- sendcan.send(can_list_to_can_capnp([self.query_ext_msgs[self.step]], msgtype='sendcan'))
- sendcan.send(can_list_to_can_capnp([self.query_nor_msgs[self.step]], msgtype='sendcan'))
- self.responded = False
- self.cnt = 0
-
- def get_vin(self):
- # only report vin if procedure is finished
- if self.step == len(self.cnts) and self.cnt == self.cnts[-1]:
- self.vin = "".join(self.dat[3:])
- return self.vin
-
-
-def get_vin(logcan, sendcan, bus, query_time=1.):
- vin_query = VinQuery(bus)
- frame = 0
-
- # 1s max of VIN query time
- while frame < query_time * 100:
- a = messaging.recv_one(logcan)
-
- for can in a.can:
- vin_query.check_response(can)
-
- vin_query.send_query(sendcan)
- frame += 1
-
- return vin_query.get_vin()
-
-
-if __name__ == "__main__":
- from selfdrive.services import service_list
- logcan = messaging.sub_sock(service_list['can'].port)
- sendcan = messaging.pub_sock(service_list['sendcan'].port)
- print get_vin(logcan, sendcan, 0)
diff --git a/common/xattr.py b/common/xattr.py
new file mode 100644
index 00000000000000..fa61b9e0fc5635
--- /dev/null
+++ b/common/xattr.py
@@ -0,0 +1,45 @@
+import os
+from cffi import FFI
+
+# Workaround for the EON/termux build of Python having os.*xattr removed.
+ffi = FFI()
+ffi.cdef("""
+int setxattr(const char *path, const char *name, const void *value, size_t size, int flags);
+ssize_t getxattr(const char *path, const char *name, void *value, size_t size);
+ssize_t listxattr(const char *path, char *list, size_t size);
+int removexattr(const char *path, const char *name);
+""")
+libc = ffi.dlopen(None)
+
+def setxattr(path, name, value, flags=0):
+ path = path.encode()
+ name = name.encode()
+ if libc.setxattr(path, name, value, len(value), flags) == -1:
+ raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: setxattr({path}, {name}, {value}, {flags})")
+
+def getxattr(path, name, size=128):
+ path = path.encode()
+ name = name.encode()
+ value = ffi.new(f"char[{size}]")
+ l = libc.getxattr(path, name, value, size)
+ if l == -1:
+ # errno 61 means attribute hasn't been set
+ if ffi.errno == 61:
+ return None
+ raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: getxattr({path}, {name}, {size})")
+ return ffi.buffer(value)[:l]
+
+def listxattr(path, size=128):
+ path = path.encode()
+ attrs = ffi.new(f"char[{size}]")
+ l = libc.listxattr(path, attrs, size)
+ if l == -1:
+ raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: listxattr({path}, {size})")
+ # attrs is b'\0' delimited values (so chop off trailing empty item)
+ return [a.decode() for a in ffi.buffer(attrs)[:l].split(b"\0")[0:-1]]
+
+def removexattr(path, name):
+ path = path.encode()
+ name = name.encode()
+ if libc.removexattr(path, name) == -1:
+ raise OSError(ffi.errno, f"{os.strerror(ffi.errno)}: removexattr({path}, {name})")
diff --git a/installer/updater/Makefile b/installer/updater/Makefile
index d252fc2aa050c7..54bd7c9df430f6 100644
--- a/installer/updater/Makefile
+++ b/installer/updater/Makefile
@@ -10,7 +10,7 @@ WARN_FLAGS = -Werror=implicit-function-declaration \
-Werror=format-extra-args
CFLAGS = -std=gnu11 -g -fPIC -O2 $(WARN_FLAGS)
-CXXFLAGS = -std=c++11 -g -fPIC -O2 $(WARN_FLAGS)
+CXXFLAGS = -std=c++1z -g -fPIC -O2 $(WARN_FLAGS)
CURL_FLAGS = -I$(PHONELIBS)/curl/include
CURL_LIBS = $(PHONELIBS)/curl/lib/libcurl.a \
@@ -34,6 +34,7 @@ all: updater
OBJS = opensans_regular.ttf.o \
opensans_semibold.ttf.o \
opensans_bold.ttf.o \
+ ../../selfdrive/common/util.o \
../../selfdrive/common/touch.o \
../../selfdrive/common/framebuffer.o \
$(PHONELIBS)/json11/json11.o \
diff --git a/installer/updater/update.json b/installer/updater/update.json
index 2715fcaccc0b06..ef02bfae8b5688 100644
--- a/installer/updater/update.json
+++ b/installer/updater/update.json
@@ -1,7 +1,7 @@
{
- "ota_url": "https://commadist.azureedge.net/neosupdate/ota-signed-4db25072191d24e204a816d73ac9e8c727822a26ed3baf01ecae18167fa2eb11.zip",
- "ota_hash": "4db25072191d24e204a816d73ac9e8c727822a26ed3baf01ecae18167fa2eb11",
- "recovery_url": "https://commadist.azureedge.net/neosupdate/recovery-31ef14206d3102edf18fb7417ef32ba2d9f37dd2f4443e234c374a70d1bf4662.img",
- "recovery_len": 15136044,
- "recovery_hash": "31ef14206d3102edf18fb7417ef32ba2d9f37dd2f4443e234c374a70d1bf4662"
+ "ota_url": "https://commadist.azureedge.net/neosupdate/ota-signed-e85f507777cb6b22f88ba1c8be6bbaa2630c484b971344b645fca2d1c461cd47.zip",
+ "ota_hash": "e85f507777cb6b22f88ba1c8be6bbaa2630c484b971344b645fca2d1c461cd47",
+ "recovery_url": "https://commadist.azureedge.net/neosupdate/recovery-db31ffe79dfd60be966fba6d1525a5081a920062b883644dc8f5734bcc6806bb.img",
+ "recovery_len": 15926572,
+ "recovery_hash": "db31ffe79dfd60be966fba6d1525a5081a920062b883644dc8f5734bcc6806bb"
}
diff --git a/installer/updater/updater b/installer/updater/updater
index 51886bd3341307..729de843467163 100755
Binary files a/installer/updater/updater and b/installer/updater/updater differ
diff --git a/installer/updater/updater.cc b/installer/updater/updater.cc
index 89ac7f63597c03..d737ea248772ca 100644
--- a/installer/updater/updater.cc
+++ b/installer/updater/updater.cc
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
#include
@@ -33,10 +34,10 @@
#define USER_AGENT "NEOSUpdater-0.2"
-#define MANIFEST_URL_EON_STAGING "https://github.com/commaai/eon-neos/raw/master/update.staging.json"
-#define MANIFEST_URL_EON_LOCAL "http://192.168.5.1:8000/neosupdate/update.local.json"
-#define MANIFEST_URL_EON "https://github.com/commaai/eon-neos/raw/master/update.json"
-const char *manifest_url = MANIFEST_URL_EON;
+#define MANIFEST_URL_NEOS_STAGING "https://github.com/commaai/eon-neos/raw/master/update.staging.json"
+#define MANIFEST_URL_NEOS_LOCAL "http://192.168.5.1:8000/neosupdate/update.local.json"
+#define MANIFEST_URL_NEOS "https://github.com/commaai/eon-neos/raw/master/update.json"
+const char *manifest_url = MANIFEST_URL_NEOS;
#define RECOVERY_DEV "/dev/block/bootdevice/by-name/recovery"
#define RECOVERY_COMMAND "/cache/recovery/command"
@@ -96,7 +97,7 @@ std::string download_string(CURL *curl, std::string url) {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 0);
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 0);
@@ -117,11 +118,19 @@ size_t download_file_write(void *ptr, size_t size, size_t nmeb, void *up) {
return fwrite(ptr, size, nmeb, (FILE*)up);
}
-bool check_battery() {
+int battery_capacity() {
std::string bat_cap_s = util::read_file("/sys/class/power_supply/battery/capacity");
- int bat_cap = atoi(bat_cap_s.c_str());
+ return atoi(bat_cap_s.c_str());
+}
+
+int battery_current() {
std::string current_now_s = util::read_file("/sys/class/power_supply/battery/current_now");
- int current_now = atoi(current_now_s.c_str());
+ return atoi(current_now_s.c_str());
+}
+
+bool check_battery() {
+ int bat_cap = battery_capacity();
+ int current_now = battery_current();
return bat_cap > 35 || (current_now < 0 && bat_cap > 10);
}
@@ -141,14 +150,38 @@ static void start_settings_activity(const char* name) {
system(launch_cmd);
}
+bool is_settings_active() {
+ FILE *fp;
+ char sys_output[4096];
+
+ fp = popen("/bin/dumpsys window windows", "r");
+ if (fp == NULL) {
+ return false;
+ }
+
+ bool active = false;
+ while (fgets(sys_output, sizeof(sys_output), fp) != NULL) {
+ if (strstr(sys_output, "mCurrentFocus=null") != NULL) {
+ break;
+ }
+
+ if (strstr(sys_output, "mCurrentFocus=Window") != NULL) {
+ active = true;
+ break;
+ }
+ }
+
+ pclose(fp);
+
+ return active;
+}
+
struct Updater {
bool do_exit = false;
TouchState touch;
int fb_w, fb_h;
- EGLDisplay display;
- EGLSurface surface;
FramebufferState *fb = NULL;
NVGcontext *vg = NULL;
@@ -160,9 +193,9 @@ struct Updater {
std::mutex lock;
- // i hate state machines give me coroutines already
enum UpdateState {
CONFIRMATION,
+ LOW_BATTERY,
RUNNING,
ERROR,
};
@@ -173,19 +206,33 @@ struct Updater {
std::string error_text;
+ std::string low_battery_text;
+ std::string low_battery_title;
+ std::string low_battery_context;
+ std::string battery_cap_text;
+ int min_battery_cap = 35;
+
// button
int b_x, b_w, b_y, b_h;
int balt_x;
+ // download stage writes these for the installation stage
+ int recovery_len;
+ std::string recovery_hash;
+ std::string recovery_fn;
+ std::string ota_fn;
+
CURL *curl = NULL;
- Updater() {
+ void ui_init() {
touch_init(&touch);
fb = framebuffer_init("updater", 0x00001000, false,
- &display, &surface, &fb_w, &fb_h);
+ &fb_w, &fb_h);
assert(fb);
+ framebuffer_set_power(fb, HWC_POWER_MODE_NORMAL);
+
vg = nvgCreateGLES3(NVG_ANTIALIAS | NVG_STENCIL_STROKES | NVG_DEBUG);
assert(vg);
@@ -205,7 +252,6 @@ struct Updater {
b_h = 220;
state = CONFIRMATION;
-
}
int download_file_xferinfo(curl_off_t dltotal, curl_off_t dlno,
@@ -238,7 +284,7 @@ struct Updater {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 0);
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(curl, CURLOPT_RESUME_FROM, resume_from);
@@ -296,86 +342,88 @@ struct Updater {
state = ERROR;
}
- std::string stage_download(std::string url, std::string hash, std::string name) {
+ void set_battery_low() {
+ std::lock_guard guard(lock);
+ state = LOW_BATTERY;
+ }
+
+ void set_running() {
+ std::lock_guard guard(lock);
+ state = RUNNING;
+ }
+
+ std::string download(std::string url, std::string hash, std::string name) {
std::string out_fn = UPDATE_DIR "/" + util::base_name(url);
- set_progress("Downloading " + name + "...");
- bool r = download_file(url, out_fn);
- if (!r) {
- set_error("failed to download " + name);
- return "";
+ // start or resume downloading if hash doesn't match
+ std::string fn_hash = sha256_file(out_fn);
+ if (hash.compare(fn_hash) != 0) {
+ set_progress("Downloading " + name + "...");
+ bool r = download_file(url, out_fn);
+ if (!r) {
+ set_error("failed to download " + name);
+ unlink(out_fn.c_str());
+ return "";
+ }
+ fn_hash = sha256_file(out_fn);
}
set_progress("Verifying " + name + "...");
- std::string fn_hash = sha256_file(out_fn);
printf("got %s hash: %s\n", name.c_str(), hash.c_str());
if (fn_hash != hash) {
set_error(name + " was corrupt");
unlink(out_fn.c_str());
return "";
}
-
return out_fn;
}
- void run_stages() {
+ bool download_stage() {
curl = curl_easy_init();
assert(curl);
- if (!check_battery()) {
- set_error("Please plug power in to your EON and wait for charge");
- return;
- }
+ // ** quick checks before download **
if (!check_space()) {
set_error("2GB of free space required to update");
- return;
+ return false;
}
mkdir(UPDATE_DIR, 0777);
- const int EON = (access("/EON", F_OK) != -1);
-
set_progress("Finding latest version...");
- std::string manifest_s;
- if (EON) {
- manifest_s = download_string(curl, manifest_url);
- } else {
- // don't update NEO
- exit(0);
- }
-
+ std::string manifest_s = download_string(curl, manifest_url);
printf("manifest: %s\n", manifest_s.c_str());
std::string err;
auto manifest = json11::Json::parse(manifest_s, err);
if (manifest.is_null() || !err.empty()) {
set_error("failed to load update manifest");
- return;
+ return false;
}
std::string ota_url = manifest["ota_url"].string_value();
std::string ota_hash = manifest["ota_hash"].string_value();
std::string recovery_url = manifest["recovery_url"].string_value();
- std::string recovery_hash = manifest["recovery_hash"].string_value();
- int recovery_len = manifest["recovery_len"].int_value();
+ recovery_hash = manifest["recovery_hash"].string_value();
+ recovery_len = manifest["recovery_len"].int_value();
// std::string installer_url = manifest["installer_url"].string_value();
// std::string installer_hash = manifest["installer_hash"].string_value();
if (ota_url.empty() || ota_hash.empty()) {
set_error("invalid update manifest");
- return;
+ return false;
}
- // std::string installer_fn = stage_download(installer_url, installer_hash, "installer");
+ // std::string installer_fn = download(installer_url, installer_hash, "installer");
// if (installer_fn.empty()) {
// //error'd
// return;
// }
- std::string recovery_fn;
+ // ** handle recovery download **
if (recovery_url.empty() || recovery_hash.empty() || recovery_len == 0) {
set_progress("Skipping recovery flash...");
} else {
@@ -385,25 +433,61 @@ struct Updater {
printf("existing recovery hash: %s\n", existing_recovery_hash.c_str());
if (existing_recovery_hash != recovery_hash) {
- recovery_fn = stage_download(recovery_url, recovery_hash, "recovery");
+ recovery_fn = download(recovery_url, recovery_hash, "recovery");
if (recovery_fn.empty()) {
// error'd
- return;
+ return false;
}
}
}
- std::string ota_fn = stage_download(ota_url, ota_hash, "update");
+ // ** handle ota download **
+ ota_fn = download(ota_url, ota_hash, "update");
if (ota_fn.empty()) {
//error'd
- return;
+ return false;
}
+ // download sucessful
+ return true;
+ }
+
+ // thread that handles downloading and installing the update
+ void run_stages() {
+ printf("run_stages start\n");
+
+
+ // ** download update **
+
if (!check_battery()) {
- set_error("must have at least 35% battery to update");
+ set_battery_low();
+ int battery_cap = battery_capacity();
+ while(battery_cap < min_battery_cap) {
+ battery_cap = battery_capacity();
+ battery_cap_text = std::to_string(battery_cap);
+ usleep(1000000);
+ }
+ set_running();
+ }
+
+ bool sucess = download_stage();
+ if (!sucess) {
return;
}
+ // ** install update **
+
+ if (!check_battery()) {
+ set_battery_low();
+ int battery_cap = battery_capacity();
+ while(battery_cap < min_battery_cap) {
+ battery_cap = battery_capacity();
+ battery_cap_text = std::to_string(battery_cap);
+ usleep(1000000);
+ }
+ set_running();
+ }
+
if (!recovery_fn.empty()) {
// flash recovery
set_progress("Flashing recovery...");
@@ -526,6 +610,27 @@ struct Updater {
}
}
+ void draw_battery_screen() {
+ low_battery_title = "Low Battery";
+ low_battery_text = "Please connect EON to your charger. Update will continue once EON battery reaches 35%.";
+ low_battery_context = "Current battery charge: " + battery_cap_text + "%";
+
+ nvgFillColor(vg, nvgRGBA(255,255,255,255));
+ nvgTextAlign(vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);
+
+ nvgFontFace(vg, "opensans_bold");
+ nvgFontSize(vg, 120.0f);
+ nvgTextBox(vg, 110, 220, fb_w-240, low_battery_title.c_str(), NULL);
+
+ nvgFontFace(vg, "opensans_regular");
+ nvgFontSize(vg, 86.0f);
+ nvgTextBox(vg, 130, 380, fb_w-260, low_battery_text.c_str(), NULL);
+
+ nvgFontFace(vg, "opensans_bold");
+ nvgFontSize(vg, 86.0f);
+ nvgTextBox(vg, 130, 700, fb_w-260, low_battery_context.c_str(), NULL);
+ }
+
void draw_progress_screen() {
// draw progress message
nvgFontSize(vg, 64.0f);
@@ -545,7 +650,7 @@ struct Updater {
int powerprompt_y = 312;
nvgFontFace(vg, "opensans_regular");
nvgFontSize(vg, 64.0f);
- nvgText(vg, fb_w/2, 740, "Ensure EON is connected to power.", NULL);
+ nvgText(vg, fb_w/2, 740, "Ensure your device remains connected to a power source.", NULL);
NVGpaint paint = nvgBoxGradient(
vg, progress_x + 1, progress_y + 1,
@@ -584,11 +689,14 @@ struct Updater {
"Continue",
"Connect to WiFi");
break;
+ case LOW_BATTERY:
+ draw_battery_screen();
+ break;
case RUNNING:
draw_progress_screen();
break;
case ERROR:
- draw_ack_screen("There was an error.", ("ERROR: " + error_text + "\n\nYou will need to retry").c_str(), NULL, "exit");
+ draw_ack_screen("There was an error", (error_text).c_str(), NULL, "Reboot");
break;
}
@@ -598,9 +706,7 @@ struct Updater {
void ui_update() {
std::lock_guard guard(lock);
- switch (state) {
- case ERROR:
- case CONFIRMATION: {
+ if (state == ERROR || state == CONFIRMATION) {
int touch_x = -1, touch_y = -1;
int res = touch_poll(&touch, &touch_x, &touch_y, 0);
if (res == 1 && !is_settings_active()) {
@@ -619,13 +725,11 @@ struct Updater {
}
}
}
- default:
- break;
- }
}
-
void go() {
+ ui_init();
+
while (!do_exit) {
ui_update();
@@ -647,7 +751,8 @@ struct Updater {
glDisable(GL_BLEND);
- eglSwapBuffers(display, surface);
+ framebuffer_swap(fb);
+
assert(glGetError() == GL_NO_ERROR);
// no simple way to do 30fps vsync with surfaceflinger...
@@ -658,51 +763,37 @@ struct Updater {
update_thread_handle.join();
}
+ // reboot
system("service call power 16 i32 0 i32 0 i32 1");
}
- bool is_settings_active() {
- FILE *fp;
- char sys_output[4096];
-
- fp = popen("/bin/dumpsys window windows", "r");
- if (fp == NULL) {
- return false;
- }
-
- bool active = false;
- while (fgets(sys_output, sizeof(sys_output), fp) != NULL) {
- if (strstr(sys_output, "mCurrentFocus=null") != NULL) {
- break;
- }
-
- if (strstr(sys_output, "mCurrentFocus=Window") != NULL) {
- active = true;
- break;
- }
- }
-
- pclose(fp);
-
- return active;
- }
-
};
}
+
int main(int argc, char *argv[]) {
+ bool background_cache = false;
if (argc > 1) {
if (strcmp(argv[1], "local") == 0) {
- manifest_url = MANIFEST_URL_EON_LOCAL;
+ manifest_url = MANIFEST_URL_NEOS_LOCAL;
} else if (strcmp(argv[1], "staging") == 0) {
- manifest_url = MANIFEST_URL_EON_STAGING;
+ manifest_url = MANIFEST_URL_NEOS_STAGING;
+ } else if (strcmp(argv[1], "bgcache") == 0) {
+ manifest_url = argv[2];
+ background_cache = true;
} else {
manifest_url = argv[1];
}
}
+
printf("updating from %s\n", manifest_url);
Updater updater;
- updater.go();
- return 0;
+ int err = 0;
+ if (background_cache) {
+ err = !updater.download_stage();
+ } else {
+ updater.go();
+ }
+ return err;
}
diff --git a/launch.sh b/launch.sh
new file mode 100755
index 00000000000000..eeebfc9eb0eb1b
--- /dev/null
+++ b/launch.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/bash
+
+export PASSIVE="0"
+exec ./launch_chffrplus.sh
diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh
index f3e9ed12ecf7b7..8977b46b9a977b 100755
--- a/launch_chffrplus.sh
+++ b/launch_chffrplus.sh
@@ -1,46 +1,187 @@
#!/usr/bin/bash
-export OMP_NUM_THREADS=1
-export MKL_NUM_THREADS=1
-export NUMEXPR_NUM_THREADS=1
-export OPENBLAS_NUM_THREADS=1
-export VECLIB_MAXIMUM_THREADS=1
-
-if [ -z "$PASSIVE" ]; then
- export PASSIVE="1"
+if [ -z "$BASEDIR" ]; then
+ BASEDIR="/data/openpilot"
fi
+source "$BASEDIR/launch_env.sh"
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
+
. /data/openpilot/selfdrive/car/tesla/readconfig.sh
+function tici_init {
+ sudo su -c 'echo "performance" > /sys/class/devfreq/soc:qcom,memlat-cpu0/governor'
+ sudo su -c 'echo "performance" > /sys/class/devfreq/soc:qcom,memlat-cpu4/governor'
+}
+
+function two_init {
+ # Wifi scan
+ wpa_cli IFNAME=wlan0 SCAN
+
+ # *** shield cores 2-3 ***
+
+ # android gets two cores
+ echo 0-1 > /dev/cpuset/background/cpus
+ echo 0-1 > /dev/cpuset/system-background/cpus
+ echo 0-1 > /dev/cpuset/foreground/cpus
+ echo 0-1 > /dev/cpuset/foreground/boost/cpus
+ echo 0-1 > /dev/cpuset/android/cpus
+
+ # openpilot gets all the cores
+ echo 0-3 > /dev/cpuset/app/cpus
+
+ # mask off 2-3 from RPS and XPS - Receive/Transmit Packet Steering
+ echo 3 | tee /sys/class/net/*/queues/*/rps_cpus
+ echo 3 | tee /sys/class/net/*/queues/*/xps_cpus
+
+ # *** set up governors ***
+
+ # +50mW offroad, +500mW onroad for 30% more RAM bandwidth
+ echo "performance" > /sys/class/devfreq/soc:qcom,cpubw/governor
+ echo 1056000 > /sys/class/devfreq/soc:qcom,m4m/max_freq
+ echo "performance" > /sys/class/devfreq/soc:qcom,m4m/governor
+
+ # unclear if these help, but they don't seem to hurt
+ echo "performance" > /sys/class/devfreq/soc:qcom,memlat-cpu0/governor
+ echo "performance" > /sys/class/devfreq/soc:qcom,memlat-cpu2/governor
+
+ # GPU
+ echo "performance" > /sys/class/devfreq/b00000.qcom,kgsl-3d0/governor
+
+ # /sys/class/devfreq/soc:qcom,mincpubw is the only one left at "powersave"
+ # it seems to gain nothing but a wasted 500mW
+
+ # *** set up IRQ affinities ***
+
+ # Collect RIL and other possibly long-running I/O interrupts onto CPU 1
+ echo 1 > /proc/irq/78/smp_affinity_list # qcom,smd-modem (LTE radio)
+ echo 1 > /proc/irq/33/smp_affinity_list # ufshcd (flash storage)
+ echo 1 > /proc/irq/35/smp_affinity_list # wifi (wlan_pci)
+ echo 1 > /proc/irq/6/smp_affinity_list # MDSS
+
+ # USB traffic needs realtime handling on cpu 3
+ [ -d "/proc/irq/733" ] && echo 3 > /proc/irq/733/smp_affinity_list # USB for LeEco
+ [ -d "/proc/irq/736" ] && echo 3 > /proc/irq/736/smp_affinity_list # USB for OP3T
+
+ # GPU and camera get cpu 2
+ CAM_IRQS="177 178 179 180 181 182 183 184 185 186 192"
+ for irq in $CAM_IRQS; do
+ echo 2 > /proc/irq/$irq/smp_affinity_list
+ done
+ echo 2 > /proc/irq/193/smp_affinity_list # GPU
+
+ # give GPU threads RT priority
+ for pid in $(pgrep "kgsl"); do
+ chrt -f -p 52 $pid
+ done
+
+ # the flippening!
+ LD_LIBRARY_PATH="" content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:1
+
+ # disable bluetooth
+ service call bluetooth_manager 8
+
+ # Check for NEOS update
+ if [ $(< /VERSION) != "$REQUIRED_NEOS_VERSION" ]; then
+ if [ -f "$DIR/scripts/continue.sh" ]; then
+ cp "$DIR/scripts/continue.sh" "/data/data/com.termux/files/continue.sh"
+ fi
+
+ if [ ! -f "$BASEDIR/prebuilt" ]; then
+ # Clean old build products, but preserve the scons cache
+ cd $DIR
+ scons --clean
+ git clean -xdf
+ git submodule foreach --recursive git clean -xdf
+ fi
+
+ "$DIR/installer/updater/updater" "file://$DIR/installer/updater/update.json"
+ fi
+
+ # One-time fix for a subset of OP3T with gyro orientation offsets.
+ # Remove and regenerate qcom sensor registry. Only done on OP3T mainboards.
+ # Performed exactly once. The old registry is preserved just-in-case, and
+ # doubles as a flag denoting we've already done the reset.
+ if ! $(grep -q "letv" /proc/cmdline) && [ ! -f "/persist/comma/op3t-sns-reg-backup" ]; then
+ echo "Performing OP3T sensor registry reset"
+ mv /persist/sensors/sns.reg /persist/comma/op3t-sns-reg-backup &&
+ rm -f /persist/sensors/sensors_settings /persist/sensors/error_log /persist/sensors/gyro_sensitity_cal &&
+ echo "restart" > /sys/kernel/debug/msm_subsys/slpi &&
+ sleep 5 # Give Android sensor subsystem a moment to recover
+ fi
+}
function launch {
- # apply update
- if [ $do_auto_update == "True" ]; then
- if [ "$(git rev-parse HEAD)" != "$(git rev-parse @{u})" ]; then
- git reset --hard @{u} &&
- git clean -xdf &&
-
- # Touch all files on release2 after checkout to prevent rebuild
- BRANCH=$(git rev-parse --abbrev-ref HEAD)
- if [[ "$BRANCH" == "release2" ]]; then
- touch **
- fi
+ # Remove orphaned git lock if it exists on boot
+ [ -f "$DIR/.git/index.lock" ] && rm -f $DIR/.git/index.lock
- exec "${BASH_SOURCE[0]}"
+ #BB here was to prevent the autoupdate; need to find another way
+ # # apply update
+ # if [ $do_auto_update == "True" ]; then
+ # if [ "$(git rev-parse HEAD)" != "$(git rev-parse @{u})" ]; then
+ # git reset --hard @{u} &&
+ # git clean -xdf &&
+
+ # # Touch all files on release2 after checkout to prevent rebuild
+ # BRANCH=$(git rev-parse --abbrev-ref HEAD)
+ # if [[ "$BRANCH" == "release2" ]]; then
+ # touch **
+ # fi
+
+ # Check to see if there's a valid overlay-based update available. Conditions
+ # are as follows:
+ #
+ # 1. The BASEDIR init file has to exist, with a newer modtime than anything in
+ # the BASEDIR Git repo. This checks for local development work or the user
+ # switching branches/forks, which should not be overwritten.
+ # 2. The FINALIZED consistent file has to exist, indicating there's an update
+ # that completed successfully and synced to disk.
+
+ if [ $do_auto_update == "True" ] && [ -f "${BASEDIR}/.overlay_init" ]; then
+ find ${BASEDIR}/.git -newer ${BASEDIR}/.overlay_init | grep -q '.' 2> /dev/null
+ if [ $? -eq 0 ]; then
+ echo "${BASEDIR} has been modified, skipping overlay update installation"
+ else
+ if [ -f "${STAGING_ROOT}/finalized/.overlay_consistent" ]; then
+ if [ ! -d /data/safe_staging/old_openpilot ]; then
+ echo "Valid overlay update found, installing"
+ LAUNCHER_LOCATION="${BASH_SOURCE[0]}"
+
+ mv $BASEDIR /data/safe_staging/old_openpilot
+ mv "${STAGING_ROOT}/finalized" $BASEDIR
+ cd $BASEDIR
+
+ # Partial mitigation for symlink-related filesystem corruption
+ # Ensure all files match the repo versions after update
+ git reset --hard
+ git submodule foreach --recursive git reset --hard
+
+ echo "Restarting launch script ${LAUNCHER_LOCATION}"
+ unset REQUIRED_NEOS_VERSION
+ exec "${LAUNCHER_LOCATION}"
+ else
+ echo "openpilot backup found, not updating"
+ # TODO: restore backup? This means the updater didn't start after swapping
+ fi
+ fi
fi
fi
-
- # no cpu rationing for now
- echo 0-3 > /dev/cpuset/background/cpus
- echo 0-3 > /dev/cpuset/system-background/cpus
- echo 0-3 > /dev/cpuset/foreground/boost/cpus
- echo 0-3 > /dev/cpuset/foreground/cpus
- echo 0-3 > /dev/cpuset/android/cpus
+
+ # comma two init
+ if [ -f /EON ]; then
+ two_init
+ elif [ -f /TICI ]; then
+ tici_init
+ fi
# handle pythonpath
- ln -s /data/openpilot /data/pythonpath
+ ln -sfn $(pwd) /data/pythonpath
export PYTHONPATH="$PWD"
+ # write tmux scrollback to a file
+ tmux capture-pane -pq -S-1000 > /tmp/launch_log
+
# start manager
cd selfdrive
./manager.py
diff --git a/launch_env.sh b/launch_env.sh
new file mode 100755
index 00000000000000..ca8f4e8a14469b
--- /dev/null
+++ b/launch_env.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/bash
+
+export OMP_NUM_THREADS=1
+export MKL_NUM_THREADS=1
+export NUMEXPR_NUM_THREADS=1
+export OPENBLAS_NUM_THREADS=1
+export VECLIB_MAXIMUM_THREADS=1
+
+if [ -z "$REQUIRED_NEOS_VERSION" ]; then
+ export REQUIRED_NEOS_VERSION="15-1"
+fi
+
+if [ -z "$PASSIVE" ]; then
+ export PASSIVE="1"
+fi
+
+export STAGING_ROOT="/data/safe_staging"
diff --git a/models/dmonitoring_model_q.dlc b/models/dmonitoring_model_q.dlc
new file mode 100644
index 00000000000000..9935584bf4c00a
Binary files /dev/null and b/models/dmonitoring_model_q.dlc differ
diff --git a/models/driving_bigmodel.dlc b/models/driving_bigmodel.dlc
deleted file mode 100644
index 95c6ec232d36c1..00000000000000
Binary files a/models/driving_bigmodel.dlc and /dev/null differ
diff --git a/models/driving_model.dlc b/models/driving_model.dlc
deleted file mode 100644
index 79181185f7549e..00000000000000
Binary files a/models/driving_model.dlc and /dev/null differ
diff --git a/models/monitoring_model.dlc b/models/monitoring_model.dlc
deleted file mode 100644
index f7496fb925d873..00000000000000
Binary files a/models/monitoring_model.dlc and /dev/null differ
diff --git a/models/posenet.dlc b/models/posenet.dlc
deleted file mode 100644
index 58dee250f73032..00000000000000
Binary files a/models/posenet.dlc and /dev/null differ
diff --git a/models/supercombo.dlc b/models/supercombo.dlc
new file mode 100644
index 00000000000000..faef0b3d16b326
Binary files /dev/null and b/models/supercombo.dlc differ
diff --git a/opendbc/.gitignore b/opendbc/.gitignore
index d18402de39f8b0..bf8570d8b06488 100644
--- a/opendbc/.gitignore
+++ b/opendbc/.gitignore
@@ -1,2 +1,17 @@
+.mypy_cache/
*.pyc
+*.os
+*.o
+*.tmp
+*.dylib
.*.swp
+.DS_Store
+.sconsign.dblite
+
+can/*.so
+can/build/
+can/obj/
+can/packer_pyx.cpp
+can/parser_pyx.cpp
+can/packer_pyx.html
+can/parser_pyx.html
diff --git a/opendbc/ESR.dbc b/opendbc/ESR.dbc
deleted file mode 100644
index e3837a68b2ff5a..00000000000000
--- a/opendbc/ESR.dbc
+++ /dev/null
@@ -1,1080 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: Gateway ESR
-VAL_TABLE_ ForwardReverse 1 "Reverse" 0 "Forward" ;
-VAL_TABLE_ LeftRight 1 "Right Clockwise" 0 "Left CounterClockwise" ;
-VAL_TABLE_ ValidInvalid 1 "Valid" 0 "Invalid" ;
-VAL_TABLE_ TrueFalse 1 "True" 0 "False" ;
-
-
-BO_ 1343 Target64: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1342 Target63: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1341 Target62: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1340 Target61: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1339 Target60: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1338 Target59: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1337 Target58: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1336 Target57: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1335 Target56: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1334 Target55: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1333 Target54: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1332 Target53: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1331 Target52: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1330 Target51: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1329 Target50: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1328 Target49: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1327 Target48: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1326 Target47: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1325 Target46: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1324 Target45: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1323 Target44: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1322 Target43: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1321 Target42: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1320 Target41: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1319 Target40: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1318 Target39: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1317 Target38: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1316 Target37: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1315 Target36: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1314 Target35: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1313 Target34: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1312 Target33: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1311 Target32: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1310 Target31: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1309 Target30: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1308 Target29: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1307 Target28: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1306 Target27: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1305 Target26: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1304 Target25: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1303 Target24: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1302 Target23: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1301 Target22: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1300 Target21: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1299 Target20: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1298 Target19: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1297 Target18: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1296 Target17: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1295 Target16: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1294 Target15: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1293 Target14: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1292 Target13: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1291 Target12: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1290 Target11: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1289 Target10: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1288 Target9: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1287 Target8: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1285 Target6: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1286 Target7: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1284 Target5: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1283 Target4: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1282 Target3: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1281 Target2: 8 Vector__XXX
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1524 VehicleData3: 8 Gateway
- SG_ CAN_RX_YAW_RATE_BIAS_SHIFT : 15|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_WHEELBASE : 55|8@0+ (2,200) [200|710] "cm" Vector__XXX
- SG_ CAN_RX_STEERING_GEAR_RATIO : 63|8@0+ (0.125,0) [0|31.875] "" Vector__XXX
- SG_ CAN_RX_OVERSTEER_UNDERSTEER : 7|8@0- (1,0) [-128|127] "%" Vector__XXX
- SG_ CAN_RX_FUNNEL_OFFSET_RIGHT : 31|8@0- (0.1,0) [-12.8|12.7] "m" Vector__XXX
- SG_ CAN_RX_FUNNEL_OFFSET_LEFT : 23|8@0- (0.1,0) [-12.8|12.7] "m" Vector__XXX
- SG_ CAN_RX_DISTANCE_REAR_AXLE : 47|8@0+ (2,200) [200|710] "cm" Vector__XXX
- SG_ CAN_RX_CW_BLOCKAGE_TRESHOLD : 39|8@0+ (0.0078125,0) [0|1.9921875] "" Vector__XXX
- SG_ CAN_RX_BEAMWIDTH_VERT : 14|7@0+ (0.0625,0) [0|7.9375] "deg" Vector__XXX
-
-BO_ 1523 FactoryAlignment: 8 Gateway
-
-BO_ 1522 Vehicle_Data2: 8 Gateway
- SG_ CAN_RX_WHEEL_SLIP : 41|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_RX_SERV_ALIGN_UPDATES_NEED : 55|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_RX_SERV_ALIGN_TYPE : 47|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_RADAR_HEIGHT : 38|7@0+ (1,0) [0|127] "cm" Vector__XXX
- SG_ CAN_RX_RADAR_FOV_MR : 30|7@0+ (1,0) [0|127] "deg" Vector__XXX
- SG_ CAN_RX_RADAR_FOV_LR : 19|5@0+ (1,0) [0|31] "deg" Vector__XXX
- SG_ CAN_RX_LONG_ACCEL_VALIDITY : 7|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_LONG_ACCEL : 12|9@0- (0.03125,0) [-8|7.96875] "m/s^2" Vector__XXX
- SG_ CAN_RX_LAT_ACCEL_VALIDITY : 6|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_LAT_ACCEL : 5|9@0- (0.03125,0) [-8|7.96875] "m/s^2" Vector__XXX
- SG_ CAN_RX_AUTO_ALIGN_DISABLE : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_AUTO_ALIGN_CONVERGED : 42|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_ANGLE_MOUNTING_OFFSET : 63|8@0- (0.0625,0) [-8|7.9375] "deg" Vector__XXX
- SG_ CAN_RX_AALIGN_AVG_CTR_TOTAL : 45|3@0+ (250,250) [250|2000] "" Vector__XXX
-
-BO_ 1512 CIPV_Targets_Etc: 8 ESR
-
-BO_ 1511 ESR_History_Fault: 8 ESR
-
-BO_ 1510 ESR_Active_Fault: 8 ESR
-
-BO_ 1508 AD_Data: 8 ESR
-
-BO_ 1489 SensorValidation2: 8 ESR
- SG_ CAN_TX_VALID_MR_SN : 7|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_VALID_MR_RANGE_RATE : 31|16@0- (0.0078125,0) [-256|255.9921875] "m/s" Vector__XXX
- SG_ CAN_TX_VALID_MR_RANGE : 15|16@0+ (0.0078125,0) [0|511.9921875] "m" Vector__XXX
- SG_ CAN_TX_VALID_MR_POWER : 63|8@0- (1,0) [-128|127] "db" Vector__XXX
- SG_ CAN_TX_VALID_MR_ANGLE : 40|16@1- (0.0625,0) [-2048|2047.9375] "deg" Vector__XXX
-
-BO_ 1488 SensorValidation: 8 ESR
- SG_ CAN_TX_VALID_LR_SN : 7|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_VALID_LR_RANGE_RATE : 31|16@0- (0.0078125,0) [-256|255.9921875] "m/s" Vector__XXX
- SG_ CAN_TX_VALID_LR_RANGE : 15|16@0+ (0.0078125,0) [0|511.9921875] "m" Vector__XXX
- SG_ CAN_TX_VALID_LR_POWER : 63|8@0- (1,0) [-128|127] "db" Vector__XXX
- SG_ CAN_TX_VALID_LR_ANGLE : 47|16@0- (0.0625,0) [-2048|2047.9375] "deg" Vector__XXX
-
-BO_ 1344 Track_Sensor: 1 ESR
- SG_ CAN_TX_TRACK_ROLLING_COUNT_2 : 4|1@0+ (1,0) [0|1] "" Vector__XXX
-
-BO_ 1280 Target1: 8 ESR
- SG_ CAN_TX_TRACK_WIDTH : 37|4@0+ (0.5,0) [0|7.5] "" Vector__XXX
- SG_ CAN_TX_TRACK_STATUS : 15|3@0+ (1,0) [0|7] "" Vector__XXX
- SG_ CAN_TX_TRACK_ROLLING_COUNT : 38|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_RATE : 53|14@0- (0.01,0) [-81.92|81.91] "m/s" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE_ACCEL : 33|10@0- (0.05,0) [-25.6|25.55] "m/s^2" Vector__XXX
- SG_ CAN_TX_TRACK_RANGE : 18|11@0+ (0.1,0) [0|204.7] "m" Vector__XXX
- SG_ CAN_TX_TRACK_ONCOMING : 0|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_MED_RANGE_MODE : 55|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_TRACK_LAT_RATE : 7|6@0- (0.25,0) [-8|7.75] "" Vector__XXX
- SG_ CAN_TX_TRACK_GROUPING_CHANGED : 1|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_BRIDGE_OBJECT : 39|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_TRACK_ANGLE : 12|10@0- (0.1,0) [-51.2|51.1] "" Vector__XXX
-
-BO_ 1265 SensorInput: 8 Gateway
- SG_ CAN_RX_USE_ANGLE_MISALIGNMENT : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CAN_RX_SCAN_INDEX_ACK : 7|16@0+ (1,0) [0|65535] "" Vector__XXX
- SG_ CAN_RX_LATERAL_MOUNTING_OFFSET : 47|8@0- (0.01563,0) [-2.00064|1.98501] "m" Vector__XXX
- SG_ CAN_RX_WIPER_STATUS : 57|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_VOLVO_SHORT_TRACK_ROC : 31|4@0- (500,0) [-4000|3500] "m" Vector__XXX
- SG_ CAN_RX_VEHICLE_SPEED_VALIDITY : 61|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_TURN_SIGNAL_STATUS : 63|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_RX_RAW_DATA_ENABLE : 56|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_RADAR_CMD_RADIATE : 55|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_MR_ONLY_TRANSMIT : 25|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CAN_RX_MMR_UPSIDE_DOWN : 60|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_MAXIMUM_TRACKS : 53|6@0+ (1,0) [0|63] "" Vector__XXX
- SG_ CAN_RX_LR_ONLY_TRANSMIT : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CAN_RX_HIGH_YAW_ANGLE : 21|6@0- (1,0) [-32|31] "deg" Vector__XXX
- SG_ CAN_RX_GROUPING_MODE : 59|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_RX_CLEAR_FAULTS : 22|1@0- (1,0) [0|0] "" Vector__XXX
- SG_ CAN_RX_BLOCKAGE_DISABLE : 54|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_ANGLE_MISALIGNMENT : 39|8@0- (0.0625,0) [-8|7.9375] "deg" Vector__XXX
-
-BO_ 1264 Vehicle_Data: 8 Gateway
- SG_ CAN_RX_YAW_RATE_VALIDITY : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CAN_RX_YAW_RATE : 11|12@0- (0.0625,0) [-128|127.9375] "deg/s" Vector__XXX
- SG_ CAN_RX_VEHICLE_SPEED_DIRECTION : 12|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_VEHICLE_SPEED : 7|11@0+ (0.0625,0) [0|127.9375] "m/s" Vector__XXX
- SG_ CAN_RX_RADIUS_CURVATURE : 29|14@0- (1,0) [-8192|8191] "m" Vector__XXX
- SG_ CAN_RX_STEERING_VALIDITY : 47|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_STEERING_ANGLE_SIGN : 46|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_STEERING_ANGLE_RATE_SIGN : 30|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_RX_STEERING_ANGLE_RATE : 50|11@0+ (1,0) [0|2047] "deg/s" Vector__XXX
- SG_ CAN_RX_STEERING_ANGLE : 45|11@0+ (1,0) [0|2047] "deg" Vector__XXX
-
-BO_ 1251 ESR_Output_InPath: 8 ESR
- SG_ CAN_TX_PATH_ID_ACC_MOVE : 15|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_TRUCK_TARGET_DET : 7|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_SIDELOBE_BLOCKATE : 5|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_ROLLING_COUNT_3 : 1|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_PATH_ID_FCW_STAT : 47|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_PATH_ID_FCW_MOVE : 39|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_PATH_ID_CMBB_STAT : 31|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_PATH_ID_CMBB_MOVE : 23|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_PATH_ID_ACC_STAT : 63|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_PARTIAL_BLOCKAGE : 4|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_LR_ONLY_GRATING_LOBE_DET : 6|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_LMR_LR_MODE : 3|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_AUTO_ALIGN_ANGLE : 55|8@0- (0.0625,0) [-8|7.9375] "" Vector__XXX
-
-BO_ 1250 ESR_SW: 8 ESR
- SG_ CAN_TX_SW_VERSION_PLD : 63|8@0+ (1,0) [0|255] "" Vector__XXX
- SG_ CAN_TX_SW_VERSION_HOST : 15|24@0+ (1,0) [0|16777215] "" Vector__XXX
- SG_ CAN_TX_SERIAL_NUM : 39|24@0+ (1,0) [0|16777215] "" Vector__XXX
- SG_ CAN_TX_INTERFACE_VERSION : 7|4@0+ (1,0) [0|15] "" Vector__XXX
- SG_ CAN_TX_HW_VERSION : 3|4@0+ (1,0) [0|15] "" Vector__XXX
-
-BO_ 1249 ESR_Status2: 8 ESR
- SG_ CAN_TX_YAW_RATE_BIAS : 47|8@0- (0.125,0) [-16|15.875] "" Vector__XXX
- SG_ CAN_TX_XCVR_OPERATIONAL : 12|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_VEH_SPD_COMP_FACTOR : 39|6@0- (0.00195,1) [0.9376|1.06045] "" Vector__XXX
- SG_ CAN_TX_TEMPERATURE : 31|8@0- (1,0) [-128|127] "degC" Vector__XXX
- SG_ CAN_TX_SW_VERSION_DSP : 55|16@0+ (1,0) [0|65535] "" Vector__XXX
- SG_ CAN_TX_STEERING_ANGLE_ACK : 10|11@0+ (1,0) [0|2047] "deg" Vector__XXX
- SG_ CAN_TX_ROLLING_COUNT_2 : 1|2@0+ (1,0) [0|3] "" Vector__XXX
- SG_ CAN_TX_RAW_DATA_MODE : 11|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_RANGE_PERF_ERROR : 14|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_OVERHEAT_ERROR : 15|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_MAXIMUM_TRACKS_ACK : 7|6@0+ (1,1) [1|64] "" Vector__XXX
- SG_ CAN_TX_INTERNAL_ERROR : 13|1@0+ (1,0) [0|1] "" Vector__XXX
- SG_ CAN_TX_GROUPING_MODE : 33|2@0+ (1,0) [0|3] "" Vector__XXX
-
-BO_ 1248 ESR_Status: 8 ESR
- SG_ CAN_TX_COMM_ERROR : 14|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CAN_TX_RADIUS_CURVATURE_CALC : 13|14@0- (1,0) [-8192|8191] "" Vector__XXX
- SG_ CAN_TX_YAW_RATE_CALC : 47|12@0- (0.0625,0) [-128|127.9375] "deg/s" Vector__XXX
- SG_ CAN_TX_VEHICLE_SPEED_CALC : 50|11@0+ (0.0625,0) [0|127.9375] "m/s" Vector__XXX
- SG_ CAN_TX_DSP_TIMESTAMP : 5|7@0+ (2,0) [0|254] "ms" Vector__XXX
- SG_ CAN_TX_SCAN_INDEX : 31|16@0+ (1,0) [0|65535] "" Vector__XXX
- SG_ CAN_TX_ROLLING_COUNT_1 : 6|2@1+ (1,0) [0|3] "" Vector__XXX
-
-
-
-BA_DEF_ "BusType" STRING ;
-BA_DEF_DEF_ "BusType" "CAN";
-VAL_ 1264 CAN_RX_YAW_RATE_VALIDITY 1 "Valid" 0 "Invalid" ;
-VAL_ 1264 CAN_RX_VEHICLE_SPEED_DIRECTION 1 "Reverse" 0 "Forward" ;
-VAL_ 1264 CAN_RX_STEERING_VALIDITY 1 "True" 0 "False" ;
-VAL_ 1264 CAN_RX_STEERING_ANGLE_SIGN 1 "Right Clockwise" 0 "Left CounterClockwise" ;
-VAL_ 1264 CAN_RX_STEERING_ANGLE_RATE_SIGN 1 "Right Clockwise" 0 "Left CounterClockwise" ;
-
diff --git a/opendbc/README.md b/opendbc/README.md
deleted file mode 100644
index eec42dfefa7ff2..00000000000000
--- a/opendbc/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-opendbc
-======
-
-The project to democratize access to the decoder ring of your car.
-
-
-
-### DBC file basics
-
-A DBC file encodes, in a humanly readable way, the information needed to understand a vehicle's CAN bus traffic. A vehicle might have multiple CAN buses and every CAN bus is represented by its own dbc file.
-Wondering what's the DBC file format? [Here](http://www.socialledge.com/sjsu/index.php?title=DBC_Format) and [Here](https://github.com/stefanhoelzl/CANpy/blob/master/docs/DBC_Specification.md) a couple of good overviews.
-
-### How to start reverse engineering cars
-
-[opendbc](https://github.com/commaai/opendbc) is integrated with [cabana](https://community.comma.ai/cabana/).
-
-Use [panda](https://github.com/commaai/panda) to connect your car to a computer.
-
-### DBC file preprocessor
-
-DBC files for different models of the same brand have a lot of overlap. Therefore, we wrote a preprocessor to create DBC files from a brand DBC file and a model specific DBC file. The source DBC files can be found in the generator folder. After changing one of the files run the generator.py script to regenerate the output files. These output files will be placed in the root of the opendbc repository and are suffixed by _generated.
-
-### Good practices for contributing to opendbc
-
-- Comments: the best way to store comments is to add them directly to the DBC files. For example:
- ```
- CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
- ```
- is a comment that refers to signal `LONG_ACCEL` in message `490`. Using comments is highly recommended, especially for doubts and uncertainties. [cabana](https://community.comma.ai/cabana/) can easily display/add/edit comments to signals and messages.
-
-- Units: when applicable, it's recommended to convert signals into physical units, by using a proper signal factor. Using a SI unit is preferred, unless a non-SI unit rounds the signal factor much better.
-For example:
- ```
- SG_ VEHICLE_SPEED : 7|15@0+ (0.00278,0) [0|70] "m/s" PCM
- ```
- is better than:
- ```
- SG_ VEHICLE_SPEED : 7|15@0+ (0.00620,0) [0|115] "mph" PCM
- ```
- However, the cleanest option is really:
- ```
- SG_ VEHICLE_SPEED : 7|15@0+ (0.01,0) [0|250] "kph" PCM
- ```
-
-- Signal's size: always use the smallest amount of bits possible. For example, let's say I'm reverse engineering the gas pedal position and I've determined that it's in a 3 bytes message. For 0% pedal position I read a message value of `0x00 0x00 0x00`, while for 100% of pedal position I read `0x64 0x00 0x00`: clearly, the gas pedal position is within the first byte of the message and I might be tempted to define the signal `GAS_POS` as:
- ```
- SG_ GAS_POS : 7|8@0+ (1,0) [0|100] "%" PCM
- ```
- However, I can't be sure that the very first bit of the message is referred to the pedal position: I haven't seen it changing! Therefore, a safer way of defining the signal is:
- ```
- SG_ GAS_POS : 6|7@0+ (1,0) [0|100] "%" PCM
- ```
- which leaves the first bit unallocated. This prevents from very erroneous reading of the gas pedal position, in case the first bit is indeed used for something else.
diff --git a/opendbc/acura_ilx_2016_can_generated.dbc b/opendbc/acura_ilx_2016_can_generated.dbc
index 75557b1e709f85..361a75ceccc1e4 100644
--- a/opendbc/acura_ilx_2016_can_generated.dbc
+++ b/opendbc/acura_ilx_2016_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "acura_ilx_2016_can.dbc starts here"
+CM_ "acura_ilx_2016_can.dbc starts here";
@@ -268,10 +280,11 @@ BO_ 342 STEERING_SENSORS: 6 EPS
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/acura_rdx_2018_can_generated.dbc b/opendbc/acura_rdx_2018_can_generated.dbc
index 0fa62693c2b221..895e11f0071b13 100644
--- a/opendbc/acura_rdx_2018_can_generated.dbc
+++ b/opendbc/acura_rdx_2018_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "acura_rdx_2018_can.dbc starts here"
+CM_ "acura_rdx_2018_can.dbc starts here";
@@ -256,8 +268,8 @@ BO_ 392 GEARBOX: 6 XXX
SG_ GEAR : 36|5@0+ (1,0) [0|31] "" EON
BO_ 399 STEER_STATUS: 6 EPS
- SG_ STEER_TORQUE_SENSOR : 7|12@0- (1,0) [-2047.5|2047.5] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|12@0- (-1,0) [-2047.5|2047.5] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 35|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 36|1@0+ (1,0) [0|1] "" EON
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/acura_rdx_2020_can_generated.dbc b/opendbc/acura_rdx_2020_can_generated.dbc
new file mode 100644
index 00000000000000..d3c8f7c0032286
--- /dev/null
+++ b/opendbc/acura_rdx_2020_can_generated.dbc
@@ -0,0 +1,433 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _bosch_2020.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 228 STEERING_CONTROL: 5 EON
+ SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
+ SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
+ SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
+ SG_ STEER_TORQUE : 7|16@0- (1,0) [-4096|4096] "" EPS
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 232 BRAKE_HOLD: 7 XXX
+ SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
+ SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
+ SG_ COMPUTER_BRAKE_REQUEST : 29|1@0+ (1,0) [0|0] "" XXX
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 342 STEERING_SENSORS: 6 EPS
+ SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
+
+BO_ 344 ENGINE_DATA: 8 PCM
+ SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 380 POWERTRAIN_DATA: 8 PCM
+ SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 399 STEER_STATUS: 7 EPS
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
+ SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
+
+BO_ 420 VSA_STATUS: 8 VSA
+ SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
+BO_ 450 EPB_STATUS: 8 EPB
+ SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
+ SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 464 WHEEL_SPEEDS: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 479 ACC_CONTROL: 8 EON
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
+ SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 495 ACC_CONTROL_ON: 8 XXX
+ SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ ZEROS_BOH : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ ZEROS_BOH2 : 47|16@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_FF : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_3 : 6|7@0+ (1,0) [0|4095] "" XXX
+ SG_ CONTROL_ON : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 545 XXX_16: 6 SCM
+ SG_ ECON_ON : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ DRIVE_MODE : 37|2@0+ (1,0) [0|3] "" XXX
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
+ SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
+ SG_ LONG_COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
+ BO_ 662 SCM_BUTTONS: 4 SCM
+ SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
+ SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" EON
+
+BO_ 773 SEATBELT_STATUS: 7 BDY
+ SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 777 CAR_SPEED: 8 PCM
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 780 ACC_HUD: 8 ADAS
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
+ SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
+ SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
+ SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
+ SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
+ SG_ ZEROS_BOH : 7|24@0+ (0.002759506,0) [0|100] "m/s" BDY
+ SG_ FCM_OFF : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_TO_1 : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
+ SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
+ SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 804 CRUISE: 8 PCM
+ SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 806 SCM_FEEDBACK: 8 SCM
+ SG_ DRIVERS_DOOR_OPEN : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" EON
+ SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" EON
+ SG_ CMBS_STATES : 22|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 829 LKAS_HUD: 5 ADAS
+ SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
+ SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
+ SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
+ SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
+ SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
+ SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
+ SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
+ SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 862 CAMERA_MESSAGES: 8 CAM
+ SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
+ SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
+ SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ ZEROS_BOH_2 : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 884 STALK_STATUS: 8 XXX
+ SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
+ SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
+ SG_ WIPER_SWITCH : 53|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 891 STALK_STATUS_2: 8 XXX
+ SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
+ SG_ LOW_BEAMS : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ HIGH_BEAMS : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ PARK_LIGHTS : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
+VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
+
+CM_ "acura_rdx_2020_can.dbc starts here";
+
+
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 419 GEARBOX: 8 PCM
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
+ SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
+
+BO_ 432 STANDSTILL: 7 VSA
+ SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
+
+BO_ 446 BRAKE_MODULE: 3 VSA
+ SG_ BRAKE_PRESSED : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 927 RADAR_HUD: 8 RADAR
+ SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
+ SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
+ SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
+ SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 1302 ODOMETER: 8 XXX
+ SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+VAL_ 419 GEAR_SHIFTER 32 "D" 8 "R" 4 "P" ;
+VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
+VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
+VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
+VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
+VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
+VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
+
+CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/cadillac_ct6_chassis.dbc b/opendbc/cadillac_ct6_chassis.dbc
deleted file mode 100644
index 9de969d762f9a2..00000000000000
--- a/opendbc/cadillac_ct6_chassis.dbc
+++ /dev/null
@@ -1,95 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: K182_PACM K43_PSCM K17_EBCM NEO K124_ASCM
-
-
-
-BO_ 823 PACMParkAssitCmd: 7 NEO
- SG_ RollingCounter : 35|2@0+ (1,0) [0|0] "" NEO
- SG_ SteeringWheelChecksum : 47|16@0+ (1,0) [0|0] "" NEO
- SG_ SteeringWheelCmd : 23|16@0+ (1,0) [0|0] "" NEO
-
-BO_ 560 EBCMRegen: 6 K17_EBCM
- SG_ Regen : 1|10@0+ (1,0) [0|0] "" NEO
-
-BO_ 338 ASCMLKASteeringCmd: 6 NEO
- SG_ LKASteeringCmdActive : 7|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmd : 5|14@0- (1,0) [0|0] "" NEO
- SG_ RollingCounter : 23|2@0+ (1,0) [0|0] "" NEO
- SG_ SetMe1 : 21|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASVehicleSpeed : 20|13@0+ (0.22,0) [0|0] "kph" NEO
- SG_ LKASMode : 36|2@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmdChecksum : 33|10@0+ (1,0) [0|0] "" NEO
-
-BO_ 340 ASCMBLKASteeringCmd: 6 NEO
- SG_ LKASteeringCmdActive : 7|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmd : 5|14@0- (1,0) [0|0] "" NEO
- SG_ RollingCounter : 23|2@0+ (1,0) [0|0] "" NEO
- SG_ SetMe1 : 21|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASVehicleSpeed : 20|13@0+ (0.22,0) [0|0] "kph" NEO
- SG_ LKASteeringCmdActive2 : 35|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmdChecksum : 33|10@0+ (1,0) [0|0] "" NEO
-
-BO_ 368 EBCMFrictionBrakeStatus: 8 K17_EBCM
- SG_ FrictionBrakePressure : 23|16@0+ (1,0) [0|0] "" NEO
-
-BO_ 789 EBCMFrictionBrakeCmd: 5 K17_EBCM
- SG_ RollingCounter : 37|6@0+ (1,0) [0|0] "" NEO
- SG_ FrictionBrakeMode : 7|4@0+ (1,0) [0|0] "" NEO
- SG_ FrictionBrakeChecksum : 23|16@0+ (1,0) [0|0] "" NEO
- SG_ FrictionBrakeCmd : 3|12@0- (1,0) [0|0] "" NEO
-
-BO_TX_BU_ 823 : K43_PSCM,NEO;
-BO_TX_BU_ 789 : NEO,K17_EBCM;
-
-
-CM_ BU_ K182_PACM "Parking Assist Control Module";
-CM_ BU_ K43_PSCM "Power Steering Control Module";
-CM_ BU_ K17_EBCM "Electronic Brake Control Module";
-CM_ BU_ NEO "Comma NEO";
-CM_ BU_ K124_ASCM "Active Safety Control Module";
-BA_DEF_ "UseGMParameterIDs" INT 0 0;
-BA_DEF_ "ProtocolType" STRING ;
-BA_DEF_ "BusType" STRING ;
-BA_DEF_DEF_ "UseGMParameterIDs" 1;
-BA_DEF_DEF_ "ProtocolType" "GMLAN";
-BA_DEF_DEF_ "BusType" "";
-BA_ "UseGMParameterIDs" 0;
-BA_ "BusType" "CAN";
-BA_ "ProtocolType" "GMLAN";
-
-VAL_ 338 LKASteeringCmdActive 1 "Active" 0 "Inactive" ;
-VAL_ 338 LKASMode 2 "supercruise" 1 "lkas" 0 "Inactive" ;
diff --git a/opendbc/cadillac_ct6_object.dbc b/opendbc/cadillac_ct6_object.dbc
deleted file mode 100644
index d83ae672b16307..00000000000000
--- a/opendbc/cadillac_ct6_object.dbc
+++ /dev/null
@@ -1,3470 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: RRSRR_FO LRSRR_FO CIPM_FO _DOFIMU2_FO _DOFIMU1_FO DMS_FO AMM_FO EOCM2B_IMX6_FO EOCM2B_K2_FO EOCM2B_K1_FO EOCM2A_IMX6_FO EOCM2A_K2_FO EOCM2A_K1_FO NVS_FO Dummy_FO TestTool_FO LRR_FO RFSRR_FO LFSRR_FO RSRR_FO VIS_FO EOCM_F_FO VIS2_FO
-VAL_TABLE_ vt_BooleanValues 1 "true" 0 "false" ;
-VAL_TABLE_ FrntVsnInPthVehBrkNwSt 10 "Active" 5 "Inactive" ;
-VAL_TABLE_ FrntVsnClostPedBrkNwSt 10 "Active" 5 "Inactive" ;
-VAL_TABLE_ DrvrMonSysEngSt 7 "Unused and Reserved 1" 6 "Recovering" 5 "Tracking" 4 "Searching" 3 "Video test port only" 2 "Idle" 1 "Invalid state" 0 "Does not exist or DME" ;
-VAL_TABLE_ DrvrMonEngUnrecvrFltCod 7 "Unused and Reserved 3" 6 "Unused and Reserved 2" 5 "Unused and Reserved 1" 4 "Vehicle power supply Errors" 3 "Problem with LED illuminators" 2 "Vehicle input signals Errors" 1 "Problem with imager" 0 "Ok" ;
-VAL_TABLE_ DrvrMonEngRecvrFltCod 3 "Engine is unable to find a face" 2 "Input Images too dark" 1 "Input images too bright" 0 "Ok" ;
-VAL_TABLE_ DrvrMntrSysVTP 1 "Video test port active" 0 "Video test port inactive" ;
-VAL_TABLE_ DrvrAttnStatCnfdc 3 "High" 2 "Medium" 1 "Low" 0 "Lowest" ;
-VAL_TABLE_ DrvrAttnStat 7 "Invalid" 6 "Driver is exhibiting sleep" 5 "Driver is exhibiting microsleep" 4 "Attention is Center Console" 3 "Attention is Drivers Lap" 2 "Attention is Off Road" 1 "Attention is On Road" 0 "Unknown" ;
-VAL_TABLE_ PPSMd 7 "GNSS and RTX and DR and MM" 6 "DR ONLY" 5 "GNSS and RTX and DR" 4 "GNSS and SBAS and DR" 3 "GNSS and DR" 2 "GNSS and RTX" 1 "GNSS and SBAS" 0 "GNSS Standalone" ;
-VAL_TABLE_ AdvDrvAstMpPrfShrtAcur 3 "Accuracy Is Unknown" 2 "Lowest Accuracy" 1 "Medium Accuracy" 0 "Highest Accuracy" ;
-VAL_TABLE_ AdvDrAstMpStbRtOfWay 3 "Not Applicable" 2 "Unknown" 1 "Sub Path Has Right Of Way Over Path" 0 "Path Has Right Of Way Over Sub Path" ;
-VAL_TABLE_ AdvDrAstMpStbPrtCalRut 3 "Not Applicable" 2 "Unknown" 1 "Path From This Point On Is Part Of Calculated Route" 0 "Path From This Point On Is Not Part Of Calculated Route" ;
-VAL_TABLE_ AdvDrAstMpStbMsgTyp 7 "Unused and Reserved 2" 6 "Metadata" 5 "Profile Long" 4 "Profile Short" 3 "Stub" 2 "Segment" 1 "Position" 0 "Unused and Reserved 1" ;
-VAL_TABLE_ AdvDrAstMpStbFmOfWay 15 "Not Applicable" 14 "Pedestrian Zone" 13 "Entrance To Or Exit To Service" 12 "Entrance To Or Exit Of A Car Park" 11 "Service Road Or Frontage Road" 10 "Slip Road per Ramp" 9 "Slip Road per Ramp On A Freeway Or Controlled Access Road" 8 "Parallel Road" 7 "Unused and Reserved 2" 6 "Unused and Reserved 1" 5 "Traffic Square per Special Traffic Figure" 4 "Roundabout Circle" 3 "Single Carriageway" 2 "Multiple Carriageway Or Multiply Digitized Road" 1 "Freeway Or Controlled Access Road That Is Not A Slip Road Or Ramp" 0 "Unknown" ;
-VAL_TABLE_ AdvDrAstMpStbCmplxInsct 3 "Not Applicable" 2 "Unknown" 1 "Stub Is Part Of Complex Intersection" 0 "Stub Is Not Part Of Complex Intersection" ;
-VAL_TABLE_ AdvDrAstMpSegTunl 3 "Not Applicable" 2 "Unknown" 1 "Segment Is Part Of Tunnel" 0 "Segment Is Not A Part Of Tunnel" ;
-VAL_TABLE_ AdvDrAstMpSegPrtCalRut 3 "Not Applicable" 2 "Unknown" 1 "Segment Is Part Of Calculated Route" 0 "Segment Is Not Part Of Calculated Route" ;
-VAL_TABLE_ AdvDrAstMpSegMsgTyp 7 "Unused and Reserved 2" 6 "Metadata" 5 "Profile Long" 4 "Profile Short" 3 "Stub" 2 "Segment" 1 "Position" 0 "Unused and Reserved 1" ;
-VAL_TABLE_ AdvDrAstMpSegFrmOfWay 15 "Not Applicable" 14 "Pedestrian Zone" 13 "Entrance To Or Exit To Service" 12 "Entrance To Or Exit Of A Car Park" 11 "Service Road Or Frontage Road" 10 "Slip Road per Ramp" 9 "Slip Road per Ramp On A Freeway Or Controlled Access Road" 8 "Parallel Road" 7 "Unused and Reserved 2" 6 "Unused and Reserved 1" 5 "Traffic Square per Special Traffic Figure" 4 "Roundabout Circle" 3 "Single Carriageway" 2 "Multiple Carriageway Or Multiply Digitized Road" 1 "Freeway Or Controlled Access Road That Is Not A Slip Road or Ramp" 0 "Unknown" ;
-VAL_TABLE_ AdvDrAstMpSegEffSdLmtTp 7 "Not Applicable" 6 "Explicit Snow" 5 "Explicit Rain" 4 "Explicit Time Of Day" 3 "Explicit By Day" 2 "Explicit By Night" 1 "Explicit On Traffic Sign" 0 "Implicit" ;
-VAL_TABLE_ AdvDrAstMpSegDivdRd 3 "Not Applicable" 2 "Unkown" 1 "Segment Is Part Of Divided Road" 0 "Segment Is Not Part Of Divided Road" ;
-VAL_TABLE_ AdvDrAstMpSegCmplxInsct 3 "Not Applicable" 2 "Unknown" 1 "Segment Is Part Of Complex Intersection" 0 "Segment Is Not Part Of Complex Intersection" ;
-VAL_TABLE_ AdvDrAstMpSegBrdg 3 "Not Applicable" 2 "Unknown" 1 "Segment Is Part Of Bridge" 0 "Segment Not Part Of Bridge" ;
-VAL_TABLE_ AdvDrAstMpSegBldUpAra 3 "Not Applicable" 2 "Unknown" 1 "Segment Is Part Of Built Up Area" 0 "Segment Is Not Part Of Built Up Area" ;
-VAL_TABLE_ AdvDrAstMpMtdtSpdUnt 1 "Miles Per Hour" 0 "Kilometers Per Hour" ;
-VAL_TABLE_ AdvDrAstMpMtdtDrvSd 1 "Driving Side Right" 0 "Driving Side Left" ;
-VAL_TABLE_ WSMR_WiFiAssnReq 3 "Unexpected Undefined Connection Behavior" 2 "Wi Fi association failed with available credentials" 1 "Failed to receive Wi Fi credentials after 255 attempts" 0 "SSID and Passphrase Request" ;
-VAL_TABLE_ StrgColCommsFlt 2 "Disabled Communications DTC" 1 "No Communications Fault" 0 "Communications Fault" ;
-VAL_TABLE_ CPMAPINFO4 1 "Hardware Or Software Error" 0 "No Hardware Or Software Error" ;
-VAL_TABLE_ AdvDrvAstMpPrfShrt2Acur 3 "Accuracy Is Unknown" 2 "Lowest Accuracy" 1 "Medium Accuracy" 0 "Highest Accuracy" ;
-VAL_TABLE_ InterLghtStat 1 "Interior Lights On" 0 "Interior Light Off" ;
-VAL_TABLE_ VehLnStatConf 2 "High Confidence" 1 "Low Confidence" 0 "No Confidence" 3 "Very High Confidence" ;
-VAL_TABLE_ VehLnStat 3 "Lane Change To Right" 2 "Lane Change To Left" 1 "Staying in Lane" 0 "Unkown" ;
-VAL_TABLE_ HrznPrvdRstRq 1 "Reset Not Required" 0 "Reset Required" ;
-VAL_TABLE_ ExptNxtTrnstnDirConf 3 "Very High Confidence" 2 "High Confidence" 1 "Low Confidence" 0 "No Confidence" ;
-VAL_TABLE_ ExptNxtTrnstnDir 7 "Reserved4" 6 "Reserved3" 5 "Reserved2" 4 "Reserved1" 3 "Traversing Middle Transition" 2 "Traversing Next Transition Right" 1 "Traversing Next Transition Left" 0 "Unknown" ;
-VAL_TABLE_ ADASISMsgTypRetrans 7 "GM System Specific" 6 "Meta Data" 5 "Profile Long" 4 "Profile Short" 3 "Stub" 2 "Segment" 1 "Position" 0 "Checksum" ;
-VAL_TABLE_ NVSysStat 7 "Needs Headlights" 6 "Temporarily Unavailable" 5 "Not Dark" 4 "Needs Service" 3 "Active" 2 "Inactive" 1 "Initializing" 0 "Unknown" ;
-VAL_TABLE_ NVSysPedWrnIndReq 3 "Unused & Reserved" 2 "Pedestrian Alert" 1 "Pedestrian Detected" 0 "None" ;
-VAL_TABLE_ NVSysPedDetCstReq 2 "On" 1 "Off" 0 "No Value" ;
-VAL_TABLE_ NVSysPedDetCsCrStVal 2 "On" 1 "Off" 0 "No Value" ;
-VAL_TABLE_ FwVsnCinCoutPotT9Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT8Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT7Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT6Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT5Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT4Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT3Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT2Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT1Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT12Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT11Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ FwVsnCinCoutPotT10Rev 2 "Right" 1 "Left" 0 "None" ;
-VAL_TABLE_ GFHBObjDirTrk8 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk7 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk6 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk5 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk4 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk3 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk2 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBObjDirTrk1 1 "Ahead Traffic" 0 "Incoming Traffic" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk8 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk7 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk6 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk5 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk4 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk3 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk2 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnRelLaneTrk1 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk8 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk7 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk6 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk5 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk4 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk3 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk2 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnMesStatTrk1 3 "Measured this cycle" 2 "Latent track not detected this cycle" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk8 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk7 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk6 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk5 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk4 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk3 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk2 3 "Confident" 2 "Speculative" 1 "Highly Speculative" 0 "Invalid" ;
-VAL_TABLE_ GFHBFwVsnCnfdncTrk1 0 "Invalid" 3 "Confident" 2 "Speculative" 1 "Highly Speculative" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev8 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev7 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev6 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev5 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev4 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev3 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev2 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car)" 0 "Unknown" ;
-VAL_TABLE_ GFHBFVsnObjTypTrkRev1 12 "Cluster Object" 11 "Child Close to Danger Zone" 10 "Pedestrian Moving Out of Danger Zone" 9 "Pedestrian Moving Into Danger Zone" 8 "Pedestrian Standing Outside Danger Zone" 7 "No Object Present" 6 "Fixed Roadside Object" 5 "Fixed Overhead Object" 4 "Pedestrian" 3 "Motorcycle/ Bicycle" 2 "Large Vehicle (Semi)" 1 "4 Wheel Vehicle (Car" 0 "Unknown" ;
-VAL_TABLE_ CRL_Cnfdnc 7 "Reserved4" 6 "Reserved3" 5 "Reserved2" 4 "Reserved1" 3 "Best" 2 "Marking Present" 1 "Weak Marking" 0 "No Lane" ;
-VAL_TABLE_ CLL_Cnfdnc 7 "Reserved4" 6 "Reserved3" 5 "Reserved2" 4 "Reserved1" 3 "Best" 2 "Marking Present" 1 "Weak Marking" 0 "No Lane" ;
-VAL_TABLE_ VBBrkCtrlSt 4 "Release Control" 3 "Hold Vehicle" 2 "Apply Brake" 1 "Decrease Torque" 0 "No Action" ;
-VAL_TABLE_ ObstacleType 6 "NO_OBJECT" 5 "OBJ_GUARDRAIL" 4 "OBJ_TUNNEL " 3 "OBJ_TRAFFIC_SIGN" 2 "OBJ_VEHICLE" 1 "OBJ_BRIDGE " 0 "OBJ_UNKNOWN" ;
-VAL_TABLE_ VpathMode 2 "Mid Hi Spped" 1 "Low Speed" 0 "Disabled" ;
-VAL_TABLE_ LaneChngStatus 2 "Lane Change Right" 1 "Lane Change Left" 0 "Idle" ;
-VAL_TABLE_ TravelDirection 3 "Other (excessive side slip)" 2 "reverse / stopped in rvrs gear" 1 "Forward / stopped in frwd gear" 0 "Unknown" ;
-VAL_TABLE_ TrueOrFalse 1 "true" 0 "false" ;
-VAL_TABLE_ ModeCommand 5 "Sensing with Reduced Power" 4 "Undefined" 3 "Radio Silent" 2 "Sensing" 1 "Not Sensing" 0 "Undefined" ;
-VAL_TABLE_ LaneSnsLLnPosValid 1 "Invalid" 0 "Valid" ;
-VAL_TABLE_ LnSnsRLnPosValid 1 "Invalid" 0 "Valid" ;
-VAL_TABLE_ Elevation 3 "Low " 2 "mid (reserved)" 1 "high " 0 "Unknown" ;
-VAL_TABLE_ ModeCommandFdbk 5 "Sensing with reduced power" 4 "Undefined" 3 "Radio Silent" 2 "Sensing" 1 "Not Sensing" 0 "Undefined" ;
-VAL_TABLE_ relativeLane 3 "Left Lane" 2 "Right Lane" 1 "Host Lane" 0 "Unknown" ;
-VAL_TABLE_ RoadTypeInfo 5 "Constiction Zone Exit" 4 "Construction Zone Entry" 3 "Highway" 2 "Secondary Road" 1 "City" 0 "Unknown" ;
-VAL_TABLE_ ObjectLossInfo 2 "elevation conditions" 1 "tight curve" 0 "not lost" ;
-VAL_TABLE_ MeasurementStatus 3 "Measured this cycle" 2 "Latent track not detctd this cyc" 1 "New Object" 0 "No Object" ;
-VAL_TABLE_ ObjectType 7 "no object present" 6 "fixed roadside object" 5 "fixed overhead object" 4 "pedestrian" 3 "motocycle / bicycle" 2 "Large vehicle (semi)" 1 "4 Wheel Vehicle (car, small trk)" 0 "Unknown" ;
-VAL_TABLE_ Confidence 3 "confident" 2 "speculative" 1 "highly speculative" 0 "invalid" ;
-VAL_TABLE_ DynamicProp 4 "Moving in opposite direction" 3 "Moving in same direction as host" 2 "Has moved but currently stopped" 1 "Has never moved" 0 "Unknown" ;
-VAL_TABLE_ DrvWndPosSt 6 "Fully Opened" 5 "Open More Than C" 4 "Position C" 3 "Posistion B" 2 "Posistion A" 1 "Open Less Than A" 0 "Fully Closed" ;
-VAL_TABLE_ VehMovSta 4 "Invalid" 3 "Reverse" 2 "Forward" 1 "Neutral" 0 "Parked" ;
-VAL_TABLE_ OtsdAmbtLtLvlStat 2 "Day" 1 "Night" 0 "Unknown" ;
-VAL_TABLE_ RtTrnLmpAtv 2 "On with telltale" 1 "On without telltale" 0 "Off" ;
-VAL_TABLE_ LftTrnLmpAtv 2 "On with telltale" 1 "On without telltale" 0 "Off" ;
-VAL_TABLE_ HdlmpBmSelectStat 2 "High Beams" 1 "Low Beams" 0 "Unknown" ;
-VAL_TABLE_ DTCI_DTCFaultType 3 "Type C" 2 "Type B" 1 "Type A" 0 "Not Supported" ;
-VAL_TABLE_ TrnsShftLvrPos 13 "Forward Range J" 12 "Froward Range I" 15 "Lever Position Unknown" 11 "Forward Range H" 10 "Forward Range G" 9 "Forward Range F" 8 "Forward Range E" 7 "Forward Range D" 6 "Forward Range C" 5 "Forward Range B" 4 "Forward Range A" 3 "Neutral Range" 2 "Reverse Range" 1 "Park Range" 0 "Between Ranges" ;
-VAL_TABLE_ SysPwrMd 3 "Crank Request" 2 "Run" 1 "Accessory" 0 "Off" ;
-VAL_TABLE_ ValidityStates 1 "Invalid" 0 "Valid" ;
-
-
-BO_ 1548 ADAS_Profile_Short2_FO: 8 AMM_FO
- SG_ AdvDrvAstMpPrfShrt2Val1 : 1|10@0+ (1,0) [0|1023] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2Val0 : 33|10@0+ (1,0) [0|1023] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2Updt : 39|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2RTrns : 3|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2Typ : 38|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2PthIdx : 23|6@0+ (1,0) [0|63] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2Ofst : 52|13@0+ (1,0) [0|8191] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2MsgTp : 55|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2Dist1 : 17|10@0+ (1,0) [0|1023] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2CycCnt : 7|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2CtlPt : 2|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpPrfShrt2Acur : 5|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 1547 ADAS_Profile_Long2_FO: 8 AMM_FO
- SG_ AdvDrAstMpProfLng2Val : 39|32@0+ (1,0) [0|4294967295] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2Updt : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2RTrns : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2PrfTyp : 4|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2PthIdx : 13|6@0+ (1,0) [0|63] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2Ofst : 20|13@0+ (1,0) [0|8191] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2MgTyp : 23|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2CycCt : 15|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLng2CtrlPt : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 1630 USDT_Resp_From_EOCM2B_K2_FO: 8 EOCM2B_K2_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1374 UUDT_Resp_From_EOCM2B_K2_FO: 8 EOCM2B_K2_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 606 USDT_Req_to_EOCM2B_K2_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" EOCM2B_K2_FO
-
-BO_ 328 Vehicle_Info_FO: 5 EOCM2A_K1_FO
- SG_ StrWhAngGrd : 27|12@0- (1,0) [-2048|2047] "deg/sec" DMS_FO
- SG_ TrnsShftLvrPos : 31|4@0+ (1,0) [0|15] "" DMS_FO
- SG_ StrWhAng_148 : 15|16@0- (0.0625,0) [-2048|2047.9375] "deg" DMS_FO
- SG_ TrnsShftLvrPosV : 3|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ StrWhAngV_148 : 4|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ StrWhAngMsk_148 : 5|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ StrWhAngGrdV : 6|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ StrWhAngGrdMsk : 7|1@0+ (1,0) [0|1] "" DMS_FO
-
-BO_ 1930 DTC_Triggered_78A_FO: 7 LRSRR_FO
- SG_ DTCI_CodeSupported_78A : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_78A : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_78A : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_78A : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_78A : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_78A : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_78A : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_78A : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_78A : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_78A : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_78A : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_78A : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_78A : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_78A : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_78A : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_78A : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_78A : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_78A : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_78A : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_78A : 47|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1624 USDT_Resp_From_LRSRR: 8 LRSRR_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1368 UUDT_Resp_From_LRSRR: 8 LRSRR_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 600 USDT_Req_to_LRSRR: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" LRSRR_FO
-
-BO_ 613 PPS_QualMetrics_FO: 8 EOCM2A_K1_FO
- SG_ PPSPstnDilPrcs : 47|10@0+ (0.1,0) [0|102.3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSMd : 53|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPS3DAbsPosErrEstmt : 9|10@0+ (0.1,0) [0|102.3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSAbsHdngErrEstmt : 0|7@0+ (0.5,0) [0|63.5] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSAbsVelErrEstmt : 30|5@0+ (1,0) [0|31] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSPosQltyMtrcsChksm : 50|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPS2DAbsPosErrEstmt : 25|10@0+ (0.1,0) [0|102.3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSPosQltyMtcBrstID : 2|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPS2DAbsPosErrEstmtV : 5|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPS3DAbsPosErrEstmtV : 4|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSAbsHdngErrEstmtV : 3|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSAbsVelErrEstmtV : 31|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSMdV : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSPstnDilPrcsV : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
-
-BO_ 612 PPS_Time_FO: 8 EOCM2A_K1_FO
- SG_ PPSTmdayV : 2|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSCldrDayV : 0|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSCldrDay : 8|9@0+ (1,0) [0|511] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSTmBrstID : 52|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSTmday : 31|27@0+ (1,0) [0|134217727] "ms" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSTmChksm : 50|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSCldrYrV : 1|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSCldrYr : 15|7@0+ (1,2014) [2014|2141] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
-
-BO_ 611 PPS_SigAcqTime_FO: 6 EOCM2A_K1_FO
- SG_ PPSSigAqTmBrstID : 38|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSSigAcqTmV : 39|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSSigAcqTm : 7|32@0+ (1,0) [0|4294967295] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSSigAqTmChksm : 34|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
-
-BO_ 610 PPS_PosLong_FO: 6 EOCM2A_K1_FO
- SG_ PPSLongBrstID : 39|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSLong : 6|31@0- (1,0) [-1073741824|1073741823] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSLongV : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSLongChksm : 34|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
-
-BO_ 609 PPS_PosLat_FO: 6 EOCM2A_K1_FO
- SG_ PPSLatV : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSLatChksm : 34|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSLatBrstID : 36|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSLat : 5|30@0- (1,0) [-536870912|536870911] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
-
-BO_ 1160 PassPhrase_3_AMM_FO: 8 EOCM2A_K1_FO
- SG_ WiFiPssPhrsDgts17to24_Mp : 7|64@0+ (1,0) [0|0] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 1159 PassPhrase_2_AMM_FO: 8 EOCM2A_K1_FO
- SG_ WiFiPssPhrsDgts9to16_Mp : 7|64@0+ (1,0) [0|0] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 1158 PassPhrase_1_AMM_FO: 8 EOCM2A_K1_FO
- SG_ WiFiPssPhrsDgts1to8_Mp : 7|64@0+ (1,0) [0|0] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 1546 ADAS_Protection_FO: 4 AMM_FO
- SG_ AdvDrAstMpPrfLng2Avbl : 11|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPosAvbl : 15|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpHwFlt : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtAvbl : 8|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpProtChksm : 23|16@0+ (1,0) [0|65535] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpProtRTrns : 0|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpProtCycCtMsg : 2|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbAvbl : 9|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpSegAvbl : 10|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfShrtAvbl : 14|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfShrt2Avbl : 13|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrAstMpPrfLngAvbl : 12|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ AdvDrvAstMpInpSigFld : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 1545 ADAS_Metadata_FO: 8 AMM_FO
- SG_ AdvDrAstMpMtdtVerYrQtr : 60|2@0+ (1,1) [1|4] "Qtr" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtVerYr : 53|6@0+ (1,2000) [2000|2063] "Year" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtSpdUnt : 39|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtPrvdr : 7|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtMsgTyp : 58|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtMnrPrtVr : 23|4@0+ (1,0) [0|15] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtCycCnt : 18|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtRgnCd : 38|15@0+ (1,0) [0|32767] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtHwVer : 16|9@0+ (1,0) [0|511] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtMnrPrtSbVr : 4|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtMjrPrtVr : 55|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtDrvSd : 19|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpMtdtCntryCd : 1|10@0+ (1,0) [0|1023] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 1543 ADAS_Profile_Long_FO: 8 AMM_FO
- SG_ AdvDrAstMpPrfLngUpdt : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngRTrns : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngCtlPt : 5|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngTyp : 4|5@0+ (1,0) [0|31] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngCycCt : 15|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngPthIdx : 13|6@0+ (1,0) [0|63] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngMsgTp : 23|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngOfst : 20|13@0+ (1,0) [0|8191] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPrfLngVal : 39|32@0+ (1,0) [0|4294967295] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 1544 ADAS_Profile_Short_FO: 8 AMM_FO
- SG_ AdvDrvAstMpPrfShrtVal1 : 1|10@0+ (1,0) [0|1023] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtVal0 : 33|10@0+ (1,0) [0|1023] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtDist1 : 17|10@0+ (1,0) [0|1023] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtCycCnt : 7|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtAcur : 5|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtCtlPt : 2|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtRetr : 3|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtTyp : 38|5@0+ (1,0) [0|31] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtUpdt : 39|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtPthIdx : 23|6@0+ (1,0) [0|63] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtMsgTp : 55|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrvAstMpPrfShrtOfst : 52|13@0+ (1,0) [0|8191] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 1542 ADAS_Stub_FO: 8 AMM_FO
- SG_ AdvDrAstMpStbSubPthIdx : 63|6@0+ (1,0) [0|63] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbUpdt : 55|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbPrtCalRut : 57|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbNmLnDrvDir : 54|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbCycCnt : 51|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbCmplxInsct : 49|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbTrnAngl : 47|8@0+ (1.417,0) [0|361.335] "deg" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbRtOfWay : 38|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbRelProb : 36|5@0+ (3.333,0) [0|103.323] "%" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbRetr : 39|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbNmLnOppDir : 31|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbPathIdx : 29|6@0+ (1,0) [0|63] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbLstStbOfst : 23|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbMsgTyp : 22|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbFmOfWay : 19|4@0+ (1,0) [0|15] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbFuncRdCls : 7|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpStbOfst : 4|13@0+ (1,0) [0|8191] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 1541 ADAS_Segment_FO: 8 AMM_FO
- SG_ AdvDrAstMpSegRelProb : 12|5@0+ (3.333,0) [0|103.323] "%" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegUpdt : 0|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegTunl : 25|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegCycCnt : 39|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegCmplxInsct : 37|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegBldUpAra : 43|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegBrdg : 41|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegRTrns : 1|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegDivdRd : 31|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegPthIdx : 7|6@0+ (1,0) [0|63] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegPrtCalRut : 27|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegNmLnOppDir : 29|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegNmLnDrvDir : 55|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegMsgTyp : 46|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegFunRdCls : 23|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegFrmOfWay : 35|4@0+ (1,0) [0|15] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegEffSpdLmt : 20|5@0+ (1,0) [0|31] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegEffSdLmtTp : 15|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpSegOffset : 52|13@0+ (1,0) [0|8191] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 608 PPS_ElevHdSpd_FO: 8 EOCM2A_K1_FO
- SG_ PPSVel : 31|8@0+ (1,0) [0|255] "km / h" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSVelV : 3|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSElvHedngSpdBrstID : 5|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSElvHdengSpdChksm : 50|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSHedngV : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSHedng : 2|19@0+ (0.001,0) [0|524.287] "deg" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSElvtnV : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
- SG_ PPSElvtn : 39|21@0+ (1,-100000) [-100000|1997151] "cm" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,AMM_FO
-
-BO_ 1168 WiFi_Station_AMM_FO: 5 AMM_FO
- SG_ WSMR_WiFiStnMpMACAddr : 15|32@0+ (1,0) [0|4294967295] "" EOCM2B_K1_FO,EOCM2A_K1_FO
- SG_ WSMR_WiFiAssnReq : 1|2@0+ (1,0) [0|3] "" EOCM2B_K1_FO,EOCM2A_K1_FO
-
-BO_ 1161 WiFi_AP_Data_AMM_FO: 2 EOCM2A_K1_FO
- SG_ WAPDM_SecurityType : 15|4@0+ (1,0) [0|15] "" EOCM2B_K1_FO,AMM_FO
- SG_ WAPDM_WiFiEnStat : 0|1@0+ (1,0) [0|1] "" EOCM2B_K1_FO,AMM_FO
- SG_ WAPDM_EncrptnType : 11|4@0+ (1,0) [0|15] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 1157 SSID_AMM_3_FO: 8 EOCM2A_K1_FO
- SG_ WiFiSSIDDgts17to24_Mp : 7|64@0+ (1,0) [0|0] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 326 DMS_Eye_AOI_Info_FO: 6 DMS_FO
- SG_ DrvrMontSysInit : 1|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMontSysAvlbl : 3|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMontMdlDatFlshProgrs : 2|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonEngRecvrFltCodARC : 36|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrAttnStatChksm : 34|11@0+ (1,0) [0|2047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrAttnStat : 39|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrAttnStatPrd : 22|15@0+ (0.025,0) [0|819.175] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonEngRecvrFltCodV : 23|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonEngUnrecvrFltCod : 10|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonEngUnrecvrFltCodV : 11|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrAttnStatCnfdc : 13|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonEngRecvrFltCod : 15|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrAttnStatV : 0|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 324 DMS_RawMeasurement_Info2_FO: 8 DMS_FO
- SG_ DrvrMonFrmNum : 47|8@0+ (1,0) [0|255] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMntrSysVTP : 29|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonSysEngStV : 2|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonSysEngSt : 28|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonFrmNumV : 3|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrHeadRotAngZV : 4|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrHeadRotAngYV : 5|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrHeadRotAngXV : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrHeadRotAngARC : 52|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonLatV : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrMonLat : 50|11@0+ (0.001,0) [0|2.047] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvHeadRotAngZ : 25|10@0- (0.00625,0) [-3.2|3.19375] "rad" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ DrvHeadRotAngY : 23|10@0- (0.00625,0) [-3.2|3.19375] "rad" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ DrvrHeadRotAngX : 1|10@0- (0.00625,0) [-3.2|3.19375] "rad" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 322 DMS_RawMeasurement_Info1_FO: 8 DMS_FO
- SG_ DrvrEyeClosrRt : 47|8@0+ (0.005,0) [0|1.275] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrEyeClosrLft : 39|8@0+ (0.005,0) [0|1.275] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvHeadPosZV : 3|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvHeadPosYV : 4|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvHeadPosXV : 5|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrEyeClosrRtV : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrEyeClosrLftV : 7|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvrEyeClosrARC : 52|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ DrvHeadPosZ : 50|11@0- (0.005,0) [-5.12|5.115] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ DrvHeadPosY : 18|11@0- (0.005,0) [-5.12|5.115] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ DrvHeadPosX : 2|11@0- (0.005,0) [-5.12|5.115] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 320 Inertial2_Rates_FO: 8 _DOFIMU2_FO
- SG_ MstrTgrSyncInrtl2Rte : 55|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2YawRteV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2YawRte : 36|13@0- (0.024,0) [-98.304|98.28] "deg/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2RollRteV : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2RollRte : 20|13@0- (0.024,0) [-98.304|98.28] "deg/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2RteChksum : 50|11@0+ (1,0) [0|2047] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2PitchRteV : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2PitchRte : 4|13@0- (0.024,0) [-98.304|98.28] "deg/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 308 Inertial1_Rates_FO: 8 _DOFIMU1_FO
- SG_ MstrTrgrSyncInrtl1Rte : 55|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1YawRteV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1YawRte : 36|13@0- (0.024,0) [-98.304|98.28] "deg/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1RollRteV : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1RollRte : 20|13@0- (0.024,0) [-98.304|98.28] "deg/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1RteChksum : 50|11@0+ (1,0) [0|2047] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1PitchRteV : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial1PitchRte : 4|13@0- (0.024,0) [-98.304|98.28] "deg/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 312 Inertial2_Accel2_FO: 8 _DOFIMU2_FO
- SG_ MstrTrigSyncInrtl22 : 55|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSns2AccFrm2Chksm : 50|11@0+ (1,0) [0|2047] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr2YawAccV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr2YawAcc : 36|13@0- (0.024,0) [-98.304|98.28] "deg/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr2RollAccV : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr2RollAcc : 20|13@0- (0.024,0) [-98.304|98.28] "deg/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr2PtchAccV : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr2PtchAcc : 4|13@0- (0.024,0) [-98.304|98.28] "deg/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 306 Inertial1_Accel2_FO: 8 _DOFIMU1_FO
- SG_ MstrTrigSyncInrtl12 : 55|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1AccelFrm2Chksm : 50|11@0+ (1,0) [0|2047] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1YawAccV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1YawAcc : 36|13@0- (0.024,0) [-98.304|98.28] "deg/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1RollAccV : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1RollAcc : 20|13@0- (0.024,0) [-98.304|98.28] "deg/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1PtchAccV : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1PtchAcc : 4|13@0- (0.024,0) [-98.304|98.28] "deg/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 310 Inertial2_Accel1_FO: 8 _DOFIMU2_FO
- SG_ MstrTrigSyncInrtl21 : 7|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2VertAccV : 34|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2VertAcc : 33|10@0- (0.0625,0) [-32|31.9375] "m/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2LonAccV : 2|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2LonAcc : 1|10@0- (0.0625,0) [-32|31.9375] "m/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2LatAccV : 18|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ Inertial2LatAcc : 17|10@0- (0.0625,0) [-32|31.9375] "m/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ IntlSnsr2AcelFm1Chksm : 50|11@0+ (1,0) [0|2047] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 304 Inertial1_Accel1_FO: 8 _DOFIMU1_FO
- SG_ MstrTrigSyncInrtl11 : 7|5@0+ (1,0) [0|31] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1VertAccV : 34|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1VertAcc : 33|10@0- (0.0625,0) [-32|31.9375] "m/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1LonAccV : 2|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1LonAcc : 1|10@0- (0.0625,0) [-32|31.9375] "m/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1LatAccV : 18|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InrtlSnsr1LatAcc : 17|10@0- (0.0625,0) [-32|31.9375] "m/s^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ IntlSnsr1AcelFm1Chksm : 50|11@0+ (1,0) [0|2047] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 356 Map_Pos_Correction_FO: 4 EOCM2A_K1_FO
- SG_ LongErrPstn : 7|8@0- (0.5,0) [-64|63.5] "m" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ LatErrPstn : 15|8@0- (0.5,0) [-64|63.5] "m" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ PstnErrChcksm : 18|11@0+ (1,0) [0|2047] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ PstnErrARC : 20|2@0+ (1,0) [0|3] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 354 Map_Retrans_Request_FO: 1 EOCM2A_K1_FO
- SG_ HrznPrvdRstRq : 2|1@0+ (1,0) [0|1] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ ADASISRwDtMplxdCycCnt : 7|2@0+ (1,0) [0|3] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ ADASISMsgTypRetrans : 5|3@0+ (1,0) [0|7] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 352 Map_Path_Correction_FO: 6 EOCM2A_K1_FO
- SG_ ExptNxtTrnstnDir : 37|3@0+ (1,0) [0|7] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ MstProbLnV : 15|1@0+ (1,0) [0|1] "" AMM_FO
- SG_ MstProbLn : 14|5@0+ (1,0) [0|31] "" AMM_FO
- SG_ PathCrtnChcksm : 34|11@0+ (1,0) [0|2047] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ PathCrtnARC : 4|2@0+ (1,0) [0|3] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ EgoLnCurvV : 2|1@0+ (1,0) [0|1] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ EgoLnCurv : 23|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m^2" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ VehLnStatV : 1|1@0+ (1,0) [0|1] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ VehLnStatConf : 6|2@0+ (1,0) [0|3] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ VehLnStat : 9|2@0+ (1,0) [0|3] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ ExptNxtTransDirV : 0|1@0+ (1,0) [0|1] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ ExptNxtTrnstnDirConf : 39|2@0+ (1,0) [0|3] "" AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 264 Inertial_Trigger_FO: 1 EOCM2A_K1_FO
- SG_ InrtlSnsrMstrTrgrSync : 7|5@0+ (1,0) [0|31] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,_DOFIMU2_FO,_DOFIMU1_FO
-
-BO_ 1156 SSID_AMM_2_FO: 8 EOCM2A_K1_FO
- SG_ WiFiSSIDDgts9to16_Mp : 7|64@0+ (1,0) [0|0] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 1155 SSID_AMM_1_FO: 8 EOCM2A_K1_FO
- SG_ WiFiSSIDDgts1to8_Mp : 7|64@0+ (1,0) [0|0] "" EOCM2B_K1_FO,AMM_FO
-
-BO_ 1927 DTC_Triggered_787_FO: 7 DMS_FO
- SG_ DTCI_CodeSupported_787 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_787 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_787 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_787 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_787 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_787 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_787 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_787 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_787 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_787 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_787 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_787 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_787 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_787 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_787 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_787 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_787 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_787 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_787 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_787 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1926 DTC_Triggered_786_FO: 7 AMM_FO
- SG_ DTCI_CodeSupported_786 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_786 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_786 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_786 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_786 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_786 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_786 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_786 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_786 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_786 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_786 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_786 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_786 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_786 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_786 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_786 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_786 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_786 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_786 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_786 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1928 DTC_Triggered_788_FO: 7 _DOFIMU1_FO
- SG_ DTCI_CodeSupported_788 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_788 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_788 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_788 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_788 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_788 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_788 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_788 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_788 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_788 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_788 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_788 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_788 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_788 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_788 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_788 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_788 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_788 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_788 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_788 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1929 DTC_Triggered_789_FO: 7 _DOFIMU2_FO
- SG_ DTCI_CodeSupported_789 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_789 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_789 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_789 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_789 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_789 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_789 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_789 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_789 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_789 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_789 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_789 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_789 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_789 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_789 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_789 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_789 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_789 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_789 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_789 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1352 UUDT_Resp_From_6DOFIMU2_FO: 8 _DOFIMU2_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 588 USDT_Req_to_EOCM2B_K1_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" EOCM2B_K1_FO
-
-BO_ 1356 UUDT_Resp_From_EOCM2B_K1_FO: 8 EOCM2B_K1_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1612 USDT_Resp_From_EOCM2B_K1_FO: 8 EOCM2B_K1_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1616 USDT_Resp_From_EOCM2A_IMX6_FO: 8 EOCM2A_IMX6_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1360 UUDT_Resp_From_EOCM2A_IMX6_FO: 8 EOCM2A_IMX6_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 592 USDT_Req_to_EOCM2A_IMX6_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" EOCM2A_IMX6_FO
-
-BO_ 1610 USDT_Resp_From_EOCM2A_K1_FO: 8 EOCM2A_K1_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1354 UUDT_Resp_From_EOCM2A_K1_FO: 8 EOCM2A_K1_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 586 USDT_Req_to_EOCM2A_K1_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" EOCM2A_K1_FO
-
-BO_ 1925 DTC_Triggered_785_FO: 7 NVS_FO
- SG_ DTCI_CodeSupported_785 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_785 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_785 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_785 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_785 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_785 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_785 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_785 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_785 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_785 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_785 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_785 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_785 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_785 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_785 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_785 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_785 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_785 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_785 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_785 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1859 VIN_Digits_10_to_17_FO: 8 EOCM_F_FO
- SG_ VehIdNmDig10_17 : 7|64@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO
-
-BO_ 1857 VIN_Digits_2_to_9_FO: 8 EOCM_F_FO
- SG_ VehIdNmDig2_9 : 7|64@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO
-
-BO_ 771 Outside_Air_Temperature_FO: 2 EOCM_F_FO
- SG_ OtsAirTmpCrValV : 0|1@0+ (1,0) [0|1] "" NVS_FO
- SG_ OtsAirTmpCrVal : 15|8@0+ (0.5,-40) [-40|87.5] "deg C" NVS_FO
-
-BO_ 777 Night_Vision_System_Ped_FO: 1 NVS_FO
- SG_ NVSysStat : 3|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ NVSysPedWrnIndReq : 7|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ NVSysPedDetCsCrStVal : 5|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ NVSysPedDetCstStAvl : 0|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 607 USDT_Req_to_NVS_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" NVS_FO
-
-BO_ 1631 USDT_Resp_From_NVS_FO: 8 NVS_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1375 UUDT_Resp_From_NVS_FO: 8 NVS_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1540 ADAS_Position_FO: 8 AMM_FO
- SG_ AdvDrAstMpLatOffst : 40|9@0+ (1,-256) [-256|255] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnIndx : 63|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnCnf : 61|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPsnIdxCrLn : 58|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnPthIndx : 46|6@0+ (1,0) [0|63] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnProb : 31|5@0+ (3.333,0) [0|103.323] "%" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnCycCnt : 26|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnAge : 24|9@0+ (5,0) [0|2555] "ms" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnRelHd : 23|8@0+ (1.417,0) [0|361.335] "deg" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnMsgTyp : 7|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
- SG_ AdvDrAstMpPstnOfst : 4|13@0+ (1,0) [0|8191] "m" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO
-
-BO_ 1608 USDT_Resp_From_6DOFIMU2_FO: 8 _DOFIMU2_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 871 LGT_ObjectDetect_Info_8_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk8 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk8 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk8 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk8 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk8 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev8 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev8 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev8 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk8 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk8 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk8 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 870 LGT_ObjectDetect_Info_7_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk7 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk7 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk7 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk7 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk7 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev7 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev7 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev7 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk7 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk7 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk7 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 869 LGT_ObjectDetect_Info_6_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk6 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk6 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk6 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk6 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk6 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev6 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev6 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev6 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk6 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk6 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk6 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 868 LGT_ObjectDetect_Info_5_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk5 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk5 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk5 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk5 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk5 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev5 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev5 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev5 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk5 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk5 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk5 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 867 LGT_ObjectDetect_Info_4_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk4 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk4 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk4 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk4 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk4 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev4 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev4 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev4 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk4 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk4 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk4 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 866 LGT_ObjectDetect_Info_3_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk3 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk3 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk3 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk3 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk3 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev3 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev3 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev3 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk3 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk3 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk3 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 865 LGT_ObjectDetect_Info_2_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk2 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk2 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk2 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk2 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk2 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev2 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev2 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev2 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk2 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBObjDirTrk2 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk2 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 864 LGT_ObjectDetect_Info_1_FO: 8 VIS2_FO
- SG_ GFHBFwVsnWidthTrk1 : 62|7@0+ (0.1,0) [0|12.7] "deg" EOCM_F_FO
- SG_ GFHBFwVsnVertPosTrk1 : 53|6@0+ (0.25,-3) [-3|12.75] "deg" EOCM_F_FO
- SG_ GFHBFwVsnRelLaneTrk1 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnAzmthRtTrk1 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ GFHBFwVsnCnfdncTrk1 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnRngTrkRev1 : 16|12@0+ (0.2,0) [0|819] "m" EOCM_F_FO
- SG_ GFHBFwVsnAzmthTrkRev1 : 10|10@0- (0.05,0) [-25.6|25.55] "deg" EOCM_F_FO
- SG_ GFHBFVsnObjTypTrkRev1 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ GFHBObjDirTrk1 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ GFHBFwVsnMesStatTrk1 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ GFHBFwVsnObjIDTrk1 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1915 DTC_Triggered_77B_FO: 7 VIS_FO
- SG_ DTCI_DTCFaultType_77B : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_CodeSupported_77B : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_77B : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_77B : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_77B : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_77B : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_77B : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_77B : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_77B : 47|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_77B : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_77B : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_77B : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_77B : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_77B : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_77B : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_77B : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_77B : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_77B : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_77B : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_77B : 7|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1923 DTC_Triggered_783_FO: 7 RSRR_FO
- SG_ DTCI_WrnIndRqdSt_783 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_783 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_783 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_783 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_783 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_783 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCTriggered_783 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCSource_783 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_783 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCFaultType_783 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFailType_783 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_CurrentStatus_783 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CodeSupported_783 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_783 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_783 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_783 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_783 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_783 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_783 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_783 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1924 DTC_Triggered_784_FO: 7 RRSRR_FO
- SG_ DTCI_HistStat_784 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_784 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_784 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_784 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_784 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_784 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_784 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_784 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_784 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_784 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_784 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_784 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_784 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CodeSupported_784 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CurrentStatus_784 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCFailType_784 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFaultType_784 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_784 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCSource_784 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCTriggered_784 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1922 DTC_Triggered_782_FO: 7 RFSRR_FO
- SG_ DTCI_WrnIndRqdSt_782 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_782 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_782 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_782 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_782 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_782 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_782 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_782 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_782 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_782 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_782 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_782 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_782 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCTriggered_782 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCSource_782 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_782 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCFaultType_782 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFailType_782 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_CurrentStatus_782 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_CodeSupported_782 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1920 DTC_Triggered_780_FO: 7 LRR_FO
- SG_ DTCI_CurrentStatus_780 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_780 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_780 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_780 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_780 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_780 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_780 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_780 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_780 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_780 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_780 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_780 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_780 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_780 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCTriggered_780 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCSource_780 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_780 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCFaultType_780 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFailType_780 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_CodeSupported_780 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1921 DTC_Triggered_781_FO: 7 LFSRR_FO
- SG_ DTCI_CurrentStatus_781 : 41|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_WrnIndRqdSt_781 : 47|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused7_781 : 1|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused6_781 : 2|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused5_781 : 3|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused4_781 : 4|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused3_781 : 5|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused2_781 : 6|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCIUnused1_781 : 7|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdPwrUpSt_781 : 45|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstNPsdCdClrdSt_781 : 42|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldPwrUpSt_781 : 46|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_TstFldCdClrdStat_781 : 43|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_HistStat_781 : 44|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCTriggered_781 : 0|1@0+ (1,0) [0|1] "" TestTool_FO
- SG_ DTCI_DTCSource_781 : 15|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCNumber_781 : 23|16@0+ (1,0) [0|65535] "" TestTool_FO
- SG_ DTCI_DTCFaultType_781 : 55|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_DTCFailType_781 : 39|8@0+ (1,0) [0|255] "" TestTool_FO
- SG_ DTCI_CodeSupported_781 : 40|1@0+ (1,0) [0|1] "" TestTool_FO
-
-BO_ 1034 Curvature_Right_Line_FO: 7 VIS2_FO
- SG_ CRL_Cnfdnc : 50|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ CRL_ViewRng : 33|15@0+ (0.0039064,0) [0|128.0010088] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ CRL_CoefdA : 17|16@0- (3.6622E-009,0) [-0.0001200029696|0.0001199993074] "1/m^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ CRL_CoefA : 1|16@0- (6.1036E-007,0) [-0.02000027648|0.01999966612] "1/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 1033 Curvature_Left_Line_FO: 7 VIS2_FO
- SG_ CLL_Cnfdnc : 50|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ CLL_ViewRng : 33|15@0+ (0.0039064,0) [0|128.0010088] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ CLL_CoefdA : 17|16@0- (3.6622E-009,0) [-0.0001200029696|0.0001199993074] "1/m^2" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ CLL_CoefA : 1|16@0- (6.1036E-007,0) [-0.02000027648|0.01999966612] "1/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
-
-BO_ 1365 UUDT_Resp_From_VIS2_FO: 8 VIS2_FO
- SG_ DgnInf_OBJ555 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1621 USDT_Resp_From_VIS2_FO: 8 VIS2_FO
- SG_ DgnInf_OBJ655 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1094 F_Vision_Obj_Track_12: 8 VIS2_FO
- SG_ FwdVsnObjTypTr12Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FwdVsnAzmthTrk12Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk12Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FVisionWidthTrk12 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FVisionMeasStatTrk12 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnVertPosTrk12 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FVisionRelLaneTrk12 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk12 : 34|11@0- (0.125,0) [-128|127.875] "deg/sec" EOCM_F_FO
- SG_ FVisionConfTrk12 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ ObjDirTrk12 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk12 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk12 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1093 F_Vision_Obj_Track_11: 8 VIS2_FO
- SG_ FwdVsnObjTypTr11Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FwdVsnAzmthTrk11Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk11Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FVisionWidthTrk11 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FVisionMeasStatTrk11 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnVertPosTrk11 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FVisionRelLaneTrk11 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk11 : 34|11@0- (0.125,0) [-128|127.875] "deg/sec" EOCM_F_FO
- SG_ FVisionConfTrk11 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ ObjDirTrk11 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk11 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk11 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1100 F_Vision_Obj_Track_12_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT12Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk12 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk12 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk12 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk12 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr12 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk12 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo12 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1099 F_Vision_Obj_Track_11_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT11Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk11 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk11 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk11 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk11 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr11 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk11 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo11 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1098 F_Vision_Obj_Track_10_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT10Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk10 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk10 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk10 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk10 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr10 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk10 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo10 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1097 F_Vision_Obj_Track_9_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT9Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk9 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk9 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk9 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk9 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr9 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk9 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo9 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1096 F_Vision_Obj_Track_8_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT8Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk8 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk8 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk8 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk8 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr8 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk8 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo8 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1095 F_Vision_Obj_Track_7_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT7Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk7 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk7 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk7 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk7 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr7 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk7 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo7 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 863 F_Vision_GFHB_Data_FO: 8 VIS2_FO
- SG_ RgDtLgtSrcHrtAngl : 49|10@0- (0.04,0) [-20.48|20.44] "deg" EOCM_F_FO
- SG_ RgDtLgtSrcHrtAngVcty : 55|6@0- (1,0) [-32|31] "deg/sec" EOCM_F_FO
- SG_ LfDtLgtSrcHrtAngl : 33|10@0- (0.04,0) [-20.48|20.44] "deg" EOCM_F_FO
- SG_ LfDtLgtSrcHrtAnVcty : 39|6@0- (1,0) [-32|31] "deg/sec" EOCM_F_FO
- SG_ AdvWthrStat : 25|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ DtctdLghtSrcDstnc : 22|7@0+ (10,0) [0|1270] "m" EOCM_F_FO
- SG_ DtctdLghtSrcVrtclAngl : 1|10@0- (0.04,0) [-20.48|20.44] "deg" EOCM_F_FO
- SG_ IntLghtRngAct : 2|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ DtctdLghtSrcDstncV : 3|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ TwnDtctnSts : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ DtctdLghtSrcDrvngDrctn : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 862 LGT_ControlHighBeamGlare_FO: 2 VIS2_FO
- SG_ FwdCamSysOpStat : 10|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ EnvIllum : 2|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RdTyp : 5|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ AutoHgBmSts : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1068 F_Vision_Obj_Track_6_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT6Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk6 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk6 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk6 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk6 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr6 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk6 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo6 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1067 F_Vision_Obj_Track_5_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT5Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk5 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk5 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk5 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk5 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr5 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk5 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo5 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1066 F_Vision_Obj_Track_4_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT4Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk4 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk4 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk4 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk4 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr4 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk4 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo4 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1065 F_Vision_Obj_Track_3_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT3Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk3 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk3 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk3 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk3 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr3 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk3 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo3 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1064 F_Vision_Obj_Track_2_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT2Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk2 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk2 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk2 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk2 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr2 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk2 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo2 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1063 F_Vision_Obj_Track_1_B: 8 VIS2_FO
- SG_ FwVsnCinCoutPotT1Rev : 5|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnObjSclChgTrk1 : 15|16@0- (0.0002,0) [-6.5536|6.5534] "pix/sec" EOCM_F_FO
- SG_ FwdVsnObjAgeTrk1 : 62|7@0+ (1,0) [0|127] "" EOCM_F_FO
- SG_ FwdVsnLongVlctyTrk1 : 42|12@0- (0.0625,0) [-128|127.9375] "m/sec" EOCM_F_FO
- SG_ FwdVsnLatOfstTrk1 : 36|10@0- (0.125,0) [-64|63.875] "m" EOCM_F_FO
- SG_ FwdVsnBrkLtStatTrk1 : 38|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FwdVsnTrnSigStatTr1 : 25|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FrtVsnBrstIDAddInfo1 : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1151 Long_Range_Radar_add_Info_5_FO: 8 LRR_FO
- SG_ FrtRdrRdEdgLtLatRdEdgDst : 63|8@0- (0.1,0) [-12.8|12.7] "m/m" EOCM_F_FO
- SG_ FrtRdrRdEdgLtCrvtPrvDst : 5|4@0+ (10,0) [0|150] "" EOCM_F_FO
- SG_ FrtRdrRdEdgLtTanHdgAng : 15|8@0- (0.002,0) [-0.256|0.254] "m/m" EOCM_F_FO
- SG_ FrtRdrRdEdgLtCrvtV : 48|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtRdrRdEdgLtCrvtGradV : 0|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtRdrRdEdgLtCrvtGrad : 39|16@0- (5.96E-008,0) [-0.0019529728|0.0019529132] "1/(m*sec)" EOCM_F_FO
- SG_ FrtRdrRdEdgLtCrvtConf : 55|7@0+ (0.7874016,0) [0|100.0000032] "%" EOCM_F_FO
- SG_ FrtRdrRdEdgLtCrvt : 23|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m" EOCM_F_FO
- SG_ FrtRdrRdEdgLtTanHdgAngV : 1|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRAddInfo5BurstID : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1150 Long_Range_Radar_add_Info_4_FO: 8 LRR_FO
- SG_ FrtRdrRdEdgRtLatRdEdgDst : 63|8@0- (0.1,0) [-12.8|12.7] "m/m" EOCM_F_FO
- SG_ FrtRdrRdEdgRtCrvtPrvDst : 5|4@0+ (10,0) [0|150] "" EOCM_F_FO
- SG_ FrtRdrRdEdgRtTanHdgAngV : 1|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtRdrRdEdgRtTanHdgAng : 15|8@0- (0.002,0) [-0.256|0.254] "m/m" EOCM_F_FO
- SG_ FrtRdrRdEdgRtCrvtV : 48|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtRdrRdEdgRtCrvtGradV : 0|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtRdrRdEdgRtCrvtGrad : 39|16@0- (5.96E-008,0) [-0.0019529728|0.0019529132] "1/(m*sec)" EOCM_F_FO
- SG_ FrtRdrRdEdgRtCrvtConf : 55|7@0+ (0.7874016,0) [0|100.0000032] "%" EOCM_F_FO
- SG_ FrtRdrRdEdgRtCrvt : 23|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m" EOCM_F_FO
- SG_ FLRRAddInfo4BurstID : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1088 F_Vision_Obj_Header_2: 8 VIS2_FO
- SG_ FrntVsnInPthVehBrkNwSt : 35|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FrntVsnClostPedBrkNwSt : 39|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FrntVsnClostPedObjID : 29|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FrntVsnClostPedAlrtNwFlg : 30|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrntVsnClostPedNotftnFlg : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrntVsnInPthVehAlrtNwFlg : 2|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtVsnVldTgtNum2 : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FrtVsnTmStmp2V : 31|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtVsnTmStmp2 : 10|11@0+ (1,0) [0|2047] "" EOCM_F_FO
- SG_ FrtVsnRollCnt2 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FrtVsnBrstChksum2 : 55|16@0+ (1,0) [0|65535] "" EOCM_F_FO
-
-BO_ 854 F_Vision_Environment_7: 3 VIS2_FO
- SG_ FwdVsnCnstrctAreaDst : 13|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ FwdVsnCnstrctZnDet : 15|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ FwdVsnEgoVehLnPos : 17|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ FwdVsnRdTypDet : 9|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ FwdVsnTunnlDetd : 23|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ FwdVsnTunnlDst : 21|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBrstID5 : 1|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 853 F_Vision_Environment_6: 8 VIS2_FO
- SG_ LnMrkg4LnSnsLnHdngTngtV : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnHdngTngt : 23|8@0- (0.002,0) [-0.256|0.254] "m/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnDstV : 56|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnDst : 15|8@0- (0.1,0) [-12.8|12.7] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnCrvtV : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnCrvtGradV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnCrvtGrad : 47|16@0- (5.96E-008,0) [-0.0019529728|0.0019529132] "1/(m*sec)" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnSnsLnCrvt : 31|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnQltyConfLvl : 63|7@0+ (0.7874016,0) [0|100.0000032] "%" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnMrkrTyp : 4|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBrstID4 : 1|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 852 F_Vision_Environment_5: 8 VIS2_FO
- SG_ LnMrkg3LnSnsLnHdngTngtV : 7|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnHdngTngt : 23|8@0- (0.002,0) [-0.256|0.254] "m/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnDstV : 56|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnDst : 15|8@0- (0.1,0) [-12.8|12.7] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnCrvtV : 6|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnCrvtGradV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnCrvtGrad : 47|16@0- (5.96E-008,0) [-0.0019529728|0.0019529132] "1/(m*sec)" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnSnsLnCrvt : 31|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnQltyConfLvl : 63|7@0+ (0.7874016,0) [0|100.0000032] "%" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnMrkrTyp : 4|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBrstID3 : 1|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 602 USDT_Req_to_RRSRR: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" RRSRR_FO
-
-BO_ 1626 USDT_Resp_From_RRSRR: 8 RRSRR_FO
- SG_ DgnInf_OBJ65A : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1370 UUDT_Resp_From_RRSRR: 8 RRSRR_FO
- SG_ DgnInf_OBJ55A : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1536 RR_SRR_Trace_data: 8 RRSRR_FO
- SG_ RRSRRYear : 7|8@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ RRSRRSerialNmbr : 39|32@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ RRSRRJulianDate : 15|24@0+ (1,0) [0|0] "" EOCM_F_FO
-
-BO_ 1210 RR_SRR_Object_Track10: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth10 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate10 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange10 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange10 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID10 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation10 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus10 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp10 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth10 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID10 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1209 RR_SRR_Object_Track9: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth9 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate9 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange9 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange9 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID9 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation9 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus9 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp9 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth9 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID9 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1208 RR_SRR_Object_Track8: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth8 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate8 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange8 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange8 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID8 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation8 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus8 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp8 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth8 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID8 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1207 RR_SRR_Object_Track7: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth7 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate7 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange7 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange7 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID7 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation7 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus7 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp7 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth7 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID7 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1206 RR_SRR_Object_Track6: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth6 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate6 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange6 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange6 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID6 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation6 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus6 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp6 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth6 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID6 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1205 RR_SRR_Object_Track5: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth5 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate5 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange5 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange5 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID5 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation5 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus5 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp5 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth5 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID5 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 262 LHT_AutoHighBeamAssistStatus_FO: 5 EOCM_F_FO
- SG_ NtVsnSysEnbld : 6|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO
- SG_ VehMovState : 5|3@0+ (1,0) [0|7] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO
- SG_ NVSysPedDetCstReq : 2|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO
- SG_ StrWhAngV : 8|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO,VIS_FO
- SG_ StrWhAngMsk : 9|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ StrWhAng : 23|16@0- (0.0625,0) [-2048|2047.9375] "deg" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO,VIS_FO
- SG_ RtTrnLmpAtv : 13|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ MpDataAvlbl : 0|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ LftTrnLmpAtv : 11|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ HdlmpBmSelectStat : 33|2@0+ (1,0) [0|3] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ BldUpArDet : 14|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ FrFogLmpsAct : 15|1@0+ (1,0) [0|1] "" EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,NVS_FO,VIS_FO
-
-BO_ 309 LHT_CameraObjConfirmation_FO: 1 VIS_FO
- SG_ HiBmRecmnd : 1|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ CtLghtDet : 0|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 2034 CCP_Data_Transmission_Object_FO: 8 VIS2_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 2032 CCP_Command_Receive_Object_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" VIS2_FO
-
-BO_ 1362 F_Vis_Obj_Conf_CPS_1B: 8 EOCM_F_FO
- SG_ FObjConfCPSTrkObjectIDB : 7|6@0+ (1,0) [0|63] "" VIS_FO
- SG_ CPSVisConfLonPos1 : 20|12@0- (0.125,0) [-256|255.875] "m" VIS_FO
- SG_ CPSVisConfLatPos1 : 15|10@0- (0.125,0) [-64|63.875] "m" VIS_FO
- SG_ CPSVisConfChecksum : 50|11@0+ (1,0) [0|2047] "" VIS_FO
- SG_ FObjConfCPSTrkRangeRate : 45|11@0- (0.125,0) [-128|127.875] "m/s" VIS_FO
- SG_ CPSConfTimeStamp : 24|11@0+ (1,0) [0|2047] "ms" VIS_FO
- SG_ CPSConfTimeStampV : 21|1@0+ (1,0) [0|1] "" VIS_FO
- SG_ FObjConfCPSRollingTrkCnt : 1|2@0+ (1,0) [0|3] "" VIS_FO
-
-BO_ 1413 TOS_ACC_IDS: 5 EOCM_F_FO
- SG_ TOS_ACC_IDSRollCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ TOS_ACC_IDSFuncState : 5|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ TOS_ACC_ID1 : 3|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ TOS_ACC_ID2 : 13|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ TOS_ACC_ID3 : 23|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ TOS_ACC_ID4 : 17|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ TOS_ACC_ID5 : 27|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ TOS_ACC_ID6 : 37|6@0+ (1,0) [0|63] "" Dummy_FO
-
-BO_ 1412 F_ACC_Target: 8 EOCM_F_FO
- SG_ FACCTOSRollCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FACCTOSFuncState : 5|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FACCTOSLongPos : 3|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FACCTOSLatPos : 23|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FACCTOSMeasStat : 28|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FACCTOSLongVel : 26|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FACCTOSTrgtDecelFlg : 47|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FACCTOSDynProp : 46|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FACCTOSLatVel : 42|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FACCTOSRelLane : 63|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FACCTOSHiThrtID : 61|6@0+ (1,0) [0|63] "" Dummy_FO
-
-BO_ 1409 F_CPS_TOS_B: 8 EOCM_F_FO
- SG_ CPSTOSObjType : 7|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ CPSTOSHiThrtPriNo : 60|5@0+ (1,0) [0|31] "" Dummy_FO
- SG_ CPSTOSRelLongAcc : 53|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ CPSTOSConfAsmt : 21|12@0+ (1,0) [0|4095] "" Dummy_FO
- SG_ CPSTOSNumCycTrkd : 4|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ CPSTOSTimeToColl : 1|12@0+ (0.025,0) [0|102.375] "s" Dummy_FO
- SG_ CPSTOSClosestInPthVehRng : 47|10@0+ (0.25,0) [0|255.75] "m" Dummy_FO
- SG_ CPSTOSClosestInPthObID : 37|6@0+ (1,0) [0|63] "m" Dummy_FO
- SG_ CPSTOSMeasStat : 39|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ CPSTOSFuncState : 25|2@0+ (1,0) [0|3] "" Dummy_FO
-
-BO_ 1408 F_CPS_TOS_A: 8 EOCM_F_FO
- SG_ CPSTOSLongPos : 7|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ CPSTOSLatPos : 11|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ CPSTOSLongVel : 16|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ CPSTOSDynProp : 37|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ CPSTOSLatVel : 34|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ CPSTOSARelLane : 63|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ CPSTOSHiThrtID : 61|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ CPSTOSHighestThreatObAsmt : 55|8@0+ (1,0) [0|255] "" Dummy_FO
-
-BO_ 1344 FLPEstimate: 8 EOCM_F_FO
- SG_ FLPRollCount : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ NewLaneIndex : 5|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ VehPathInOK : 3|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LaneSnsInOK : 2|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ MapInOK : 1|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FWDObjFusInOK : 0|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LngthFrstSeg : 15|4@0+ (10,0) [0|150] "m" Dummy_FO
- SG_ LngthScndSeg : 11|4@0+ (10,0) [0|150] "m" Dummy_FO
- SG_ CurvFrstSeg : 23|13@0- (5E-005,0) [-0.2048|0.20475] "1/m" Dummy_FO
- SG_ CurvScndSeg : 26|3@0- (0.001,0) [-0.004|0.003] "1/m" Dummy_FO
- SG_ OffstLaneCntr : 39|8@0- (0.05,0) [-6.4|6.35] "m" Dummy_FO
- SG_ TngntLaneHead : 47|8@0- (0.002,0) [-0.256|0.254] "m/m" Dummy_FO
- SG_ LaneWidth : 55|8@0+ (0.05,0) [0|12.75] "m" Dummy_FO
- SG_ FLPDataTimeStampV : 63|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FLPDataTimeStamp : 62|7@0+ (16,0) [0|2032] "ms" Dummy_FO
-
-BO_ 770 F_Fwd_Collision_Alert: 8 EOCM_F_FO
- SG_ Vpath_Accel : 51|11@0- (0.125,0) [-128|127.875] "m/s^2" NVS_FO,Dummy_FO
- SG_ FCA_Ra : 7|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FCA_Range : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FCA_AlertLevel : 44|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FCA_Alert_Sup : 31|16@0+ (1,0) [0|65535] "" Dummy_FO
- SG_ FCAStatus : 46|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FCA_VehAhead : 47|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FCA_CPS_Alert : 42|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FCAChime : 41|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FCADiagOK : 40|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ NBSMS_Alert : 55|1@0+ (1,0) [0|1] "" Dummy_FO
-
-BO_ 1601 USDT_Resp_From_VIS: 8 VIS_FO
- SG_ DgnInf_OBJ641 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1606 USDT_Resp_From_RFSRR: 8 RFSRR_FO
- SG_ DgnInf_OBJ646 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1603 USDT_Resp_From_LFSRR: 8 LFSRR_FO
- SG_ DgnInf_OBJ643 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1602 USDT_Resp_From_LRR: 8 LRR_FO
- SG_ DgnInf_OBJ642 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1625 USDT_Resp_From_RSRR: 8 RSRR_FO
- SG_ DgnInf_OBJ644 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1611 USDT_Resp_From_FEOCM_FO: 8 EOCM_F_FO
- SG_ DgnInf_OBJ64B : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 768 F_Smgr_Vehicle_Motion: 8 EOCM_F_FO
- SG_ SmgrMotRollAngle : 44|10@0- (0.1,0) [-51.2|51.1] "deg" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotRollAngleV : 0|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotChecksum : 50|11@0+ (1,0) [0|2047] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotPitchAngle : 39|11@0- (0.1,0) [-102.4|102.3] "deg" CIPM_FO,NVS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotPitchAngleV : 1|1@0+ (1,0) [0|1] "" CIPM_FO,NVS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotLongSpeedV : 2|1@0+ (1,0) [0|1] " " CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotLongSpeed : 18|11@0- (0.1,0) [-102.4|102.3] "m/s" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotYawRate : 14|12@0- (0.05,0) [-102.4|102.35] "deg/s" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotYawRateV : 15|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
- SG_ SmgrMotRollingCnt : 4|2@0+ (1,0) [0|3] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS_FO
-
-BO_ 1350 UUDT_Resp_From_RFSRR: 8 RFSRR_FO
- SG_ DgnInf_OBJ546 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1369 UUDT_Resp_From_RSRR: 8 RSRR_FO
- SG_ DgnInf_OBJ544 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1347 UUDT_Resp_From_LFSRR: 8 LFSRR_FO
- SG_ DgnInf_OBJ543 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1346 UUDT_Resp_From_LRR: 8 LRR_FO
- SG_ DgnInf_OBJ542 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1345 UUDT_Resp_From_VIS: 8 VIS_FO
- SG_ DgnInf_OBJ541 : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 579 USDT_Req_to_LFSRR: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" LFSRR_FO
-
-BO_ 577 USDT_Req_to_VIS: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" VIS_FO
-
-BO_ 578 USDT_Req_to_LRR: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" LRR_FO
-
-BO_ 582 USDT_Req_to_RFSRR: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" RFSRR_FO
-
-BO_ 601 USDT_Req_to_RSRR: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" RSRR_FO
-
-BO_ 1355 UUDT_Resp_From_FEOCM_FO: 8 EOCM_F_FO
- SG_ DgnInf_OBJ54B : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 587 USDT_Req_to_FEOCM_obj: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" EOCM2A_K2_FO,EOCM_F_FO
-
-BO_ 784 Body_Info_FOB: 6 EOCM_F_FO
- SG_ StrgColUpDwnPos : 39|8@0+ (1,0) [0|255] "" DMS_FO
- SG_ CPMAPINFO4 : 47|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ StrgColInOutPos : 31|8@0+ (1,0) [0|255] "" DMS_FO
- SG_ StrgColCommsFlt : 19|2@0+ (1,0) [0|3] "" DMS_FO
- SG_ DrDoorOpenSwActV : 16|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ DrDoorOpenSwAct : 17|1@0+ (1,0) [0|1] "" DMS_FO
- SG_ DrvWndPosStat : 22|3@0+ (1,0) [0|7] "" CIPM_FO,DMS_FO,VIS2_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ InterLghtStat : 23|1@0+ (1,0) [0|1] "" CIPM_FO,DMS_FO,VIS2_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ DrvrHndsOnWhlZn3 : 13|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,DMS_FO,VIS2_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ DrvrHndsOnWhlZn2 : 14|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,VIS2_FO
- SG_ DrvrHndsOnWhlZn1 : 15|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,VIS2_FO
- SG_ WSWshSwAtv : 11|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,VIS_FO,VIS2_FO
- SG_ SysPwrMdV : 8|1@0+ (1,0) [0|1] "" NVS_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO,LRSRR_FO,CIPM_FO,_DOFIMU2_FO,_DOFIMU1_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,VIS2_FO
- SG_ SysPwrMd : 10|2@0+ (1,0) [0|3] "" NVS_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO,LRSRR_FO,CIPM_FO,_DOFIMU2_FO,_DOFIMU1_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,VIS2_FO
- SG_ WSWprAct : 2|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ RtLwBmFld : 4|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ OtsdAmbtLtLvlStatV : 5|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ OtsdAmbtLtLvlStat : 7|2@0+ (1,0) [0|3] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ LowBmAct : 1|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ LftLwBmFld : 3|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ HighBmAct : 0|1@0+ (1,0) [0|1] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,DMS_FO,AMM_FO,NVS_FO,VIS_FO,VIS2_FO
- SG_ TrStLgMdAtv : 12|1@0+ (1,0) [0|1] "" CIPM_FO,NVS_FO,RRSRR_FO,LRSRR_FO,_DOFIMU2_FO,_DOFIMU1_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,LRR_FO,RFSRR_FO,LFSRR_FO,RSRR_FO,VIS_FO,VIS2_FO
-
-BO_ 1539 RF_SRR_Trace_Data: 8 RFSRR_FO
- SG_ RFSRRYear : 7|8@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ RFSRRSerialNmbr : 39|32@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ RFSRRJulianDate : 15|24@0+ (1,0) [0|0] "" EOCM_F_FO
-
-BO_ 776 F_Vehicle_Path_Data_2: 7 EOCM_F_FO
- SG_ Vpath_Data2ModeInfo : 44|2@0+ (1,0) [0|3] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath2_Checksum : 42|11@0+ (1,0) [0|2047] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RFSRR_FO,LFSRR_FO,RSRR_FO,LRR_FO
- SG_ Vpath_Data2RollCnt : 46|2@0+ (1,0) [0|3] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2YawRateV : 2|1@0+ (1,0) [0|1] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,NVS_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2LongVelV : 1|1@0+ (1,0) [0|1] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,NVS_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2LatVelV : 47|1@0+ (1,0) [0|1] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2TravlDirctn : 4|2@0+ (1,0) [0|3] "" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2LongVel : 15|12@0- (0.0625,0) [-128|127.9375] "m/s" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,NVS_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2YawRate : 19|12@0- (0.0625,0) [-128|127.9375] "deg/s" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,NVS_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_Data2LatVel : 39|8@0- (0.05,0) [-6.4|6.35] "m/s" CIPM_FO,DMS_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
-
-BO_ 161 F_Master_Time_Sync: 7 EOCM_F_FO
- SG_ FTimeSyncMstrChksm : 35|12@0+ (1,0) [0|4095] "" AMM_FO,CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ FTimeSyncMstrClock : 7|32@0+ (1,0) [0|4294967295] "ms" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ SensorModeCmdLRR : 39|3@0+ (1,0) [0|7] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ SensorModeCmdSRR : 50|3@0+ (1,0) [0|7] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ SensorModeCmdFCamera : 53|3@0+ (1,0) [0|7] "" CIPM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ FTimeSyncMstrClockV : 36|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,LRR_FO,RFSRR_FO,LFSRR_FO
-
-BO_ 774 F_Vehicle_Path_Estimate: 8 EOCM_F_FO
- SG_ Vpath_RollingCount : 7|2@0+ (1,0) [0|3] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_TrnCtrLngOfstV : 1|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,LRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LFSRR_FO
- SG_ Vpath_Checksum : 50|11@0+ (1,0) [0|2047] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_TrnCtrLngOfst : 15|8@0- (0.1,0) [-12.8|12.7] "m" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,LRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LFSRR_FO
- SG_ Vpath_TrnCtrLatOfst : 21|14@0- (1,0) [-8192|8191] "m" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,LRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LFSRR_FO
- SG_ Vpath_Curvature : 39|16@0- (1E-005,0) [-0.32768|0.32767] "1/m" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,RSRR_FO,RFSRR_FO,LRR_FO,LFSRR_FO
- SG_ Vpath_CurvatureV : 0|1@0+ (1,0) [0|1] "" CIPM_FO,AMM_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,VIS2_FO,RRSRR_FO,VIS_FO,LRR_FO,RSRR_FO,RFSRR_FO,LFSRR_FO
-
-BO_ 848 F_Vision_Environment: 8 VIS_FO
- SG_ FwdVsnEnvIllum : 37|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsTngtOfHdngLnRtV : 1|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsTngtOfHdngLnRt : 31|8@0- (0.002,0) [-0.256|0.254] "m/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLnChngStatus : 39|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBurstChecksum : 55|16@0+ (1,0) [0|65535] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LaneSenseRollingCount : 7|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LaneSenseSystemOK : 4|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LaneSnsLLnPosValid : 2|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSenseDistToLLnEdge : 14|7@0+ (0.05,0) [0|6.35] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsRLnPosValid : 0|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsDistToRLnEdge : 22|7@0+ (0.05,0) [0|6.35] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LaneSenseTimeStampV : 5|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LaneSenseTimeStamp : 34|11@0+ (1,0) [0|2047] "ms" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LaneSenseSystemOKV : 3|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 849 F_Vision_Environment_2: 8 VIS_FO
- SG_ LnSnsLatVRelToRgtMrkg : 23|8@0- (0.02,0) [-2.56|2.54] "m/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM_F_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO
- SG_ LnSnsRtLnMrkgTypChgDst : 61|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsCrvtGrdntRtV : 63|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLnMrkgWdthRt : 62|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsRtAnchrLn : 57|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLtAnchrLn : 56|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLnCrvtrRghtV : 0|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLnCrvtrRght : 47|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsCrvtGrdntRt : 31|16@0- (5.96E-008,0) [-0.0019529728|0.0019529132] "1/rad/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBurstID : 2|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLatVRelToLftMrkg : 15|8@0- (0.02,0) [-2.56|2.54] "m/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 1184 R_SRR_Object_Header: 8 RSRR_FO
- SG_ RSRRNumValidTargets : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ RSrrRollingCnt : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSRRModeCmdFdbk : 4|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTimeStampV : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSrrTimeStamp : 10|11@0+ (1,0) [0|2047] "ms" EOCM_F_FO
- SG_ RSrrBurstChecksum : 55|16@0+ (1,0) [0|65535] "" EOCM_F_FO
- SG_ RSRRSnstvFltPrsntInt : 24|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRPlntAlgnInProc : 37|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRMsalgnYawRt : 47|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRMsalgnYawLt : 46|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRMsalgnRllRt : 35|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRMsalgnRllLt : 34|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRMsalgnPtchUp : 32|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRMsalgnPtchDn : 33|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRInitDiagCmplt : 40|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRHWFltPrsntInt : 25|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRExtIntrfrnc : 36|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRDiagSpare : 30|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRCANSgnlSpvFld : 29|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRCANRxErr : 28|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRCANIDAddrsUnsbl : 27|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRAntTngFltPrsnt : 26|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRAmbTmpOutRngLw : 42|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRAmbTmpOutRngHi : 41|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRAlgnFltPrsnt : 39|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRVltgOutRngLo : 44|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRVltgOutRngHi : 43|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRSvcAlgnInPrcs : 38|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RSRRSnsrBlckd : 45|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 1185 R_SRR_Object_Track1: 8 RSRR_FO
- SG_ RSrrBurstID1 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange1 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate1 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth1 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID1 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation1 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp1 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus1 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange1 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth1 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1186 R_SRR_Object_Track2: 8 RSRR_FO
- SG_ RSrrBurstID2 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange2 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate2 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth2 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID2 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation2 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp2 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus2 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange2 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth2 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1187 R_SRR_Object_Track3: 8 RSRR_FO
- SG_ RSrrBurstID3 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange3 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate3 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth3 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID3 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation3 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp3 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus3 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange3 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth3 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1188 R_SRR_Object_Track4: 8 RSRR_FO
- SG_ RSrrBurstID4 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange4 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate4 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth4 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID4 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation4 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp4 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus4 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange4 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth4 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1189 R_SRR_Object_Track5: 8 RSRR_FO
- SG_ RSrrBurstID5 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange5 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate5 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth5 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID5 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation5 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp5 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus5 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange5 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth5 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1190 R_SRR_Object_Track6: 8 RSRR_FO
- SG_ RSrrBurstID6 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange6 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate6 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth6 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID6 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation6 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp6 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus6 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange6 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth6 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1191 R_SRR_Object_Track7: 8 RSRR_FO
- SG_ RSrrBurstID7 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange7 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate7 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth7 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID7 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation7 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp7 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus7 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange7 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth7 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1192 R_SRR_Object_Track8: 8 RSRR_FO
- SG_ RSrrBurstID8 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange8 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate8 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth8 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID8 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation8 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp8 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus8 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange8 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth8 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1193 R_SRR_Object_Track9: 8 RSRR_FO
- SG_ RSrrBurstID9 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange9 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate9 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth9 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID9 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation9 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp9 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus9 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange9 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth9 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1194 R_SRR_Object_Track10: 8 RSRR_FO
- SG_ RSrrBurstID10 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkRange10 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RSrrTrkRRate10 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RSrrTrkAzimuth10 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RSrrTrkObjID10 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RSrrTrkObjElevation10 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkDynamProp10 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RSrrTrkMeasStatus10 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RSrrTrkObsRange10 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RSrrTrkRawAzimuth10 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1410 RVB_TVR_Debug: 6 EOCM_F_FO
- SG_ VBBrkRqActv : 7|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ PATOSTTC : 37|12@0+ (0.025,0) [0|102.375] "s" Dummy_FO
- SG_ BWTOSObjID : 27|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ BWTOSLonPstn : 23|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ VBSwInd : 10|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ VBBrkCtrlSt : 15|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ BrkPlsRqst : 6|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VBOpSt : 12|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ VBAccelOvrrd : 0|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VBUnavail : 1|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VBFld : 2|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VBDisbld : 3|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VBEnbl : 4|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VBBrkPrfReq : 5|1@0+ (1,0) [0|1] "" Dummy_FO
-
-BO_ 1216 LF_SRR_Object_Header: 8 LFSRR_FO
- SG_ LFSRRNumValidTargets : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ LFSrrRollingCnt : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSRRModeCmdFdbk : 4|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTimeStampV : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSrrTimeStamp : 10|11@0+ (1,0) [0|2047] "ms" EOCM_F_FO
- SG_ LFSrrBurstChecksum : 55|16@0+ (1,0) [0|65535] "" EOCM_F_FO
- SG_ LFSRRVltgOutRngLo : 44|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRVltgOutRngHi : 43|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRSvcAlgnInPrcs : 38|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRSnsrBlckd : 45|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRSnstvFltPrsntInt : 24|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRPlntAlgnInProc : 37|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRMsalgnYawRt : 47|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRMsalgnYawLt : 46|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRMsalgnRllRt : 35|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRMsalgnRllLt : 34|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRMsalgnPtchUp : 32|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRMsalgnPtchDn : 33|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRInitDiagCmplt : 40|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRHWFltPrsntInt : 25|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRExtIntrfrnc : 36|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRDiagSpare : 30|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRCANSgnlSpvFld : 29|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRCANRxErr : 28|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRCANIDAddrsUnsbl : 27|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRAntTngFltPrsnt : 26|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRAmbTmpOutRngLw : 42|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRAmbTmpOutRngHi : 41|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ LFSRRAlgnFltPrsnt : 39|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 1217 LF_SRR_Object_Track1: 8 LFSRR_FO
- SG_ LFSrrBurstID1 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange1 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate1 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth1 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID1 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation1 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp1 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus1 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkObsRange1 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth1 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1218 LF_SRR_Object_Track2: 8 LFSRR_FO
- SG_ LFSrrBurstID2 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange2 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate2 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth2 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID2 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation2 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp2 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus2 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkObsRange2 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth2 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1219 LF_SRR_Object_Track3: 8 LFSRR_FO
- SG_ LFSrrBurstID3 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange3 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate3 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth3 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID3 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation3 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp3 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus3 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkObsRange3 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth3 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1220 LF_SRR_Object_Track4: 8 LFSRR_FO
- SG_ LFSrrBurstID4 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange4 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate4 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkObsRange4 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrTrkAzimuth4 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID4 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation4 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp4 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus4 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth4 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1221 LF_SRR_Object_Track5: 8 LFSRR_FO
- SG_ LFSrrTrkObsRange5 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrBurstID5 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange5 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate5 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth5 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID5 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation5 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp5 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus5 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth5 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1222 LF_SRR_Object_Track6: 8 LFSRR_FO
- SG_ LFSrrTrkObsRange6 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrBurstID6 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange6 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate6 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth6 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID6 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation6 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp6 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus6 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth6 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1223 LF_SRR_Object_Track7: 8 LFSRR_FO
- SG_ LFSrrTrkObsRange7 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrBurstID7 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange7 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate7 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth7 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID7 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation7 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp7 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus7 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth7 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1224 LF_SRR_Object_Track8: 8 LFSRR_FO
- SG_ LFSrrTrkObsRange8 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrBurstID8 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange8 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate8 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth8 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID8 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation8 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp8 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus8 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth8 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1225 LF_SRR_Object_Track9: 8 LFSRR_FO
- SG_ LFSrrTrkObsRange9 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrBurstID9 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange9 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate9 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth9 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID9 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation9 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp9 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus9 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth9 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1226 LF_SRR_Object_Track10: 8 LFSRR_FO
- SG_ LFSrrTrkObsRange10 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ LFSrrBurstID10 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRange10 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ LFSrrTrkRRate10 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ LFSrrTrkAzimuth10 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ LFSrrTrkObjID10 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ LFSrrTrkObjElevation10 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkDynamProp10 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ LFSrrTrkMeasStatus10 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ LFSrrTrkRawAzimuth10 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
-
-BO_ 1232 RF_SRR_Object_Header: 8 RFSRR_FO
- SG_ RFSRRVltgOutRngLo : 44|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRVltgOutRngHi : 43|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRSvcAlgnInPrcs : 38|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRSnsrBlckd : 45|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRSnstvFltPrsntInt : 24|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRPlntAlgnInProc : 37|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRMsalgnYawRt : 47|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRMsalgnYawLt : 46|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRMsalgnRllRt : 35|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRMsalgnRllLt : 34|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRMsalgnPtchUp : 32|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRMsalgnPtchDn : 33|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRInitDiagCmplt : 40|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRHWFltPrsntInt : 25|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRExtIntrfrnc : 36|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRDiagSpare : 30|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRCANSgnlSpvFld : 29|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRCANRxErr : 28|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRCANIDAddrsUnsbl : 27|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRAntTngFltPrsnt : 26|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRAmbTmpOutRngLw : 42|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRAmbTmpOutRngHi : 41|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRAlgnFltPrsnt : 39|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RFSRRNumValidTargets : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ RFSrrRollingCnt : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSRRModeCmdFdbk : 4|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTimeStamp : 10|11@0+ (1,0) [0|2047] "ms" EOCM_F_FO
- SG_ RFSrrBurstChecksum : 55|16@0+ (1,0) [0|65535] "" EOCM_F_FO
- SG_ RFSrrTimeStampV : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 1233 RF_SRR_Object_Track1: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange1 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth1 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID1 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange1 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate1 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth1 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID1 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation1 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp1 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus1 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1234 RF_SRR_Object_Track2: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange2 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth2 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID2 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange2 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate2 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth2 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID2 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation2 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp2 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus2 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1235 RF_SRR_Object_Track3: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange3 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth3 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID3 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange3 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate3 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth3 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID3 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation3 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp3 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus3 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1236 RF_SRR_Object_Track4: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange4 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth4 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID4 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange4 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate4 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth4 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID4 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation4 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp4 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus4 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1237 RF_SRR_Object_Track5: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange5 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth5 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID5 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange5 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate5 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth5 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID5 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation5 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp5 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus5 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1238 RF_SRR_Object_Track6: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange6 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth6 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID6 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange6 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate6 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth6 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID6 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation6 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp6 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus6 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1239 RF_SRR_Object_Track7: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange7 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth7 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID7 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange7 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate7 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth7 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID7 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation7 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp7 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus7 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1240 RF_SRR_Object_Track8: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange8 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth8 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID8 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange8 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate8 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth8 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID8 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation8 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp8 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus8 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1241 RF_SRR_Object_Track9: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange9 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth9 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID9 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange9 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate9 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth9 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID9 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation9 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp9 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus9 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1242 RF_SRR_Object_Track10: 8 RFSRR_FO
- SG_ RFSrrTrkObsRange10 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RFSrrTrkRawAzimuth10 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RFSrrBurstID10 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkRange10 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RFSrrTrkRRate10 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RFSrrTrkAzimuth10 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RFSrrTrkObjID10 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RFSrrTrkObjElevation10 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RFSrrTrkDynamProp10 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RFSrrTrkMeasStatus10 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1056 F_Vision_Obj_Header: 6 VIS_FO
- SG_ FVsnSnsrBlckd : 24|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ ClstInPathVehObjID : 30|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FrtVsnFld : 6|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtVsnIniDiagSuccCmpt : 5|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtVsnSrvAlgnInPrcs : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FrtVsnUnvlbl : 7|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisionRollingCnt : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVISModeCmdFdbk : 4|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FVisionNumValidTrgts : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FVisionTimeStampV : 31|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisionTimeStamp : 10|11@0+ (1,0) [0|2047] "ms" EOCM_F_FO
- SG_ VISBurstChecksum : 39|16@0+ (1,0) [0|65535] "" EOCM_F_FO
-
-BO_ 1057 F_Vision_Obj_Track_1: 8 VIS_FO
- SG_ FwdVsnRngTrk1Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk1Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr1Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FwdVsnVertPosTrk1 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FVisBurstIDTrk1 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk1 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk1 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk1 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk1 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk1 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk1 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ ObjDirTrk1 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 1058 F_Vision_Obj_Track_2: 8 VIS_FO
- SG_ FwdVsnVertPosTrk2 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk2Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk2Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ ObjDirTrk2 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FwdVsnObjTypTr2Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FVisBurstIDTrk2 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk2 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk2 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk2 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk2 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk2 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk2 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1059 F_Vision_Obj_Track_3: 8 VIS_FO
- SG_ FwdVsnVertPosTrk3 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk3Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk3Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr3Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ ObjDirTrk3 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk3 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk3 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk3 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk3 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk3 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk3 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk3 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1060 F_Vision_Obj_Track_4: 8 VIS_FO
- SG_ FwdVsnVertPosTrk4 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FVisionMeasStatTrk4 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk4 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FwdVsnRngTrk4Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk4Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr4Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FVisBurstIDTrk4 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk4 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ ObjDirTrk4 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisionConfTrk4 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk4 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk4 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1061 F_Vision_Obj_Track_5: 8 VIS_FO
- SG_ FwdVsnVertPosTrk5 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk5Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk5Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr5Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ ObjDirTrk5 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk5 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk5 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk5 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk5 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk5 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk5 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk5 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1062 F_Vision_Obj_Track_6: 8 VIS_FO
- SG_ FwdVsnVertPosTrk6 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk6Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk6Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr6Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ ObjDirTrk6 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk6 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk6 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk6 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk6 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk6 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk6 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk6 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1538 LF_SRR_Trace_Data: 8 LFSRR_FO
- SG_ LFSRRYear : 7|8@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ LFSRRSerialNmbr : 39|32@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ LFSRRJulianDate : 15|24@0+ (1,0) [0|0] "" EOCM_F_FO
-
-BO_ 1537 R_SRR_Trace_data: 8 RSRR_FO
- SG_ RSRRYear : 7|8@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ RSRRSerialNmbr : 39|32@0+ (1,0) [0|0] "" EOCM_F_FO
- SG_ RSRRJulianDate : 15|24@0+ (1,0) [0|0] "" EOCM_F_FO
-
-BO_ 1089 F_Vision_Obj_Track_7: 8 VIS2_FO
- SG_ FVisBurstIDTrk7 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk7 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk7 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk7 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk7 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk7 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk7 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FwdVsnRngTrk7Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnObjTypTr7Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FwdVsnAzmthTrk7Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnVertPosTrk7 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ ObjDirTrk7 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 1090 F_Vision_Obj_Track_8: 8 VIS2_FO
- SG_ FVisBurstIDTrk8 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk8 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FwdVsnAzmthTrk8Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnVertPosTrk8 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk8Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnObjTypTr8Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ ObjDirTrk8 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisionConfTrk8 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk8 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk8 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk8 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk8 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1091 F_Vision_Obj_Track_9: 8 VIS2_FO
- SG_ FwdVsnVertPosTrk9 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ FwdVsnRngTrk9Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk9Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr9Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ ObjDirTrk9 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk9 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk9 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk9 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk9 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk9 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk9 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk9 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1092 F_Vision_Obj_Track_10: 8 VIS2_FO
- SG_ FwdVsnRngTrk10Rev : 16|12@0+ (0.1,0) [0|409.5] "m" EOCM_F_FO
- SG_ FwdVsnAzmthTrk10Rev : 10|10@0- (0.1,0) [-51.2|51.1] "deg" EOCM_F_FO
- SG_ FwdVsnObjTypTr10Rev : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ FwdVsnVertPosTrk10 : 53|6@0+ (0.25,-2) [-2|13.75] "deg" EOCM_F_FO
- SG_ ObjDirTrk10 : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FVisBurstIDTrk10 : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionObjectIDTrk10 : 7|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FVisionConfTrk10 : 36|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionAzRateTrk10 : 34|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FVisionRelLaneTrk10 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionMeasStatTrk10 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FVisionWidthTrk10 : 61|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
-
-BO_ 1120 F_LRR_Obj_Header: 8 LRR_FO
- SG_ FLRRRollingCount : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRModeCmdFdbk : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRNumValidTargets : 20|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ FLRRTimeStampV : 31|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRTimeStamp : 2|11@0+ (1,0) [0|2047] "ms" EOCM_F_FO
- SG_ FLRRRoadTypeInfo : 5|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRBurstChecksum : 55|16@0+ (1,0) [0|65535] "" EOCM_F_FO
- SG_ FLRRDiagSpare : 30|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRVltgOutRngLo : 44|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRVltgOutRngHi : 43|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRSvcAlgnInPrcs : 38|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRSnsrBlckd : 45|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRSnstvFltPrsntInt : 24|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRPlntAlgnInProc : 37|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRMsalgnYawRt : 47|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRMsalgnYawLt : 46|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRLonVelPlsblityFlt : 35|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRYawRtPlsblityFlt : 34|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRMsalgnPtchUp : 32|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRMsalgnPtchDn : 33|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRInitDiagCmplt : 40|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRHWFltPrsntInt : 25|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRExtIntrfrnc : 36|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRCANSgnlSpvFld : 29|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRCANRxErr : 28|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRTunlDtctd : 27|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRAmbTmpOutRngLw : 42|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRAmbTmpOutRngHi : 41|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRAntTngFltPrsnt : 26|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ FLRRAlgnFltPrsnt : 39|1@0+ (1,0) [0|1] "" EOCM_F_FO
-
-BO_ 1121 F_LRR_Obj_Track_1: 8 LRR_FO
- SG_ FLRRTrk1BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk1Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk1RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk1RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk1DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk1Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk1Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk1MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk1ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FLRRTrk1Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1122 F_LRR_Obj_Track_2: 8 LRR_FO
- SG_ FLRRTrk2BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk2Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk2RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk2RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk2DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk2Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk2Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk2MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk2ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FLRRTrk2Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1123 F_LRR_Obj_Track_3: 8 LRR_FO
- SG_ FLRRTrk3BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk3Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk3RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk3RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk3DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk3Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk3Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk3MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk3ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FLRRTrk3Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1124 F_LRR_Obj_Track_4: 8 LRR_FO
- SG_ FLRRTrk4BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk4Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk4RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk4RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk4DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk4Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk4Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk4MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk4ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FLRRTrk4Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1125 F_LRR_Obj_Track_5: 8 LRR_FO
- SG_ FLRRTrk5BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk5Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk5RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk5RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk5DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk5Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk5Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk5MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk5ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FLRRTrk5Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1126 F_LRR_Obj_Track_6: 8 LRR_FO
- SG_ FLRRTrk6BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk6Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk6RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk6Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk6RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk6DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk6Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk6Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk6MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk6ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1127 F_LRR_Obj_Track_7: 8 LRR_FO
- SG_ FLRRTrk7Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk7BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk7Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk7RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk7RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk7DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk7Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk7Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk7MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk7ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1128 F_LRR_Obj_Track_8: 8 LRR_FO
- SG_ FLRRTrk8Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk8BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk8Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk8RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk8RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk8DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk8Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk8Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk8MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk8ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1129 F_LRR_Obj_Track_9: 8 LRR_FO
- SG_ FLRRTrk9Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk9BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk9Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk9RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk9RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk9DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk9Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk9Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk9MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk9ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1130 F_LRR_Obj_Track_10: 8 LRR_FO
- SG_ FLRRTrk10Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk10BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk10Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk10RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk10RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk10DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk10Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk10Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk10MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk10ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1131 F_LRR_Obj_Track_11: 8 LRR_FO
- SG_ FLRRTrk11Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk11BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk11Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk11RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk11RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk11DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk11Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk11Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk11MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk11ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1132 F_LRR_Obj_Track_12: 8 LRR_FO
- SG_ FLRRTrk12Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk12BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk12Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk12RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk12RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk12DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk12Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk12Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk12MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk12ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1133 F_LRR_Obj_Track_13: 8 LRR_FO
- SG_ FLRRTrk13Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk13BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk13Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk13RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk13RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk13DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk13Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk13Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk13MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk13ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1134 F_LRR_Obj_Track_14: 8 LRR_FO
- SG_ FLRRTrk14Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk14BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk14Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk14RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk14RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk14DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk14Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk14Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk14MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk14ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1135 F_LRR_Obj_Track_15: 8 LRR_FO
- SG_ FLRRTrk15Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk15MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk15Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk15ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
- SG_ FLRRTrk15BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk15Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk15RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk15RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk15DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk15Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
-
-BO_ 1136 F_LRR_Obj_Track_16: 8 LRR_FO
- SG_ FLRRTrk16Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk16BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk16Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk16RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk16RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk16DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk16Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk16Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk16MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk16ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1137 F_LRR_Obj_Track_17: 8 LRR_FO
- SG_ FLRRTrk17Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk17BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk17Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk17RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk17RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk17DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk17Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk17Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk17MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk17ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1138 F_LRR_Obj_Track_18: 8 LRR_FO
- SG_ FLRRTrk18Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk18BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk18Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk18RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk18RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk18DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk18Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk18Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk18MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk18ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1139 F_LRR_Obj_Track_19: 8 LRR_FO
- SG_ FLRRTrk19Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk19BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk19Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk19RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk19RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk19DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk19Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk19Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk19MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk19ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1140 F_LRR_Obj_Track_20: 8 LRR_FO
- SG_ FLRRTrk20Conf : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk20BurstID : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk20Range : 5|11@0+ (0.125,0) [0|255.875] "m" EOCM_F_FO
- SG_ FLRRTrk20RangeRate : 10|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ FLRRTrk20RangeAccel : 31|9@0- (0.125,0) [-32|31.875] "m/s^2" EOCM_F_FO
- SG_ FLRRTrk20DynProp : 38|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk20Azimuth : 35|12@0- (0.125,0) [-256|255.875] "deg" EOCM_F_FO
- SG_ FLRRTrk20Width : 55|6@0+ (0.25,0) [0|15.75] "m" EOCM_F_FO
- SG_ FLRRTrk20MeasStatus : 7|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk20ObjectID : 61|6@0+ (1,0) [0|63] "" EOCM_F_FO
-
-BO_ 1141 Long_Range_Radar_add_Info_1: 8 LRR_FO
- SG_ FLRRAddInfo1BurstID : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ Cut_In_Out_Pot_Objtrk1 : 15|6@0+ (0.02,0) [0|1.26] "" EOCM_F_FO
- SG_ ObjLossInfoObjTrk1 : 9|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ Cut_In_Out_Pot_Objtrk2 : 23|6@0+ (0.02,0) [0|1.26] "" EOCM_F_FO
- SG_ ObjLossInfoObjTrk2 : 17|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ Cut_In_Out_Pot_Objtrk3 : 31|6@0+ (0.02,0) [0|1.26] "" EOCM_F_FO
- SG_ ObjLossInfoObjTrk3 : 25|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ Cut_In_Out_Pot_Objtrk4 : 39|6@0+ (0.02,0) [0|1.26] "" EOCM_F_FO
- SG_ ObjLossInfoObjTrk4 : 33|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ Cut_In_Out_Pot_Objtrk5 : 47|6@0+ (0.02,0) [0|1.26] "" EOCM_F_FO
- SG_ ObjLossInfoObjTrk5 : 41|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ Cut_In_Out_Pot_Objtrk6 : 55|6@0+ (0.02,0) [0|1.26] "" EOCM_F_FO
- SG_ ObjLossInfoObjTrk6 : 49|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1321 F_Fwd_Fus_Obj_TrackB_9: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn9 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB9RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB9Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB9MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB9DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB9RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB9RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB9Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB9ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB9ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB9ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB9ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB9ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB9ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB9NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB9LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB9LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1320 F_Fwd_Fus_Obj_TrackB_8: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn8 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB8RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB8Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB8MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB8DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB8RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB8RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB8Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB8ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB8ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB8ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB8ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB8ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB8ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB8NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB8LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB8LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1319 F_Fwd_Fus_Obj_TrackB_7: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn7 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB7RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB7Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB7MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB7DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB7RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB7RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB7Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB7ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB7ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB7ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB7ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB7ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB7ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB7NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB7LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB7LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1318 F_Fwd_Fus_Obj_TrackB_6: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn6 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB6RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB6Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB6MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB6DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB6RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB6RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB6Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB6ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB6ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB6ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB6ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB6ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB6ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB6NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB6LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB6LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1317 F_Fwd_Fus_Obj_TrackB_5: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn5 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB5RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB5Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB5MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB5DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB5RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB5RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB5Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB5ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB5ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB5ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB5ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB5ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB5ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB5NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB5LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB5LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1316 F_Fwd_Fus_Obj_TrackB_4: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn4 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB4RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB4Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB4MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB4DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB4RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB4RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB4Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB4ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB4ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB4ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB4ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB4ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB4ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB4NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB4LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB4LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1315 F_Fwd_Fus_Obj_TrackB_3: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn3 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB3RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB3Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB3MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB3DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB3RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB3RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB3Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB3ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB3ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB3ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB3ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB3ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB3ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB3NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB3LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB3LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1314 F_Fwd_Fus_Obj_TrackB_2: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn2 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB2RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB2Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB2MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB2DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB2RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB2RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB2Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB2ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB2ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB2ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB2ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB2ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB2ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB2NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB2LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB2LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1327 F_Fwd_Fus_Obj_TrackB_15: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn15 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB15RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB15Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB15MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB15DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB15RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB15RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB15Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB15ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB15ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB15ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB15ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTkB15ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB15ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB15NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB15LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB15LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1326 F_Fwd_Fus_Obj_TrackB_14: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn14 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB14RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB14Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB14MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB14DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB14RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB14RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB14Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB14ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB14ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB14ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB14ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB14ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB14ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB14NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB14LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB14LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1325 F_Fwd_Fus_Obj_TrackB_13: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn13 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB13RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB13Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB13MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB13DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB13RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB13RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB13Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB13ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB13ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB13ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB13ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB13ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB13ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB13NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB13LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB13LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1324 F_Fwd_Fus_Obj_TrackB_12: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn12 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB12RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB12Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB12MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB12DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB12RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB12RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB12Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB12ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB12ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB12ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB12ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB12ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB12ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB12NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB12LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB12LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1323 F_Fwd_Fus_Obj_TrackB_11: 7 EOCM_F_FO
- SG_ FwdFusTrkB11DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB11RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB11RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB11Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB11ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB11ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB11ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB11ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB11ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB11ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB11NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB11LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB11LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkBAnlgRlLn11 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB11RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB11Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB11MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
-
-BO_ 1322 F_Fwd_Fus_Obj_TrackB_10: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn10 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB10RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB10Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB10MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB10DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB10RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB10RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB10Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB10ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB10ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB10ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB10ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB10ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB10ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB10NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB10LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB10LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1313 F_Fwd_Fus_Obj_TrackB_1: 7 EOCM_F_FO
- SG_ FwdFusTrkBAnlgRlLn1 : 46|8@0- (0.1,0) [-12.8|12.7] "" Dummy_FO
- SG_ FwdFusTrkB1RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB1Width : 5|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FwdFusTrkB1MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkB1DynProp : 11|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB1RelLnAccl : 8|9@0- (0.125,0) [-32|31.875] "m/s^2" Dummy_FO
- SG_ FwdFusTrkB1RelLane : 31|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkB1Height : 54|6@0+ (0.25,0) [0|15.75] "m" Dummy_FO
- SG_ FFusTrkB1ObjSrcLFSrr : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB1ObjSrcLCSrr : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB1ObjSrcRCSrr : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB1ObjSrcRFSrr : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FFusTrkB1ObjSrcVIs : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB1ObjSrcLrr : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FwdFusTrkB1NmCycTrkd : 39|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB1LatPosDev : 36|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkB1LngPosDev : 33|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1305 F_Fwd_Fus_Obj_TrackA_9: 8 EOCM_F_FO
- SG_ FwdFusTrkA9RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA9ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA9MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA9LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA9RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA9Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA9LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA9RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA9MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA9ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1304 F_Fwd_Fus_Obj_TrackA_8: 8 EOCM_F_FO
- SG_ FwdFusTrkA8RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA8ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA8MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA8LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA8RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA8Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA8LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA8RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA8MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA8ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1303 F_Fwd_Fus_Obj_TrackA_7: 8 EOCM_F_FO
- SG_ FwdFusTrkA7RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA7ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA7MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA7LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA7RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA7Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA7LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA7RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA7MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA7ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1302 F_Fwd_Fus_Obj_TrackA_6: 8 EOCM_F_FO
- SG_ FwdFusTrkA6RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA6ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA6MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA6LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA6RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA6Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA6LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA6RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA6MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA6ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1301 F_Fwd_Fus_Obj_TrackA_5: 8 EOCM_F_FO
- SG_ FwdFusTrkA5RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA5ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA5MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA5LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA5RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA5Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA5LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA5RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA5MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA5ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1300 F_Fwd_Fus_Obj_TrackA_4: 8 EOCM_F_FO
- SG_ FwdFusTrkA4RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA4ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA4MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA4LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA4RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA4Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA4LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA4RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA4MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA4ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1299 F_Fwd_Fus_Obj_TrackA_3: 8 EOCM_F_FO
- SG_ FwdFusTrkA3RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA3ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA3MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA3LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA3RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA3Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA3LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA3RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA3MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA3ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1298 F_Fwd_Fus_Obj_TrackA_2: 8 EOCM_F_FO
- SG_ FwdFusTrkA2RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA2ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA2MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA2LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA2RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA2Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA2LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA2RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA2MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA2ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1311 F_Fwd_Fus_Obj_TrackA_15: 8 EOCM_F_FO
- SG_ FwdFusTrkA15RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA15ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA15MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA15LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA15RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA15Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA15LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA15RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA15MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA15ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1310 F_Fwd_Fus_Obj_TrackA_14: 8 EOCM_F_FO
- SG_ FwdFusTrkA14RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA14ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA14MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA14LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA14RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA14Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA14LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA14RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA14MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA14ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1309 F_Fwd_Fus_Obj_TrackA_13: 8 EOCM_F_FO
- SG_ FwdFusTrkA13RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA13ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA13MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA13LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA13RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA13Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA13LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA13RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA13MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA13ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1308 F_Fwd_Fus_Obj_TrackA_12: 8 EOCM_F_FO
- SG_ FwdFusTrkA12RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA12ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA12MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA12LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA12RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA12Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA12LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA12RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA12MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA12ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1307 F_Fwd_Fus_Obj_TrackA_11: 8 EOCM_F_FO
- SG_ FwdFusTrkA11ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA11MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA11LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA11RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA11Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA11LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA11RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA11MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA11ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
- SG_ FwdFusTrkA11RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
-
-BO_ 1306 F_Fwd_Fus_Obj_TrackA_10: 8 EOCM_F_FO
- SG_ FwdFusTrkA10RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA10ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA10MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA10LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA10RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA10Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA10LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA10RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA10MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA10ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1297 F_Fwd_Fus_Obj_TrackA_1: 8 EOCM_F_FO
- SG_ FwdFusTrkA1RollingCnt : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA1ObjectID : 5|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ FwdFusTrkA1MsgIndex : 15|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ FwdFusTrkA1LongPos : 11|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
- SG_ FwdFusTrkA1RelLongVel : 31|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA1Confidence : 36|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA1LatPos : 34|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ FwdFusTrkA1RelLatVel : 55|11@0- (0.125,0) [-128|127.875] "m/s" Dummy_FO
- SG_ FwdFusTrkA1MeasStatus : 60|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ FwdFusTrkA1ObjType : 58|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 1296 F_Fwd_Fus_Obj_Header: 7 EOCM_F_FO
- SG_ F_FusHeadRollingCount : 7|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ F_FusHeadFuncState : 5|2@0+ (1,0) [0|3] "" Dummy_FO
- SG_ F_FusHedNmValTargts : 3|4@0+ (1,0) [0|15] "" Dummy_FO
- SG_ F_FusHead_LrrOK : 15|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHead_LFSRROK : 14|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHead_VIsOK : 13|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHead_MapDataOK : 12|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHeadTimStmpV : 11|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHeadTimStmp : 10|11@0+ (1,0) [0|2047] "ms" Dummy_FO
- SG_ F_FusHead_LCSRROK : 31|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHead_RCSRROK : 30|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHead_RFSRROK : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ F_FusHed_ObjClstrCurv : 28|13@0- (5E-005,0) [-0.2048|0.20475] "1/m" Dummy_FO
- SG_ F_FusHdObjClstTanHdng : 47|8@0- (0.002,0) [-0.256|0.254] "m/m" Dummy_FO
- SG_ RoadTypeInfo : 55|3@0+ (1,0) [0|7] "" Dummy_FO
-
-BO_ 257 USDT_Req_to_All_FO_ECUs: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" LRSRR_FO,_DOFIMU2_FO,_DOFIMU1_FO,DMS_FO,AMM_FO,EOCM2A_K2_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM2A_IMX6_FO,EOCM2A_K1_FO,NVS_FO,CIPM_FO,VIS2_FO,RRSRR_FO,VIS_FO,RFSRR_FO,LRR_FO,LFSRR_FO,RSRR_FO,EOCM_F_FO
-
-BO_ 584 USDT_Req_to_6DOFIMU2_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" _DOFIMU2_FO
-
-BO_ 1348 UUDT_Resp_From_6DOFIMU1_FO: 8 _DOFIMU1_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1604 USDT_Resp_From_6DOFIMU1_FO: 8 _DOFIMU1_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 580 USDT_Req_to_6DOFIMU1_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" _DOFIMU1_FO
-
-BO_ 1349 UUDT_Resp_From_DMS_FO: 8 DMS_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1605 USDT_Resp_From_DMS_FO: 8 DMS_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 581 USDT_Req_to_DMS_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" DMS_FO
-
-BO_ 1372 UUDT_Resp_From_AMM_FO: 8 AMM_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1628 USDT_Resp_From_AMM_FO: 8 AMM_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 604 USDT_Req_to_AMM_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" AMM_FO
-
-BO_ 1622 USDT_Resp_From_EOCM2B_IMX6_FO: 8 EOCM2B_IMX6_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 1366 UUDT_Resp_From_EOCM2B_IMX6_FO: 8 EOCM2B_IMX6_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" TestTool_FO
-
-BO_ 598 USDT_Req_to_EOCM2B_IMX6_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" EOCM2B_IMX6_FO
-
-BO_ 590 USDT_Req_to_Free_4E_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" Vector__XXX
-
-BO_ 1338 VPDR_Debug: 8 EOCM_F_FO
- SG_ FrtRWARateDiagFA : 43|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FrtRWABiasDiagFA : 42|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ HWAFrtVal : 41|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ HWADotValFrt : 40|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAxRangeFA : 39|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAxRateFA : 38|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAxBiasFA : 37|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehAxCompFA : 36|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAxVal : 35|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAxVal : 34|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FrtRWACorrFA : 33|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FrtRWARangeDiagFA : 32|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAyBiasFA : 31|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehAyCompFA : 30|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAyVal : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAyVal : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehAxCorrFA : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAxRangeFA : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAxRateFA : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAxBiasFA : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehWzVal : 23|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehWzVal : 22|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehAyCorrDiagFA : 21|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAyRangeFA : 20|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAyRateFA : 19|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehAyBiasFA : 18|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAyRangeFA : 17|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehAyRateFA : 16|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehWzCorrDiagFA : 15|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehWzRangeFA : 14|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehWzRateFA : 13|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S1VehWzBiasFA : 12|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehWzRangeFA : 11|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehWzRateFA : 10|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ S2VehWzBiasFA : 9|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehWzCompFA : 8|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlVxLFCorrDiagFA : 7|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlVxRFCorrDiagFA : 6|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlVxLRCorrDiagFA : 5|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlVxRRCorrDiagFA : 4|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlLFVal : 3|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlRFVal : 2|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlLRVal : 1|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ WhlRRVal : 0|1@0+ (1,0) [0|1] "" Dummy_FO
-
-BO_ 1328 Diag_Debug1: 8 EOCM_F_FO
- SG_ AlrtWrnIndReqFP : 1|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AlrtWrnIndReqFA : 0|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILRSRRSnsr_FP : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILRSRRSnsr_FA : 23|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILRSRRFrehns_FA : 22|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathEstCrvCSFP : 21|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathEstCrvCSFA : 20|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathWzEstCSFP : 19|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathWzEstCSFA : 18|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathVyEstCSFP : 17|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathVyEstCSFA : 16|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathVxEstCSFP : 15|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VehPathVxEstCSFA : 14|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTTCCSFP : 13|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTTCCSFA : 12|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLyCSFP : 11|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLyCSFA : 10|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThLxVxAxCSFP : 9|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThLxVxAxCSFA : 8|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ CurSetValDiagFP : 7|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ CurSetValDiagFA : 6|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ CrsAltDvrSlTpDiagFP : 5|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ CrsAltDvrSlTpDiagFA : 4|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FCAStatDiagFP : 3|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FCAStatDiagFA : 2|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBBrkCtrlStFP : 62|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBBrkCtrlStFA : 61|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBOpStFP : 60|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBOpStFA : 59|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBBrkCtrlAccFP : 58|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBBrkCtrlAccFA : 57|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBAxlTrqRqFP : 56|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ RVBAxlTrqRqFA : 55|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRUPATTCFP : 54|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRUPATTCFA : 53|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtObjIDFP : 52|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtObjIDFA : 51|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtTTCFP : 50|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtTTCFA : 49|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtLxFP : 48|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtLxFA : 47|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtLyFP : 46|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TVRHiThrtLyFA : 45|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFFuncStFP : 44|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFFuncStFA : 43|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFObjIDFP : 42|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFObjIDFA : 41|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFLatPstnVelRatFP : 40|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFLatPstnVelRatFA : 39|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFLonPstnVelFP : 38|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFLonPstnVelFA : 37|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFRltvLatVelDiagFP : 36|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFRltvLatVelDiagFA : 35|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFRltvLatPstnDiagFP : 34|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFRltvLatPstnDiagFA : 33|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFNrRltvLonPstnFP : 32|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFNrRltvLonPstnFA : 31|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFLonPstnVelRatFP : 30|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFLonPstnVelRatFA : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFConfDiagFP : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFConfDiagFA : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFRltvLnDiagFP : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ROFRltvLnDiagFA : 25|1@0+ (1,0) [0|1] "" Dummy_FO
-
-BO_ 1335 Diag_Debug3: 8 EOCM_F_FO
- SG_ BrkSysCmdAxDiagFPQ : 63|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ BrkSysCmdAxDiagFAQ : 62|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AxleTorqReqDiagFPQ : 61|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AxleTorqReqDiagFAQ : 60|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AutoBrkTypeDiagFPQ : 59|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AutoBrkTypeDiagFAQ : 58|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTTCFPQ : 57|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTTCFAQ : 56|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTmpMemFPQ : 55|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTmpMemFAQ : 54|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLxVxAxFPQ : 53|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLxVxAxFAQ : 52|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtVyFPQ : 51|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtVyFAQ : 50|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLyFPQ : 49|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLyFAQ : 48|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtConPriFPQ : 47|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtConPriFAQ : 46|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtCJLFPQ : 45|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtCJLFAQ : 44|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPDynPropDiagFPQ : 43|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPDynPropDiagFAQ : 42|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRdTypInfoFPQ : 41|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRdTypInfoFAQ : 40|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRltvLnDiagFPQ : 39|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRltvLnDiagFAQ : 38|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumCycDiagFPQ : 37|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumCycDiagFAQ : 36|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumFusCyclsFPQ : 35|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumFusCyclsFAQ : 34|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNrRltvLonPstnFPQ : 33|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNrRltvLonPstnFAQ : 32|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonVelAccRatFPQ : 31|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonVelAccRatFAQ : 30|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPstnVelRatFPQ : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPstnVelRatFAQ : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPosVelAccFPQ : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPosVelAccFAQ : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatVelDiagFPQ : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatVelDiagFAQ : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatPstnDiagFPQ : 23|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatPstnDiagFAQ : 22|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFConfDiagFPQ : 21|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFConfDiagFAQ : 20|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFOvrlpRtlChk_FAQ : 19|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFOvrlpRtlChk_FAQ : 18|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRROvrlpRtlChk_FAQ : 17|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISOvrlpRtlChk_FAQ : 16|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISAlign_FAQ : 15|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISSnsr_FAQ : 14|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISSnsr_FPQ : 13|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISFrshns_FAQ : 12|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRAlign_FAQ : 11|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRFrshns_FAQ : 10|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRSnsr_FAQ : 9|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRSnsr_FPQ : 8|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRAlign_FAQ : 7|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRFrehns_FAQ : 6|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRSnsr_FAQ : 5|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRSnsr_FPQ : 4|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRSnsr_FPQ : 3|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRSnsr_FAQ : 2|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRFrshns_FAQ : 1|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRAlign_FAQ : 0|1@0+ (1,0) [0|1] "" Dummy_FO
-
-BO_ 1331 Diag_Debug2: 8 EOCM_F_FO
- SG_ TCPHiThrtTmpMemFP : 63|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTmpMemFA : 62|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtConPriFP : 61|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtConPriFA : 60|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtCJLFP : 59|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTTCFP : 58|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtTTCFA : 57|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtVyFP : 56|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtVyFA : 55|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLyFP : 54|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLyFA : 53|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLxVxAxFP : 52|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtLxVxAxFA : 51|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRdTypInfoFP : 50|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRdTypInfoFA : 49|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AutoBrkTypeDiagFA : 48|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ BrkSysCmdAxDiagFP : 47|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ BrkSysCmdAxDiagFA : 46|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AxleTorqReqDiagFP : 45|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AxleTorqReqDiagFA : 44|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPDynPropDiagFP : 43|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPDynPropDiagFA : 42|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ TCPHiThrtCJLFA : 41|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumFusCyclsFP : 40|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ AutoBrkTypeDiagFP : 39|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumFusCyclsFA : 38|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatVelDiagFP : 37|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatVelDiagFA : 36|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatPstnDiagFP : 35|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLatPstnDiagFA : 34|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumCycDiagFP : 33|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNumCycDiagFA : 32|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRltvLnDiagFP : 31|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFRltvLnDiagFA : 30|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFConfDiagFP : 29|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFConfDiagFA : 28|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonVelAccRatFP : 27|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonVelAccRatFA : 26|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPstnVelRatFP : 25|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPstnVelRatFA : 24|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNrRltvLonPstnFP : 23|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFNrRltvLonPstnFA : 22|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPosVelAccFP : 21|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ FOFLonPosVelAccFA : 20|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISOvrlpRtlChk_FA : 19|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRROvrlpRtlChk_FA : 18|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFOvrlpRtlChk_FA : 17|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFOvrlpRtlChk_FA : 16|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISAlign_FA : 15|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISFrshns_FA : 14|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISSnsr_FP : 13|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ VISSnsr_FA : 12|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRAlign_FA : 11|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRFrshns_FA : 10|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRSnsr_FP : 9|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ LRRSnsr_FA : 8|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRAlign_FA : 7|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRFrehns_FA : 6|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRSnsr_FP : 5|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ IRFSRRSnsr_FA : 4|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRAlign_FA : 3|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRFrshns_FA : 2|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRSnsr_FP : 1|1@0+ (1,0) [0|1] "" Dummy_FO
- SG_ ILFSRRSnsr_FA : 0|1@0+ (1,0) [0|1] "" Dummy_FO
-
-BO_ 1787 AL_Test_Tool_Rsp_RFSRR: 8 RFSRR_FO
- SG_ RFSRREngRspDta : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" Dummy_FO
-
-BO_ 1788 AL_Test_Tool_Rsp_LFSRR: 8 LFSRR_FO
- SG_ LFSRREngRspDta : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" Dummy_FO
-
-BO_ 1790 AL_Test_Tool_Req_RFSRR: 8 Dummy_FO
- SG_ RFSRREngCmdDta : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" RFSRR_FO
-
-BO_ 1791 AL_Test_Tool_Req_LFSRR: 8 Dummy_FO
- SG_ LFSRREngCmdDta : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" LFSRR_FO
-
-BO_ 1786 AL_Test_Tool_Rsp_RSRR: 8 RSRR_FO
- SG_ RSRREngRspDta : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" Dummy_FO
-
-BO_ 1789 AL_Test_Tool_Req_RSRR: 8 Dummy_FO
- SG_ RSRREngCmdDta : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" RSRR_FO
-
-BO_ 1149 F_LRR_Azmth_Rate_Info_4: 8 LRR_FO
- SG_ FLRRTrk20AzmthRate : 50|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk19AzmthRate : 45|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk18AzmthRate : 24|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk17AzmthRate : 19|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk16AzmthRate : 14|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRAzRtInf4BurstID : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1148 F_LRR_Azmth_Rate_Info_3: 8 LRR_FO
- SG_ FLRRTrk15AzmthRate : 50|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk14AzmthRate : 45|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk13AzmthRate : 24|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk12AzmthRate : 19|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk11AzmthRate : 14|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRAzRtInf3BurstID : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1147 F_LRR_Azmth_Rate_Info_2: 8 LRR_FO
- SG_ FLRRTrk9AzmthRate : 45|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk8AzmthRate : 24|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk7AzmthRate : 19|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk6AzmthRate : 14|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk10AzmthRate : 50|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRAzRtInf2BurstID : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1146 F_LRR_Azmth_Rate_Info_1: 8 LRR_FO
- SG_ FLRRTrk5AzmthRate : 50|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk4AzmthRate : 45|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk3AzmthRate : 24|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk2AzmthRate : 19|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRTrk1AzmthRate : 14|11@0- (0.125,0) [-128|127.875] "deg/s" EOCM_F_FO
- SG_ FLRRAzRtInf1BurstID : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1143 Long_Range_Radar_add_Info_3: 8 LRR_FO
- SG_ FLRRAddInfo3BurstID : 57|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk13ObstType : 60|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk20ObstTypeConf : 52|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk20ObstType : 55|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk19ObstTypeConf : 44|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk19ObstType : 47|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk18ObstTypeConf : 36|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk18ObstType : 39|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk17ObstTypeConf : 28|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk17ObstType : 31|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk16ObstTypeConf : 20|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk16ObstType : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk15ObstTypeConf : 12|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk15ObstType : 15|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk14ObstTypeConf : 4|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk14ObstType : 7|3@0+ (1,0) [0|7] "" EOCM_F_FO
-
-BO_ 1142 Long_Range_Radar_add_Info_2: 8 LRR_FO
- SG_ FLRRAddInfo2BurstID : 62|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ FLRRTrk13ObstTypeConf : 60|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk12ObstTypeConf : 52|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk12ObstType : 55|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk11ObstTypeConf : 44|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk11ObstType : 47|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk10ObstTypeConf : 36|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk10ObstType : 39|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk9ObstTypeConf : 28|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk9ObstType : 31|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk8ObstTypeConf : 20|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk8ObstType : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk7ObstTypeConf : 12|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk7ObstType : 15|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ FLRRTrk1ObstTypeConf : 4|5@0+ (0.0323,0) [0|1.0013] "" EOCM_F_FO
- SG_ FLRRTrk1ObstType : 7|3@0+ (1,0) [0|7] "" EOCM_F_FO
-
-BO_ 851 F_Vision_Environment_4: 8 VIS_FO
- SG_ LnMrkg3LnPrvwDst : 45|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsTtlNmLnMrkgDetRt : 4|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsRtLinCrsTm : 25|5@0+ (0.1,0) [0|3.1] "s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsNumPrlLnsDetRt : 33|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsNumPrlLnsDetLt : 36|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsCrvtGrdntLftV : 31|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLtLinCrsTm : 30|5@0+ (0.1,0) [0|3.1] "s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnPrvwDst : 50|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnMrkgTypChgDst : 61|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnMrkgTypChgDst : 40|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnMrkgWdth : 62|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4LnMarkrElvtd : 51|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg4AnchrLnLin : 57|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnMrkgWdth : 41|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3LnMarkrElvtd : 46|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkg3AnchrLnLin : 52|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBurstID2 : 1|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsCrvtGrdntLft : 15|16@0- (5.96E-008,0) [-0.0019529728|0.0019529132] "1/rad/s" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 597 USDT_Req_to_VIS2_FO: 8 TestTool_FO
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" CIPM_FO,VIS2_FO
-
-BO_ 1204 RR_SRR_Object_Track4: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth4 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate4 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange4 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange4 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID4 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation4 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus4 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp4 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth4 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID4 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1203 RR_SRR_Object_Track3: 8 RRSRR_FO
- SG_ RRSrrTrkRawAzimuth3 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate3 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange3 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange3 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID3 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation3 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus3 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp3 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth3 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
- SG_ RRSrrBurstID3 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
-
-BO_ 1202 RR_SRR_Object_Track2: 8 RRSRR_FO
- SG_ RRSrrBurstID2 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkRawAzimuth2 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate2 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange2 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange2 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID2 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation2 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus2 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp2 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth2 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
-
-BO_ 1201 RR_SRR_Object_Track1: 8 RRSRR_FO
- SG_ RRSrrBurstID1 : 63|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkRawAzimuth1 : 61|6@0- (1,0) [-32|31] "deg" EOCM_F_FO
- SG_ RRSrrTrkRRate1 : 18|11@0- (0.125,0) [-128|127.875] "m/s" EOCM_F_FO
- SG_ RRSrrTrkRange1 : 2|11@0+ (0.02,0) [0|40.94] "m" EOCM_F_FO
- SG_ RRSrrTrkObsRange1 : 53|6@0- (0.02,0) [-0.64|0.62] "m" EOCM_F_FO
- SG_ RRSrrTrkObjID1 : 39|5@0+ (1,0) [0|31] "" EOCM_F_FO
- SG_ RRSrrTrkObjElevation1 : 20|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkMeasStatus1 : 55|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSrrTrkDynamProp1 : 23|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSrrTrkAzimuth1 : 34|11@0- (0.125,0) [-128|127.875] "deg" EOCM_F_FO
-
-BO_ 1200 RR_SRR_Object_Header: 8 RRSRR_FO
- SG_ RRSrrTimeStampV : 15|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSrrTimeStamp : 10|11@0+ (1,0) [0|2047] "" EOCM_F_FO
- SG_ RRSrrRollingCnt : 1|2@0+ (1,0) [0|3] "" EOCM_F_FO
- SG_ RRSRRNumValidTargets : 14|4@0+ (1,0) [0|15] "" EOCM_F_FO
- SG_ RRSRRModeCmdFdbk : 4|3@0+ (1,0) [0|7] "" EOCM_F_FO
- SG_ RRSRRVltgOutRngLo : 44|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRVltgOutRngHi : 43|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRSvcAlgnInPrcs : 38|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRSnsrBlckd : 45|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRSnstvFltPrsntInt : 24|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRPlntAlgnInProc : 37|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRMsalgnYawRt : 47|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRMsalgnYawLt : 46|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRMsalgnRllRt : 35|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRMsalgnRllLt : 34|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRMsalgnPtchUp : 32|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRMsalgnPtchDn : 33|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRInitDiagCmplt : 40|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRHWFltPrsntInt : 25|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRExtIntrfrnc : 36|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRDiagSpare : 30|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRCANSgnlSpvFld : 29|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRCANRxErr : 28|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRCANIDAddrsUnsbl : 27|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRAntTngFltPrsnt : 26|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRAmbTmpOutRngLw : 42|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRAmbTmpOutRngHi : 41|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSRRAlgnFltPrsnt : 39|1@0+ (1,0) [0|1] "" EOCM_F_FO
- SG_ RRSrrBurstChecksum : 55|16@0+ (1,0) [0|65535] "" EOCM_F_FO
-
-BO_ 850 F_Vision_Environment_3: 8 VIS_FO
- SG_ LnSnsTtlNmLnMrkgDetLt : 58|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLtLnMrkgWdth : 63|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLtLnMrkgTypChgDst : 62|4@0+ (10,0) [0|150] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsTngtOfHdngLnLftV : 23|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsTngtOfHdngLnLft : 31|8@0- (0.002,0) [-0.256|0.254] "m/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLnCrvtrLftV : 15|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsLnCrvtrLft : 39|16@0- (9.53E-007,0) [-0.031227904|0.031226951] "1/m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkrTypRght : 50|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkrTypLft : 53|3@0+ (1,0) [0|7] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkrElvtdRght : 54|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnMrkrElvtdLft : 55|1@0+ (1,0) [0|1] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnSnsBurstID1 : 7|2@0+ (1,0) [0|3] "" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnQltyCnfdncLvlRght : 22|7@0+ (0.7874016,0) [0|100.0000032] "%" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnQltyCnfdncLvlLft : 14|7@0+ (0.7874016,0) [0|100.0000032] "%" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnPrvwDstncRght : 2|3@0+ (10,0) [0|70] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
- SG_ LnPrvwDstncLft : 5|3@0+ (10,0) [0|70] "m" EOCM2A_IMX6_FO,EOCM2A_K2_FO,EOCM2A_K1_FO,EOCM2B_IMX6_FO,EOCM2B_K2_FO,EOCM2B_K1_FO,EOCM_F_FO
-
-BO_ 1414 RVB_TVR_Debug2_FO: 7 EOCM_F_FO
- SG_ VBBrkCntlAccel : 45|12@0- (0.01,0) [-20.48|20.47] "m/s^2" Dummy_FO
- SG_ VBTOSObjID : 35|6@0+ (1,0) [0|63] "" Dummy_FO
- SG_ VBTOSTTC : 31|12@0+ (0.025,0) [0|102.375] "s" Dummy_FO
- SG_ VBTOSLatPstn : 11|11@0- (0.125,0) [-128|127.875] "m" Dummy_FO
- SG_ VBTOSLonPstn : 7|12@0- (0.125,0) [-256|255.875] "m" Dummy_FO
-
diff --git a/opendbc/cadillac_ct6_powertrain.dbc b/opendbc/cadillac_ct6_powertrain.dbc
deleted file mode 100644
index f139b1dbd4a734..00000000000000
--- a/opendbc/cadillac_ct6_powertrain.dbc
+++ /dev/null
@@ -1,244 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: K16_BECM K73_TCIC K9_BCM K43_PSCM K17_EBCM K20_ECM K114B_HPCM NEO K124_ASCM
-VAL_TABLE_ TurnSignals 2 "Right Turn" 1 "Left Turn" 0 "None" ;
-VAL_TABLE_ ACCLeadCar 1 "Present" 0 "Not Present" ;
-VAL_TABLE_ ACCCmdActive 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ BrakePedalPressed 1 "Pressed" 0 "Depressed" ;
-VAL_TABLE_ DistanceButton 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ LKAButton 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ ACCButtons 6 "Cancel" 5 "Main" 3 "Set" 2 "Resume" 1 "None" ;
-VAL_TABLE_ PRNDL 3 "Reverse" 2 "Drive" 1 "Neutral" 0 "Park" ;
-VAL_TABLE_ DoorStatus 1 "Opened" 0 "Closed" ;
-VAL_TABLE_ SeatBeltStatus 1 "Latched" 0 "Unlatched" ;
-VAL_TABLE_ LKASteeringCmdActive 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ ACCGapLevel 3 "Far" 2 "Med" 1 "Near" 0 "Inactive" ;
-VAL_TABLE_ GasRegenCmdActiveInv 1 "Inactive" 0 "Active" ;
-VAL_TABLE_ GasRegenCmdActive 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ LKATorqueDeliveredStatus 3 "Failed" 2 "Temp. Limited" 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ HandsOffSWDetectionStatus 1 "Hands On" 0 "Hands Off" ;
-VAL_TABLE_ HandsOffSWDetectionMode 2 "Failed" 1 "Enabled" 0 "Disabled" ;
-
-
-BO_ 717 ASCM_2CD: 5 K124_ASCM
-
-BO_ 869 ASCM_365: 4 K124_ASCM
-
-BO_ 1034 ASCM_40A: 7 K124_ASCM
-
-BO_ 1296 ASCM_510: 4 K124_ASCM
-
-BO_ 1930 ASCM_78A: 7 K124_ASCM
-
-BO_ 190 ECMAcceleratorPos: 6 K20_ECM
- SG_ BrakePedalPos : 15|8@0+ (1,0) [0|0] "sticky" NEO
- SG_ GasPedalAndAcc : 23|8@0+ (1,0) [0|0] "" NEO
-
-BO_ 201 ECMEngineStatus: 8 K20_ECM
- SG_ EngineTPS : 39|8@0+ (0.392156863,0) [0|100.000000065] "%" NEO
- SG_ EngineRPM : 15|16@0+ (0.25,0) [0|0] "RPM" NEO
-
-BO_ 209 EBCMBrakePedalTorque: 7 K17_EBCM
- SG_ BrakePedalTorque : 3|12@0+ (1,0) [0|0] "" NEO
-
-BO_ 241 EBCMBrakePedalPosition: 6 K17_EBCM
- SG_ BrakePedalPosition : 15|8@0+ (1,0) [0|255] "" NEO
-
-BO_ 298 BCMDoorBeltStatus: 8 K9_BCM
- SG_ RearLeftDoor : 8|1@0+ (1,0) [0|0] "" NEO
- SG_ FrontLeftDoor : 9|1@0+ (1,0) [0|0] "" NEO
- SG_ FrontRightDoor : 10|1@0+ (1,0) [0|0] "" NEO
- SG_ RearRightDoor : 23|1@0+ (1,0) [0|0] "" NEO
- SG_ LeftSeatBelt : 12|1@0+ (1,0) [0|0] "" NEO
- SG_ RightSeatBelt : 53|1@0+ (1,0) [0|0] "" NEO
-
-BO_ 309 ECMPRDNL: 8 K20_ECM
- SG_ PRNDL : 2|3@0+ (1,0) [0|0] "" NEO
-
-BO_ 320 BCMTurnSignals: 3 K9_BCM
- SG_ TurnSignals : 19|2@0+ (1,0) [0|0] "" NEO
-
-BO_ 336 ASCMLKASStatus: 1 NEO
- SG_ Available : 7|1@0+ (1,0) [0|0] "" NEO
-
-BO_ 338 ASCMLKASteeringCmd: 6 NEO
- SG_ LKASteeringCmdActive : 7|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmd : 5|14@0- (1,0) [0|0] "" NEO
- SG_ RollingCounter : 23|2@0+ (1,0) [0|0] "" NEO
- SG_ SetMe1 : 21|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASVehicleSpeed : 20|13@0+ (0.22,0) [0|0] "kph" NEO
- SG_ LKASMode : 36|2@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmdChecksum : 33|10@0+ (1,0) [0|0] "" NEO
-
-BO_ 340 ASCMBLKASteeringCmd: 6 NEO
- SG_ LKASteeringCmdActive : 7|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmd : 5|14@0- (1,0) [0|0] "" NEO
- SG_ RollingCounter : 23|2@0+ (1,0) [0|0] "" NEO
- SG_ SetMe1 : 21|1@0+ (1,0) [0|0] "" NEO
- SG_ LKASVehicleSpeed : 20|13@0+ (0.22,0) [0|0] "kph" NEO
- SG_ LKASMode : 36|2@0+ (1,0) [0|0] "" NEO
- SG_ LKASteeringCmdChecksum : 33|10@0+ (1,0) [0|0] "" NEO
-
-BO_ 381 MSG_17D: 8 K20_ECM
- SG_ MSG17D_AccPower : 35|12@0- (1,0) [0|0] "" NEO
-
-BO_ 356 PSCMStatus: 8 K43_PSCM
- SG_ LKATorqueDeliveredStatus : 7|3@0+ (1,0) [0|7] "" NEO
- SG_ LKADriverAppldTrq : 2|11@0- (0.01,0) [-10.24|10.23] "Nm" NEO
- SG_ LKATBDTorque : 21|14@0- (-0.005,0) [-10.24|10.23] "Nm" NEO
- SG_ RollingCounter : 39|2@0+ (1,0) [0|0] "" NEO
- SG_ LKATotalTorqueDelivered : 37|14@0- (0.01,0) [-10.24|10.23] "Nm" NEO
-
-BO_ 417 AcceleratorPedal: 7 XXX
- SG_ AcceleratorPedal : 55|8@0+ (1,0) [0|0] "" NEO
-
-BO_ 451 GasAndAcc: 8 XXX
- SG_ GasPedalAndAcc2 : 55|8@0+ (1,0) [0|0] "" NEO
-
-BO_ 452 AcceleratorPedal2: 8 XXX
- SG_ AcceleratorPedal2 : 47|8@0+ (1,0) [0|0] "" NEO
-
-BO_ 481 ASCMSteeringButton: 7 K124_ASCM
- SG_ DistanceButton : 22|1@0+ (1,0) [0|0] "" NEO
- SG_ LKAButton : 23|1@0+ (1,0) [0|0] "" NEO
- SG_ ACCButtons : 46|3@0+ (1,0) [0|0] "" NEO
-
-BO_ 485 PSCMSteeringAngle: 8 K43_PSCM
- SG_ SteeringWheelAngle : 15|16@0- (0.0625,0) [-540|540] "deg" NEO
- SG_ SteeringWheelRate : 27|12@0- (0.5,0) [-100|100] "deg/s" NEO
-
-BO_ 489 EBCMVehicleDynamic: 8 K17_EBCM
- SG_ YawRate : 51|12@0- (0.0625,0) [-2047|2047] "grad/s" NEO
- SG_ LateralAcceleration : 3|12@0- (0.0161,0) [-2047|2047] "m/s2" NEO
- SG_ BrakePedalPressed : 6|1@0+ (1,0) [0|0] "" NEO
-
-BO_ 711 BECMBatteryVoltageCurrent: 6 K17_EBCM
- SG_ HVBatteryVoltage : 31|12@0+ (0.125,0) [0|511.875] "V" NEO
- SG_ HVBatteryCurrent : 12|13@0- (0.15,0) [-614.4|614.25] "A" NEO
-
-BO_ 715 ASCMGasRegenCmd: 8 K124_ASCM
- SG_ GasRegenAlwaysOne : 9|1@0+ (1,1) [1|1] "" NEO
- SG_ GasRegenAlwaysThree : 15|2@0+ (1,1) [1|1] "" NEO
- SG_ GasRegenChecksum : 47|24@0+ (1,0) [0|0] "" NEO
- SG_ GasRegenCmdActiveInv : 32|1@0+ (1,0) [0|0] "" NEO
- SG_ GasRegenFullStopActive : 13|1@0+ (1,0) [0|0] "" NEO
- SG_ GasRegenCmdActive : 0|1@0+ (1,0) [0|0] "" NEO
- SG_ RollingCounter : 7|2@0+ (1,0) [0|0] "" NEO
- SG_ RollingCounter2 : 36|4@0+ (1,0) [0|0] "" NEO
- SG_ GasRegenAlwaysOne2 : 23|1@0+ (1,0) [0|1] "" NEO
- SG_ GasRegenCmd : 22|15@0+ (1,0) [0|0] "" NEO
-
-BO_ 810 TCICOnStarGPSPosition: 8 K73_TCIC
- SG_ GPSLongitude : 39|32@0+ (1,0) [0|0] "milliarcsecond" NEO
- SG_ GPSLatitude : 7|32@0+ (1,0) [0|0] "milliarcsecond" NEO
-
-BO_ 840 EBCMWheelSpdFront: 4 K17_EBCM
- SG_ FLWheelSpd : 7|16@0+ (0.0311,0) [0|255] "km/h" NEO
- SG_ FRWheelSpd : 23|16@0+ (0.0311,0) [0|255] "km/h" NEO
-
-BO_ 842 EBCMWheelSpdRear: 4 K17_EBCM
- SG_ RLWheelSpd : 7|16@0+ (0.0311,0) [0|255] "km/h" NEO
- SG_ RRWheelSpd : 23|16@0+ (0.0311,0) [0|255] "km/h" NEO
-
-BO_ 880 ASCMActiveCruiseControlStatus: 6 K124_ASCM
- SG_ ACCLeadCar : 44|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACCAlwaysOne2 : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACCAlwaysOne : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACCSpeedSetpoint : 19|12@0+ (1,0) [0|0] "km/h" NEO
- SG_ ACCGapLevel : 21|2@0+ (1,0) [0|0] "" NEO
- SG_ ACCResumeButton : 1|1@0+ (1,0) [0|0] "" NEO
- SG_ ACCCmdActive : 23|1@0+ (1,0) [0|0] "" NEO
-
-BO_ 1001 ECMVehicleSpeed: 8 K20_ECM
- SG_ VehicleSpeed : 7|16@0+ (0.01,0) [0|0] "mph" NEO
-
-BO_ 1033 ASCMKeepAlive: 7 NEO
- SG_ ASCMKeepAliveAllZero : 7|56@0+ (1,0) [0|0] "" NEO
-
-BO_ 1217 ECMEngineCoolantTemp: 8 K20_ECM
- SG_ EngineCoolantTemp : 23|8@0+ (1,-40) [0|0] "°C" NEO
-
-BO_ 1249 VIN_Part2: 8 K20_ECM
- SG_ VINPart2 : 7|64@0+ (1,0) [0|0] "" NEO
-
-BO_ 1300 VIN_Part1: 8 K20_ECM
- SG_ VINPart1 : 7|64@0+ (1,0) [0|0] "" NEO
-
-BO_ 1912 PSCM_778: 8 K43_PSCM
-
-BO_TX_BU_ 338 : K124_ASCM,NEO;
-BO_TX_BU_ 880 : NEO,K124_ASCM;
-BO_TX_BU_ 1033 : K124_ASCM,NEO;
-BO_TX_BU_ 715 : NEO,K124_ASCM;
-
-
-CM_ BU_ K16_BECM "Battery Energy Control Module";
-CM_ BU_ K73_TCIC "Telematics Communication Control Module";
-CM_ BU_ K9_BCM "Body Control Module";
-CM_ BU_ K43_PSCM "Power Steering Control Module";
-CM_ BU_ K17_EBCM "Electronic Brake Control Module";
-CM_ BU_ K20_ECM "Engine Control Module";
-CM_ BU_ K114B_HPCM "Hybrid Powertrain Control Module";
-CM_ BU_ NEO "Comma NEO";
-CM_ BU_ K124_ASCM "Active Safety Control Module";
-CM_ SG_ 381 MSG17D_AccPower "Need to investigate";
-CM_ SG_ 190 GasPedalAndAcc "ACC baseline is 62";
-CM_ SG_ 451 GasPedalAndAcc2 "ACC baseline is 62";
-CM_ SG_ 715 RollingCounter2 "Values cycle between 0, 7, 10, 13";
-BA_DEF_ "UseGMParameterIDs" INT 0 0;
-BA_DEF_ "ProtocolType" STRING ;
-BA_DEF_ "BusType" STRING ;
-BA_DEF_DEF_ "UseGMParameterIDs" 1;
-BA_DEF_DEF_ "ProtocolType" "GMLAN";
-BA_DEF_DEF_ "BusType" "";
-BA_ "BusType" "CAN";
-BA_ "ProtocolType" "GMLAN";
-BA_ "UseGMParameterIDs" 0;
-VAL_ 481 DistanceButton 1 "Active" 0 "Inactive" ;
-VAL_ 481 LKAButton 1 "Active" 0 "Inactive" ;
-VAL_ 481 ACCButtons 6 "Cancel" 5 "Main" 3 "Set" 2 "Resume" 1 "None" ;
-VAL_ 309 PRNDL 3 "Reverse" 2 "Drive" 1 "Neutral" 0 "Park" ;
-VAL_ 338 LKASteeringCmdActive 1 "Active" 0 "Inactive" ;
-VAL_ 338 LKASMode 2 "supercruise" 1 "lkas" 0 "Inactive" ;
-VAL_ 880 ACCLeadCar 1 "Present" 0 "Not Present" ;
-VAL_ 880 ACCGapLevel 3 "Far" 2 "Med" 1 "Near" 0 "Inactive" ;
-VAL_ 880 ACCResumeButton 1 "Pressed" 0 "Depressed" ;
-VAL_ 880 ACCCmdActive 1 "Active" 0 "Inactive" ;
-VAL_ 356 LKATorqueDeliveredStatus 7 "Override Fault" 6 "LKAS Fault but Responsive" 5 "TBD but Responsive" 4 "TBD but Responsive" 3 "Fault" 1 "Active" 0 "Inactive" ;
-VAL_ 489 BrakePedalPressed 1 "Pressed" 0 "Depressed" ;
-VAL_ 715 GasRegenCmdActiveInv 1 "Inactive" 0 "Active" ;
-VAL_ 715 GasRegenCmdActive 1 "Active" 0 "Inactive" ;
-
diff --git a/opendbc/can/SConscript b/opendbc/can/SConscript
new file mode 100644
index 00000000000000..4e67fc7974000b
--- /dev/null
+++ b/opendbc/can/SConscript
@@ -0,0 +1,22 @@
+Import('env', 'envCython', 'cereal')
+
+import os
+from opendbc.can.process_dbc import process
+
+dbcs = []
+for x in sorted(os.listdir('../')):
+ if x.endswith(".dbc"):
+ def compile_dbc(target, source, env):
+ process(source[0].path, target[0].path)
+ in_fn = [os.path.join('../', x), 'dbc_template.cc']
+ out_fn = os.path.join('dbc_out', x.replace(".dbc", ".cc"))
+ dbc = env.Command(out_fn, in_fn, compile_dbc)
+ dbcs.append(dbc)
+
+libdbc = env.SharedLibrary('libdbc', ["dbc.cc", "parser.cc", "packer.cc", "common.cc"]+dbcs, LIBS=["capnp", "kj"])
+
+# Build packer and parser
+lenv = envCython.Clone()
+lenv["LINKFLAGS"] += [libdbc[0].get_labspath()]
+lenv.Program('parser_pyx.so', 'parser_pyx.pyx')
+lenv.Program('packer_pyx.so', 'packer_pyx.pyx')
diff --git a/panda/examples/__init__.py b/opendbc/can/__init__.py
similarity index 100%
rename from panda/examples/__init__.py
rename to opendbc/can/__init__.py
diff --git a/opendbc/can/can_define.py b/opendbc/can/can_define.py
new file mode 100644
index 00000000000000..ad79432a7ae436
--- /dev/null
+++ b/opendbc/can/can_define.py
@@ -0,0 +1,2 @@
+from opendbc.can.parser_pyx import CANDefine # pylint: disable=no-name-in-module, import-error
+assert CANDefine
diff --git a/opendbc/can/common.cc b/opendbc/can/common.cc
new file mode 100644
index 00000000000000..d0ace8c8f0331f
--- /dev/null
+++ b/opendbc/can/common.cc
@@ -0,0 +1,214 @@
+#include "common.h"
+
+unsigned int honda_checksum(unsigned int address, uint64_t d, int l) {
+ d >>= ((8-l)*8); // remove padding
+ d >>= 4; // remove checksum
+
+ int s = 0;
+ while (address) { s += (address & 0xF); address >>= 4; }
+ while (d) { s += (d & 0xF); d >>= 4; }
+ s = 8-s;
+ s &= 0xF;
+
+ return s;
+}
+
+unsigned int toyota_checksum(unsigned int address, uint64_t d, int l) {
+ d >>= ((8-l)*8); // remove padding
+ d >>= 8; // remove checksum
+
+ unsigned int s = l;
+ while (address) { s += address & 0xFF; address >>= 8; }
+ while (d) { s += d & 0xFF; d >>= 8; }
+
+ return s & 0xFF;
+}
+
+unsigned int subaru_checksum(unsigned int address, uint64_t d, int l) {
+ d >>= ((8-l)*8); // remove padding
+
+ unsigned int s = 0;
+ while (address) { s += address & 0xFF; address >>= 8; }
+ l -= 1; // checksum is first byte
+ while (l) { s += d & 0xFF; d >>= 8; l -= 1; }
+
+ return s & 0xFF;
+}
+
+unsigned int chrysler_checksum(unsigned int address, uint64_t d, int l) {
+ /* This function does not want the checksum byte in the input data.
+ jeep chrysler canbus checksum from http://illmatics.com/Remote%20Car%20Hacking.pdf */
+ uint8_t checksum = 0xFF;
+ for (int j = 0; j < (l - 1); j++) {
+ uint8_t shift = 0x80;
+ uint8_t curr = (d >> 8*j) & 0xFF;
+ for (int i=0; i<8; i++) {
+ uint8_t bit_sum = curr & shift;
+ uint8_t temp_chk = checksum & 0x80U;
+ if (bit_sum != 0U) {
+ bit_sum = 0x1C;
+ if (temp_chk != 0U) {
+ bit_sum = 1;
+ }
+ checksum = checksum << 1;
+ temp_chk = checksum | 1U;
+ bit_sum ^= temp_chk;
+ } else {
+ if (temp_chk != 0U) {
+ bit_sum = 0x1D;
+ }
+ checksum = checksum << 1;
+ bit_sum ^= checksum;
+ }
+ checksum = bit_sum;
+ shift = shift >> 1;
+ }
+ }
+ return ~checksum & 0xFF;
+}
+
+// Static lookup table for fast computation of CRC8 poly 0x2F, aka 8H2F/AUTOSAR
+uint8_t crc8_lut_8h2f[256];
+
+void gen_crc_lookup_table(uint8_t poly, uint8_t crc_lut[]) {
+ uint8_t crc;
+ int i, j;
+
+ for (i = 0; i < 256; i++) {
+ crc = i;
+ for (j = 0; j < 8; j++) {
+ if ((crc & 0x80) != 0)
+ crc = (uint8_t)((crc << 1) ^ poly);
+ else
+ crc <<= 1;
+ }
+ crc_lut[i] = crc;
+ }
+}
+
+void init_crc_lookup_tables() {
+ // At init time, set up static lookup tables for fast CRC computation.
+
+ gen_crc_lookup_table(0x2F, crc8_lut_8h2f); // CRC-8 8H2F/AUTOSAR for Volkswagen
+}
+
+unsigned int volkswagen_crc(unsigned int address, uint64_t d, int l) {
+ // Volkswagen uses standard CRC8 8H2F/AUTOSAR, but they compute it with
+ // a magic variable padding byte tacked onto the end of the payload.
+ // https://www.autosar.org/fileadmin/user_upload/standards/classic/4-3/AUTOSAR_SWS_CRCLibrary.pdf
+
+ uint8_t crc = 0xFF; // Standard init value for CRC8 8H2F/AUTOSAR
+
+ // CRC the payload first, skipping over the first byte where the CRC lives.
+ for (int i = 1; i < l; i++) {
+ crc ^= (d >> (i*8)) & 0xFF;
+ crc = crc8_lut_8h2f[crc];
+ }
+
+ // Look up and apply the magic final CRC padding byte, which permutes by CAN
+ // address, and additionally (for SOME addresses) by the message counter.
+ uint8_t counter = ((d >> 8) & 0xFF) & 0x0F;
+ switch(address) {
+ case 0x86: // LWI_01 Steering Angle
+ crc ^= (uint8_t[]){0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86}[counter];
+ break;
+ case 0x9F: // EPS_01 Electric Power Steering
+ crc ^= (uint8_t[]){0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5}[counter];
+ break;
+ case 0xAD: // Getriebe_11 Automatic Gearbox
+ crc ^= (uint8_t[]){0x3F,0x69,0x39,0xDC,0x94,0xF9,0x14,0x64,0xD8,0x6A,0x34,0xCE,0xA2,0x55,0xB5,0x2C}[counter];
+ break;
+ case 0xFD: // ESP_21 Electronic Stability Program
+ crc ^= (uint8_t[]){0xB4,0xEF,0xF8,0x49,0x1E,0xE5,0xC2,0xC0,0x97,0x19,0x3C,0xC9,0xF1,0x98,0xD6,0x61}[counter];
+ break;
+ case 0x106: // ESP_05 Electronic Stability Program
+ crc ^= (uint8_t[]){0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07}[counter];
+ break;
+ case 0x117: // ACC_10 Automatic Cruise Control
+ crc ^= (uint8_t[]){0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC,0xAC}[counter];
+ break;
+ case 0x120: // TSK_06 Drivetrain Coordinator
+ crc ^= (uint8_t[]){0xC4,0xE2,0x4F,0xE4,0xF8,0x2F,0x56,0x81,0x9F,0xE5,0x83,0x44,0x05,0x3F,0x97,0xDF}[counter];
+ break;
+ case 0x121: // Motor_20 Driver Throttle Inputs
+ crc ^= (uint8_t[]){0xE9,0x65,0xAE,0x6B,0x7B,0x35,0xE5,0x5F,0x4E,0xC7,0x86,0xA2,0xBB,0xDD,0xEB,0xB4}[counter];
+ break;
+ case 0x122: // ACC_06 Automatic Cruise Control
+ crc ^= (uint8_t[]){0x37,0x7D,0xF3,0xA9,0x18,0x46,0x6D,0x4D,0x3D,0x71,0x92,0x9C,0xE5,0x32,0x10,0xB9}[counter];
+ break;
+ case 0x126: // HCA_01 Heading Control Assist
+ crc ^= (uint8_t[]){0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA}[counter];
+ break;
+ case 0x12B: // GRA_ACC_01 Steering wheel controls for ACC
+ crc ^= (uint8_t[]){0x6A,0x38,0xB4,0x27,0x22,0xEF,0xE1,0xBB,0xF8,0x80,0x84,0x49,0xC7,0x9E,0x1E,0x2B}[counter];
+ break;
+ case 0x187: // EV_Gearshift "Gear" selection data for EVs with no gearbox
+ crc ^= (uint8_t[]){0x7F,0xED,0x17,0xC2,0x7C,0xEB,0x44,0x21,0x01,0xFA,0xDB,0x15,0x4A,0x6B,0x23,0x05}[counter];
+ break;
+ case 0x30C: // ACC_02 Automatic Cruise Control
+ crc ^= (uint8_t[]){0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F}[counter];
+ break;
+ case 0x30F: // SWA_01 Lane Change Assist (SpurWechselAssistent)
+ crc ^= (uint8_t[]){0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C}[counter];
+ break;
+ case 0x3C0: // Klemmen_Status_01 ignition and starting status
+ crc ^= (uint8_t[]){0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3}[counter];
+ break;
+ case 0x65D: // ESP_20 Electronic Stability Program
+ crc ^= (uint8_t[]){0xAC,0xB3,0xAB,0xEB,0x7A,0xE1,0x3B,0xF7,0x73,0xBA,0x7C,0x9E,0x06,0x5F,0x02,0xD9}[counter];
+ break;
+ default: // As-yet undefined CAN message, CRC check expected to fail
+ printf("Attempt to CRC check undefined Volkswagen message 0x%02X\n", address);
+ crc ^= (uint8_t[]){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}[counter];
+ break;
+ }
+ crc = crc8_lut_8h2f[crc];
+
+ return crc ^ 0xFF; // Return after standard final XOR for CRC8 8H2F/AUTOSAR
+}
+
+
+unsigned int pedal_checksum(uint64_t d, int l) {
+ uint8_t crc = 0xFF;
+ uint8_t poly = 0xD5; // standard crc8
+
+ d >>= ((8-l)*8); // remove padding
+ d >>= 8; // remove checksum
+
+ int i, j;
+ for (i = 0; i < l - 1; i++) {
+ crc ^= (d >> (i*8)) & 0xFF;
+ for (j = 0; j < 8; j++) {
+ if ((crc & 0x80) != 0) {
+ crc = (uint8_t)((crc << 1) ^ poly);
+ }
+ else {
+ crc <<= 1;
+ }
+ }
+ }
+ return crc;
+}
+
+
+uint64_t read_u64_be(const uint8_t* v) {
+ return (((uint64_t)v[0] << 56)
+ | ((uint64_t)v[1] << 48)
+ | ((uint64_t)v[2] << 40)
+ | ((uint64_t)v[3] << 32)
+ | ((uint64_t)v[4] << 24)
+ | ((uint64_t)v[5] << 16)
+ | ((uint64_t)v[6] << 8)
+ | (uint64_t)v[7]);
+}
+
+uint64_t read_u64_le(const uint8_t* v) {
+ return ((uint64_t)v[0]
+ | ((uint64_t)v[1] << 8)
+ | ((uint64_t)v[2] << 16)
+ | ((uint64_t)v[3] << 24)
+ | ((uint64_t)v[4] << 32)
+ | ((uint64_t)v[5] << 40)
+ | ((uint64_t)v[6] << 48)
+ | ((uint64_t)v[7] << 56));
+}
diff --git a/opendbc/can/common.h b/opendbc/can/common.h
new file mode 100644
index 00000000000000..dd91a6ce729a6f
--- /dev/null
+++ b/opendbc/can/common.h
@@ -0,0 +1,72 @@
+#pragma once
+
+#include
+#include
+#include
+
+#include "common_dbc.h"
+#include
+#include "cereal/gen/cpp/log.capnp.h"
+
+#define MAX_BAD_COUNTER 5
+
+// Helper functions
+unsigned int honda_checksum(unsigned int address, uint64_t d, int l);
+unsigned int toyota_checksum(unsigned int address, uint64_t d, int l);
+unsigned int subaru_checksum(unsigned int address, uint64_t d, int l);
+unsigned int chrysler_checksum(unsigned int address, uint64_t d, int l);
+void init_crc_lookup_tables();
+unsigned int volkswagen_crc(unsigned int address, uint64_t d, int l);
+unsigned int pedal_checksum(uint64_t d, int l);
+uint64_t read_u64_be(const uint8_t* v);
+uint64_t read_u64_le(const uint8_t* v);
+
+class MessageState {
+public:
+ uint32_t address;
+ unsigned int size;
+
+ std::vector parse_sigs;
+ std::vector vals;
+
+ uint16_t ts;
+ uint64_t seen;
+ uint64_t check_threshold;
+
+ uint8_t counter;
+ uint8_t counter_fail;
+
+ bool parse(uint64_t sec, uint16_t ts_, uint8_t * dat);
+ bool update_counter_generic(int64_t v, int cnt_size);
+};
+
+class CANParser {
+private:
+ const int bus;
+
+ const DBC *dbc = NULL;
+ std::unordered_map message_states;
+
+public:
+ bool can_valid = false;
+ uint64_t last_sec = 0;
+
+ CANParser(int abus, const std::string& dbc_name,
+ const std::vector &options,
+ const std::vector &sigoptions);
+ void UpdateCans(uint64_t sec, const capnp::List::Reader& cans);
+ void UpdateValid(uint64_t sec);
+ void update_string(std::string data, bool sendcan);
+ std::vector query_latest();
+};
+
+class CANPacker {
+private:
+ const DBC *dbc = NULL;
+ std::map, Signal> signal_lookup;
+ std::map message_lookup;
+
+public:
+ CANPacker(const std::string& dbc_name);
+ uint64_t pack(uint32_t address, const std::vector &signals, int counter);
+};
diff --git a/opendbc/can/common.pxd b/opendbc/can/common.pxd
new file mode 100644
index 00000000000000..5519140fa80d99
--- /dev/null
+++ b/opendbc/can/common.pxd
@@ -0,0 +1,84 @@
+# distutils: language = c++
+#cython: language_level=3
+
+from libc.stdint cimport uint32_t, uint64_t, uint16_t
+from libcpp.vector cimport vector
+from libcpp.map cimport map
+from libcpp.string cimport string
+from libcpp.unordered_set cimport unordered_set
+from libcpp cimport bool
+
+
+cdef extern from "common_dbc.h":
+ ctypedef enum SignalType:
+ DEFAULT,
+ HONDA_CHECKSUM,
+ HONDA_COUNTER,
+ TOYOTA_CHECKSUM,
+ PEDAL_CHECKSUM,
+ PEDAL_COUNTER,
+ VOLKSWAGEN_CHECKSUM,
+ VOLKSWAGEN_COUNTER,
+ SUBARU_CHECKSUM,
+ CHRYSLER_CHECKSUM
+
+ cdef struct Signal:
+ const char* name
+ int b1, b2, bo
+ bool is_signed
+ double factor, offset
+ SignalType type
+
+ cdef struct Msg:
+ const char* name
+ uint32_t address
+ unsigned int size
+ size_t num_sigs
+ const Signal *sigs
+
+ cdef struct Val:
+ const char* name
+ uint32_t address
+ const char* def_val
+ const Signal *sigs
+
+ cdef struct DBC:
+ const char* name
+ size_t num_msgs
+ const Msg *msgs
+ const Val *vals
+ size_t num_vals
+
+ cdef struct SignalParseOptions:
+ uint32_t address
+ const char* name
+ double default_value
+
+
+ cdef struct MessageParseOptions:
+ uint32_t address
+ int check_frequency
+
+ cdef struct SignalValue:
+ uint32_t address
+ uint16_t ts
+ const char* name
+ double value
+
+ cdef struct SignalPackValue:
+ const char * name
+ double value
+
+
+cdef extern from "common.h":
+ cdef const DBC* dbc_lookup(const string);
+
+ cdef cppclass CANParser:
+ bool can_valid
+ CANParser(int, string, vector[MessageParseOptions], vector[SignalParseOptions])
+ void update_string(string, bool)
+ vector[SignalValue] query_latest()
+
+ cdef cppclass CANPacker:
+ CANPacker(string)
+ uint64_t pack(uint32_t, vector[SignalPackValue], int counter)
diff --git a/opendbc/can/common_dbc.h b/opendbc/can/common_dbc.h
new file mode 100644
index 00000000000000..e5c12ba6c26474
--- /dev/null
+++ b/opendbc/can/common_dbc.h
@@ -0,0 +1,84 @@
+#pragma once
+
+#include
+#include
+#include
+
+#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))
+
+struct SignalPackValue {
+ const char* name;
+ double value;
+};
+
+struct SignalParseOptions {
+ uint32_t address;
+ const char* name;
+ double default_value;
+};
+
+struct MessageParseOptions {
+ uint32_t address;
+ int check_frequency;
+};
+
+struct SignalValue {
+ uint32_t address;
+ uint16_t ts;
+ const char* name;
+ double value;
+};
+
+enum SignalType {
+ DEFAULT,
+ HONDA_CHECKSUM,
+ HONDA_COUNTER,
+ TOYOTA_CHECKSUM,
+ PEDAL_CHECKSUM,
+ PEDAL_COUNTER,
+ VOLKSWAGEN_CHECKSUM,
+ VOLKSWAGEN_COUNTER,
+ SUBARU_CHECKSUM,
+ CHRYSLER_CHECKSUM,
+};
+
+struct Signal {
+ const char* name;
+ int b1, b2, bo;
+ bool is_signed;
+ double factor, offset;
+ bool is_little_endian;
+ SignalType type;
+};
+
+struct Msg {
+ const char* name;
+ uint32_t address;
+ unsigned int size;
+ size_t num_sigs;
+ const Signal *sigs;
+};
+
+struct Val {
+ const char* name;
+ uint32_t address;
+ const char* def_val;
+ const Signal *sigs;
+};
+
+struct DBC {
+ const char* name;
+ size_t num_msgs;
+ const Msg *msgs;
+ const Val *vals;
+ size_t num_vals;
+};
+
+const DBC* dbc_lookup(const std::string& dbc_name);
+
+void dbc_register(const DBC* dbc);
+
+#define dbc_init(dbc) \
+static void __attribute__((constructor)) do_dbc_init_ ## dbc(void) { \
+ dbc_register(&dbc); \
+}
diff --git a/selfdrive/can/dbc.cc b/opendbc/can/dbc.cc
similarity index 92%
rename from selfdrive/can/dbc.cc
rename to opendbc/can/dbc.cc
index 95d5e4d791394a..6587de7fe0163a 100644
--- a/selfdrive/can/dbc.cc
+++ b/opendbc/can/dbc.cc
@@ -1,7 +1,6 @@
-#include
#include
-#include "common.h"
+#include "common_dbc.h"
namespace {
diff --git a/common/dbc.py b/opendbc/can/dbc.py
similarity index 80%
rename from common/dbc.py
rename to opendbc/can/dbc.py
index 693b2985a4cf62..32d8fffa4c1d2c 100755
--- a/common/dbc.py
+++ b/opendbc/can/dbc.py
@@ -12,15 +12,16 @@ def int_or_float(s):
else:
return float(s)
+
DBCSignal = namedtuple(
"DBCSignal", ["name", "start_bit", "size", "is_little_endian", "is_signed",
"factor", "offset", "tmin", "tmax", "units"])
-class dbc(object):
+class dbc():
def __init__(self, fn):
self.name, _ = os.path.splitext(os.path.basename(fn))
- with open(fn) as f:
+ with open(fn, encoding="ascii") as f:
self.txt = f.readlines()
self._warned_addresses = set()
@@ -41,7 +42,7 @@ def __init__(self, fn):
self.def_vals = defaultdict(list)
# lookup to bit reverse each byte
- self.bits_index = [(i & ~0b111) + ((-i-1) & 0b111) for i in xrange(64)]
+ self.bits_index = [(i & ~0b111) + ((-i - 1) & 0b111) for i in range(64)]
for l in self.txt:
l = l.strip()
@@ -55,7 +56,7 @@ def __init__(self, fn):
name = dat.group(2)
size = int(dat.group(3))
- ids = int(dat.group(1), 0) # could be hex
+ ids = int(dat.group(1), 0) # could be hex
if ids in self.msgs:
sys.exit("Duplicate address detected %d %s" % (ids, self.name))
@@ -73,15 +74,15 @@ def __init__(self, fn):
print("bad SG {0}".format(l))
sgname = dat.group(1)
- start_bit = int(dat.group(go+2))
- signal_size = int(dat.group(go+3))
- is_little_endian = int(dat.group(go+4))==1
- is_signed = dat.group(go+5)=='-'
- factor = int_or_float(dat.group(go+6))
- offset = int_or_float(dat.group(go+7))
- tmin = int_or_float(dat.group(go+8))
- tmax = int_or_float(dat.group(go+9))
- units = dat.group(go+10)
+ start_bit = int(dat.group(go + 2))
+ signal_size = int(dat.group(go + 3))
+ is_little_endian = int(dat.group(go + 4)) == 1
+ is_signed = dat.group(go + 5) == '-'
+ factor = int_or_float(dat.group(go + 6))
+ offset = int_or_float(dat.group(go + 7))
+ tmin = int_or_float(dat.group(go + 8))
+ tmax = int_or_float(dat.group(go + 9))
+ units = dat.group(go + 10)
self.msgs[ids][1].append(
DBCSignal(sgname, start_bit, signal_size, is_little_endian,
@@ -94,21 +95,16 @@ def __init__(self, fn):
if dat is None:
print("bad VAL {0}".format(l))
- ids = int(dat.group(1), 0) # could be hex
+ ids = int(dat.group(1), 0) # could be hex
sgname = dat.group(2)
defvals = dat.group(3)
- defvals = defvals.replace("?",r"\?") #escape sequence in C++
+ defvals = defvals.replace("?", r"\?") # escape sequence in C++
defvals = defvals.split('"')[:-1]
- defs = defvals[1::2]
- #cleanup, convert to UPPER_CASE_WITH_UNDERSCORES
- for i,d in enumerate(defs):
- d = defs[i].strip().upper()
- defs[i] = d.replace(" ","_")
-
- defvals[1::2] = defs
- defvals = '"'+"".join(str(i) for i in defvals)+'"'
+ # convert strings to UPPER_CASE_WITH_UNDERSCORES
+ defvals[1::2] = [d.strip().upper().replace(" ", "_") for d in defvals[1::2]]
+ defvals = '"' + "".join(str(i) for i in defvals) + '"'
self.def_vals[ids].append((sgname, defvals))
@@ -152,22 +148,20 @@ def encode(self, msg_id, dd):
ival = dd.get(s.name)
if ival is not None:
- b2 = s.size
- if s.is_little_endian:
- b1 = s.start_bit
- else:
- b1 = (s.start_bit // 8) * 8 + (-s.start_bit - 1) % 8
- bo = 64 - (b1 + s.size)
-
ival = (ival / s.factor) - s.offset
ival = int(round(ival))
if s.is_signed and ival < 0:
- ival = (1 << b2) + ival
+ ival = (1 << s.size) + ival
- shift = b1 if s.is_little_endian else bo
- mask = ((1 << b2) - 1) << shift
- dat = (ival & ((1 << b2) - 1)) << shift
+ if s.is_little_endian:
+ shift = s.start_bit
+ else:
+ b1 = (s.start_bit // 8) * 8 + (-s.start_bit - 1) % 8
+ shift = 64 - (b1 + s.size)
+
+ mask = ((1 << s.size) - 1) << shift
+ dat = (ival & ((1 << s.size) - 1)) << shift
if s.is_little_endian:
mask = self.reverse_bytes(mask)
@@ -200,12 +194,12 @@ def decode(self, x, arr=None, debug=False):
if arr is None:
out = {}
else:
- out = [None]*len(arr)
+ out = [None] * len(arr)
msg = self.msgs.get(x[0])
if msg is None:
if x[0] not in self._warned_addresses:
- #print("WARNING: Unknown message address {}".format(x[0]))
+ # print("WARNING: Unknown message address {}".format(x[0]))
self._warned_addresses.add(x[0])
return None, None
@@ -213,7 +207,7 @@ def decode(self, x, arr=None, debug=False):
if debug:
print(name)
- st = x[2].ljust(8, '\x00')
+ st = x[2].ljust(8, b'\x00')
le, be = None, None
for s in msg[1]:
@@ -227,30 +221,24 @@ def decode(self, x, arr=None, debug=False):
factor = s[5]
offset = s[6]
- b2 = signal_size
- if little_endian:
- b1 = start_bit
- else:
- b1 = (start_bit // 8) * 8 + (-start_bit - 1) % 8
- bo = 64 - (b1 + signal_size)
-
if little_endian:
if le is None:
le = struct.unpack("Q", st)[0]
- shift_amount = bo
tmp = be
+ b1 = (start_bit // 8) * 8 + (-start_bit - 1) % 8
+ shift_amount = 64 - (b1 + signal_size)
if shift_amount < 0:
continue
- tmp = (tmp >> shift_amount) & ((1 << b2) - 1)
- if signed and (tmp >> (b2 - 1)):
- tmp -= (1 << b2)
+ tmp = (tmp >> shift_amount) & ((1 << signal_size) - 1)
+ if signed and (tmp >> (signal_size - 1)):
+ tmp -= (1 << signal_size)
tmp = tmp * factor + offset
@@ -270,7 +258,6 @@ def get_signals(self, msg):
if __name__ == "__main__":
from opendbc import DBC_PATH
- import numpy as np
dbc_test = dbc(os.path.join(DBC_PATH, 'toyota_prius_2017_pt_generated.dbc'))
msg = ('STEER_ANGLE_SENSOR', {'STEER_ANGLE': -6.0, 'STEER_RATE': 4, 'STEER_FRACTION': -0.2})
@@ -280,7 +267,7 @@ def get_signals(self, msg):
dbc_test = dbc(os.path.join(DBC_PATH, 'hyundai_santa_fe_2019_ccan.dbc'))
decoded = dbc_test.decode((0x2b0, 0, "\xfa\xfe\x00\x07\x12"))
- assert np.isclose(decoded[1]['SAS_Angle'], -26.2)
+ assert abs(decoded[1]['SAS_Angle'] - (-26.2)) < 0.001
msg = ('SAS11', {'SAS_Stat': 7.0, 'MsgCount': 0.0, 'SAS_Angle': -26.200000000000003, 'SAS_Speed': 0.0, 'CheckSum': 0.0})
encoded = dbc_test.encode(*msg)
diff --git a/selfdrive/can/dbc_out/.gitignore b/opendbc/can/dbc_out/.gitignore
similarity index 100%
rename from selfdrive/can/dbc_out/.gitignore
rename to opendbc/can/dbc_out/.gitignore
diff --git a/selfdrive/can/dbc_out/.gitkeep b/opendbc/can/dbc_out/.gitkeep
similarity index 100%
rename from selfdrive/can/dbc_out/.gitkeep
rename to opendbc/can/dbc_out/.gitkeep
diff --git a/selfdrive/can/dbc_template.cc b/opendbc/can/dbc_template.cc
similarity index 80%
rename from selfdrive/can/dbc_template.cc
rename to opendbc/can/dbc_template.cc
index 776403b22f03ff..f6d4988713767c 100644
--- a/selfdrive/can/dbc_template.cc
+++ b/opendbc/can/dbc_template.cc
@@ -1,6 +1,4 @@
-#include
-
-#include "common.h"
+#include "common_dbc.h"
namespace {
@@ -27,6 +25,14 @@ const Signal sigs_{{address}}[] = {
.type = SignalType::HONDA_COUNTER,
{% elif checksum_type == "toyota" and sig.name == "CHECKSUM" %}
.type = SignalType::TOYOTA_CHECKSUM,
+ {% elif checksum_type == "volkswagen" and sig.name == "CHECKSUM" %}
+ .type = SignalType::VOLKSWAGEN_CHECKSUM,
+ {% elif checksum_type == "volkswagen" and sig.name == "COUNTER" %}
+ .type = SignalType::VOLKSWAGEN_COUNTER,
+ {% elif checksum_type == "subaru" and sig.name == "CHECKSUM" %}
+ .type = SignalType::SUBARU_CHECKSUM,
+ {% elif checksum_type == "chrysler" and sig.name == "CHECKSUM" %}
+ .type = SignalType::CHRYSLER_CHECKSUM,
{% elif address in [512, 513] and sig.name == "CHECKSUM_PEDAL" %}
.type = SignalType::PEDAL_CHECKSUM,
{% elif address in [512, 513] and sig.name == "COUNTER_PEDAL" %}
diff --git a/opendbc/can/packer.cc b/opendbc/can/packer.cc
new file mode 100644
index 00000000000000..ba675a5b01b202
--- /dev/null
+++ b/opendbc/can/packer.cc
@@ -0,0 +1,114 @@
+#include
+#include
+#include
+#include
+#include
+
+#include "common.h"
+
+#define WARN printf
+
+// this is the same as read_u64_le, but uses uint64_t as in/out
+uint64_t ReverseBytes(uint64_t x) {
+ return ((x & 0xff00000000000000ull) >> 56) |
+ ((x & 0x00ff000000000000ull) >> 40) |
+ ((x & 0x0000ff0000000000ull) >> 24) |
+ ((x & 0x000000ff00000000ull) >> 8) |
+ ((x & 0x00000000ff000000ull) << 8) |
+ ((x & 0x0000000000ff0000ull) << 24) |
+ ((x & 0x000000000000ff00ull) << 40) |
+ ((x & 0x00000000000000ffull) << 56);
+}
+
+uint64_t set_value(uint64_t ret, Signal sig, int64_t ival){
+ int shift = sig.is_little_endian? sig.b1 : sig.bo;
+ uint64_t mask = ((1ULL << sig.b2)-1) << shift;
+ uint64_t dat = (ival & ((1ULL << sig.b2)-1)) << shift;
+ if (sig.is_little_endian) {
+ dat = ReverseBytes(dat);
+ mask = ReverseBytes(mask);
+ }
+ ret &= ~mask;
+ ret |= dat;
+ return ret;
+}
+
+CANPacker::CANPacker(const std::string& dbc_name) {
+ dbc = dbc_lookup(dbc_name);
+ assert(dbc);
+
+ for (int i=0; inum_msgs; i++) {
+ const Msg* msg = &dbc->msgs[i];
+ message_lookup[msg->address] = *msg;
+ for (int j=0; jnum_sigs; j++) {
+ const Signal* sig = &msg->sigs[j];
+ signal_lookup[std::make_pair(msg->address, std::string(sig->name))] = *sig;
+ }
+ }
+ init_crc_lookup_tables();
+}
+
+uint64_t CANPacker::pack(uint32_t address, const std::vector &signals, int counter) {
+ uint64_t ret = 0;
+ for (const auto& sigval : signals) {
+ std::string name = std::string(sigval.name);
+ double value = sigval.value;
+
+ auto sig_it = signal_lookup.find(std::make_pair(address, name));
+ if (sig_it == signal_lookup.end()) {
+ WARN("undefined signal %s - %d\n", name.c_str(), address);
+ continue;
+ }
+ auto sig = sig_it->second;
+
+ int64_t ival = (int64_t)(round((value - sig.offset) / sig.factor));
+ if (ival < 0) {
+ ival = (1ULL << sig.b2) + ival;
+ }
+
+ ret = set_value(ret, sig, ival);
+ }
+
+ if (counter >= 0){
+ auto sig_it = signal_lookup.find(std::make_pair(address, "COUNTER"));
+ if (sig_it == signal_lookup.end()) {
+ WARN("COUNTER not defined\n");
+ return ret;
+ }
+ auto sig = sig_it->second;
+
+ if ((sig.type != SignalType::HONDA_COUNTER) && (sig.type != SignalType::VOLKSWAGEN_COUNTER)) {
+ WARN("COUNTER signal type not valid\n");
+ }
+
+ ret = set_value(ret, sig, counter);
+ }
+
+ auto sig_it_checksum = signal_lookup.find(std::make_pair(address, "CHECKSUM"));
+ if (sig_it_checksum != signal_lookup.end()) {
+ auto sig = sig_it_checksum->second;
+ if (sig.type == SignalType::HONDA_CHECKSUM) {
+ unsigned int chksm = honda_checksum(address, ret, message_lookup[address].size);
+ ret = set_value(ret, sig, chksm);
+ } else if (sig.type == SignalType::TOYOTA_CHECKSUM) {
+ unsigned int chksm = toyota_checksum(address, ret, message_lookup[address].size);
+ ret = set_value(ret, sig, chksm);
+ } else if (sig.type == SignalType::VOLKSWAGEN_CHECKSUM) {
+ // FIXME: Hackish fix for an endianness issue. The message is in reverse byte order
+ // until later in the pack process. Checksums can be run backwards, CRCs not so much.
+ // The correct fix is unclear but this works for the moment.
+ unsigned int chksm = volkswagen_crc(address, ReverseBytes(ret), message_lookup[address].size);
+ ret = set_value(ret, sig, chksm);
+ } else if (sig.type == SignalType::SUBARU_CHECKSUM) {
+ unsigned int chksm = subaru_checksum(address, ret, message_lookup[address].size);
+ ret = set_value(ret, sig, chksm);
+ } else if (sig.type == SignalType::CHRYSLER_CHECKSUM) {
+ unsigned int chksm = chrysler_checksum(address, ReverseBytes(ret), message_lookup[address].size);
+ ret = set_value(ret, sig, chksm);
+ } else {
+ //WARN("CHECKSUM signal type not valid\n");
+ }
+ }
+
+ return ret;
+}
diff --git a/opendbc/can/packer.py b/opendbc/can/packer.py
new file mode 100644
index 00000000000000..fc22cce005fb88
--- /dev/null
+++ b/opendbc/can/packer.py
@@ -0,0 +1,3 @@
+# pylint: skip-file
+from opendbc.can.packer_pyx import CANPacker
+assert CANPacker
diff --git a/opendbc/can/packer_pyx.pyx b/opendbc/can/packer_pyx.pyx
new file mode 100644
index 00000000000000..22b4b565f2a4c7
--- /dev/null
+++ b/opendbc/can/packer_pyx.pyx
@@ -0,0 +1,69 @@
+# distutils: language = c++
+# cython: c_string_encoding=ascii, language_level=3
+
+from libc.stdint cimport uint32_t, uint64_t
+from libcpp.vector cimport vector
+from libcpp.map cimport map
+from libcpp.string cimport string
+from libcpp cimport bool
+from posix.dlfcn cimport dlopen, dlsym, RTLD_LAZY
+
+from .common cimport CANPacker as cpp_CANPacker
+from .common cimport dbc_lookup, SignalPackValue, DBC
+
+
+cdef class CANPacker:
+ cdef:
+ cpp_CANPacker *packer
+ const DBC *dbc
+ map[string, (int, int)] name_to_address_and_size
+ map[int, int] address_to_size
+
+ def __init__(self, dbc_name):
+ self.dbc = dbc_lookup(dbc_name)
+ if not self.dbc:
+ raise RuntimeError(f"Can't lookup {dbc_name}")
+
+ self.packer = new cpp_CANPacker(dbc_name)
+ num_msgs = self.dbc[0].num_msgs
+ for i in range(num_msgs):
+ msg = self.dbc[0].msgs[i]
+ self.name_to_address_and_size[string(msg.name)] = (msg.address, msg.size)
+ self.address_to_size[msg.address] = msg.size
+
+ cdef uint64_t pack(self, addr, values, counter):
+ cdef vector[SignalPackValue] values_thing
+ cdef SignalPackValue spv
+
+ names = []
+
+ for name, value in values.iteritems():
+ n = name.encode('utf8')
+ names.append(n) # TODO: find better way to keep reference to temp string around
+
+ spv.name = n
+ spv.value = value
+ values_thing.push_back(spv)
+
+ return self.packer.pack(addr, values_thing, counter)
+
+ cdef inline uint64_t ReverseBytes(self, uint64_t x):
+ return (((x & 0xff00000000000000ull) >> 56) |
+ ((x & 0x00ff000000000000ull) >> 40) |
+ ((x & 0x0000ff0000000000ull) >> 24) |
+ ((x & 0x000000ff00000000ull) >> 8) |
+ ((x & 0x00000000ff000000ull) << 8) |
+ ((x & 0x0000000000ff0000ull) << 24) |
+ ((x & 0x000000000000ff00ull) << 40) |
+ ((x & 0x00000000000000ffull) << 56))
+
+ cpdef make_can_msg(self, name_or_addr, bus, values, counter=-1):
+ cdef int addr, size
+ if type(name_or_addr) == int:
+ addr = name_or_addr
+ size = self.address_to_size[name_or_addr]
+ else:
+ addr, size = self.name_to_address_and_size[name_or_addr.encode('utf8')]
+ cdef uint64_t val = self.pack(addr, values, counter)
+ val = self.ReverseBytes(val)
+ return [addr, 0, (&val)[:size], bus]
diff --git a/opendbc/can/parser.cc b/opendbc/can/parser.cc
new file mode 100644
index 00000000000000..c6d85d9eed965a
--- /dev/null
+++ b/opendbc/can/parser.cc
@@ -0,0 +1,248 @@
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+#include "common.h"
+
+#define DEBUG(...)
+// #define DEBUG printf
+#define INFO printf
+
+
+bool MessageState::parse(uint64_t sec, uint16_t ts_, uint8_t * dat) {
+ uint64_t dat_le = read_u64_le(dat);
+ uint64_t dat_be = read_u64_be(dat);
+
+ for (int i=0; i < parse_sigs.size(); i++) {
+ auto& sig = parse_sigs[i];
+ int64_t tmp;
+
+ if (sig.is_little_endian){
+ tmp = (dat_le >> sig.b1) & ((1ULL << sig.b2)-1);
+ } else {
+ tmp = (dat_be >> sig.bo) & ((1ULL << sig.b2)-1);
+ }
+
+ if (sig.is_signed) {
+ tmp -= (tmp >> (sig.b2-1)) ? (1ULL << sig.b2) : 0; //signed
+ }
+
+ DEBUG("parse 0x%X %s -> %lld\n", address, sig.name, tmp);
+
+ if (sig.type == SignalType::HONDA_CHECKSUM) {
+ if (honda_checksum(address, dat_be, size) != tmp) {
+ INFO("0x%X CHECKSUM FAIL\n", address);
+ return false;
+ }
+ } else if (sig.type == SignalType::HONDA_COUNTER) {
+ if (!update_counter_generic(tmp, sig.b2)) {
+ return false;
+ }
+ } else if (sig.type == SignalType::TOYOTA_CHECKSUM) {
+ if (toyota_checksum(address, dat_be, size) != tmp) {
+ INFO("0x%X CHECKSUM FAIL\n", address);
+ return false;
+ }
+ } else if (sig.type == SignalType::VOLKSWAGEN_CHECKSUM) {
+ if (volkswagen_crc(address, dat_le, size) != tmp) {
+ INFO("0x%X CRC FAIL\n", address);
+ return false;
+ }
+ } else if (sig.type == SignalType::VOLKSWAGEN_COUNTER) {
+ if (!update_counter_generic(tmp, sig.b2)) {
+ return false;
+ }
+ } else if (sig.type == SignalType::SUBARU_CHECKSUM) {
+ if (subaru_checksum(address, dat_be, size) != tmp) {
+ INFO("0x%X CHECKSUM FAIL\n", address);
+ return false;
+ }
+ } else if (sig.type == SignalType::CHRYSLER_CHECKSUM) {
+ if (chrysler_checksum(address, dat_le, size) != tmp) {
+ INFO("0x%X CHECKSUM FAIL\n", address);
+ return false;
+ }
+ } else if (sig.type == SignalType::PEDAL_CHECKSUM) {
+ if (pedal_checksum(dat_be, size) != tmp) {
+ INFO("0x%X PEDAL CHECKSUM FAIL\n", address);
+ return false;
+ }
+ } else if (sig.type == SignalType::PEDAL_COUNTER) {
+ if (!update_counter_generic(tmp, sig.b2)) {
+ return false;
+ }
+ }
+
+ vals[i] = tmp * sig.factor + sig.offset;
+ }
+ ts = ts_;
+ seen = sec;
+
+ return true;
+}
+
+
+bool MessageState::update_counter_generic(int64_t v, int cnt_size) {
+ uint8_t old_counter = counter;
+ counter = v;
+ if (((old_counter+1) & ((1 << cnt_size) -1)) != v) {
+ counter_fail += 1;
+ if (counter_fail > 1) {
+ INFO("0x%X COUNTER FAIL %d -- %d vs %d\n", address, counter_fail, old_counter, (int)v);
+ }
+ if (counter_fail >= MAX_BAD_COUNTER) {
+ return false;
+ }
+ } else if (counter_fail > 0) {
+ counter_fail--;
+ }
+ return true;
+}
+
+
+CANParser::CANParser(int abus, const std::string& dbc_name,
+ const std::vector &options,
+ const std::vector &sigoptions)
+ : bus(abus) {
+
+ dbc = dbc_lookup(dbc_name);
+ assert(dbc);
+ init_crc_lookup_tables();
+
+ for (const auto& op : options) {
+ MessageState state = {
+ .address = op.address,
+ // .check_frequency = op.check_frequency,
+ };
+
+ // msg is not valid if a message isn't received for 10 consecutive steps
+ if (op.check_frequency > 0) {
+ state.check_threshold = (1000000000ULL / op.check_frequency) * 10;
+ }
+
+
+ const Msg* msg = NULL;
+ for (int i=0; inum_msgs; i++) {
+ if (dbc->msgs[i].address == op.address) {
+ msg = &dbc->msgs[i];
+ break;
+ }
+ }
+ if (!msg) {
+ fprintf(stderr, "CANParser: could not find message 0x%X in DBC %s\n", op.address, dbc_name.c_str());
+ assert(false);
+ }
+
+ state.size = msg->size;
+
+ // track checksums and counters for this message
+ for (int i=0; inum_sigs; i++) {
+ const Signal *sig = &msg->sigs[i];
+ if (sig->type != SignalType::DEFAULT) {
+ state.parse_sigs.push_back(*sig);
+ state.vals.push_back(0);
+ }
+ }
+
+ // track requested signals for this message
+ for (const auto& sigop : sigoptions) {
+ if (sigop.address != op.address) continue;
+
+ for (int i=0; inum_sigs; i++) {
+ const Signal *sig = &msg->sigs[i];
+ if (strcmp(sig->name, sigop.name) == 0
+ && sig->type == SignalType::DEFAULT) {
+ state.parse_sigs.push_back(*sig);
+ state.vals.push_back(sigop.default_value);
+ break;
+ }
+ }
+
+ }
+
+ message_states[state.address] = state;
+ }
+}
+
+void CANParser::UpdateCans(uint64_t sec, const capnp::List::Reader& cans) {
+ int msg_count = cans.size();
+
+ DEBUG("got %d messages\n", msg_count);
+
+ // parse the messages
+ for (int i = 0; i < msg_count; i++) {
+ auto cmsg = cans[i];
+ if (cmsg.getSrc() != bus) {
+ // DEBUG("skip %d: wrong bus\n", cmsg.getAddress());
+ continue;
+ }
+ auto state_it = message_states.find(cmsg.getAddress());
+ if (state_it == message_states.end()) {
+ // DEBUG("skip %d: not specified\n", cmsg.getAddress());
+ continue;
+ }
+
+ if (cmsg.getDat().size() > 8) continue; //shouldn't ever happen
+ uint8_t dat[8] = {0};
+ memcpy(dat, cmsg.getDat().begin(), cmsg.getDat().size());
+
+ state_it->second.parse(sec, cmsg.getBusTime(), dat);
+ }
+}
+
+void CANParser::UpdateValid(uint64_t sec) {
+ can_valid = true;
+ for (const auto& kv : message_states) {
+ const auto& state = kv.second;
+ if (state.check_threshold > 0 && (sec - state.seen) > state.check_threshold) {
+ if (state.seen > 0) {
+ DEBUG("0x%X TIMEOUT\n", state.address);
+ }
+ can_valid = false;
+ }
+ }
+}
+
+void CANParser::update_string(std::string data, bool sendcan) {
+ // format for board, make copy due to alignment issues, will be freed on out of scope
+ auto amsg = kj::heapArray((data.length() / sizeof(capnp::word)) + 1);
+ memcpy(amsg.begin(), data.data(), data.length());
+
+ // extract the messages
+ capnp::FlatArrayMessageReader cmsg(amsg);
+ cereal::Event::Reader event = cmsg.getRoot();
+
+ last_sec = event.getLogMonoTime();
+
+ auto cans = sendcan? event.getSendcan() : event.getCan();
+ UpdateCans(last_sec, cans);
+
+ UpdateValid(last_sec);
+}
+
+
+std::vector CANParser::query_latest() {
+ std::vector ret;
+
+ for (const auto& kv : message_states) {
+ const auto& state = kv.second;
+ if (last_sec != 0 && state.seen != last_sec) continue;
+
+ for (int i=0; iself.address_to_msg_name[cv.address].c_str()
+ cv_name = cv.name
+
+ self.vl[cv.address][cv_name] = cv.value
+ self.ts[cv.address][cv_name] = cv.ts
+
+ self.vl[name][cv_name] = cv.value
+ self.ts[name][cv_name] = cv.ts
+
+ updated_val.insert(cv.address)
+
+ return updated_val
+
+ def update_string(self, dat, sendcan=False):
+ self.can.update_string(dat, sendcan)
+ return self.update_vl()
+
+ def update_strings(self, strings, sendcan=False):
+ updated_vals = set()
+
+ for s in strings:
+ updated_val = self.update_string(s, sendcan)
+ updated_vals.update(updated_val)
+
+ return updated_vals
+
+cdef class CANDefine():
+ cdef:
+ const DBC *dbc
+
+ cdef public:
+ dict dv
+ string dbc_name
+
+ def __init__(self, dbc_name):
+ self.dbc_name = dbc_name
+ self.dbc = dbc_lookup(dbc_name)
+ if not self.dbc:
+ raise RuntimeError("Can't lookup" + dbc_name)
+
+ num_vals = self.dbc[0].num_vals
+
+ address_to_msg_name = {}
+
+ num_msgs = self.dbc[0].num_msgs
+ for i in range(num_msgs):
+ msg = self.dbc[0].msgs[i]
+ name = msg.name.decode('utf8')
+ address = msg.address
+ address_to_msg_name[address] = name
+
+ dv = defaultdict(dict)
+
+ for i in range(num_vals):
+ val = self.dbc[0].vals[i]
+
+ sgname = val.name.decode('utf8')
+ address = val.address
+ def_val = val.def_val.decode('utf8')
+
+ #separate definition/value pairs
+ def_val = def_val.split()
+ values = [int(v) for v in def_val[::2]]
+ defs = def_val[1::2]
+
+ if address not in dv:
+ dv[address] = {}
+ msgname = address_to_msg_name[address]
+ dv[msgname] = {}
+
+ # two ways to lookup: address or msg name
+ dv[address][sgname] = dict(zip(values, defs))
+ dv[msgname][sgname] = dv[address][sgname]
+
+ self.dv = dict(dv)
diff --git a/opendbc/can/process_dbc.py b/opendbc/can/process_dbc.py
new file mode 100755
index 00000000000000..9025331dd48ccb
--- /dev/null
+++ b/opendbc/can/process_dbc.py
@@ -0,0 +1,127 @@
+#!/usr/bin/env python3
+from __future__ import print_function
+import os
+import sys
+
+import jinja2
+
+from collections import Counter
+from opendbc.can.dbc import dbc
+
+def process(in_fn, out_fn):
+ dbc_name = os.path.split(out_fn)[-1].replace('.cc', '')
+ # print("processing %s: %s -> %s" % (dbc_name, in_fn, out_fn))
+
+ template_fn = os.path.join(os.path.dirname(__file__), "dbc_template.cc")
+
+ with open(template_fn, "r") as template_f:
+ template = jinja2.Template(template_f.read(), trim_blocks=True, lstrip_blocks=True)
+
+ can_dbc = dbc(in_fn)
+
+ # process counter and checksums first
+ msgs = [(address, msg_name, msg_size, sorted(msg_sigs, key=lambda s: s.name not in ("COUNTER", "CHECKSUM")))
+ for address, ((msg_name, msg_size), msg_sigs) in sorted(can_dbc.msgs.items()) if msg_sigs]
+
+ def_vals = {a: sorted(set(b)) for a, b in can_dbc.def_vals.items()} # remove duplicates
+ def_vals = sorted(def_vals.items())
+
+ if can_dbc.name.startswith(("honda_", "acura_")):
+ checksum_type = "honda"
+ checksum_size = 4
+ counter_size = 2
+ checksum_start_bit = 3
+ counter_start_bit = 5
+ little_endian = False
+ elif can_dbc.name.startswith(("toyota_", "lexus_")):
+ checksum_type = "toyota"
+ checksum_size = 8
+ counter_size = None
+ checksum_start_bit = 7
+ counter_start_bit = None
+ little_endian = False
+ elif can_dbc.name.startswith(("vw_", "volkswagen_", "audi_", "seat_", "skoda_")):
+ checksum_type = "volkswagen"
+ checksum_size = 8
+ counter_size = 4
+ checksum_start_bit = 0
+ counter_start_bit = 0
+ little_endian = True
+ elif can_dbc.name.startswith(("subaru_global_")):
+ checksum_type = "subaru"
+ checksum_size = 8
+ counter_size = None
+ checksum_start_bit = 0
+ counter_start_bit = None
+ little_endian = True
+ elif can_dbc.name.startswith(("chrysler_")):
+ checksum_type = "chrysler"
+ checksum_size = 8
+ counter_size = None
+ checksum_start_bit = 7
+ counter_start_bit = None
+ little_endian = False
+ else:
+ checksum_type = None
+ checksum_size = None
+ counter_size = None
+ checksum_start_bit = None
+ counter_start_bit = None
+ little_endian = None
+
+ # sanity checks on expected COUNTER and CHECKSUM rules, as packer and parser auto-compute those signals
+ for address, msg_name, _, sigs in msgs:
+ dbc_msg_name = dbc_name + " " + msg_name
+ for sig in sigs:
+ if checksum_type is not None:
+ # checksum rules
+ if sig.name == "CHECKSUM":
+ if sig.size != checksum_size:
+ sys.exit("%s: CHECKSUM is not %d bits long" % (dbc_msg_name, checksum_size))
+ if sig.start_bit % 8 != checksum_start_bit:
+ sys.exit("%s: CHECKSUM starts at wrong bit" % dbc_msg_name)
+ if little_endian != sig.is_little_endian:
+ sys.exit("%s: CHECKSUM has wrong endianness" % dbc_msg_name)
+ # counter rules
+ if sig.name == "COUNTER":
+ if counter_size is not None and sig.size != counter_size:
+ sys.exit("%s: COUNTER is not %d bits long" % (dbc_msg_name, counter_size))
+ if counter_start_bit is not None and sig.start_bit % 8 != counter_start_bit:
+ print(counter_start_bit, sig.start_bit)
+ sys.exit("%s: COUNTER starts at wrong bit" % dbc_msg_name)
+ if little_endian != sig.is_little_endian:
+ sys.exit("%s: COUNTER has wrong endianness" % dbc_msg_name)
+ # pedal rules
+ if address in [0x200, 0x201]:
+ if sig.name == "COUNTER_PEDAL" and sig.size != 4:
+ sys.exit("%s: PEDAL COUNTER is not 4 bits long" % dbc_msg_name)
+ if sig.name == "CHECKSUM_PEDAL" and sig.size != 8:
+ sys.exit("%s: PEDAL CHECKSUM is not 8 bits long" % dbc_msg_name)
+
+ # Fail on duplicate message names
+ c = Counter([msg_name for address, msg_name, msg_size, sigs in msgs])
+ for name, count in c.items():
+ if count > 1:
+ sys.exit("%s: Duplicate message name in DBC file %s" % (dbc_name, name))
+
+ parser_code = template.render(dbc=can_dbc, checksum_type=checksum_type, msgs=msgs, def_vals=def_vals, len=len)
+
+ with open(out_fn, "w") as out_f:
+ out_f.write(parser_code)
+
+def main():
+ if len(sys.argv) != 3:
+ print("usage: %s dbc_directory output_filename" % (sys.argv[0],))
+ sys.exit(0)
+
+ dbc_dir = sys.argv[1]
+ out_fn = sys.argv[2]
+
+ dbc_name = os.path.split(out_fn)[-1].replace('.cc', '')
+ in_fn = os.path.join(dbc_dir, dbc_name + '.dbc')
+
+ process(in_fn, out_fn)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/opendbc/chrysler_pacifica_2017_hybrid.dbc b/opendbc/chrysler_pacifica_2017_hybrid.dbc
index be99769b5f8418..54e4819f23b316 100644
--- a/opendbc/chrysler_pacifica_2017_hybrid.dbc
+++ b/opendbc/chrysler_pacifica_2017_hybrid.dbc
@@ -43,7 +43,7 @@ BO_ 258 STEERING: 8 XXX
SG_ STEERING_RATE : 20|13@0+ (0.3187251,-1305.498) [0|8191] "deg/s" XXX
SG_ STEER_ANGLE : 4|13@0+ (0.3187251,-1307.888) [-360|360] "deg" XXX
-BO_ 514 SPEED_1: 4 XXX
+BO_ 514 SPEED_1: 8 XXX
SG_ SPEED_LEFT : 7|12@0+ (0.071028,0) [0|65535] "m/s" XXX
SG_ SPEED_RIGHT : 23|12@0+ (0.071028,0) [0|1023] "m/s" XXX
@@ -132,13 +132,12 @@ BO_ 705 AUTO_PARK_BUTTON: 8 XXX
BO_ 719 AUTO_PARK_SIGNALS_1: 8 XXX
SG_ AUTO_PARK_UNKNOWN_1 : 7|16@0+ (1,0) [0|31] "" XXX
-BO_ 671 AUTO_PARK_SIGNALS_2: 8 XXX
- SG_ AUTO_PARK_PARALLEL : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ AUTO_PARK_PERPENDICULAR_1 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
+BO_ 671 AUTO_PARK_REQUEST: 8 XXX
SG_ AUTO_PARK_CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ AUTO_PARK_MAYBE_TURNING : 3|12@0+ (1,0) [0|1023] "" XXX
- SG_ AUTO_PARK_TURNING_STATUS : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ AUTO_PARK_STATUS : 7|5@0+ (1,0) [0|15] "" XXX
+ SG_ AUTO_PARK_COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
+ SG_ AUTO_PARK_MODE : 22|2@0+ (1,0) [0|3] "" XXX
+ SG_ AUTO_PARK_CMD : 2|11@0+ (1,-1024) [0|1] "NM" XXX
BO_ 784 AUTO_PARK_LESS_INTERESTING: 8 XXX
SG_ INCREASING_UNKNOWN : 55|8@0+ (1,0) [0|7] "" XXX
@@ -393,10 +392,8 @@ CM_ SG_ 678 LKAS_LANE_LINES "0x01 transparent lines, 0x02 left white, 0x03 right
CM_ SG_ 678 LKAS_ALERTS "(0x01, 0x02) lane sense off, (0x03, 0x04, 0x06) place hands on steering wheel, 0x07 lane departure detected + place hands on steering wheel, (0x08, 0x09) lane sense unavailable + clean front windshield, 0x0b lane sense and auto high beam unavailable + clean front windshield, 0x0c lane sense unavailable + service required, (0x00, 0x05, 0x0a, 0x0d, 0x0e, 0x0f) null";
CM_ SG_ 705 AUTO_PARK_TOGGLE_1 "set briefly when turning on or off self-parking";
CM_ SG_ 705 INCREASING_UNKNOWN "sometimes decreasing";
-CM_ SG_ 671 AUTO_PARK_PARALLEL "parallel parking mode";
-CM_ SG_ 671 AUTO_PARK_PERPENDICULAR_1 "perpendicular parking mode";
-CM_ SG_ 671 AUTO_PARK_MAYBE_TURNING "something with autopark turning the steering wheel maybe.";
-CM_ SG_ 671 AUTO_PARK_TURNING_STATUS "0 when not steering. when steering starts, 4 for two packets, and then 5 for the rest";
+CM_ SG_ 671 AUTO_PARK_CMD "Request Appears to be in NM";
+CM_ SG_ 671 AUTO_PARK_STATUS "1 = IDLE / NO REQUEST 9 = START REQUEST 10 = REQUEST MODE 11 = REQUEST MODE";
CM_ SG_ 784 INCREASING_UNKNOWN "perhaps distance traveled";
CM_ SG_ 826 AUTO_PARK_GEAR_1 "Reverse=0, Forward=f";
CM_ SG_ 826 AUTO_PARK_GEAR_2 "Reverse=0, Forward=f";
@@ -412,7 +409,7 @@ CM_ SG_ 571 CHECKSUM "standard checksum";
CM_ SG_ 825 BEEP_339 "sent every 0.5s. 0050 is no beep. To beep send 4355 or 4155. Used by ParkSense warning.";
CM_ SG_ 270 ELECTRIC_MOTOR "0x7fff indicates electric motor not in use";
CM_ SG_ 291 ENERGY_GAIN_LOSS "unsure what this actually is";
-CM_ SG_ 291 ENERGY_SMOOTHER_CURVE "unusre what it is, but smoother";
+CM_ SG_ 291 ENERGY_SMOOTHER_CURVE "unsure what it is, but smoother";
CM_ SG_ 308 ACCEL_134 "only set when human presses accel pedal";
CM_ SG_ 532 NOISY_SLOWLY_DECREASING "perhaps battery but do not know";
CM_ SG_ 816 TRACTION_OFF "set when traction off button is enabled";
@@ -432,5 +429,5 @@ CM_ SG_ 625 SPEED "zero on non-acc drives";
CM_ SG_ 625 ACCEL_PERHAPS "set to 7767 on non-ACC drives. ACC drive 40k is constant speed, 42k is accelerating";
CM_ SG_ 268 BRAKE_PERHAPS "triggers only on ACC braking";
CM_ SG_ 384 NEW_SIGNAL_1 "set in ACC gas driving. not set in electric human. not sure about gas human driving.";
-VAL_ 746 PRNDL 5 "Low" 4 "Drive" 3 "Neutral" 2 "Reverse" 1 "Park" ;
+VAL_ 746 PRNDL 5 "L" 4 "D" 3 "N" 2 "R" 1 "P" ;
VAL_ 792 TURN_SIGNALS 2 "Right" 1 "Left" ;
diff --git a/opendbc/ford_cgea1_2_bodycan_2011.dbc b/opendbc/ford_cgea1_2_bodycan_2011.dbc
deleted file mode 100644
index 49fcae19c2e4f8..00000000000000
--- a/opendbc/ford_cgea1_2_bodycan_2011.dbc
+++ /dev/null
@@ -1,1070 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 58 BCM_m_FrP01: 8 XXX
- SG_ ChildLockCmd : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ ChildLockCmd_UB : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ CLockCmd : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ CLockCmd_UB : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ DDShortDrop : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ DDShortDrop_UB : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ DirectionIndication : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ DirectionIndication_UB : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ EpsDrvInfo_D_Dsply : 36|4@0+ (1,0) [0|0] "" XXX
- SG_ EpsDrvInfo_D_Dsply_UB : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ GearRvrseActv_D_Actl : 38|2@0+ (1,0) [0|0] "" XXX
- SG_ GearRvrseActv_D_Actl_UB : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ VehVActlEng_D_Qf_3A : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_ActlEng_UB_3A : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_ActlEng_3A : 55|16@0+ (0.01,0) [0|0] "kph" XXX
- SG_ Veh_V_DsplyCcSet : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_RqCcSet : 32|9@0+ (0.5,0) [0|0] "kph" XXX
- SG_ WasherFluidLevelLow : 5|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 64 BCM_m_FrP02: 8 XXX
- SG_ FuelCutoffReq : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ FuelCutoffReq_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ KVRFRSettings : 54|15@0+ (1,0) [0|0] "" XXX
- SG_ KVRFRSettings_UB : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ PsngrFrntDetct_D_Actl : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ PsngrFrntDetct_D_Actl_UB : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ RILReq : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ RILReq_UB : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBuckleDriver : 31|2@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBuckleDriver_UB : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBuckleMid : 29|2@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBuckleMid_UB : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBucklePsngr : 27|2@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBucklePsngr_UB : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBuckleDriver : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBuckleDriver_UB : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBucklePsngr : 37|2@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBucklePsngr_UB : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotationCnt : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotationCnt_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotationCntQF : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRr_D_Actl_UB_40 : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRr_D_Actl_40 : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRl_D_Actl_UB_40 : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRl_D_Actl_40 : 33|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 131 MS_Steering_Data: 8 XXX
- SG_ SteColumn_Status_UB : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ SteColumn_Status : 31|3@0+ (1,0) [0|0] "" XXX
- SG_ SteCol_Manual_Override_UB : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ SteCol_Manual_Override : 27|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Send_UB : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Send : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Phone_UB : 17|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Phone : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_OK_UB : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_OK : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Volume_Up_UB : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Volume_Down_UB : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Voice_PTT_UB : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Seek_Right_UB : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Seek_Left_UB : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Mode_UB : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Mode : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Media_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Volume_Up : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Volume_Down : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Voice_PTT : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Seek_Right : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Seek_Left : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Media : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ VehYaw_W_Actl : 55|16@0+ (0.0002,-6.5) [0|0] "rad/s" XXX
- SG_ SteWhlCtl_End_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_End : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ VehYaw_W_Actl_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Mute_UB : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Mute : 12|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 257 Driver_Seat_Information: 8 XXX
- SG_ Reverse_Mirror_Stat : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ Memory_Feedback_Rqst : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Easy_Entry_Exit_Stat : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 260 Driver_Seat_Information_2: 8 XXX
- SG_ Memory_Cmd : 15|4@0+ (1,0) [0|0] "" XXX
- SG_ Easy_Entry_Rqst : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvSeat_Stat : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ Cancel_Auto_Movement : 1|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 269 IdleShutdown_Legacy: 8 XXX
- SG_ IDLE_ENGINE_SHUTDOWN : 23|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 272 Keyfob_Pad_Stat: 8 XXX
- SG_ L_Pwr_Sliding_Dr_Rqst : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Decklid_Rqst : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ R_Pwr_Sliding_Dr_Rqst : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ Keyfob_Pad_Msg_Count : 23|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ Keyfob_Pad_Id_Number : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ Keyfob_Pad_Button_Pressed : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ Power_Liftgate_Rqst : 30|1@0+ (1,0) [0|0] "" XXX
- SG_ Keycode_Status : 27|20@0+ (1,0) [0|0] "" XXX
-
-BO_ 275 Power_Liftgate_Mode_StatM: 8 XXX
- SG_ Power_Liftgate_Mode_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ DrTgateChime_D_Rq : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 276 Running_Board_CmdM: 8 XXX
- SG_ Running_Board_Cmd : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 277 Running_Board_StatM: 8 XXX
- SG_ Running_Board_Stat : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 288 ClmtCtrlSeat_SetCmdlegacy1: 8 XXX
- SG_ ClmtCtrlSeat_SetCmd_Dvr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 289 ClmtCtrlSeat_SetStat_DvrM: 8 XXX
- SG_ ClmtCtrlSeat_SetStat_Dvr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 290 ClmtCtrlSeat_SetCmdlegacy2: 8 XXX
- SG_ ClmtCtrlSeat_SetCmd_Psgr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 291 ClmtCtrlSeat_SetStat_PsgrM: 8 XXX
- SG_ ClmtCtrlSeat_SetStat_Psgr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 292 ClmtCtrlSeatSet_Cmd_v2_MS: 8 XXX
- SG_ ClmtCtrlSeat_SetCmd_Psgr : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ ClmtCtrlSeat_SetCmd_Dvr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 293 ClmtCtrlSeatSet_Stat_v2: 8 XXX
- SG_ ClmtCtrlSeat_SetStat_Psgr : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ ClmtCtrlSeat_SetStat_Dvr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 304 Mirror_Manual_Override_M: 8 XXX
- SG_ Mirror_Manual_Override : 7|1@0+ (1,0) [0|0] "Binary" XXX
-
-BO_ 305 Memory_Sw_StatM: 8 XXX
- SG_ Memory_Sw_Message_Count : 15|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ Memory_Set_Sw_Stat : 7|1@0+ (1,0) [0|0] "Binary" XXX
- SG_ Memory_Set_Cancel : 3|1@0+ (1,0) [0|0] "Binary" XXX
- SG_ Memory_3_Sw_Stat : 4|1@0+ (1,0) [0|0] "Binary" XXX
- SG_ Memory_2_Sw_Stat : 5|1@0+ (1,0) [0|0] "Binary" XXX
- SG_ Memory_1_Sw_Stat : 6|1@0+ (1,0) [0|0] "Binary" XXX
-
-BO_ 306 Driver_Lock_Sw_StatM: 8 XXX
- SG_ Driver_Door_Key_Unlock : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Driver_Door_Key_Lock : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Driver_Lock_Sw_Message_Cnt : 7|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ Driver_Lock_Sw_Stat : 15|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 309 Memory_Cancel_Cmd_M: 8 XXX
- SG_ Memory_Cancel_Cmd : 7|1@0+ (1,0) [0|0] "Binary" XXX
-
-BO_ 310 Driver_Door_Lock_CmdM: 8 XXX
- SG_ Driver_Door_Lock_Msg_Cnt : 7|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ Driver_Door_Lock_Cmd : 15|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 311 Pass_Mirror_Sw_StatM: 8 XXX
- SG_ Pass_Mirror_Sw_UD_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Mirror_Sw_LR_Stat : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 313 RPwrSlideDr_Unlock_RqstM: 8 XXX
- SG_ RPwrSlideDr_Unlock_Rqst : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 320 LPwrSlideDr_Unlock_RqstM: 8 XXX
- SG_ LPwrSlideDr_Unlock_Rqst : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 321 Passive_Entry_Ctrl_Data: 8 XXX
- SG_ PE_Control_Data_1 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Control_Cmd : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ PK_SearchResults_Prog : 63|4@0+ (1,0) [0|0] "" XXX
- SG_ PK_SearchResults_MyKey : 4|4@0+ (1,0) [0|0] "" XXX
- SG_ PK_SearchResults_Found : 59|4@0+ (1,0) [0|0] "" XXX
- SG_ PK_Search_EvNum : 15|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ PE_Control_Data_5 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Control_Data_4 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Control_Data_3 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Control_Data_2 : 31|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 322 Passive_Entry_Target_Data: 8 XXX
- SG_ PE_Target_Data_5 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Target_Cmd : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_Target_Status : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ PE_Target_Data_1 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Search_Rqst : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_Target_Data_4 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Target_Data_3 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Target_Data_2 : 23|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 577 BCM_m_FrP28: 8 XXX
- SG_ WheelRotToothCntFrL : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntFrL_UB : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntFrR : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntFrR_UB : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntReL : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntReL_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntReR : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ WheelRotToothCntReR_UB : 43|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 736 FCIM_Button_Press: 8 XXX
- SG_ FCIM_Target_ID : 13|4@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Button_Type : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Button_State : 15|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 806 Compressor_Req: 8 XXX
- SG_ HvacEvap_Te_Rq : 33|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ HvacEvap_Te_Actl : 17|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ HvacAirCond_B_Rq : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacEvap_Te_Offst : 1|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
-
-BO_ 842 MassageSeat_Data1: 8 XXX
- SG_ SeatLmbrUpDrv_Pc_Actl : 38|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrMidDrv_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrLoDrv_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlUpDrv_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlLoDrv_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 843 MassageSeat_Data2: 8 XXX
- SG_ SeatLmbrUpPsgr_Pc_Actl : 38|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrMidPsgr_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrLoPsgr_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlUpPsgr_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlLoPsgr_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 844 MassageSeat_Stat1: 8 XXX
- SG_ StmsLmbrDrv_D_Stat : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ StmsCshnDrv_D_Stat : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ SeatSwtchDrv_B_Stat : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDrv_D_Stat : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ SeatAirAmb_P_Actl : 7|16@0+ (0.01,0) [0|0] "KiloPascal" XXX
- SG_ SeatPDrv_B_Stat : 20|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 845 MassageSeat_Stat2: 8 XXX
- SG_ StmsLmbrPsgr_D_Stat : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ StmsCshnPsgr_D_Stat : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ SeatSwtchPsgr_B_Stat : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatPPsgr_B_Stat : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnPsgr_D_Stat : 6|3@0+ (1,0) [0|0] "" XXX
- SG_ PsgrMemFeedback_Rsp : 3|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 846 MassageSeat_Req_MS: 8 XXX
- SG_ SeatFnPsgr_D_Rq : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDrv_D_Rq : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDfaltPsgr_B_Rq : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDfaltDrv_B_Rq : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnChngPsgr_D_Rq : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnChngDrv_D_Rq : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ PsgrMemory_Rq : 3|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 849 MassageSeat_Data3: 8 XXX
- SG_ SeatCshnDrvRR_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnDrvRL_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnDrvFR_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnDrvFL_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 850 MassageSeat_Data4: 8 XXX
- SG_ SeatCshnPsgrRR_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnPsgrRL_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnPsgrFR_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnPsgrFL_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 853 EFP_CC_Status_MS: 8 XXX
- SG_ Save_My_Temp : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Left_Temp_Setpt : 31|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RrDefrost_HtdMirrorReq : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Control_Status : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ MultipleButtonPressReq : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ Rear_System_Mode_Req : 19|3@0+ (1,0) [0|0] "" XXX
- SG_ Recirc_Request : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ Front_Rt_Temp_Setpt : 39|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ AC_Request : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Windshield_ModeRequest : 15|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Panel_Mode_Request : 7|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Overriding_ModeReq : 10|3@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_Request : 3|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Rear_Right_Temp_Setpt : 55|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ Forced_Recirc_Req : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Left_Temp_Setpt : 47|8@0+ (1,0) [0|0] "Mixed" XXX
-
-BO_ 854 EFP_CC_Seat_Req_Stat_MS: 8 XXX
- SG_ Front_Rear_Blower_Req : 31|6@0+ (1,0) [0|0] "Detents" XXX
- SG_ Pass_Rr_Cond_Seat_Req : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Rr_Cond_Seat_Lvl : 8|3@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Fr_Cond_Seat_Req : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Fr_Cond_Seat_Lvl : 11|3@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Rr_Cond_Seat_Req : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Rr_Cond_Seat_Lvl : 2|3@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Fr_Cond_Seat_Req : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Fr_Cond_Seat_Lvl : 5|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 855 RCCM_CC_Status: 8 XXX
- SG_ RrBlwrCondStLdShedStat : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ FrBlwrCondStLdShedStat : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_Rr_Rt_TempSetpt : 63|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Rr_Left_TempSetpt : 55|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Fr_Rt_TempSetpt : 47|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Fr_Left_TempSetpt : 39|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Fr_Rr_Blower_Req : 31|6@0+ (1,0) [0|0] "Detents" XXX
- SG_ Panel_Mode_State : 7|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ RrDefHtdMirrLdShedStat : 18|2@0+ (1,0) [0|0] "" XXX
- SG_ Windshield_Mode_State : 15|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Recirc_Door_State : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_System_Mode_State : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ Default_Defrost_State : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Auto_AC_Indicator_Temp : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_State : 3|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ RrDefrost_HtdMirrState : 8|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 856 RCCM_CC_Seat_Status: 8 XXX
- SG_ Active_My_Temp : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_HtdStrWhl_Req : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PR_Cond_Seat_Lvl : 31|3@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PR_Cond_Seat_Req : 28|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PF_Cond_Seat_Req : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PF_Cond_Seat_Lvl : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DR_Cond_Seat_Req : 12|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DR_Cond_Seat_Lvl : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DF_Cond_Seat_Req : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DF_Cond_Seat_Lvl : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ PassRrCondStLdShedStat : 26|2@0+ (1,0) [0|0] "" XXX
- SG_ PassFrCondStLdShedStat : 18|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvRrCondStLdShedStat : 10|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvFrCondStLdShedStat : 1|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 857 RCCM_CC_MBP_Press_Stat: 8 XXX
- SG_ Report_Active : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Temp_Units : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Fan_Bars_Disply : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Temp_Units : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyPass10 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyPass1 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyDrvr10 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyDrvr1 : 15|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 859 MFD_CC_Status_MS: 8 XXX
- SG_ Rear_Mode_Bttn_Status : 38|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 860 EFP_CC_Info_Status_MS: 8 XXX
- SG_ Rear_Panel_Btn_State : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Floor_Btn_State : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ HtdStrWhl_SftBtt_Stt : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ AC_Sft_Button_State : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvRrCondSeatSftBttnSt : 47|3@0+ (1,0) [0|0] "" XXX
- SG_ DrvFrCondSeatSftBtnStt : 37|3@0+ (1,0) [0|0] "" XXX
- SG_ CC_RecircSBtn_St : 27|2@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrDefrSBtn_St : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ PasRrCondSeatSftBttnSt : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ PasFrCondSeatSftBtnStt : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ MyTemp_Soft_Bttn_State : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_MaxACSBtn_St : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ RearPowerButtonState : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ RearCoolBarsDisplayed : 11|3@0+ (1,0) [0|0] "Bars_On" XXX
- SG_ Rear_Sft_Control_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrNeutralBarDsp_St : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrHeatBarsDsp_St : 31|3@0+ (1,0) [0|0] "Bars_On" XXX
- SG_ Rear_Fan_Bars_Displayed : 19|3@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrCtrlBtn_St : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Auto_Button_State : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_FrPowerSBtn_St : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_FrDefrostSBtn_St : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_Soft_Btn_Stt : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_MODE_State : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_FAN_State : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Dual_Button_State : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarPnlSBtn_St : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarPnFlrSBtn_St : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarFlrWsSBtn_St : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarDrvFlrSBtn_St : 3|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 861 HSWheel_CC_Info_Stat: 8 XXX
- SG_ HtdStrWhl_SftBtt_State : 57|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 862 Climate_Control_Data_2: 8 XXX
- SG_ HvacRec_Pc_Est : 31|7@0+ (1,0) [0|0] "%" XXX
- SG_ HvacEngIdleInc_B_Rq : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacAir_Flw_Est : 13|9@0+ (0.5,0) [0|0] "liter/second" XXX
- SG_ AmbTempImpr : 7|10@0+ (0.25,-128.0) [0|0] "degreesC" XXX
-
-BO_ 900 Vehicle_Access_RqstM: 8 XXX
- SG_ PE_AssocConfirm_D_Actl : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ DrTgateOpen_D_RqRfa : 51|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_Decklid_Inhibit_Rqst : 53|2@0+ (1,0) [0|0] "" XXX
- SG_ PK_Program : 45|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_Packet_Cnt : 31|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ PE_Control_Status : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_Control_Code : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ PE_Perimeter_Lighting_Stat : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_RKE_Flash_Rqst : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ PE_Lock_EvNum : 23|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ PE_Lock_Requestor : 39|5@0+ (1,0) [0|0] "" XXX
- SG_ PE_Lock_Sub_Id : 11|4@0+ (1,0) [0|0] "" XXX
- SG_ PE_Lock_Status : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_DrvCfg_Horn_Rqst : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ PEBackupSlot_Stats : 55|2@0+ (1,0) [0|0] "" XXX
- SG_ PE_Fob_Number : 43|4@0+ (1,0) [0|0] "Number" XXX
- SG_ PE_Keypad_LiftGlass_Rqst : 49|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 901 Vehicle_Lock_Status: 8 XXX
- SG_ CntrStkKeycodeActl : 55|16@0+ (1,0) [0|0] "" XXX
- SG_ CntrStk_D_RqAssoc_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ CntrStk_D_RqAssoc : 43|3@0+ (1,0) [0|0] "" XXX
- SG_ KeyTypeChngMykey_D_Rq : 45|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Lock_Sub_Id : 21|4@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Lock_Status : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Lock_Requestor : 39|5@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Lock_EvNum : 31|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ Trim_Switch_Status_Count : 15|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ Trim_Switch_Status : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ DF_KeyCyl_Switch_Stat_Cnt : 7|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ DF_KeyCyl_Switch_Stat : 34|2@0+ (1,0) [0|0] "" XXX
- SG_ Perimeter_Alarm_Status : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ KeyTypeChngMykey_D_Rq_UB : 32|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 902 Remote_Start: 8 XXX
- SG_ Remote_Start_Req : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 903 CC_FCIM_Update: 8 XXX
- SG_ Rr_Temp_M_H_Heat_Ind : 30|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_7_Indicator : 45|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_6_Indicator : 46|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_5_Indicator : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_4_Indicator : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_3_Indicator : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_2_Indicator : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Fan_Low_Indicator : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ AC_Indicator : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_Indicator : 37|1@0+ (1,0) [0|0] "" XXX
- SG_ Panel_Mode_Indicator : 38|1@0+ (1,0) [0|0] "" XXX
- SG_ Windshield_Mode_Indicator : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_High_Cool_Ind : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_M_H_Cool_Ind : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_M_L_Cool_Ind : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_Low_Cool_Ind : 27|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_Center_Ind_On : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_High_Heat_Ind : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_M_L_Heat_Ind : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Temp_Low_Heat_Ind : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Control_Indicator : 17|1@0+ (1,0) [0|0] "" XXX
- SG_ Auto_Indicator_Rear : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Indicator_Rear : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_U_R_Seat_Cool_Ind : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_M_Seat_Cool_Ind : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_L_L_Seat_Cool_Ind : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_U_R_Seat_Heat_Ind : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_M_Seat_Heat_Ind : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_L_L_Seat_Heat_Ind : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_U_R_Seat_Cool_Ind : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_M_Seat_Cool_Ind : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_L_L_Seat_Cool_Ind : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_U_R_Seat_Heat_Ind : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_M_Seat_Heat_Ind : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_L_L_Seat_Heat_Ind : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Single_Mode_Indicator : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Auto_Indicator : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Recirc_Indicator : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ Max_AC_Econ_Indicator : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_DefHtd_Mirr_Indicator : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ Defrost_Indicator : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Temp_Dual_Indicator : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Indicator_Front : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 904 CC_NavChassis_Info_Status: 8 XXX
- SG_ Rear_Defrost_Soft_Bttn_Stt : 52|1@0+ (1,0) [0|0] "" XXX
- SG_ Recirc_Soft_Button_State : 54|2@0+ (1,0) [0|0] "" XXX
- SG_ Max_AC_Soft_Button_State : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_Soft_Btn_Stt : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Power_Soft_Btn_State : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Defrost_Soft_Btn_Stt : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Power_Button_State : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_FAN_Indicator : 27|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_MODE_Indicator : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Rear_Set_Temp_Display : 17|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Rear_Set_Temp_Units : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Heat_Bars_Displayed : 42|3@0+ (1,0) [0|0] "Bars_On" XXX
- SG_ CC_Bar_Rear_Set_Temp_Dig3 : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Rear_Set_Temp_Dig2 : 15|8@0+ (1,0) [0|0] "ASCII" XXX
- SG_ CC_Bar_Rear_Set_Temp_Dig1 : 7|8@0+ (1,0) [0|0] "ASCII" XXX
- SG_ Rear_Neutral_Bar_Displayed : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Fan_Bars_Displayed : 46|3@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Control_Button_State : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Auto_Button_State : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ AC_Sft_Button_State : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Cool_Bars_Displayed : 38|3@0+ (1,0) [0|0] "Bars_On" XXX
- SG_ Dual_Button_State : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Sft_Btn_FlrWs_State : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Sft_Btn_Floor_State : 30|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Sft_Btn_PnFlr_State : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_Bar_Sft_Btn_Pnl_State : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Sft_Control_Status : 23|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 920 FCIM_CC_Status: 8 XXX
- SG_ Manual_Temp_Knob_Pos : 8|9@0+ (1,0) [0|0] "Degrees CW" XXX
- SG_ Manual_Blower_Knob_Pos : 24|9@0+ (1,0) [0|0] "Degrees CW" XXX
- SG_ Rear_Blower_IncreaseButton : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Blower_DecreaseButton : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Temp_Decrease_Button : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Temp_Increase_Button : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Control_Button : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ Auto_Button_Rear : 44|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Button_Rear : 45|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_Heated_Seat_Btn : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_Cooled_Seat_Btn : 46|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_Cooled_Seat_Btn : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_Heated_Seat_Btn : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ Blower_Decrease_Button : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ Blower_Increase_Button : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Defrost_Mode_Button : 27|1@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_Button : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ Panel_Floor_Mode_Button : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ Panel_Mode_Button : 30|1@0+ (1,0) [0|0] "" XXX
- SG_ Mode_Change_Button : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_Temp_Increase : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_Temp_Decrease : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_Temp_Decrease : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Lft_Side_Temp_Increase : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ Auto_Button_Front : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Recirc_Button : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Max_AC_Econ_Button : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ AC_Button : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ Rr_Def_Htd_Mirr_Button : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Defrost_Button : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ Rt_Side_Temp_Dual_Button : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Button_Front : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ Climate_Button : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ CcdMde_D_Rq : 54|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 921 Nav_CC_Status: 8 XXX
- SG_ Front_System_Button_Status : 7|5@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Temp_Button_Status : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Man_Temp_Bar_Status : 11|4@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Fan_Button_Status : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Man_ATC_Button_Status : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Blower_Bar_Status : 2|3@0+ (1,0) [0|0] "# of Bars" XXX
-
-BO_ 922 VoiceRec_CC_Request: 8 XXX
- SG_ Recirculate_On : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ Recirculate_Off : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Defrost_On : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Defrost_Off : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Max_AC_On : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Max_AC_Off : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Defrost_On : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Defrost_Off : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Blower_Increment : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Blower_Decrement : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ Dual_Zone_Off : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Driver_Temp_Increment : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ Driver_Temp_Decrement : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ Climate_On : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ Climate_Off : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ Automatic_Mode : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ AC_On : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ AC_Off : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Voice_Blower_Limit : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ Driver_Set_Temp : 31|8@0+ (0.5,0) [0|0] "Degrees" XXX
-
-BO_ 928 Ignition_Switch_PositionM: 8 XXX
- SG_ AirAmb_Te_ActlFilt_UB : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ AirAmb_Te_ActlFilt : 49|10@0+ (0.25,-128.0) [0|0] "deg C" XXX
- SG_ OdometerMasterValue_UB : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ OdometerMasterValue : 31|24@0+ (1,0) [0|0] "km" XXX
- SG_ Remote_Start_Status : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ Key_In_Ignition_Stat : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ Ignition_Switch_Stable : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ Ignition_Status : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ BOO_Switch_Status : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ Remote_Device_Feedback : 23|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 934 Side_Detect_L_StatusM: 8 XXX
- SG_ Cross_Traffic_L_SnState : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_L_SysOpState : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_L_SnsrState : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_L_Illum : 15|8@0+ (1,0) [0|0] "%" XXX
- SG_ Side_Detect_L_Detect : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_Op_State : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_Alert : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_L_Alert : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 935 Side_Detect_R_StatusM: 8 XXX
- SG_ Cross_Traffic_R_Alert : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_SnState : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_Op_State : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_R_Detect : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_R_Illum : 15|8@0+ (1,0) [0|0] "%" XXX
- SG_ SideDetect_R_SnsrState : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_R_SysOpState : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_R_Alert : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 944 Body_Information_6_MS: 8 XXX
- SG_ DRV_SELECT_STAT : 3|4@0+ (1,0) [0|0] "" XXX
- SG_ reserve_2bits : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ reserve_2 : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ reserve_3 : 4|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 945 Ajar_Stat: 8 XXX
- SG_ Decklid_Ajar_Status : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ Hood_Ajar_Status : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ LG_Glass_Ajar_Status : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ DF_Door_Ajar_Status : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ PF_Door_Ajar_Status : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ DR_Door_Ajar_Status : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ PR_Door_Ajar_Status : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ LG_Door_Ajar_Status : 1|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 946 Body_Information_5_MS: 8 XXX
- SG_ CoolantFanStepAct_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondRec_B_Rq_UB : 38|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondRec_B_Rq : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondEvdc_D_Stats_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondEvdc_D_Stats : 37|3@0+ (1,0) [0|0] "" XXX
- SG_ AirCondClutch_B_Stats_UB : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondClutch_B_Stats : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ CoolantFanStepAct : 47|5@0+ (1,0) [0|0] "Steps" XXX
- SG_ AirCondFluidHi_P_Actl_UB : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondFluidHi_P_Actl : 31|8@0+ (0.125,0) [0|0] "bar" XXX
- SG_ SECONDARY_HEATER_STAT_UB : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ CURRENT_DRAW_UB : 62|1@0+ (1,0) [0|0] "" XXX
- SG_ SECONDARY_HEATER_STAT : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ CURRENT_DRAW : 55|8@0+ (0.5,0) [0|0] "Amps" XXX
-
-BO_ 947 BodyInformation_3_MS: 8 XXX
- SG_ CamraDefog_B_Req_UB : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ TrStats_D_Actl_UB : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ RearFog_Lamp_Dbnce_UB : 49|1@0+ (1,0) [0|0] "" XXX
- SG_ TrStats_D_Actl : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraDefog_B_Req : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ RearFog_Lamp_Dbnce : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ CarMode : 53|4@0+ (1,0) [0|0] "" XXX
- SG_ Day_Night_Status : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Parklamp_Status : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ Dimming_Lvl : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ Litval : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ Mfs_Turn_Stalk_SW_Status : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ PwMdeExten_D_Actl : 63|5@0+ (1,0) [0|0] "" XXX
- SG_ STR_WHL_ANGLE : 39|15@0+ (0.1,-1000.0) [0|0] "Degrees" XXX
- SG_ Turn_Seq_Cmd_Right : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Turn_Seq_Cmd_Left : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ Smart_Wiper_Motor_Stat_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ Smart_Wiper_Motor_Stat : 55|2@0+ (1,0) [0|0] "" XXX
- SG_ Mfs_Turn_Stalk_SW_Status_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ reserve : 1|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 950 RKE_Packet: 8 XXX
- SG_ RemoteKey_Packet_TIC : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Packet_RollB : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Packet_RollA : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Packet_Ctrl : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Packet_CkSum : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 951 TPM_Frame: 8 XXX
- SG_ TirePress_Frame_Temp : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Frame_Status : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Frame_Press : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Frame_ID : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Frame_CkSum : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 952 RKE_TPM_Info: 8 XXX
- SG_ TirePress_HitRate_Ctrl : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_HitRate_Ctrl : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Antenna_Ctrl : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Filter_Ctrl : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Filter_Ctrl : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ Modulation_Ctrl : 1|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 953 RKE_Info: 8 XXX
- SG_ RemoteKey_Info_TIC : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Info_RollB : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Info_RollA : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Info_Ctrl : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ RemoteKey_Info_CkSum : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 954 Tire_Pressure_Info: 8 XXX
- SG_ TirePress_Info_MaxInd : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Info_Index : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TirePress_Info_ID : 7|32@0+ (1,0) [0|0] "" XXX
-
-BO_ 956 Body_Information_7_MS: 8 XXX
- SG_ GearLvrPos_D_Actl_UB : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTot_Tq_Actl : 31|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ GearLvrPos_D_Actl : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ ApedPos_Pc_ActlArb : 15|10@0+ (0.1,0) [0|0] "%" XXX
- SG_ PrplWhlTot_Tq_Actl_UB : 17|1@0+ (1,0) [0|0] "" XXX
- SG_ EngOff_T_Actl : 47|16@0+ (1,0) [0|0] "seconds" XXX
- SG_ ApedPos_Pc_ActlArb_UB : 20|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 958 Rear_FoglampStat: 8 XXX
- SG_ RearFog_Lamp_Ind : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 963 BCM_to_MS_Body: 8 XXX
- SG_ LF_Low_Beam_CKT_CAN : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ IKT_Program_Status : 51|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Spd_Slow_Puddle_Status : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ Illuminated_Exit_Status : 43|2@0+ (1,0) [0|0] "" XXX
- SG_ Illuminated_Entry_Status : 45|2@0+ (1,0) [0|0] "" XXX
- SG_ Door_Courtesy_Light_Status : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ Courtesy_Demand_BSave_Stat : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ Alarm_Lights_Courtesy_Stat : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ Courtesy_Delay_Status : 37|2@0+ (1,0) [0|0] "" XXX
- SG_ Courtesy_Mode_Status : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ Front_Fog_Light_SW_Status : 22|2@0+ (1,0) [0|0] "" XXX
- SG_ Brake_Lamp_On_Status : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ ParkLamps_CKT_CAN : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ RF_Low_Beam_CKT_CAN : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Brk_Fluid_Lvl_Low : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Park_Brake_Status : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ High_Beam_Indicator_Rqst : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Headlamp_On_Wrning_Cmd : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ Key_In_Ignition_Warn_Cmd : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Park_Brake_Chime_Rqst : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ Daytime_Running_Lamps : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ AutoHighBeam_Cmd : 18|2@0+ (1,0) [0|0] "" XXX
- SG_ Perimeter_Alarm_Chime_Rqst : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ OCSSensrDataUpperLim_UB : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ OCSSensrDataLowerLim_UB : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ OCSSensrDataUpperLim : 63|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSensrDataLowerLim : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ AutoHighBeam_Cmd_UB : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ PrkBrkActv_B_Actl : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ Headlamp_Switch_Stat : 49|2@0+ (1,0) [0|0] "" XXX
- SG_ Perimeter_Alarm_Inclin_Cmd : 53|2@0+ (1,0) [0|0] "" XXX
- SG_ Perimeter_Alarm_Intrus_Cmd : 55|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 964 BodyInformation_2_MS: 8 XXX
- SG_ LockInhibit : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ MetricActvTe_B_Actl_UB : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ MetricActvTe_B_Actl : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Liftgate_Mode_Cmd : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ AirAmb_Te_Actl : 55|10@0+ (0.25,-128.0) [0|0] "degC" XXX
- SG_ EngClntTe_D_Qf : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_Cmd : 26|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_Cmd : 28|2@0+ (1,0) [0|0] "" XXX
- SG_ SAPPStatusCoding : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ Delay_Accy : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ Volume_Cutback : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ MetricActv_B_Actl : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatTgate_B_Actl : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatRr_B_Actl : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatRl_B_Actl : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatPsngr_B_Actl : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatInnrTgate_B_Actl : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatHood_B_Actl : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatDrv_B_Actl : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ EngClnt_Te_Actl : 23|8@0+ (1,-60.0) [0|0] "degC" XXX
- SG_ AirAmbTe_D_Qf_UB : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ Volume_Cutback_UB : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_Cmd_UB : 57|1@0+ (1,0) [0|0] "" XXX
- SG_ SAPPStatusCoding_UB : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Liftgate_Mode_Cmd_UB : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ MetricActv_B_Actl_UB : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_Cmd_UB : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ AirAmbTe_D_Qf : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ AirAmb_Te_Actl_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ EngClnt_Te_Actl_UB : 24|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 966 Delay_AccyM_for_P473: 8 XXX
- SG_ Delay_Accy : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 967 CMPS_FDM_Info_StatusMS: 8 XXX
- SG_ Segment_MSD_UB : 37|1@0+ (1,0) [0|0] "" XXX
- SG_ Segment_LSD_UB : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ Compass_Display_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ Segment_LSD : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ Segment_MSD : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ Cal_Icon : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ Zone_Icon : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ Compass_Display : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ Zone_Icon_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ Cal_Icon_UB : 33|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 968 EATC_FDM_Info_Status: 8 XXX
- SG_ Outside_Rear_Temp_Digit3 : 47|4@0+ (1,0) [0|0] "BCD" XXX
- SG_ Outside_Rear_Temp_Digit2 : 35|4@0+ (1,0) [0|0] "BCD" XXX
- SG_ Outside_Rear_Temp_Digit1 : 39|4@0+ (1,0) [0|0] "BCD" XXX
- SG_ EATC_Out_Rear_Units : 58|2@0+ (1,0) [0|0] "" XXX
- SG_ Outside_Rear_Temp_Digit4 : 55|2@0+ (1,0) [0|0] "" XXX
- SG_ EATC_RHS_Units : 60|2@0+ (1,0) [0|0] "" XXX
- SG_ EATC_Fan_Speed : 51|3@0+ (1,0) [0|0] "" XXX
- SG_ EATC_Outside_Rear_Display : 62|2@0+ (1,0) [0|0] "" XXX
- SG_ RHS_Temp_Display_Digit2 : 31|8@0+ (1,0) [0|0] "ASCII" XXX
- SG_ RHS_Temp_Display_Digit3 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ RHS_Temp_Display_Digit1 : 23|8@0+ (1,0) [0|0] "ASCII" XXX
- SG_ EATC_RHS_Display : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ LHS_Temp_Display_Digit3 : 43|2@0+ (1,0) [0|0] "" XXX
- SG_ LHS_Temp_Display_Digit2 : 15|8@0+ (1,0) [0|0] "ASCII" XXX
- SG_ LHS_Temp_Display_Digit1 : 7|8@0+ (1,0) [0|0] "ASCII" XXX
- SG_ EATC_LHS_Display : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ EATC_LHS_Units : 53|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 969 Aux_Body_Ctrl_Mod_Status: 8 XXX
- SG_ Perimeter_Alrm_Intrus_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Turn_Outage_Stat_Rt_Rear : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Turn_Outage_Stat_Left_Rear : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ Perimeter_Alrm_Inclin_Stat : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 976 Veh_Characteristic_Set_2: 8 XXX
- SG_ VehMykey_Vl_LimRq_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ CamraFrntStat_D_Stat : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraZoomMan_D_Actl : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ CamZoomActiveState : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlStat_D_Actl : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlDyn_D_Actl : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ CamPDCGuidStat : 31|2@0+ (1,0) [0|0] "" XXX
- SG_ VehMykey_Vl_LimRq : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ IgnKeyType_D_Actl : 4|4@0+ (1,0) [0|0] "" XXX
- SG_ New_Module_Attn_Event : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Beltminder_Warn_Stats : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Attn_Info_Audio : 7|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 977 ClmtCtrlSeat_SetCmd_LRPM: 8 XXX
- SG_ ClmtCtrlSeat_SetCmd_LRP : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 978 ClmtCtrlSeat_SetStat_LRPM: 8 XXX
- SG_ ClmtCtrlSeat_SetStat_LRP : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 979 ClmtCtrlSeat_SetCmd_RRPM: 8 XXX
- SG_ ClmtCtrlSeat_SetCmd_RRP : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 980 ClmtCtrlSeat_SetStat_RRPM: 8 XXX
- SG_ ClmtCtrlSeat_SetStat_RRP : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 981 Rear_HVAC_Control_Status: 8 XXX
- SG_ Temp_Knob_Position : 23|9@0+ (1,0) [0|0] "Degrees CW" XXX
- SG_ Rear_Lock_Ind_State : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Blower_Knob_Position : 7|9@0+ (1,0) [0|0] "Degrees CW" XXX
- SG_ AUTO_Ind_State : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Panel_Mode_Ind_State : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Panel_Floor_Md_Ind_State : 10|2@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_Ind_State : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Status : 14|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 982 Rear_HVAC_Control_Update: 8 XXX
- SG_ Power_State_Commanded : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Lock_Indicator : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Panel_Floor_Mode_Indicator : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ R_Floor_Mode_Indicator : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ AUTO_Mode_Indicator : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ F_Panel_Mode_Indicator : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ R_Panel_Mode_Indicator : 12|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 986 Personality_APIM_Data3_MS: 8 XXX
- SG_ LightAmbIntSwtchInc_B : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbIntSwtchDec_B : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbIntsty_No_Rq : 15|8@0+ (1,0) [0|0] "% Intensity" XXX
- SG_ LightAmbColor_No_Rq : 7|8@0+ (1,0) [0|0] "Color Index" XXX
- SG_ LightAmbClrSwtchInc_B : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbClrSwtchDec_B : 23|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 987 RHVAC_Data: 8 XXX
- SG_ CamraDefog_B_Actl : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 992 Personality_Data_MS: 8 XXX
- SG_ PersSetupRestr_D_Actl : 45|2@0+ (1,0) [0|0] "" XXX
- SG_ PersSetupAccessCtrl : 43|1@0+ (1,0) [0|0] "SES" XXX
- SG_ PersSetup_No_Actl : 55|16@0+ (1,0) [0|0] "Number" XXX
- SG_ MsgCntrPersIndex_D_Rq_UB : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrFeatNoRq_UB : 46|1@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrFeatConfigRq_UB : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrDsplyOp_D_Rq_UB : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrPersIndex_D_Rq : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrFeatConfigRq : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrFeatNoRq : 7|16@0+ (1,0) [0|0] "Number" XXX
- SG_ MsgCntrDsplyOp_D_Rq : 36|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 993 Personality_DSM_Data: 8 XXX
- SG_ PersIndexDsm_D_Actl : 47|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoDsmActl : 31|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigDsmActl : 15|16@0+ (1,0) [0|0] "" XXX
- SG_ PersStore_D_Actl : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ MemSwtch_D_RqRecall : 5|3@0+ (1,0) [0|0] "" XXX
- SG_ MemSwtch_D_RqAssoc : 2|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 994 Personality_Data_MS_2: 8 XXX
- SG_ RecallEvent_No_Cnt : 63|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ PersNo_D_Actl : 55|3@0+ (1,0) [0|0] "" XXX
- SG_ PersNoPos_D_Actl : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ PersStore_D_Rq_UB : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkPersIndex_D_Actl_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkFeatNoActl_UB : 52|1@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkFeatConfigActl_UB : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkDsplyOp_D_Rq_UB : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkPersIndex_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkFeatNoActl : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ PersStore_D_Rq : 36|3@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkFeatConfigActl : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkDsplyOp_D_Rq : 47|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 996 Personality_HCMB_Data: 8 XXX
- SG_ PersIndexHcmb_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoHcmbActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigHcmbActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 999 Personality_HVAC_Data: 8 XXX
- SG_ LightAmbIntsty_No_Actl : 55|8@0+ (1,0) [0|0] "% Intensity" XXX
- SG_ LightAmbColor_No_Actl : 47|8@0+ (1,0) [0|0] "Color Index" XXX
- SG_ PersIndexHvac_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoHvacActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigHvacActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1000 ACM_Status_Message: 8 XXX
- SG_ Multimedia_System : 26|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1001 Personality_RFA_Data: 8 XXX
- SG_ PersIndexRfa_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoRfaActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigRfaActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1005 Personality_RHVAC_Data: 8 XXX
- SG_ PersIndexRhvac_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoRhvacActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigRhvacActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1006 Nav_HMI_Status: 8 XXX
- SG_ Nav_Unit_Setting : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ Fuel_Econ_AFE_Reset_Req : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ DistanceBarSetting : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ CamraZoomMan_D_Rq : 22|3@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlStat_D_Rq : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlDyn_D_Rq : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ CamAutoTowbarZoom : 17|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1023 Reserve_3FF_MKX_Audio: 8 XXX
- SG_ reserve : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1034 GGCC_Config_Mgmt_ID_1: 8 XXX
- SG_ VehicleGGCCData : 7|64@0+ (1,0) [0|0] "mixed" XXX
-
-BO_ 1050 Climate_Control_Data: 8 XXX
- SG_ SecondaryHeater_Rqst : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ Passenger_Sunload_Raw : 15|8@0+ (5.0,0) [0|0] "W/m^2" XXX
- SG_ Driver_Sunload_Raw : 7|8@0+ (5.0,0) [0|0] "W/m^2" XXX
- SG_ HvacEvap_Te_Rq : 43|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ HvacRemoteStrt_N_Rq : 47|4@0+ (100.0,450.0) [0|0] "RPM" XXX
- SG_ Remote_Start_QuietMode : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ InCarTempQF : 30|2@0+ (1,0) [0|0] "" XXX
- SG_ HvacAirCond_B_Rq : 27|1@0+ (1,0) [0|0] "" XXX
- SG_ InCarTemp : 39|8@0+ (0.5,-57.0) [0|0] "degreesC" XXX
- SG_ Outside_Air_Temp_Stat : 23|8@0+ (0.5,-40.0) [0|0] "Degrees C" XXX
- SG_ HvacEvap_Te_Actl : 49|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
-
-BO_ 1059 Engine_Data_MS: 8 XXX
- SG_ Res_UreaLvlLo_B_Dsply_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ Res_UreaLvlLo_B_Dsply : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ Fuel_Level_State : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdOffRoadMode_D_Stats_UB : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ AwdRnge_D_Actl_UB : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ RearDiffLckLamp_D_Rq_UB : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ AwdOffRoadMode_D_Stats : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdRnge_D_Actl : 45|3@0+ (1,0) [0|0] "" XXX
- SG_ RearDiffLckLamp_D_Rq : 34|2@0+ (1,0) [0|0] "" XXX
- SG_ VEH_SPD : 7|16@0+ (0.01,-100.0) [0|0] "KPH" XXX
- SG_ ENG_SPD : 23|16@0+ (0.25,0) [0|0] "RPM" XXX
- SG_ Fuel_Level_State_UB : 37|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1061 Engine_Data_2_MS: 8 XXX
- SG_ RstrnImpactEvntStatus_UB : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAirIn_Te_Actl_UB : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAirIn_Te_Actl : 55|10@0+ (0.25,-128.0) [0|0] "degC" XXX
- SG_ ACCompressorDisp_UB : 61|1@0+ (1,0) [0|0] "" XXX
- SG_ ACCompressorDisp : 46|7@0+ (1,0) [0|0] "%" XXX
- SG_ RstrnImpactEvntStatus : 59|3@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_N_Actl_UB : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_N_Actl : 28|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ VehVActlEng_D_Qf : 31|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_ActlEng_UB : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_ActlEng : 15|16@0+ (0.01,0) [0|0] "kph" XXX
- SG_ PwPck_D_Stat_UB : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ PwPck_D_Stat : 7|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1062 ACM_NAV_WHEEL_INFO: 8 XXX
- SG_ WhlRotatRr_No_Cnt_UB : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatRl_No_Cnt_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatFr_No_Cnt_UB : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatFl_No_Cnt_UB : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRr_D_Actl_UB : 44|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRl_D_Actl_UB : 45|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirFr_D_Actl_UB : 46|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirFl_D_Actl_UB : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ WHEEL_ROLLING_TIMESTAMP_UB : 62|1@0+ (1,0) [0|0] "" XXX
- SG_ ACM_NAV_WHEEL_INFO_RESET : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatRr_No_Cnt : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatRl_No_Cnt : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatFr_No_Cnt : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatFl_No_Cnt : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRr_D_Actl : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRl_D_Actl : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirFr_D_Actl : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirFl_D_Actl : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ WHEEL_ROLLING_TIMESTAMP : 55|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1068 Battery_Mgmt_2_MS: 8 XXX
- SG_ Shed_T_Eng_Off_B : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Shed_Level_Req : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ Shed_Feature_Group_ID : 7|5@0+ (1,0) [0|0] "" XXX
- SG_ Shed_Drain_Eng_Off_B : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ Batt_Lo_SoC_B : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Batt_Crit_SoC_B : 0|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1125 GPS_Data_Nav_1: 8 XXX
- SG_ GpsHsphLattSth_D_Actl : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ GpsHsphLongEast_D_Actl : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ GPS_Longitude_Minutes : 46|6@0+ (1,0) [0|0] "Minutes" XXX
- SG_ GPS_Longitude_Min_dec : 55|14@0+ (0.0001,0) [0|0] "Minutes" XXX
- SG_ GPS_Longitude_Degrees : 39|9@0+ (1,-179.0) [0|0] "Degrees" XXX
- SG_ GPS_Latitude_Minutes : 15|6@0+ (1,0) [0|0] "Minutes" XXX
- SG_ GPS_Latitude_Min_dec : 23|14@0+ (0.0001,0) [0|0] "Minutes" XXX
- SG_ GPS_Latitude_Degrees : 7|8@0+ (1,-89.0) [0|0] "Degrees" XXX
-
-BO_ 1126 GPS_Data_Nav_2: 8 XXX
- SG_ Gps_B_Falt : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ GpsUtcYr_No_Actl : 55|5@0+ (1,1.0) [0|0] "Year" XXX
- SG_ GpsUtcMnth_No_Actl : 47|4@0+ (1,1.0) [0|0] "Month" XXX
- SG_ GpsUtcDay_No_Actl : 37|5@0+ (1,1.0) [0|0] "Day" XXX
- SG_ GPS_UTC_seconds : 23|6@0+ (1,0) [0|0] "seconds" XXX
- SG_ GPS_UTC_minutes : 15|6@0+ (1,0) [0|0] "Minutes" XXX
- SG_ GPS_UTC_hours : 7|5@0+ (1,0) [0|0] "Hours" XXX
- SG_ GPS_Pdop : 31|5@0+ (0.2,0) [0|0] "" XXX
- SG_ GPS_Compass_direction : 26|4@0+ (1,0) [0|0] "" XXX
- SG_ GPS_Actual_vs_Infer_pos : 38|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1127 GPS_Data_Nav_3: 8 XXX
- SG_ GPS_Vdop : 63|5@0+ (0.2,0) [0|0] "" XXX
- SG_ GPS_Speed : 47|8@0+ (1,0) [0|0] "MPH" XXX
- SG_ GPS_Sat_num_in_view : 7|5@0+ (1,0) [0|0] "" XXX
- SG_ GPS_MSL_altitude : 15|12@0+ (10.0,-20460.0) [0|0] "feet" XXX
- SG_ GPS_Heading : 31|16@0+ (0.01,0) [0|0] "Degrees" XXX
- SG_ GPS_Hdop : 55|5@0+ (0.2,0) [0|0] "" XXX
- SG_ GPS_dimension : 2|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 1144 GPS_Data_Nav_4: 8 XXX
- SG_ VehPos_L_Est : 39|32@0+ (0.01,0) [0|0] "meter" XXX
- SG_ VehHead_W_Actl : 23|16@0+ (0.01,-327.68) [0|0] "degrees/second" XXX
- SG_ VehHead_An_Est : 7|16@0+ (0.01,0) [0|0] "degrees" XXX
diff --git a/opendbc/ford_cgea1_2_ptcan_2011.dbc b/opendbc/ford_cgea1_2_ptcan_2011.dbc
deleted file mode 100644
index 128721cbbf7628..00000000000000
--- a/opendbc/ford_cgea1_2_ptcan_2011.dbc
+++ /dev/null
@@ -1,1487 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 65 Global_PATS_Control_Info: 8 XXX
- SG_ immoControlData_T1 : 15|40@0+ (1,0) [0|0] "" XXX
- SG_ immoControlCmd_T1 : 7|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 66 Global_PATS_Control_Info2: 8 XXX
- SG_ immoControlData_T2 : 15|40@0+ (1,0) [0|0] "" XXX
- SG_ immoControlCmd_T2 : 7|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 71 Global_PATS_Target_Info: 8 XXX
- SG_ immoTarget1Status : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ immoTarget1Data : 15|40@0+ (1,0) [0|0] "" XXX
- SG_ immoTarget1Cmd : 4|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 72 Global_PATS_Target_Info_2: 8 XXX
- SG_ immoTarget2Status : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ immoTarget2Data : 15|40@0+ (1,0) [0|0] "" XXX
- SG_ immoTarget2Cmd : 4|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 73 Global_PATS_SubTarget_FoE: 8 XXX
- SG_ immoSubTarget1Data_T1 : 15|40@0+ (1,0) [0|0] "" XXX
- SG_ immoSubTarget1Cmd_T1 : 7|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 74 VehEmergencyData1: 8 XXX
- SG_ VedsPasSideBag_D_Ltchd : 60|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsPasCrtnBag_D_Ltchd : 55|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsPasBelt_D_Ltchd : 52|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsPasBag_D_Ltchd : 47|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsMultiEvnt_D_Ltchd : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsMaxDeltaV_D_Ltchd : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VedsKneeBag_D_Ltchd : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsEvntType_D_Ltchd : 31|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsEvntRoll_D_Ltchd : 28|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsDrvSideBag_D_Ltchd : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsDrvCrtnBag_D_Ltchd : 20|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsDrvBelt_D_Ltchd : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsDrvBag_D_Ltchd : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ eCallNotification : 2|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 75 VehEmergencyData2: 8 XXX
- SG_ VedsRw3rBckl_D_Ltchd : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw3mBckl_D_Ltchd : 31|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw3lBckl_D_Ltchd : 28|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw2rBckl_D_Ltchd : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw2mBckl_D_Ltchd : 20|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw2lBckl_D_Ltchd : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw1PasChld_D_Ltchd : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw1PasBckl_D_Ltchd : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw1DrvBckl_D_Ltchd : 4|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw2rRib_D_Ltchd : 47|3@0+ (1,0) [0|0] "" XXX
- SG_ VedsRw2lRib_D_Ltchd : 36|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 116 BrakeSnData_2_CG1: 8 XXX
- SG_ VehDynamicsSOS : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ AwdLck_Tq_RqMx : 27|12@0+ (1,0) [0|0] "Nm" XXX
- SG_ AwdLck_Tq_RqMn : 23|12@0+ (1,0) [0|0] "Nm" XXX
- SG_ SteWhlComp_An_Est : 7|15@0+ (0.1,-1600.0) [0|0] "deg" XXX
- SG_ StopLamp_B_RqBrk : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ BrkTerrMdeChng_D_Rdy : 45|3@0+ (1,0) [0|0] "" XXX
- SG_ BrkTerrMde_D_Actl : 42|3@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCompAnEst_D_Qf : 47|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 117 BrakeSnData_3_CG1: 8 XXX
- SG_ HsaStat_D_Dsply : 35|3@0+ (1,0) [0|0] "" XXX
- SG_ HsaTrnAout_Tq_Rq : 55|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ HsaStat_D_Actl : 38|3@0+ (1,0) [0|0] "" XXX
- SG_ HsaRoad_Grad_Est : 32|9@0+ (0.5,-127.0) [0|0] "%" XXX
- SG_ VehYawComp_W_Actl : 7|12@0+ (0.03663,-75.0) [0|0] "deg/s" XXX
- SG_ VehYaw_W_Rq : 11|12@0+ (0.03663,-75.0) [0|0] "deg/s" XXX
- SG_ VehSideSlip_An_Est : 31|9@0+ (0.002,-0.5) [0|0] "rad" XXX
-
-BO_ 124 BrakeSnData_4_CG1: 8 XXX
- SG_ EngRun_D_ReqBrk : 10|2@0+ (1,0) [0|0] "" XXX
- SG_ BrkTotTqRqArb_No_Cs : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ BrkTotTqRqArb_No_Cnt : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ BrkTot_Tq_RqArb : 7|13@0+ (4.0,0) [0|0] "Nm" XXX
- SG_ BrkTot_Tq_Actl : 39|13@0+ (4.0,0) [0|0] "Nm" XXX
- SG_ VehOverGnd_V_Est : 55|16@0+ (0.01,0) [0|0] "kph" XXX
-
-BO_ 129 Steering_Wheel_Data2: 8 XXX
- SG_ SteWhlCtl_RSide_OK : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_RSide_CursorUp : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_RSide_CursorRt : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_RSide_CursorLeft : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_RSide_CursorDown : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_LSide_OK : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_LSide_CursorUp : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_LSide_CursorRt : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_LSide_CursorLeft : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_LSide_CursorDown : 0|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 130 EPAS_INFO: 8 XXX
- SG_ SteMdule_U_Meas : 39|8@0+ (0.05,6.0) [0|0] "Volts" XXX
- SG_ SteMdule_I_Est : 21|12@0+ (0.05,-64.0) [0|0] "Amps" XXX
- SG_ EPAS_FAILURE : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SteeringColumnTorque : 7|8@0+ (0.0625,-8.0) [0|0] "Nm" XXX
- SG_ SAPPAngleControlStat6 : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ SAPPAngleControlStat5 : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ SAPPAngleControlStat4 : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ SAPPAngleControlStat3 : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ SAPPAngleControlStat2 : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ SAPPAngleControlStat1 : 23|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 131 Steering_Data: 8 XXX
- SG_ SteWhlCtl_Mute : 38|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Mode : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_OK : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Phone : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_End : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Send : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Voice_PTT : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Seek_Left : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Seek_Right : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Media : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Volume_Down : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlCtl_Volume_Up : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ Smart_Wiper_Motor_Stat : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Mfs_Turn_Stalk_SW_Status : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ HighBeam_FlashToPassSw : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ SteColumn_Status : 13|3@0+ (1,0) [0|0] "" XXX
- SG_ SteCol_Manual_Override : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ CcButtnStat_D_Actl : 34|11@0+ (1,0) [0|0] "" XXX
- SG_ HeatedWash_Mode_Stat : 55|3@0+ (1,0) [0|0] "" XXX
- SG_ LaSwtchPos_D_Stat : 18|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 132 Steering_Wheel_Data_CG1: 8 XXX
- SG_ SteWhlRelInit_An_Sns : 7|15@0+ (0.1,-1600.0) [0|0] "deg" XXX
- SG_ SteWhlRelCalib_An_Sns : 23|15@0+ (0.1,-1600.0) [0|0] "deg" XXX
- SG_ SteWhlRelInit2_An_Sns : 55|16@0+ (0.1,-3200.0) [0|0] "deg" XXX
- SG_ SteWhlAn_No_Cs : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ SteWhlAn_No_Cnt : 47|4@0+ (1,0) [0|0] "Counts" XXX
-
-BO_ 145 Yaw_Data: 8 XXX
- SG_ VehYaw_W_Actl : 39|16@0+ (0.0002,-6.5) [0|0] "rad/s" XXX
- SG_ VehRol_W_Actl : 23|16@0+ (0.0002,-6.5) [0|0] "rad/s" XXX
- SG_ VehPtch_W_Actl : 7|16@0+ (0.0002,-6.5) [0|0] "rad/s" XXX
-
-BO_ 146 Accel_Data: 8 XXX
- SG_ VehVertAActl_D_Qf : 38|2@0+ (1,0) [0|0] "" XXX
- SG_ VehLongAActl_D_Qf : 22|2@0+ (1,0) [0|0] "" XXX
- SG_ VehLatAActl_D_Qf : 6|2@0+ (1,0) [0|0] "" XXX
- SG_ VehVert_A_Actl : 36|13@0+ (0.01,-40.0) [0|0] "m/s^2" XXX
- SG_ VehLong_A_Actl : 20|13@0+ (0.01,-40.0) [0|0] "m/s^2" XXX
- SG_ VehLat_A_Actl : 4|13@0+ (0.01,-40.0) [0|0] "m/s^2" XXX
-
-BO_ 258 Cluster_Legacy: 8 XXX
- SG_ Veh_V_CompLimMx : 27|12@0+ (0.1,0) [0|0] "km/h" XXX
- SG_ DISPLAY_SPEED_SCALING : 20|4@0+ (0.5,100.0) [0|0] "%" XXX
- SG_ DISPLAY_SPEED_OFFSET : 23|3@0+ (0.5,0) [0|0] "kph" XXX
- SG_ Reverse_Mirror_Cmd : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ Autolamp_Delay_Cmd : 7|8@0+ (1,0) [0|0] "Seconds" XXX
- SG_ Running_Board_Cmd : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ Power_Liftgate_Mode_Cmd : 11|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 259 Body_MsgCntr_Stat_CG1: 8 XXX
- SG_ PE_PEPS_System_Stat : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ Keycode_Status : 11|20@0+ (1,0) [0|0] "" XXX
- SG_ Autolamp_Delay_Stat : 7|8@0+ (1,0) [0|0] "Seconds" XXX
- SG_ HvacEvap_Te_Rq_UB : 61|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacEvap_Te_Rq : 55|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ Remote_Start_QuietMode_UB : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ Remote_Start_QuietMode : 32|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 264 Side_Detect_CmdM: 8 XXX
- SG_ Cross_Traffic_Cmd : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ Side_Detect_Cmd : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 266 ParkAid_Audible_Warn_CmdM: 8 XXX
- SG_ AutoPark_Cancel_Request : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ ParkAid_Audible_Warn_Cmd : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ ParkAid_Aud_Frt_Warn_Cmd : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 267 ParkAid_Audible_Warn_Stat: 8 XXX
- SG_ RpaChime_D_Rq : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ FpaChime_D_Rq : 12|4@0+ (1,0) [0|0] "" XXX
- SG_ SAPPStatusCoding : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ Volume_Cutback : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ ParkAid_Fault_Condition : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ ParkAid_Audible_Warn_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ ParkAid_Aud_Frt_Trgt_Warn : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ ParkAid_Aud_Frt_Warn_Stat : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 292 ClmtCtrlSeatSet_Cmd_v2: 8 XXX
- SG_ ClmtCtrlSeat_SetCmd_Dvr : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ ClmtCtrlSeat_SetCmd_Psgr : 15|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 293 ClmtCtrlSeatSetStat_v2_HS: 8 XXX
- SG_ ClmtCtrlSeat_SetStat_Psgr : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ ClmtCtrlSeat_SetStat_Dvr : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 336 TransData_1_CG1: 8 XXX
- SG_ TrnAinIdl_N_RqMn : 34|11@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ TrnAin_N_RqMxPrtct : 23|10@0+ (25.0,0) [0|0] "rpm" XXX
- SG_ TrnAin_Tq_RqFstMx : 29|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_Tq_RqSlwMxPrs : 7|11@0+ (1,-500.0) [0|0] "Nm" XXX
-
-BO_ 337 EngineData_1_CG1: 8 XXX
- SG_ TrnEngBrk_B_Allw : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnAout_W_ActlUnfilt : 23|15@0+ (0.1,0) [0|0] "rad/s" XXX
- SG_ TrnIpcDsplyGear_D_Actl : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ TrnIpcDsplyMde_D_Stat : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ TrnIpcDsplyMde_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ TrnIpcDsplyGear_D_Stat : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ TurboBoostPressure : 55|16@0+ (0.01,0) [0|0] "bar" XXX
-
-BO_ 338 TransData_2_CG1: 8 XXX
- SG_ GearPos_D_Actl : 55|4@0+ (1,0) [0|0] "" XXX
- SG_ TrnAout2_Tq_Actl : 39|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ TrnTotTq_Rt_Actl : 23|16@0+ (0.001,0) [0|0] "" XXX
- SG_ TrnGbox_Rt_Pred : 7|16@0+ (0.001,0) [0|0] "" XXX
-
-BO_ 339 EngineData_2_CG1: 8 XXX
- SG_ TrnAin_Tq_MxSpcPdlEngN : 55|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_Tq_MnSpcEngN : 31|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngPtoEngag_B_Actl : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnAin_N_SpcEcho : 4|13@0+ (2.0,0) [0|0] "rpm" XXX
-
-BO_ 340 EngineData_3_CG1: 8 XXX
- SG_ AirAmb_Te_ActlFilt : 33|10@0+ (0.25,-128.0) [0|0] "deg C" XXX
- SG_ EngAout_N_RqMxPrtct : 12|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ TqmTerrMdeChng_D_Rdy : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutIdl_N_RqVsc : 7|11@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ TqmTerrMde_D_Actl : 36|3@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTotVrt_Tq_RqArb : 55|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
-
-BO_ 341 EngineData_11_CG1: 8 XXX
- SG_ DieslPrtc_D_RqDsply : 42|3@0+ (1,0) [0|0] "" XXX
- SG_ EngPullUpPullDown_D_Rq : 20|4@0+ (1,0) [0|0] "" XXX
- SG_ TrnAin_Tq_RqDrv : 15|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ DieslPrtcRgen_D_Actl : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ DieslPrtcRgen_D_Rq : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_Aa_Actl : 39|10@0+ (0.05,-25.6) [0|0] "rpm/ms" XXX
- SG_ EngIgnIndTq_Rt_MnEc : 31|8@0+ (0.005,0) [0|0] "" XXX
- SG_ EngFuelCutFull_B_Allw : 45|1@0+ (1,0) [0|0] "" XXX
- SG_ EngStrtStopDis_B_Rq : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ PrplTqSys_D_Stat : 2|2@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutTqDtrb_B_Actl : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ EngTurboMde_D_Actl : 44|2@0+ (1,0) [0|0] "" XXX
- SG_ EngTeColdPrtct_D_Stats : 54|2@0+ (1,0) [0|0] "" XXX
- SG_ EXHAUST_OVERTEMP_PROTECT : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ EngExhOvrTe_B_RqDsply : 55|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 342 Engine_Data_6: 8 XXX
- SG_ EngOvrhtMitgActv_D_Ind : 36|2@0+ (1,0) [0|0] "" XXX
- SG_ Res_UreaLvlLo_B_Dsply : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ EngClntTe_D_Qf : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ EngAcsyArcPmp_Tq_Actl : 63|8@0+ (0.5,0) [0|0] "Nm" XXX
- SG_ EngOilLvlDsply_D_Rq : 43|4@0+ (1,0) [0|0] "" XXX
- SG_ EngCtlAlive_No_Cnt : 47|4@0+ (1,0) [0|0] "" XXX
- SG_ EngCtl_No_Cs : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ EngOil_Te_Actl : 15|8@0+ (1,-60.0) [0|0] "degC" XXX
- SG_ EngClnt_Te_Actl : 7|8@0+ (1,-60.0) [0|0] "degC" XXX
-
-BO_ 343 EngineData_13_CG1: 8 XXX
- SG_ EngStrtFail_B_Actl : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ EngStrt_B_Complt : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ EngStrtSpin_B_Rdy : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ EngWarmUp_B_Complt : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutTqCtl_B_Falt : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutActl_No_Cs : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutActl_No_Cnt : 45|4@0+ (1,0) [0|0] "" XXX
- SG_ VehVLim_V_RqArb : 39|9@0+ (0.5,0) [0|0] "kph" XXX
-
-BO_ 344 EngineData_14: 8 XXX
- SG_ ApedPosScal_Pc_Actl : 9|10@0+ (0.1,0) [0|0] "%" XXX
- SG_ ApedPosPcActl_No_Cs : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ ApedPosPcActl_No_Cnt : 13|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 345 Engine_Data_7_CG1: 8 XXX
- SG_ EngDecelFuelCut_B_Allw : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ FuelFlw_Vl_Dsply : 55|10@0+ (25.0,0) [0|0] "Micro_Liter" XXX
- SG_ FuelFillInlet_B_Dsply : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ EngSrvcRqd_B_Rq : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ OdoCount : 47|8@0+ (0.2,0) [0|0] "Meters" XXX
- SG_ EngOilLife_Pc_Actl : 39|7@0+ (1,0) [0|0] "%" XXX
- SG_ AirAmbTe_D_Qf : 28|2@0+ (1,0) [0|0] "" XXX
- SG_ EngTqSlwDly_T_Est : 23|11@0+ (1,0) [0|0] "ms" XXX
- SG_ TrnKickDown_B_RqDrv : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ AirAmb_Te_Actl : 1|10@0+ (0.25,-128.0) [0|0] "degC" XXX
- SG_ AirAmb_P_Actl : 7|6@0+ (10.0,500.0) [0|0] "mbar" XXX
- SG_ FuelFilterLamp_B_Dsply : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondRec_B_Rq : 61|1@0+ (1,0) [0|0] "" XXX
- SG_ AirCondEvdc_D_Stats : 60|3@0+ (1,0) [0|0] "" XXX
- SG_ AirCondClutch_B_Stats : 57|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 346 EngineData_4_CG1: 8 XXX
- SG_ TrnAin_Tq_Rq : 12|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_Tq_RqWoMdfy : 55|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_Tq_ActlWoMdfy : 36|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_Tq_Actl : 7|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAinCtlN_B_Allw : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnAinTq_D_Qf : 17|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 348 EngineData_16_CG1: 8 XXX
- SG_ EngOilLvlWarn_D_Rq1 : 50|3@0+ (1,0) [0|0] "" XXX
- SG_ EngExhBrkOnLamp_B_Rq : 51|1@0+ (1,0) [0|0] "" XXX
- SG_ EngExhBrkAutoLamp_B_Rq : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_N_MxAllw : 36|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ EngAoutIdl_N_MnAllw : 31|11@0+ (1,0) [0|0] "rpm" XXX
- SG_ EngAoutIdlRqEc_No_Cs : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutIdlRqEc_No_Cnt : 12|4@0+ (1,0) [0|0] "" XXX
- SG_ EngAoutIdl_N_RqEc : 7|11@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ EngExhBrkMde_D_Actl : 55|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 349 EngineData_17_CG1: 8 XXX
- SG_ EngResv_Tq_Actl : 52|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngAout_Tq_ActlSlw : 47|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngExhCat_Te_Est : 13|10@0+ (2.0,-60.0) [0|0] "degC" XXX
- SG_ EngCylCutIndTq_Rt_Actl : 39|8@0+ (0.005,0) [0|0] "Nm" XXX
- SG_ Eng_Aa_CalcEvntCyc : 7|10@0+ (0.05,-25.6) [0|0] "rpm/ms" XXX
- SG_ Eng_Aa_CalcEvntCbust : 19|10@0+ (0.05,-25.6) [0|0] "rpm/ms" XXX
- SG_ WaterInFuel : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ GlowIndication : 24|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 350 EngineData_18_CG1: 8 XXX
- SG_ EngAoutTqActl_D_Qf : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_Tq_MnSpcNRtrd : 36|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngAout_Tq_Actl : 31|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngAoutLss_Tq_EstSpcN : 12|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngAout_Tq_MnSpcN : 7|11@0+ (1,-500.0) [0|0] "Nm" XXX
-
-BO_ 351 EngineData_19: 8 XXX
- SG_ VehPreDelvr_V_LimMx : 15|16@0+ (0.01,0) [0|0] "kph" XXX
- SG_ BattLo_U_MeasEngMdule : 7|8@0+ (0.1,0) [0|0] "V" XXX
- SG_ EngStall_B_Actl : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ EngDashPotActv_B_Actl : 46|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_Tq_MnAllw : 42|11@0+ (1,-500.0) [0|0] "Nm" XXX
-
-BO_ 352 TransData_3_CG1: 8 XXX
- SG_ TrnAinCtlN_N_RqMx : 7|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ TrnAin_Tq_RqSlwMxShif : 42|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAinCtlN_B_RqEnbl : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnGboxIn_N_Actl : 23|13@0+ (2.0,0) [0|0] "rpm" XXX
-
-BO_ 353 Engine_Data_8: 8 XXX
- SG_ TrnAinTqDtrb_B_Actl : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnAin_Tq_MnSpcEngN : 34|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngAout_N_RqMnPrtct : 20|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ EngAout_N_MnAllw : 4|13@0+ (2.0,0) [0|0] "rpm" XXX
-
-BO_ 354 CGEA_Urea_Strategy_CG1: 8 XXX
- SG_ UreaQltySys_D_RqDsply : 27|3@0+ (1,0) [0|0] "" XXX
- SG_ UreaLvlTxt_D_RqDsply : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ VehUreaImmo_No_DsplyMx : 12|3@0+ (1,0) [0|0] "Counts" XXX
- SG_ VehUreaWarn_V_DsplyMx : 23|7@0+ (1,0) [0|0] "km/h" XXX
- SG_ VehUreaRnge_L_DsplyMx : 7|11@0+ (1,0) [0|0] "km" XXX
-
-BO_ 355 EngineData_10: 8 XXX
- SG_ WhlRearDual_D_Stat : 57|2@0+ (1,0) [0|0] "" XXX
- SG_ EngPtoMde_D_Actl : 60|3@0+ (1,0) [0|0] "" XXX
- SG_ ManRgenVeh_V_MinAllw : 55|7@0+ (1,0) [0|0] "kilometer/hour" XXX
- SG_ ManRgenTxt_D_RqDsply : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ ManRgenSoot_Pc_RqDsply : 39|7@0+ (1,0) [0|0] "%" XXX
- SG_ ManRgenInhbt_T_RqDsply : 23|16@0+ (1,0) [0|0] "Minutes" XXX
- SG_ ManRgenInhbt_Pc_Soot : 47|7@0+ (1,0) [0|0] "%" XXX
- SG_ ManRgenInhbt_L_RqDsply : 7|16@0+ (1,0) [0|0] "kilometer" XXX
-
-BO_ 357 EngBrakeData: 8 XXX
- SG_ CmbbDeny_B_ActlPrpl : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ BpedDrvAppl_No_Cs : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ BpedDrvAppl_No_Cnt : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ BpedDrvAppl_D_Actl : 31|2@0+ (1,0) [0|0] "" XXX
- SG_ CmbbEngTqMn_B_Actl : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_DsplyCcSet : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ AccEngStat_D_Actl : 2|3@0+ (1,0) [0|0] "" XXX
- SG_ CcMde_D_Actl : 13|3@0+ (1,0) [0|0] "" XXX
- SG_ TrnAinTqDtrb_B_Actl : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ CcStat_D_Actl : 10|3@0+ (1,0) [0|0] "" XXX
- SG_ CcOvrrdActv_B_Actl : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ PwPck_D_Stat : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 389 ACCDATA_CG1: 8 XXX
- SG_ AccPrpl_A_Pred : 14|10@0+ (0.01,-5.0) [0|0] "m/s^2" XXX
- SG_ AccBrkPrkEl_B_Rq : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ Cmbb_B_Enbl : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbOvrrd_B_RqDrv : 57|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbDeny_B_Actl : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ AccVeh_V_Trg : 7|9@0+ (0.5,0) [0|0] "kph" XXX
- SG_ CmbbEngTqMn_B_Rq : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ AccPrpl_A_Rq : 55|10@0+ (0.01,-5.0) [0|0] "m/s^2" XXX
- SG_ AccDeny_B_Rq : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ AccCancl_B_Rq : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkTot_A_Rq : 39|13@0+ (0.0039,-20.0) [0|0] "m/s^2" XXX
- SG_ AccBrkPrchg_B_Rq : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkDecel_B_Rq : 61|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 392 HeadUpDisplayStat: 8 XXX
- SG_ Hud_B_Falt : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ HudActv_B_Actl : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ Hud_B_Avail : 6|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 393 ACCDATA_2_CG1: 8 XXX
- SG_ ACC_AUTOBRAKE_CANCEL : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ ACC_RESUME_ACTIVE : 57|1@0+ (1,0) [0|0] "" XXX
- SG_ FcwAudioWarn_B_Rq : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ CadsAudioMute_D_Rq : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ AccWarn_D_Dsply : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ HudDsplyIntns_No_Actl : 55|8@0+ (0.5,0) [0|0] "%" XXX
- SG_ FcwVisblWarn_B_Rq : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ HudBlk3_B_Rq : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ HudBlk2_B_Rq : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ HudBlk1_B_Rq : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ HudFlashRate_D_Actl : 45|2@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBrkDecel_No_Cs : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBrkDecel_A_Rq : 23|13@0+ (0.0039,-20.0) [0|0] "m/s^2" XXX
- SG_ CmbbBrkPrchg_D_Rq : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBrkDecel_B_Rq : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBaSens_D_Rq : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ AccPrpl_V_Rq : 7|16@0+ (0.01,0) [0|0] "kph" XXX
-
-BO_ 394 ACCDATA_3: 8 XXX
- SG_ CadsMntr_No_Chk : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ FcwDeny_B_Dsply : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ FdaWarn_B_Rq : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ FcwMemStat_B_Actl : 30|1@0+ (1,0) [0|0] "" XXX
- SG_ AccTGap_B_Dsply : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ AccMsgTxt_D_Rq : 39|4@0+ (1,0) [0|0] "" XXX
- SG_ CadsAlignIncplt_B_Actl : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ AccLowVMde_B_Dsply : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ AccFllwMde_B_Dsply : 17|1@0+ (1,0) [0|0] "" XXX
- SG_ CadsRadrBlck_B_Actl : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ FdaStat_D_Dsply : 3|3@0+ (1,0) [0|0] "" XXX
- SG_ FdaDeny_B_Dsply : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ AccTrgDist_D_Dsply : 28|4@0+ (1,0) [0|0] "" XXX
- SG_ CadsChime_B_Rq : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbPostEvnt_B_Dsply : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ FcwCmbbSrvcRqd_B_Rq : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ AccStopMde_B_Dsply : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ CadsCamraBlck_B_Actl : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ FcwMemSens_D_Actl : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ FcwMemDfaltOn_B_Actl : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ AccSrvcRqd_B_Rq : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ FcwMsgTxt_D_Rq : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ FcwMemAudioOn_B_Actl : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ AccTGap_D_Dsply : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ AccMemEnbl_B_RqDrv : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ FdaMem_B_Stat : 41|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 512 TorqueDataEngFlags: 8 XXX
- SG_ BrkOnOffSwtch_D_Actl : 54|2@0+ (1,0) [0|0] "" XXX
- SG_ PrplTqMnSat_B_Actl : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTot_Tq_Rq : 39|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ PrplWhlTot_Tq_LimMn : 23|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ PrplWhlTot_Tq_Actl : 7|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ ACCompressorDisp : 63|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 513 EngVehicleSpThrottle_CG1: 8 XXX
- SG_ ApedPos_PcRate_ActlArb : 63|8@0+ (0.04,-5.0) [0|0] "%/ms" XXX
- SG_ Veh_V_RqCcSet : 45|9@0+ (0.5,0) [0|0] "kph" XXX
- SG_ VehVActlEng_D_Qf : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ reserve : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ EngAout_N_Actl : 7|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ Veh_V_ActlEng : 23|16@0+ (0.01,0) [0|0] "kph" XXX
- SG_ ApedPos_Pc_ActlArb : 39|10@0+ (0.1,0) [0|0] "%" XXX
- SG_ ApedPosPcActl_D_Qf : 52|2@0+ (1,0) [0|0] "" XXX
- SG_ Autostart_B_Stat : 50|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 529 DesiredTorqBrk_CG1: 8 XXX
- SG_ CmbbBrkDis_B_Actl : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ CMbbDeny_B_ActlBrk : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ RgenTqLimActv_B_Actl : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ CcDis_B_Cmd : 53|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrk_Pc_Rq : 39|7@0+ (1,0) [0|0] "%" XXX
- SG_ RearDiffLck_Tq_RqMx : 23|12@0+ (1,0) [0|0] "Nm" XXX
- SG_ VehLongOvrGnd_A_Est : 47|10@0+ (0.035,-17.9) [0|0] "m/s^2" XXX
- SG_ StabCtlBrkActv_B_Actl : 27|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBrkPrchg_B_Actl : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBrkDecel_B_Actl : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbBaSensInc_B_Actl : 57|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkWarm_B_Actl : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkTotTqMn_B_Actl : 62|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkPrchgActv_B_Actl : 61|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkDis_B_Actl : 50|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkDeny_B_Actl : 49|1@0+ (1,0) [0|0] "" XXX
- SG_ AccBrkActv_B_Actl : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ PrplDrgCtlActv_B_Actl : 52|1@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTot_Tq_RqMx : 7|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ AbsActv_B_Actl : 51|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 533 WheelSpeed_CG1: 8 XXX
- SG_ WhlRr_W_Meas : 55|15@0+ (0.01,0) [0|0] "rad/s" XXX
- SG_ WhlRl_W_Meas : 39|15@0+ (0.01,0) [0|0] "rad/s" XXX
- SG_ WhlFr_W_Meas : 23|15@0+ (0.01,0) [0|0] "rad/s" XXX
- SG_ WhlFl_W_Meas : 7|15@0+ (0.01,0) [0|0] "rad/s" XXX
-
-BO_ 534 WheelData: 8 XXX
- SG_ WhlRotatRr_No_Cnt : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRr_D_Actl : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirRl_D_Actl : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirFr_D_Actl : 37|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlDirFl_D_Actl : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatRl_No_Cnt : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatFr_No_Cnt : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ WhlRotatFl_No_Cnt : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ WHEEL_ROLLING_TIMESTAMP : 47|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 557 InfoCAN_22D: 8 XXX
- SG_ Multimedia_System : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 560 TransGearData: 8 XXX
- SG_ TrnIpcDsplyRng_D_Actl : 14|3@0+ (1,0) [0|0] "" XXX
- SG_ TrnGbox_Rt_Actl : 47|16@0+ (0.001,0) [0|0] "" XXX
- SG_ TrnShifMde_D_RqDrv : 3|3@0+ (1,0) [0|0] "" XXX
- SG_ TrnSrvcRqd_B_Rq : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ GearPos_D_Trg : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ TrnCnvtClu_D_Actl : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ TrnShifActv_B_Actl : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ RtmTerrMdeChng_D_Rdy : 58|3@0+ (1,0) [0|0] "" XXX
- SG_ RtmTerrMde_D_Actl : 61|3@0+ (1,0) [0|0] "" XXX
- SG_ GearRvrseActv_B_Actl : 62|1@0+ (1,0) [0|0] "" XXX
- SG_ GearLvrPos_D_Actl : 23|4@0+ (1,0) [0|0] "" XXX
- SG_ GboxOil_Te_Actl : 31|8@0+ (1,-60.0) [0|0] "degC" XXX
-
-BO_ 561 TransGearData_2: 8 XXX
- SG_ MtrGen1Aout_Tq_Rq : 53|14@0+ (0.1,-800.0) [0|0] "Nm" XXX
- SG_ MtrGen1AoutTqRq_No_Cs : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ MtrGen1AoutTqRq_No_Cnt : 15|4@0+ (1,0) [0|0] "" XXX
- SG_ CoolFanTrn_D_Rq : 31|5@0+ (1,0) [0|0] "" XXX
- SG_ TrnMsgTxt_D_Rq : 39|4@0+ (1,0) [0|0] "" XXX
- SG_ TrnMil_D_Rq : 26|2@0+ (1,0) [0|0] "" XXX
- SG_ EngExhBrkTq_Pc_Rq : 23|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 562 TransGearData_3_CG1: 8 XXX
- SG_ TrnPto_D_Rdy : 12|2@0+ (1,0) [0|0] "" XXX
- SG_ TipInMgrInhbt_B_RqTrn : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnAinIdl_Tq_Actl : 39|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAinLss_Tq_Est : 7|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_Tq_RqSlwMn : 23|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ GearEngag_D_Actl : 10|3@0+ (1,0) [0|0] "" XXX
- SG_ TrnAinTqDtrb_B_Rq : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnTotLss_Tq_Actl : 55|8@0+ (0.5,0) [0|0] "Nm" XXX
-
-BO_ 563 TransGearData_4_CG1: 8 XXX
- SG_ TrnAinCtlN_N_RqMn : 20|13@0+ (2.0,0) [0|0] "rpm" XXX
- SG_ TrnAinTqMn_No_Cs : 63|8@0+ (1,0) [0|0] "" XXX
- SG_ TrnAinTqMn_No_Cnt : 11|4@0+ (1,0) [0|0] "" XXX
- SG_ TrnAinRq_Pc_SpcPdl : 7|10@0+ (0.1,0) [0|0] "%" XXX
- SG_ TrnAin_Tq_RqFstMn : 42|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ TrnAin_N_SpcEng : 39|13@0+ (2.0,0) [0|0] "rpm" XXX
-
-BO_ 570 Suspension_Stat: 8 XXX
- SG_ CcdMsgTxt_D_RqDsply : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ SuspRear_L_Prev : 48|9@0+ (0.782779,-200.0) [0|0] "millimeter" XXX
- SG_ SuspRear_L_Actl : 32|9@0+ (0.782779,-200.0) [0|0] "millimeter" XXX
- SG_ SuspFrnt_L_Prev : 16|9@0+ (0.782779,-200.0) [0|0] "millimeter" XXX
- SG_ SuspFrnt_L_Actl : 0|9@0+ (0.782779,-200.0) [0|0] "millimeter" XXX
-
-BO_ 571 ColumnLockData: 8 XXX
- SG_ SteWhlLckMsgTxt_D_Rq : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 576 Body_Information_4_CG1: 8 XXX
- SG_ HvacRec_Pc_Est_UB : 51|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacRec_Pc_Est : 38|7@0+ (1,0) [0|0] "%" XXX
- SG_ HvacEngIdleInc_B_Rq_UB : 49|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacEngIdleInc_B_Rq : 53|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacAir_Flw_Est_UB : 52|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacAir_Flw_Est : 31|9@0+ (0.5,0) [0|0] "liter/second" XXX
- SG_ AmbTempImpr_UB : 50|1@0+ (1,0) [0|0] "" XXX
- SG_ AmbTempImpr : 47|10@0+ (0.25,-128.0) [0|0] "degreesC" XXX
- SG_ DriverCrankingReq : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ Fcw_B_DenyMntr : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ EngOff_T_Actl : 7|16@0+ (1,0) [0|0] "seconds" XXX
- SG_ CmbbMntr_B_Err : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ CmbbDeny_B_RqMntr : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ AccMntr_B_Err : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ AccDeny_B_RqMntr : 19|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 592 EONV_Status: 8 XXX
- SG_ EONV_FAULT : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_KAL_IC_RQST : 53|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_T_STATUS : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ EONV_VREF_FLT : 62|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_VBATT_FLT : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_CANISTER_VENT_FLT : 54|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_CVS_CLOSED : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_BATT_VOLT : 23|16@0+ (0.0009765625,0) [0|0] "volts" XXX
- SG_ EONV_TANK_FLT : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_TANK_PRESS : 7|16@0+ (0.001953125,-64.0) [0|0] "inches H2O" XXX
-
-BO_ 597 EONV_Control: 8 XXX
- SG_ EONV_POS_DET_THRESHOLD : 23|16@0+ (0.001953125,-64.0) [0|0] "inches H2O" XXX
- SG_ EONV_STAY_ALIVE : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ EONV_CVS_MODE : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ EONV_NEG_DET_THRESHOLD : 39|16@0+ (0.001953125,-64.0) [0|0] "inches H2O" XXX
- SG_ EONV_MIL_ON : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ EonvMsgTxOff_B_Rq : 4|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 608 Information4x4_CG1: 8 XXX
- SG_ AwdRngeShifActv_B_Actl : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ TrnAout_Tq_RqMx : 47|13@0+ (1,-1250.0) [0|0] "Nm" XXX
- SG_ AwdRngeFalt_D_Stat : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdLck_Tq_Actl : 15|12@0+ (1,0) [0|0] "Nm" XXX
- SG_ AwdRnge_D_Actl : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ AwdTerrMdeChng_D_Rdy : 50|3@0+ (1,0) [0|0] "" XXX
- SG_ AwdTerrMde_D_Actl : 58|3@0+ (1,0) [0|0] "" XXX
- SG_ AwdOffRoadMode_D_Stats : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdStat_D_RqDsply : 63|5@0+ (1,0) [0|0] "" XXX
- SG_ AwdLoLamp_D_RqDsply : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdHiLamp_D_RqDsply : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdAutoLamp_D_RqDsply : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdLckLamp_D_RqDsply : 27|2@0+ (1,0) [0|0] "" XXX
- SG_ AwdLck_D_Stat : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ Awd2wdLamp_D_RqDsply : 2|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 609 AWD_4x4_Data: 8 XXX
- SG_ AwdLck_Tq_Rq : 27|12@0+ (1,0) [0|0] "Nm" XXX
- SG_ AwdSrvcRqd_B_Rq : 44|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 613 PassengerSeatOCSInfo: 8 XXX
- SG_ VehicleMYCalibrationId : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VehicleCalibrationId : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSensrDataUpperLim : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSensrDataLowerLim : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSLevel2Error : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ ObjectEntrapped : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ OCSLevel1Error : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 736 FCIM_Button_Press_HS: 8 XXX
- SG_ FCIM_Target_ID : 13|4@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Button_Type : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Button_State : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Target_ID_UB : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Button_Type_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ FCIM_Button_State_UB : 8|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 806 Compressor_Req_HS: 8 XXX
- SG_ HvacEvap_Te_Rq : 33|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ HvacEvap_Te_Actl : 17|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ HvacAirCond_B_Rq : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacEvap_Te_Offst : 1|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
-
-BO_ 832 RCMStatusMessage: 8 XXX
- SG_ eCallNotification : 2|2@0+ (1,0) [0|0] "" XXX
- SG_ CrashNotification : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBucklePsngr : 57|2@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBuckleMid : 59|2@0+ (1,0) [0|0] "" XXX
- SG_ ThirdRowBuckleDriver : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBucklePsngr : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBuckleMid : 49|2@0+ (1,0) [0|0] "" XXX
- SG_ SecondRowBuckleDriver : 51|2@0+ (1,0) [0|0] "" XXX
- SG_ FirstRowBuckleDriver : 55|2@0+ (1,0) [0|0] "" XXX
- SG_ RstrnTotalEvntCnt : 43|4@0+ (1,0) [0|0] "" XXX
- SG_ RstrnCurrentEvntCnt : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ RILReq : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ FuelCutoffReq : 13|4@0+ (1,0) [0|0] "" XXX
- SG_ SeatbeltIndicatorReq : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatbeltChimeReq : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ BeltMinderProgConfReq : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ BeltMinderLevelReq : 19|4@0+ (1,0) [0|0] "" XXX
- SG_ FirstRowBucklePsngr : 53|2@0+ (1,0) [0|0] "" XXX
- SG_ InfoLampReq : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ GenRedLampReq : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ RstrnTextMsgReq : 27|2@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNumRcvd : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ RstrnStatDeployEnbld : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ RstrnImpactEvntStatus : 46|3@0+ (1,0) [0|0] "" XXX
- SG_ PassRstrnInd_Req : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ RstrnStatTrigEvnt : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ PsngrFrntDetct_D_Actl : 31|2@0+ (1,0) [0|0] "" XXX
- SG_ Beltminder_Warn_Stats : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ EDRTriggerEvntSync : 47|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 842 MassageSeat_Data1_HS: 8 XXX
- SG_ SeatLmbrUpDrv_Pc_Actl : 38|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrMidDrv_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrLoDrv_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlUpDrv_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlLoDrv_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 843 MassageSeat_Data2_HS: 8 XXX
- SG_ SeatLmbrUpPsgr_Pc_Actl : 38|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrMidPsgr_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatLmbrLoPsgr_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlUpPsgr_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatBlLoPsgr_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 844 MassageSeat_Stat1_HS: 8 XXX
- SG_ StmsLmbrDrv_D_Stat : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ StmsCshnDrv_D_Stat : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ SeatSwtchDrv_B_Stat : 31|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDrv_D_Stat : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ SeatAirAmb_P_Actl : 7|16@0+ (0.01,0) [0|0] "KiloPascal" XXX
- SG_ SeatPDrv_B_Stat : 20|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 845 MassageSeat_Stat2_HS: 8 XXX
- SG_ StmsLmbrPsgr_D_Stat : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ StmsCshnPsgr_D_Stat : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ SeatSwtchPsgr_B_Stat : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatPPsgr_B_Stat : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnPsgr_D_Stat : 6|3@0+ (1,0) [0|0] "" XXX
- SG_ PsgrMemFeedback_Rsp : 3|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 846 MassageSeat_Req: 8 XXX
- SG_ SeatFnPsgr_D_Rq : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDrv_D_Rq : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDfaltPsgr_B_Rq : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnDfaltDrv_B_Rq : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnChngPsgr_D_Rq : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ SeatFnChngDrv_D_Rq : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ PsgrMemory_Rq : 3|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 848 RestraintsData: 8 XXX
- SG_ PassRstrnInd_Stat_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ SeatBltWrnChmeStat : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Seatbelt_IndctrStat : 4|3@0+ (1,0) [0|0] "" XXX
- SG_ RILStat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ PassRstrnInd_Stat : 15|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 849 MassageSeat_Data3_HS: 8 XXX
- SG_ SeatCshnDrvRR_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnDrvRL_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnDrvFR_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnDrvFL_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 850 MassageSeat_Data4_HS: 8 XXX
- SG_ SeatCshnPsgrRR_Pc_Actl : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnPsgrRL_Pc_Actl : 22|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnPsgrFR_Pc_Actl : 14|7@0+ (1,0) [0|0] "%" XXX
- SG_ SeatCshnPsgrFL_Pc_Actl : 6|7@0+ (1,0) [0|0] "%" XXX
-
-BO_ 853 EFP_CC_Status: 8 XXX
- SG_ Save_My_Temp : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Left_Temp_Setpt : 31|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RrDefrost_HtdMirrorReq : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Control_Status : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ MultipleButtonPressReq : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ Rear_System_Mode_Req : 19|3@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Left_Temp_Setpt : 47|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ Recirc_Request : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ Front_Rt_Temp_Setpt : 39|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ AC_Request : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Windshield_ModeRequest : 15|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Panel_Mode_Request : 7|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Overriding_ModeReq : 10|3@0+ (1,0) [0|0] "" XXX
- SG_ Forced_Recirc_Req : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_Request : 3|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Rear_Right_Temp_Setpt : 55|8@0+ (1,0) [0|0] "Mixed" XXX
-
-BO_ 854 EFP_CC_Seat_Req_Stat: 8 XXX
- SG_ Front_Rear_Blower_Req : 31|6@0+ (1,0) [0|0] "Detents" XXX
- SG_ Pass_Rr_Cond_Seat_Req : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Rr_Cond_Seat_Lvl : 8|3@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Fr_Cond_Seat_Req : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Fr_Cond_Seat_Lvl : 11|3@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Rr_Cond_Seat_Req : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Rr_Cond_Seat_Lvl : 2|3@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Fr_Cond_Seat_Req : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Fr_Cond_Seat_Lvl : 5|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 855 RCCM_CC_Status_HS: 8 XXX
- SG_ RrBlwrCondStLdShedStat : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ FrBlwrCondStLdShedStat : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_Rr_Rt_TempSetpt : 63|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Rr_Left_TempSetpt : 55|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Fr_Rt_TempSetpt : 47|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RCCM_Fr_Rr_Blower_Req : 31|6@0+ (1,0) [0|0] "Detents" XXX
- SG_ Panel_Mode_State : 7|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ RrDefHtdMirrLdShedStat : 18|2@0+ (1,0) [0|0] "" XXX
- SG_ Windshield_Mode_State : 15|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ Recirc_Door_State : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_System_Mode_State : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ Default_Defrost_State : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Auto_AC_Indicator_Temp : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ Floor_Mode_State : 3|4@0+ (8.33,0) [0|0] "%" XXX
- SG_ RCCM_Fr_Left_TempSetpt : 39|8@0+ (1,0) [0|0] "Mixed" XXX
- SG_ RrDefrost_HtdMirrState : 8|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 856 RCCM_CC_Seat_Status_HS: 8 XXX
- SG_ Active_My_Temp : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_HtdStrWhl_Req : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PR_Cond_Seat_Lvl : 31|3@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PR_Cond_Seat_Req : 28|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PF_Cond_Seat_Req : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_PF_Cond_Seat_Lvl : 23|3@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DR_Cond_Seat_Req : 12|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DR_Cond_Seat_Lvl : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DF_Cond_Seat_Req : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ RCCM_DF_Cond_Seat_Lvl : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ PassRrCondStLdShedStat : 26|2@0+ (1,0) [0|0] "" XXX
- SG_ PassFrCondStLdShedStat : 18|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvRrCondStLdShedStat : 10|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvFrCondStLdShedStat : 1|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 857 RCCM_CC_MBP_Press_Stat_HS: 8 XXX
- SG_ MultBtnPushDsplyPass10 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyPass1 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ Report_Active : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ Pass_Temp_Units : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_Fan_Bars_Disply : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ Drvr_Temp_Units : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyDrvr10 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ MultBtnPushDsplyDrvr1 : 15|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 859 MFD_CC_Status_HS: 8 XXX
- SG_ Rear_Mode_Bttn_Status : 38|1@0+ (1,0) [0|0] "" XXX
- SG_ ConditionSt_ButtonStat : 20|5@0+ (1,0) [0|0] "" XXX
- SG_ Driver_Set_Temp : 31|8@0+ (0.5,0) [0|0] "Degrees" XXX
- SG_ Frt_System_Button_Stat : 7|5@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Blower_Bar_Status : 2|3@0+ (1,0) [0|0] "# of Bars" XXX
- SG_ Rear_Fan_Button_Status : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Man_Temp_Bar_Stat : 11|4@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Temp_Button_Status : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ Voice_Blower_Limit : 21|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 860 EFP_CC_Info_Status: 8 XXX
- SG_ Rear_Panel_Btn_State : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Floor_Btn_State : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ HtdStrWhl_SftBtt_Stt : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ AC_Sft_Button_State : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvRrCondSeatSftBttnSt : 47|3@0+ (1,0) [0|0] "" XXX
- SG_ DrvFrCondSeatSftBtnStt : 37|3@0+ (1,0) [0|0] "" XXX
- SG_ CC_RecircSBtn_St : 27|2@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrDefrSBtn_St : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ PasRrCondSeatSftBttnSt : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ PasFrCondSeatSftBtnStt : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ MyTemp_Soft_Bttn_State : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_MaxACSBtn_St : 28|1@0+ (1,0) [0|0] "" XXX
- SG_ RearPowerButtonState : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ RearCoolBarsDisplayed : 11|3@0+ (1,0) [0|0] "Bars_On" XXX
- SG_ Rear_Sft_Control_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrNeutralBarDsp_St : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrHeatBarsDsp_St : 31|3@0+ (1,0) [0|0] "Bars_On" XXX
- SG_ Rear_Fan_Bars_Displayed : 19|3@0+ (1,0) [0|0] "" XXX
- SG_ CC_RrCtrlBtn_St : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ Rear_Auto_Button_State : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_FrPowerSBtn_St : 14|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_FrDefrostSBtn_St : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_Soft_Btn_Stt : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_MODE_State : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Front_AUTO_FAN_State : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Dual_Button_State : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarPnlSBtn_St : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarPnFlrSBtn_St : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarFlrWsSBtn_St : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CC_BarDrvFlrSBtn_St : 3|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 890 Active_Noise: 8 XXX
- SG_ ANC_Chime_Supported : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ ActvNseAudio_D_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ ActvNse_B_Actv : 5|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 891 Active_Noise_Data: 8 XXX
- SG_ CabnSndAmb_Db_Actl : 7|8@0+ (1,30.0) [0|0] "decibel" XXX
-
-BO_ 906 Body_Information_1: 8 XXX
- SG_ CcdMde_D_Rq_UB : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ CcdMde_D_Rq : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ CarMode : 5|4@0+ (1,0) [0|0] "" XXX
- SG_ SecondaryHeater_Rqst : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ Passenger_Sunload_Raw : 47|8@0+ (5.0,0) [0|0] "W/m^2" XXX
- SG_ Driver_Sunload_Raw : 39|8@0+ (5.0,0) [0|0] "W/m^2" XXX
- SG_ HvacEvap_Te_Actl_UB : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacEvap_Te_Actl : 17|10@0+ (0.125,-50.0) [0|0] "Degrees C" XXX
- SG_ SecondaryHeater_Rqst_UB : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ Outside_Air_Temp_Stat_UB : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ Outside_Air_Temp_Stat : 15|8@0+ (0.5,-40.0) [0|0] "Degrees C" XXX
- SG_ Veh_Lock_Status : 54|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Lock_Requestor : 52|5@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Lock_EvNum : 63|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ immoIndicatorCmd : 22|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 909 Body_Information_6: 8 XXX
- SG_ PEBackupSlot_Stats_UB : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ PEBackupSlot_Stats : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ KeyMykeyTot_No_Cnt : 47|4@0+ (1,0) [0|0] "Counts" XXX
- SG_ SideDetect_R_SysOpState_UB : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_R_SysOpState : 28|2@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_R_SnsrState_UB : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_R_SnsrState : 31|2@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_L_SysOpState_UB : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_L_SysOpState : 18|2@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_L_SnsrState_UB : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ SideDetect_L_SnsrState : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_SnState_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_SnState : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_Op_State_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_Op_State : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_Alert_UB : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_R_Alert : 14|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_SnState_UB : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_SnState : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_Op_State_UB : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_Op_State : 4|2@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_Alert_UB : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Cross_Traffic_L_Alert : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ IgnKeyType_D_Actl : 39|4@0+ (1,0) [0|0] "" XXX
- SG_ KeyAdmnTot_No_Cnt : 35|4@0+ (1,0) [0|0] "Counts" XXX
-
-BO_ 936 ParkAid_Data: 8 XXX
- SG_ SAPPErrorCoding : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ ExtSteeringAngleReq : 7|15@0+ (0.1,-1000.0) [0|0] "Degrees" XXX
- SG_ EPASExtAngleStatReq : 8|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 937 ParkAid_Range_to_Target: 8 XXX
- SG_ RangeToClosestObstacle : 55|12@0+ (1,0) [0|0] "cm" XXX
- SG_ RangeRearCornerRtSn : 35|12@0+ (1,0) [0|0] "cm" XXX
- SG_ RangeRearCornerLeftSn : 31|12@0+ (1,0) [0|0] "cm" XXX
- SG_ RangeRearCenterRtSn : 11|12@0+ (1,0) [0|0] "cm" XXX
- SG_ RangeRearCenterLeftSn : 7|12@0+ (1,0) [0|0] "cm" XXX
-
-BO_ 939 ParkAid_Data_CG1: 8 XXX
- SG_ EPASExtAngleStatReq : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ ExtSteeringAngleReq : 6|15@0+ (0.1,-1000.0) [0|0] "Degrees" XXX
- SG_ SAPPErrorCoding : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ RangeToClosestObstacle : 27|12@0+ (1,0) [0|0] "cm" XXX
-
-BO_ 942 BodyInformation_2: 8 XXX
- SG_ Easy_Entry_Exit_Stat : 14|2@0+ (1,0) [0|0] "" XXX
- SG_ Memory_Feedback_Rqst : 15|1@0+ (1,0) [0|0] "" XXX
- SG_ Delay_Accy : 41|1@0+ (1,0) [0|0] "" XXX
- SG_ Fuel_Econ_AFE_Reset_Req_UB : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ Multimedia_System : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatDrv_B_Actl : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatHood_B_Actl : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatInnrTgate_B_Actl : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatPsngr_B_Actl : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatRl_B_Actl : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatRr_B_Actl : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ DrStatTgate_B_Actl : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Fuel_Econ_AFE_Reset_Req : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Nav_Unit_Setting : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ Cancel_Auto_Movement : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Cancel_Auto_Movement_UB : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ DrvSeat_Stat : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ DrvSeat_Stat_UB : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ Easy_Entry_Rqst : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ Easy_Entry_Rqst_UB : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ Multimedia_System_UB : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ Memory_Cmd : 39|4@0+ (1,0) [0|0] "" XXX
- SG_ Memory_Cmd_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ Memory_Feedback_Rqst_UB : 45|1@0+ (1,0) [0|0] "" XXX
- SG_ Decklid_Ajar_Status : 44|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 947 BodyInformation_3: 8 XXX
- SG_ RearFog_Lamp_Ind_UB : 49|1@0+ (1,0) [0|0] "" XXX
- SG_ RearFog_Lamp_Ind : 50|1@0+ (1,0) [0|0] "" XXX
- SG_ PwMdeExten_D_Actl : 63|5@0+ (1,0) [0|0] "" XXX
- SG_ Turn_Ind_Cmd_Right : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ Turn_Ind_Cmd_Left : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ Ignition_Switch_Stable : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ Parklamp_Status : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ Litval : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ Key_In_Ignition_Stat : 11|2@0+ (1,0) [0|0] "" XXX
- SG_ Ignition_Status : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ Dimming_Lvl : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ Day_Night_Status : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ Remote_Start_Status : 13|2@0+ (1,0) [0|0] "" XXX
- SG_ DRV_SELECT_STAT : 19|4@0+ (1,0) [0|0] "" XXX
- SG_ PrkBrkActv_B_Actl : 55|1@0+ (1,0) [0|0] "" XXX
- SG_ HtdStrWhl_SftBtt_State_UB : 51|1@0+ (1,0) [0|0] "" XXX
- SG_ HtdStrWhl_SftBtt_State : 53|2@0+ (1,0) [0|0] "" XXX
- SG_ HvacRemoteStrt_N_Rq_UB : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacRemoteStrt_N_Rq : 23|4@0+ (100.0,450.0) [0|0] "RPM" XXX
- SG_ HvacAirCond_B_Rq_UB : 57|1@0+ (1,0) [0|0] "" XXX
- SG_ Remote_Start_Warn_Req : 54|1@0+ (1,0) [0|0] "" XXX
- SG_ HvacAirCond_B_Rq : 58|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 948 Tire_Pressure_Status: 8 XXX
- SG_ Tire_Press_ILR_Stat2 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_IRR_Stat2 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_LR_OLR_Stat2 : 19|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_RR_ORR_Stat2 : 23|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_RF_Stat2 : 11|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_LF_Stat2 : 15|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_System_Stat2 : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ Tire_Press_Telltale : 3|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 949 Tire_Pressure_Data: 8 XXX
- SG_ Tire_Press_RR_ORR_Data : 23|8@0+ (1,0) [0|0] "Psi" XXX
- SG_ Tire_Press_RF_Data : 15|8@0+ (1,0) [0|0] "Psi" XXX
- SG_ Tire_Press_LR_OLR_Data : 31|8@0+ (1,0) [0|0] "Psi" XXX
- SG_ Tire_Press_IRR_Data : 39|8@0+ (1,0) [0|0] "Psi" XXX
- SG_ Tire_Press_ILR_Data : 47|8@0+ (1,0) [0|0] "Psi" XXX
- SG_ Tire_Press_LF_Data : 7|8@0+ (1,0) [0|0] "Psi" XXX
-
-BO_ 955 Smart_Headlamp_Stat: 8 XXX
- SG_ Headlamp_Switch_Stat : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ Fog_Lamp_Dbnce : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ Digital_Dimmer_Sw_Stat : 3|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 957 Rear_FogLamp: 8 XXX
- SG_ RearFog_Lamp_Dbnce : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 963 BCM_to_HS_Body: 8 XXX
- SG_ DrTgateChime_D_Rq_UB : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ DrTgateChime_D_Rq : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraDefog_B_Actl : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ Reverse_Mirror_Stat : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ Power_Liftgate_Mode_Stat : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ IKT_Program_Status : 51|2@0+ (1,0) [0|0] "" XXX
- SG_ Veh_Spd_Slow_Puddle_Status : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ Illuminated_Exit_Status : 43|2@0+ (1,0) [0|0] "" XXX
- SG_ Illuminated_Entry_Status : 45|2@0+ (1,0) [0|0] "" XXX
- SG_ Door_Courtesy_Light_Status : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ Courtesy_Demand_BSave_Stat : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ Alarm_Lights_Courtesy_Stat : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ Courtesy_Delay_Status : 37|2@0+ (1,0) [0|0] "" XXX
- SG_ Courtesy_Mode_Status : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ Front_Fog_Light_SW_Status : 22|2@0+ (1,0) [0|0] "" XXX
- SG_ Brake_Lamp_On_Status : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ LowBeam_CKT_CAN : 11|1@0+ (1,0) [0|0] "" XXX
- SG_ ParkLamps_CKT_CAN : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ RF_Low_Beam_CKT_CAN : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ Brk_Fluid_Lvl_Low : 15|2@0+ (1,0) [0|0] "" XXX
- SG_ LF_Low_Beam_CKT_CAN : 12|1@0+ (1,0) [0|0] "" XXX
- SG_ High_Beam_Indicator_Rqst : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ Brake_Warn_Indicator_Rqst : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ Headlamp_On_Wrning_Cmd : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ Key_In_Ignition_Warn_Cmd : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ Fog_Lamps_Rly_Ckt_CAN : 10|1@0+ (1,0) [0|0] "" XXX
- SG_ Power_Liftgate_Mode_Stat_UB : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ Reverse_Mirror_Stat_UB : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ Park_Brake_Chime_Rqst : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ Daytime_Running_Lamps : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Running_Board_Stat_UB : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ Running_Board_Stat : 58|2@0+ (1,0) [0|0] "" XXX
- SG_ Perimeter_Alarm_Chime_Rqst : 20|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 967 CMPS_FDM_Info_Status: 8 XXX
- SG_ CamraFrntStat_D_Stat : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ Zone_Icon_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ GPS_Compass_direction : 47|4@0+ (1,0) [0|0] "" XXX
- SG_ Segment_MSD_UB : 37|1@0+ (1,0) [0|0] "" XXX
- SG_ Segment_LSD_UB : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ ExcessiveMagnetism : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ Compass_Display_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ Segment_LSD : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ Segment_MSD : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ Cal_Icon : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ Zone_Icon : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ Compass_Display : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ Cal_Icon_UB : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ RearCameraDelayStat : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlTow_D_Actl : 25|2@0+ (1,0) [0|0] "SE" XXX
- SG_ CamZoomActiveState : 29|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraZoomMan_D_Actl : 18|3@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlStat_D_Actl : 27|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlDyn_D_Actl : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ CamPDCGuidStat : 31|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 970 Lane_Assist_Data1: 8 XXX
- SG_ LkaActvStats_D_Req : 7|3@0+ (1,0) [0|0] "" XXX
- SG_ LdwActvStats_D_Req : 4|3@0+ (1,0) [0|0] "" XXX
- SG_ LdwActvIntns_D_Req : 1|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 971 Lane_Assist_Data2: 8 XXX
- SG_ LaRefAng_No_Req : 19|12@0+ (0.05,-102.4) [0|0] "mrad" XXX
- SG_ LaRampType_B_Req : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ LaCurvature_No_Calc : 3|12@0+ (5e-06,-0.01) [0|0] "1/m" XXX
-
-BO_ 972 Lane_Assist_Data3: 8 XXX
- SG_ LaHandsOff_B_Actl : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ LaActDeny_B_Actl : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ LaActAvail_D_Actl : 5|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 984 IPMA_Data: 8 XXX
- SG_ LaSwtch_D_RqDrv : 45|1@0+ (1,0) [0|0] "" XXX
- SG_ DasWarn_D_Dsply : 44|2@0+ (1,0) [0|0] "" XXX
- SG_ DasStats_D_Dsply : 47|2@0+ (1,0) [0|0] "" XXX
- SG_ DasAlrtLvl_D_Dsply : 55|3@0+ (1,0) [0|0] "" XXX
- SG_ CamraStats_D_Dsply : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ CamraDefog_B_Req : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ LaSwtchStat_No_Actl : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ LaHandsOff_D_Dsply : 42|2@0+ (1,0) [0|0] "" XXX
- SG_ LaDenyStats_B_Dsply : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ LaActvStats_D_Dsply : 52|5@0+ (1,0) [0|0] "" XXX
- SG_ AhbcHiBeam_D_Rq : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ PersIndexIpma_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoIpmaActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigIpmaActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 986 Personality_APIM_Data3: 8 XXX
- SG_ LightAmbIntSwtchInc_B : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbIntSwtchDec_B : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbIntsty_No_Rq : 15|8@0+ (1,0) [0|0] "% Intensity" XXX
- SG_ LightAmbColor_No_Rq : 7|8@0+ (1,0) [0|0] "Color Index" XXX
- SG_ LightAmbClrSwtchInc_B : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbClrSwtchDec_B : 23|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 991 Personality_VDM_Data: 8 XXX
- SG_ PersIndexVdm_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoVdmActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigVdmActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 992 Personality_IPC_Data: 8 XXX
- SG_ MsgCntrPersIndex_D_Rq : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrFeatConfigRq : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ MsgCntrFeatNoRq : 7|16@0+ (1,0) [0|0] "Number" XXX
- SG_ MsgCntrDsplyOp_D_Rq : 36|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 993 Personality_Data_HS: 8 XXX
- SG_ PersSetupRestr_D_Actl : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ PersSetupAccessCtrl : 19|1@0+ (1,0) [0|0] "SES" XXX
- SG_ PersSetup_No_Actl : 31|16@0+ (1,0) [0|0] "Number" XXX
- SG_ PersConflict_D_Actl : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ AssocConfirm_D_Actl : 15|3@0+ (1,0) [0|0] "" XXX
- SG_ RecallEvent_No_Cnt : 7|8@0+ (1,0) [0|0] "Counts" XXX
- SG_ PersNo_D_Actl : 10|3@0+ (1,0) [0|0] "" XXX
- SG_ PersStore_D_Actl_UB : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ PersStore_D_Actl : 12|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 994 Personality_APIM_Data: 8 XXX
- SG_ CamraOvrlTow_D_Rq : 42|1@0+ (1,0) [0|0] "" XXX
- SG_ Pers4OptIn_B_Stats : 43|1@0+ (1,0) [0|0] "" XXX
- SG_ Pers3OptIn_B_Stats : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ Pers2OptIn_B_Stats : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ Pers1OptIn_B_Stats : 44|1@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkPersIndex_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkFeatNoActl : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ PersStore_D_Rq : 36|3@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkFeatConfigActl : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ CtrStkDsplyOp_D_Rq : 47|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 995 Personality_BCM_Data: 8 XXX
- SG_ PersIndexBcm_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoBcm_No_Actl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigBcmActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 996 Personality_HCMB_Data_HS: 8 XXX
- SG_ PersIndexHcmb_D_Actl_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ PersIndexHcmb_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoHcmbActl_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoHcmbActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigHcmbActl_UB : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatConfigHcmbActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 997 Personality_CCM_Data: 8 XXX
- SG_ PersIndexCcm_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoCcmActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigCcmActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 998 Personality_SCCM_Data: 8 XXX
- SG_ PersIndexSccm_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoSccmActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigSccmActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 999 Personality_HVAC_Data_HS: 8 XXX
- SG_ LightAmbIntsty_No_Actl_UB : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbIntsty_No_Actl : 55|8@0+ (1,0) [0|0] "% Intensity" XXX
- SG_ LightAmbColor_No_Actl_UB : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ LightAmbColor_No_Actl : 47|8@0+ (1,0) [0|0] "Color Index" XXX
- SG_ PersIndexHvac_D_Actl_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoHvacActl_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatConfigHvacActl_UB : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ PersIndexHvac_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoHvacActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigHvacActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1001 Personality_RFA_Data_HS: 8 XXX
- SG_ PersIndexRfa_D_Actl_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoRfaActl_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatConfigRfaActl_UB : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ PersIndexRfa_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoRfaActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigRfaActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1002 Personality_APIM_Data2: 8 XXX
- SG_ PersIndexApim_D_Actl : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoApimActl : 39|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigApimActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ CntrStkKeycodeActl : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ CntrStk_D_RqRecall : 52|3@0+ (1,0) [0|0] "" XXX
- SG_ CntrStk_D_RqAssoc : 55|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 1003 Personality_IPC_Data_2: 8 XXX
- SG_ PersIndexIpc_D_Actl : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoIpcActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigIpcActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1004 Personality_DSM_Data_HS: 8 XXX
- SG_ PersIndexDsm_D_Actl_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ PersIndexDsm_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoDsmActl_UB : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoDsmActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigDsmActl_UB : 36|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatConfigDsmActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1005 Personality_RHVAC_Data_HS: 8 XXX
- SG_ PersIndexRhvac_D_Actl_UB : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoRhvacActl_UB : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ FeatConfigRhvacActl_UB : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ PersIndexRhvac_D_Actl : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ FeatNoRhvacActl : 23|16@0+ (1,0) [0|0] "Number" XXX
- SG_ FeatConfigRhvacActl : 7|16@0+ (1,0) [0|0] "" XXX
-
-BO_ 1031 Diesel_Data_Legacy_1: 8 XXX
- SG_ W2S_COMMAND : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ TURBO_BOOST : 1|10@0+ (0.1,-30.0) [0|0] "PSI" XXX
- SG_ IDLE_ENGINE_SHUTDOWN : 42|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 1034 GGCC_Config_Mgmt_ID_1: 8 XXX
- SG_ VehicleGGCCData : 7|64@0+ (1,0) [0|0] "mixed" XXX
-
-BO_ 1036 Desired_Torq_BrkSys_Stat: 8 XXX
- SG_ BRK_TC_TEMPORARILY_UNAVAIL : 47|1@0+ (1,0) [0|0] "" XXX
- SG_ TRLR_SWAY_EVNT_IN_PROGRESS : 22|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1043 ADAPTIVE_HEADLAMP_STAT: 8 XXX
- SG_ ADAPTIVE_HEADLAMP_FAILURE : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1044 AccelerationData: 8 XXX
- SG_ VehVertComp_A_Actl : 1|10@0+ (0.01,-0.4) [0|0] "m/s^2" XXX
- SG_ VehRolComp_W_Actl : 19|12@0+ (0.0002,-0.82) [0|0] "rad/s" XXX
- SG_ VehYawNonLin_W_Rq : 51|12@0+ (0.03663,-75.0) [0|0] "deg/s" XXX
- SG_ VehYawLin_W_Rq : 35|12@0+ (0.03663,-75.0) [0|0] "deg/s" XXX
-
-BO_ 1045 BrakeSysFeatures: 8 XXX
- SG_ TCMode : 34|1@0+ (1,0) [0|0] "" XXX
- SG_ DrvSlipCtlLamp_D_Rq : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ RSCMode : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ EBAMode : 40|1@0+ (1,0) [0|0] "" XXX
- SG_ DrvAntiLckLamp_D_Rq : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ ChimeBrk_B_Rq : 38|1@0+ (1,0) [0|0] "" XXX
- SG_ BrkLamp_B_Rq : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ VehVActlBrk_No_Cs : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VehVActlBrk_No_Cnt : 23|4@0+ (1,0) [0|0] "" XXX
- SG_ Veh_V_ActlBrk : 7|16@0+ (0.01,0) [0|0] "kph" XXX
- SG_ DrvSlipCtlMde_D_Ind : 33|2@0+ (1,0) [0|0] "" XXX
- SG_ VehRol_An_Dsply : 55|7@0+ (1,-64.0) [0|0] "Degrees" XXX
- SG_ VehPtch_An_Dsply : 47|7@0+ (1,-64.0) [0|0] "Degrees" XXX
- SG_ VehVActlBrk_D_Qf : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ HILL_DESC_MC : 37|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 1046 BrakeSysFeatures_2: 8 XXX
- SG_ BpedMove_No_Cs : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ BpedMove_No_Cnt : 3|4@0+ (1,0) [0|0] "" XXX
- SG_ BpedMove_D_Actl : 7|2@0+ (1,0) [0|0] "" XXX
- SG_ AbsMduleAlive_No_Cnt : 39|4@0+ (1,0) [0|0] "" XXX
- SG_ Abs_No_Cs : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ BrkAsst_B_Actl : 33|1@0+ (1,0) [0|0] "" XXX
- SG_ StabCtlBrk_B_Avail : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ DrvHdcWarnInfo_D_Rq : 35|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvHdcMsg_D_Rq : 10|3@0+ (1,0) [0|0] "" XXX
- SG_ DrvHdcLampInfo_D_Rq : 12|2@0+ (1,0) [0|0] "" XXX
- SG_ Abs_B_Falt : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ VehLongComp_A_Actl : 49|10@0+ (0.035,-17.9) [0|0] "m/s^2" XXX
- SG_ TRAILER_SWAY_CONFIG_STAT : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ VehLatComp_A_Actl : 47|10@0+ (0.035,-17.9) [0|0] "m/s^2" XXX
-
-BO_ 1047 TractionCtrlStatus_CG1: 8 XXX
- SG_ EngEotcCtlMde_B_Ind : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ YawStabilityIndex : 48|9@0+ (1,-256.0) [0|0] "%" XXX
- SG_ TCS_ENG_FAILD : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ TCS_ENG_ONLY_PRESENT : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ TCS_BRK_FAILD : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTqRqMn_No_Cnt : 47|4@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTot_Tq_RqMn : 23|16@0+ (4.0,-131072.0) [0|0] "Nm" XXX
- SG_ EngEotcCtlLamp_D_Rq : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ PrplWhlTqRqMn_No_Cs : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ HdcMde_D_Actl : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ VehicleDir_D_Est : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ TracCtlPtActv_B_Actl : 6|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1056 PowertrainData_1_CG1: 8 XXX
- SG_ FUEL_ALCOHOL_PERCNT : 63|8@0+ (0.3937008,0) [0|0] "%" XXX
- SG_ TrnTotTq_Rt_Est : 39|16@0+ (0.001,0) [0|0] "" XXX
- SG_ TrnTotLss_Tq_Est : 31|8@0+ (0.5,0) [0|0] "Nm" XXX
- SG_ ECMMILRequest : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ AirCondFluidHi_P_Actl : 55|8@0+ (0.125,0) [0|0] "bar" XXX
- SG_ OilPressureWarning : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ CluPdlPos_Pc_Meas : 7|10@0+ (0.1,0) [0|0] "%" XXX
- SG_ VehVLimStat_D_Actl : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ VehVLimActv_B_Actl : 13|1@0+ (1,0) [0|0] "" XXX
- SG_ CluPdlPosPcMeas_D_Qf : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ CoolantFanStepAct : 23|5@0+ (1,0) [0|0] "Steps" XXX
-
-BO_ 1058 PowertrainData_2_CG1: 8 XXX
- SG_ EngIdlShutDown_D_Stat : 19|2@0+ (1,0) [0|0] "" XXX
- SG_ EngAout2_Tq_Actl : 55|11@0+ (1,-500.0) [0|0] "Nm" XXX
- SG_ EngMsgTxt_D_Rq : 21|2@0+ (1,0) [0|0] "" XXX
- SG_ EngClnt_Te_ActlDiag : 39|8@0+ (1,-40.0) [0|0] "degC" XXX
- SG_ ThrPos_Pc_CalcDiag : 7|8@0+ (0.392157,0) [0|0] "%" XXX
- SG_ EngLoad_Pc_CalcDiag : 47|8@0+ (0.392157,0) [0|0] "%" XXX
- SG_ EngAirIn_Te_Actl : 15|10@0+ (0.25,-128.0) [0|0] "degC" XXX
- SG_ ApedPos_Pc_ActlDiag : 31|8@0+ (0.392157,0) [0|0] "%" XXX
-
-BO_ 1064 StrgWheel_PolicePkg: 8 XXX
- SG_ PoliceAux4Lamp_B_Rq : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ PoliceAux3Lamp_B_Rq : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ PoliceAux2Lamp_B_Rq : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ PoliceAux1Lamp_B_Rq : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1067 Battery_Mgmt_1: 8 XXX
- SG_ AlternatorExcDutyCycle : 31|5@0+ (3.22581,0) [0|0] "%" XXX
- SG_ EngineEffStatus : 39|2@0+ (1,0) [0|0] "" XXX
- SG_ AvailableCurrentAtIdle : 23|8@0+ (1,0) [0|0] "Amps" XXX
- SG_ AvailableCurrent : 15|8@0+ (1,0) [0|0] "Amps" XXX
- SG_ ActualCurrent : 7|8@0+ (1,0) [0|0] "Amps" XXX
- SG_ NoAlternatorResponse : 26|1@0+ (1,0) [0|0] "" XXX
- SG_ AlternatorTempFault : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ AlternatorMechFault : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ AlternatorElFault : 37|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1068 Battery_Mgmt_2: 8 XXX
- SG_ ChargeMode : 39|3@0+ (1,0) [0|0] "" XXX
- SG_ ChargeVoltageReq : 7|6@0+ (0.1,10.6) [0|0] "Volts" XXX
- SG_ ChargeVoltageReqMax : 23|6@0+ (0.1,10.6) [0|0] "Volts" XXX
- SG_ FrontBatteryTemp : 47|8@0+ (1,-60.0) [0|0] "DegC" XXX
- SG_ IBoost_Msg : 52|4@0+ (1,0) [0|0] "" XXX
- SG_ IdleSpeedIncrease_El : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ MaxLashStep : 11|3@0+ (0.1,0) [0|0] "Volts" XXX
- SG_ PowerSystemStatus : 15|4@0+ (1,0) [0|0] "" XXX
- SG_ Shed_T_Eng_Off_B : 17|1@0+ (1,0) [0|0] "" XXX
- SG_ Shed_Level_Req : 55|3@0+ (1,0) [0|0] "" XXX
- SG_ Shed_Feature_Group_ID : 36|5@0+ (1,0) [0|0] "" XXX
- SG_ Shed_Drain_Eng_Off_B : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ Batt_Lo_SoC_B : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ VoltageRampRateUpMax : 31|6@0+ (0.1,0) [0|0] "Volts/sec" XXX
- SG_ Batt_Crit_SoC_B : 24|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1069 Battery_Mgmt_3: 8 XXX
- SG_ BSFault : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ BSBattSOC : 30|7@0+ (1,0) [0|0] "%" XXX
- SG_ BSBattQDeltaRideAh : 38|15@0+ (0.0078125,-100.0) [0|0] "Ah" XXX
- SG_ BSBattQCapAh : 22|7@0+ (1,0) [0|0] "Ah" XXX
- SG_ BSBattCurrent : 5|14@0+ (0.0625,-512.0) [0|0] "Amps" XXX
- SG_ BattULoState_D_Qlty : 7|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 1072 Cluster_Information: 8 XXX
- SG_ ManRgen_D_Rq : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ Easy_Entry_Exit_Cmd : 49|1@0+ (1,0) [0|0] "" XXX
- SG_ KeyTypeChngMykey_D_Rq : 53|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvSlipCtlMde_B_Rq : 19|1@0+ (1,0) [0|0] "" XXX
- SG_ MetricActv_B_Actl : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ LdwDfaltOn_B_Actl : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ Fda_B_Stat : 9|1@0+ (1,0) [0|0] "" XXX
- SG_ ePRNDL_MODE : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ AccDeny_B_RqIpc : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ MetricActvTe_B_Actl : 23|1@0+ (1,0) [0|0] "" XXX
- SG_ EngOilLife_B_RqReset : 18|1@0+ (1,0) [0|0] "" XXX
- SG_ OdometerMasterValue : 31|24@0+ (1,0) [0|0] "km" XXX
- SG_ New_Module_Attn_Event : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ TRAILER_SWAY_CONFIG_CMD : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ ParkDetect_Stat : 62|1@0+ (1,0) [0|0] "" XXX
- SG_ Attn_Info_Audio : 59|3@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkMde_D_Rq : 61|1@0+ (1,0) [0|0] "" XXX
- SG_ TRAILER_BRAKE_CONFIG : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ VehMykey_Vl_LimRq : 63|1@0+ (1,0) [0|0] "" XXX
- SG_ VehMykey_V_LimRqMx : 51|1@0+ (1,0) [0|0] "" XXX
- SG_ EmgcyCallAsstMykey_Rq : 50|1@0+ (1,0) [0|0] "" XXX
- SG_ DrvSlipCtlMde_D_Rq : 17|2@0+ (1,0) [0|0] "" XXX
- SG_ AccEnbl_B_RqDrv : 20|1@0+ (1,0) [0|0] "" XXX
- SG_ AutoHighBeam_Cmd : 55|2@0+ (1,0) [0|0] "" XXX
-
-BO_ 1075 Cluster_Information_3_CG1: 8 XXX
- SG_ CamraFrntStat_D_Rq : 58|1@0+ (1,0) [0|0] "" XXX
- SG_ DieslFuelBio_B_ActlDrv : 56|1@0+ (1,0) [0|0] "" XXX
- SG_ RearCameraDelayCmd : 59|1@0+ (1,0) [0|0] "" XXX
- SG_ UreaWarnReset : 60|1@0+ (1,0) [0|0] "" XXX
- SG_ DistanceBarSetting : 49|1@0+ (1,0) [0|0] "" XXX
- SG_ CamraZoomMan_D_Rq : 63|3@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlStat_D_Rq : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ CamraOvrlDyn_D_Rq : 25|1@0+ (1,0) [0|0] "" XXX
- SG_ CamAutoTowbarZoom : 24|1@0+ (1,0) [0|0] "" XXX
- SG_ FuelSecndActv_B_Actl : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ HILL_DESC_SW : 38|1@0+ (1,0) [0|0] "" XXX
- SG_ FuelLvlPssvSide_No_Raw : 19|10@0+ (1,0) [0|0] "" XXX
- SG_ SPDJBCompassCMDDecalibrate : 50|1@0+ (1,0) [0|0] "" XXX
- SG_ SPDJBCompassCMDChangeZone : 51|1@0+ (1,0) [0|0] "" XXX
- SG_ SPDJBCompassCmdDesiredZone : 55|4@0+ (1,0) [0|0] "" XXX
- SG_ FUEL_SENSOR_NUM : 35|1@0+ (1,0) [0|0] "" XXX
- SG_ W2S_LAMP_OK : 37|1@0+ (1,0) [0|0] "" XXX
- SG_ Beltminder_Warn_Stats_IPC : 32|1@0+ (1,0) [0|0] "" XXX
- SG_ FuelLvlActvSide_No_Raw : 13|10@0+ (1,0) [0|0] "" XXX
- SG_ FuelLvl_Pc_Dsply : 7|10@0+ (0.108696,-5.22) [0|0] "%" XXX
- SG_ FUEL_LVL_PER_MEAN : 47|8@0+ (0.434783,-5.22) [0|0] "% Indication" XXX
- SG_ Fuel_Level_State : 34|2@0+ (1,0) [0|0] "" XXX
- SG_ H2O_IN_FUEL_LAMP_OK_OBD : 36|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1093 TrailerBrakeInfo: 8 XXX
- SG_ TrlrLampCnnct_B_Actl : 22|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkActCnnct_B_Actl : 16|1@0+ (1,0) [0|0] "" XXX
- SG_ StopLamp_B_RqTrlrBrk : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkOut_No_Dsply : 3|4@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkGain_No_Actl : 21|5@0+ (0.5,0) [0|0] "" XXX
- SG_ TrlrBrkDsply_B_Rq : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkDcnnt_B_Actl : 5|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkCtl_B_Falt : 4|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkActCirct_B_Falt : 39|1@0+ (1,0) [0|0] "" XXX
- SG_ TrlrBrkMde_D_Actl : 23|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1104 SHCM_Status: 8 XXX
- SG_ CURRENT_DRAW : 15|8@0+ (0.5,0) [0|0] "Amps" XXX
- SG_ SECONDARY_HEATER_STAT : 7|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1107 PassengerOCSSerialNum: 8 XXX
- SG_ OCSSerialNoByte8 : 63|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte7 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte6 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte5 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte4 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte3 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte2 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ OCSSerialNoByte1 : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1108 RCMSerialNumber: 8 XXX
- SG_ RCMSerialNoByte8 : 63|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte7 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte6 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte5 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte4 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte3 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte2 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ RCMSerialNoByte1 : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1109 eCall_Info: 8 XXX
- SG_ eCallConfirmation : 7|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 1125 GPS_Data_Nav_1_HS: 8 XXX
- SG_ GpsHsphLattSth_D_Actl : 25|2@0+ (1,0) [0|0] "" XXX
- SG_ GpsHsphLongEast_D_Actl : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ GPS_Longitude_Minutes : 46|6@0+ (1,0) [0|0] "Minutes" XXX
- SG_ GPS_Longitude_Min_dec : 55|14@0+ (0.0001,0) [0|0] "Minutes" XXX
- SG_ GPS_Longitude_Degrees : 39|9@0+ (1,-179.0) [0|0] "Degrees" XXX
- SG_ GPS_Latitude_Minutes : 15|6@0+ (1,0) [0|0] "Minutes" XXX
- SG_ GPS_Latitude_Min_dec : 23|14@0+ (0.0001,0) [0|0] "Minutes" XXX
- SG_ GPS_Latitude_Degrees : 7|8@0+ (1,-89.0) [0|0] "Degrees" XXX
-
-BO_ 1126 GPS_Data_Nav_2_HS: 8 XXX
- SG_ Gps_B_Falt : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ GpsUtcYr_No_Actl : 55|5@0+ (1,1.0) [0|0] "Year" XXX
- SG_ GpsUtcMnth_No_Actl : 47|4@0+ (1,1.0) [0|0] "Month" XXX
- SG_ GpsUtcDay_No_Actl : 37|5@0+ (1,1.0) [0|0] "Day" XXX
- SG_ GPS_UTC_seconds : 23|6@0+ (1,0) [0|0] "seconds" XXX
- SG_ GPS_UTC_minutes : 15|6@0+ (1,0) [0|0] "Minutes" XXX
- SG_ GPS_UTC_hours : 7|5@0+ (1,0) [0|0] "Hours" XXX
- SG_ GPS_Pdop : 31|5@0+ (0.2,0) [0|0] "" XXX
- SG_ GPS_Compass_direction : 26|4@0+ (1,0) [0|0] "" XXX
- SG_ GPS_Actual_vs_Infer_pos : 38|1@0+ (1,0) [0|0] "" XXX
-
-BO_ 1127 GPS_Data_Nav_3_HS: 8 XXX
- SG_ GPS_Vdop : 63|5@0+ (0.2,0) [0|0] "" XXX
- SG_ GPS_Speed : 47|8@0+ (1,0) [0|0] "MPH" XXX
- SG_ GPS_Sat_num_in_view : 7|5@0+ (1,0) [0|0] "" XXX
- SG_ GPS_MSL_altitude : 15|12@0+ (10.0,-20460.0) [0|0] "feet" XXX
- SG_ GPS_Heading : 31|16@0+ (0.01,0) [0|0] "Degrees" XXX
- SG_ GPS_Hdop : 55|5@0+ (0.2,0) [0|0] "" XXX
- SG_ GPS_dimension : 2|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 1152 All_Terrain_Data: 8 XXX
- SG_ HdcSwitchPos_B_Actl : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ TerrStat_D_RqDsply : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ TerrMde_D_RqDrv : 3|3@0+ (1,0) [0|0] "" XXX
-
-BO_ 1186 Information_4x4_2_CG1: 8 XXX
- SG_ RearDiffFalt_D_Stat : 23|2@0+ (1,0) [0|0] "" XXX
- SG_ RearDiffLck_Tq_Actl : 7|12@0+ (1,0) [0|0] "Nm" XXX
- SG_ RearDiffLckMsg_D_Rq : 20|3@0+ (1,0) [0|0] "" XXX
- SG_ AwdSrvcRqd_B_Rq : 21|1@0+ (1,0) [0|0] "" XXX
- SG_ RearDiffLckLamp_D_Rq : 11|2@0+ (1,0) [0|0] "" XXX
diff --git a/opendbc/generator/generator.py b/opendbc/generator/generator.py
deleted file mode 100755
index 85f3f009e27d02..00000000000000
--- a/opendbc/generator/generator.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python2
-import os
-import re
-
-cur_path = os.path.dirname(os.path.realpath(__file__))
-generator_path = os.path.join(cur_path, '../')
-include_pattern = re.compile(r'CM_ "IMPORT (.*?)"')
-
-
-def read_dbc(dir_name, filename):
- with open(os.path.join(dir_name, filename)) as file_in:
- return file_in.read()
-
-
-def create_dbc(dir_name, filename):
- dbc_file_in = read_dbc(dir_name, filename)
-
- includes = include_pattern.findall(dbc_file_in)
-
- output_filename = filename.replace('.dbc', '_generated.dbc')
- output_file_location = os.path.join(generator_path, output_filename)
-
- with open(output_file_location, 'w') as dbc_file_out:
- dbc_file_out.write('CM_ "AUTOGENERATED FILE, DO NOT EDIT"\n')
-
- for include_filename in reversed(includes):
- include_file_header = '\n\nCM_ "Imported file %s starts here"\n' % include_filename
- dbc_file_out.write(include_file_header)
-
- include_file = read_dbc(dir_name, include_filename)
- dbc_file_out.write(include_file)
-
- dbc_file_out.write('\nCM_ "%s starts here"\n' % filename)
-
- core_dbc = include_pattern.sub('', dbc_file_in)
- dbc_file_out.write(core_dbc)
-
-
-for dir_name, _, filenames in os.walk(cur_path):
- if dir_name == cur_path:
- continue
-
- print dir_name
- for filename in filenames:
- if filename.startswith('_'):
- continue
-
- print filename
- create_dbc(dir_name, filename)
diff --git a/opendbc/generator/honda/_bosch_2018.dbc b/opendbc/generator/honda/_bosch_2018.dbc
deleted file mode 100644
index 302c254c217b7b..00000000000000
--- a/opendbc/generator/honda/_bosch_2018.dbc
+++ /dev/null
@@ -1,264 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
-
-BO_ 228 STEERING_CONTROL: 5 EON
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-4096|4096] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
-
-BO_ 232 BRAKE_HOLD: 7 XXX
- SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
- SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
- SG_ COMPUTER_BRAKE_REQUEST : 29|1@0+ (1,0) [0|0] "" XXX
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 330 STEERING_SENSORS: 8 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
- SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 344 ENGINE_DATA: 8 PCM
- SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
- SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
- SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 380 POWERTRAIN_DATA: 8 PCM
- SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
- SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
- SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "" EON
- SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "" EON
- SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
- SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 420 VSA_STATUS: 8 VSA
- SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
- SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
- SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 450 EPB_STATUS: 8 EPB
- SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
- SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 464 WHEEL_SPEEDS: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
- SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 495 ACC_CONTROL_ON: 8 XXX
- SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ZEROS_BOH : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ZEROS_BOH2 : 47|16@0+ (1,0) [0|255] "" XXX
- SG_ SET_TO_FF : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_TO_3 : 6|7@0+ (1,0) [0|4095] "" XXX
- SG_ CONTROL_ON : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 545 XXX_16: 6 SCM
- SG_ ECON_ON : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ DRIVE_MODE : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
- SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
- SG_ LONG_COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
-
- BO_ 662 SCM_BUTTONS: 4 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" EON
-
-BO_ 773 SEATBELT_STATUS: 7 BDY
- SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
- SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
- SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
- SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
- SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
- SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ ZEROS_BOH : 7|24@0+ (0.002759506,0) [0|100] "m/s" BDY
- SG_ FCM_OFF : 35|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_1 : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
- SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
- SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 804 CRUISE: 8 PCM
- SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 806 SCM_FEEDBACK: 8 SCM
- SG_ DRIVERS_DOOR_OPEN : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" EON
- SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" EON
- SG_ CMBS_STATES : 22|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 829 LKAS_HUD: 5 ADAS
- SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
- SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
- SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
- SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
- SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
- SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
- SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
- SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
- SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
- SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
- SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 862 CAMERA_MESSAGES: 8 CAM
- SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
- SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH_2 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 884 STALK_STATUS: 8 XXX
- SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
- SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
- SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
- SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
- SG_ WIPER_SWITCH : 53|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 891 STALK_STATUS_2: 8 XXX
- SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
- SG_ LOW_BEAMS : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ HIGH_BEAMS : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ PARK_LIGHTS : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
diff --git a/opendbc/generator/honda/_comma.dbc b/opendbc/generator/honda/_comma.dbc
deleted file mode 100644
index c96250baedaa84..00000000000000
--- a/opendbc/generator/honda/_comma.dbc
+++ /dev/null
@@ -1,15 +0,0 @@
-BO_ 512 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
-
-BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" EON
- SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
-
-VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
diff --git a/opendbc/generator/honda/_honda_2017.dbc b/opendbc/generator/honda/_honda_2017.dbc
deleted file mode 100644
index ee9a1e6483d34d..00000000000000
--- a/opendbc/generator/honda/_honda_2017.dbc
+++ /dev/null
@@ -1,218 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BU_: EBCM ADAS PCM EPS VSA SCM BDY XXX EPB EON
-
-BO_ 344 ENGINE_DATA: 8 PCM
- SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
- SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
- SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 380 POWERTRAIN_DATA: 8 PCM
- SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
- SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
- SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" EON
- SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" EON
- SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" EON
- SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" EON
- SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
- SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 420 VSA_STATUS: 8 VSA
- SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
- SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 464 WHEEL_SPEEDS: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 490 VEHICLE_DYNAMICS: 8 VSA
- SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 506 BRAKE_COMMAND: 8 ADAS
- SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_X00 : 13|5@0+ (1,0) [0|1] "" EBCM
- SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_X00_2 : 23|3@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_X00_3 : 19|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
- SG_ COMPUTER_BRAKE_REQUEST : 16|1@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_1 : 31|1@0+ (1,0) [0|1] "" EBCM
- SG_ AEB_REQ_1 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ AEB_REQ_2 : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
- SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
- SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
- SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
-
-BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
- SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" EON
- SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 773 SEATBELT_STATUS: 7 BDY
- SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
- SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
- SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 777 LOCK_STATUS: 8 XXX
- SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" EON
- SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 780 ACC_HUD: 8 ADAS
- SG_ PCM_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" BDY
- SG_ PCM_GAS : 23|8@0+ (1,0) [0|127] "" BDY
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
- SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
- SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
- SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
- SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
- SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
- SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 804 CRUISE: 8 PCM
- SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" EON
- SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" EON
- SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
- SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" EON
- SG_ BOH2 : 47|8@0- (1,0) [0|255] "" EON
- SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 829 LKAS_HUD: 5 ADAS
- SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
- SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
- SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
- SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
- SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
- SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
- SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
- SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
- SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
- SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
- SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 892 CRUISE_PARAMS: 8 PCM
- SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 1029 DOORS_STATUS: 8 BDY
- SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
- SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
-CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
-CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
-CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
-CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
-CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
-
-
-VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
-VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
-VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
-VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
diff --git a/opendbc/generator/honda/acura_ilx_2016_can.dbc b/opendbc/generator/honda/acura_ilx_2016_can.dbc
deleted file mode 100644
index e45426b3a67639..00000000000000
--- a/opendbc/generator/honda/acura_ilx_2016_can.dbc
+++ /dev/null
@@ -1,71 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 145 KINEMATICS: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" EPS
-
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 316 GAS_PEDAL: 8 PCM
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ GEAR : 7|8@0+ (1,0) [0|256] "" EON
- SG_ GEAR_SHIFTER : 35|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 419 GEAR "10 = reverse, 11 = transition";
-CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
-CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
-CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
-CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 419 GEAR_SHIFTER 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
-VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
-VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
-VAL_ 780 HUD_LEAD 3 "no_car" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/acura_rdx_2018_can.dbc b/opendbc/generator/honda/acura_rdx_2018_can.dbc
deleted file mode 100644
index 87389f8b2c6613..00000000000000
--- a/opendbc/generator/honda/acura_rdx_2018_can.dbc
+++ /dev/null
@@ -1,59 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
-
-BO_ 392 GEARBOX: 6 XXX
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" XXX
- SG_ GEAR_SHIFTER : 27|4@0+ (1,0) [0|15] "" EON
- SG_ GEAR : 36|5@0+ (1,0) [0|31] "" EON
-
-BO_ 399 STEER_STATUS: 6 EPS
- SG_ STEER_TORQUE_SENSOR : 7|12@0- (1,0) [-2047.5|2047.5] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 35|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 36|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
-
-BO_ 404 STEERING_CONTROL: 4 EON
- SG_ STEER_TORQUE : 7|12@0- (1,0) [-768|768] "" EPS
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EPS
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EPS
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ PARKING_BRAKE_LIGHT : 2|1@0+ (1,0) [0|1] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 487 BRAKE_PRESSURE: 4 VSA
- SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-CM_ SG_ 422 PARKING_BRAKE_LIGHT "Believe this is just the dash light for the parking break";
-VAL_ 392 GEAR_SHIFTER 0 "S" 1 "P" 2 "R" 4 "N" 8 "D" ;
-VAL_ 392 GEAR 26 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_accord_lx15t_2018_can.dbc b/opendbc/generator/honda/honda_accord_lx15t_2018_can.dbc
deleted file mode 100644
index 9e95f56dbb51be..00000000000000
--- a/opendbc/generator/honda/honda_accord_lx15t_2018_can.dbc
+++ /dev/null
@@ -1,52 +0,0 @@
-CM_ "IMPORT _bosch_2018.dbc"
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ BOH : 45|6@0+ (1,0) [0|63] "" XXX
- SG_ GEAR2 : 31|8@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ZEROS_BOH : 47|2@0+ (1,0) [0|3] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 446 BRAKE_MODULE: 3 VSA
- SG_ BRAKE_PRESSED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 927 RADAR_HUD: 8 RADAR
- SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
- SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_accord_s2t_2018_can.dbc b/opendbc/generator/honda/honda_accord_s2t_2018_can.dbc
deleted file mode 100644
index e0a7ff328f6282..00000000000000
--- a/opendbc/generator/honda/honda_accord_s2t_2018_can.dbc
+++ /dev/null
@@ -1,48 +0,0 @@
-CM_ "IMPORT _bosch_2018.dbc"
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 446 BRAKE_MODULE: 3 VSA
- SG_ BRAKE_PRESSED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 927 RADAR_HUD: 8 RADAR
- SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
- SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-VAL_ 419 GEAR_SHIFTER 32 "D" 8 "R" 4 "P" ;
-VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_civic_hatchback_ex_2017_can.dbc b/opendbc/generator/honda/honda_civic_hatchback_ex_2017_can.dbc
deleted file mode 100644
index 2de149ad5d0993..00000000000000
--- a/opendbc/generator/honda/honda_civic_hatchback_ex_2017_can.dbc
+++ /dev/null
@@ -1,55 +0,0 @@
-CM_ "IMPORT _bosch_2018.dbc"
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ BOH : 45|6@0+ (1,0) [0|63] "" XXX
- SG_ GEAR2 : 31|8@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ZEROS_BOH : 47|2@0+ (1,0) [0|3] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 892 CRUISE_PARAMS: 8 PCM
- SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|15] "" EON
-
-BO_ 927 RADAR_HUD: 8 RADAR
- SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
- SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1029 DOORS_STATUS: 8 BDY
- SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
- SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_civic_touring_2016_can.dbc b/opendbc/generator/honda/honda_civic_touring_2016_can.dbc
deleted file mode 100644
index 1a7579d2a290bc..00000000000000
--- a/opendbc/generator/honda/honda_civic_touring_2016_can.dbc
+++ /dev/null
@@ -1,138 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 148 KINEMATICS: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
- SG_ LONG_ACCEL : 24|9@0- (-0.02,0) [-20|20] "m/s2" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
-
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 330 STEERING_SENSORS: 8 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
- SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 43|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 450 EPB_STATUS: 8 EPB
- SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
- SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 493 HUD_SETTING: 5 XXX
- SG_ IMPERIAL_UNIT : 5|1@0+ (1,0) [0|1] "" EON
-
-BO_ 487 BRAKE_PRESSURE: 4 VSA
- SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
-
-BO_ 545 ECON_STATUS: 6 XXX
- SG_ ECON_ON_2 : 37|2@0+ (1,0) [0|3] "" EON
- SG_ ECON_ON : 23|1@0+ (1,0) [0|1] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
-
-BO_ 662 SCM_BUTTONS: 4 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
-
-BO_ 806 SCM_FEEDBACK: 8 SCM
- SG_ CMBS_BUTTON : 22|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" EON
- SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" EON
- SG_ REVERSE_LIGHT : 18|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
- SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
- SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 884 STALK_STATUS: 8 XXX
- SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
- SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
- SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
- SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 891 WIPERS: 8 XXX
- SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 927 RADAR_HUD: 8 ADAS
- SG_ ZEROS_BOH : 7|17@0+ (1,0) [0|127] "" BDY
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|15] "" BDY
- SG_ ZEROS_BOH2 : 31|8@0+ (1,0) [0|127] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|15] "" BDY
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|15] "" BDY
- SG_ LEAD_SPEED : 39|9@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_STATE : 46|3@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_DISTANCE : 43|5@0+ (1,0) [0|31] "" BDY
- SG_ ZEROS_BOH3 : 54|7@0+ (1,0) [0|127] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
-CM_ SG_ 420 BRAKE_HOLD_RELATED "On when Brake Hold engaged";
-CM_ SG_ 450 EPB_STATE "3 \"engaged\" 2 \"disengaging\" 1 \"engaging\" 0 \"disengaged\"";
-CM_ SG_ 806 REVERSE_LIGHT "Might be reverse gear selected and not the lights";
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 450 EPB_STATE 3 "engaged" 2 "disengaging" 1 "engaging" 0 "disengaged" ;
-VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 927 ACC_ALERTS 29 "esp_active_acc_canceled" 10 "b_pedal_applied" 9 "speed_too_low" 8 "speed_too_high" 7 "p_brake_applied" 6 "gear_no_d" 5 "seatbelt" 4 "too_steep_downhill" 3 "too_steep_uphill" 2 "too_close" 1 "no_vehicle_ahead" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_crv_ex_2017_can.dbc b/opendbc/generator/honda/honda_crv_ex_2017_can.dbc
deleted file mode 100644
index e8cc456bfcb8b0..00000000000000
--- a/opendbc/generator/honda/honda_crv_ex_2017_can.dbc
+++ /dev/null
@@ -1,66 +0,0 @@
-CM_ "IMPORT _bosch_2018.dbc"
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ BOH : 45|6@0+ (1,0) [0|63] "" XXX
- SG_ GEAR2 : 31|8@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ZEROS_BOH : 47|2@0+ (1,0) [0|3] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 446 BRAKE_MODULE: 3 VSA
- SG_ BRAKE_PRESSED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 927 RADAR_HUD: 8 RADAR
- SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
- SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1029 DOORS_STATUS: 8 BDY
- SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
- SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 344 DISTANCE_COUNTER "";
-CM_ SG_ 450 EPB_STATE "3: On, 2: Disengaging, 1: Engaging, 0: Off";
-CM_ SG_ 479 CONTROL_ON "Set to 5 when car is being controlled";
-CM_ SG_ 479 RELATED_TO_GAS "bits 7, 3, and 1 set to 1 when gas not applied";
-CM_ SG_ 479 GAS_BRAKE "Signed value, negative when braking and positive when applying gas";
-
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_crv_hybrid_2019_can.dbc b/opendbc/generator/honda/honda_crv_hybrid_2019_can.dbc
deleted file mode 100644
index 2398526e04fc9d..00000000000000
--- a/opendbc/generator/honda/honda_crv_hybrid_2019_can.dbc
+++ /dev/null
@@ -1,48 +0,0 @@
-CM_ "IMPORT _bosch_2018.dbc"
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 927 RADAR_HUD: 8 RADAR
- SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
- SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 344 DISTANCE_COUNTER "";
-CM_ SG_ 450 EPB_STATE "3: On, 2: Disengaging, 1: Engaging, 0: Off";
-CM_ SG_ 479 CONTROL_ON "Set to 5 when car is being controlled";
-CM_ SG_ 479 RELATED_TO_GAS "bits 7, 3, and 1 set to 1 when gas not applied";
-CM_ SG_ 479 GAS_BRAKE "Signed value, negative when braking and positive when applying gas";
-
-VAL_ 419 GEAR_SHIFTER 32 "D" 8 "R" 4 "P" ;
-VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_crv_touring_2016_can.dbc b/opendbc/generator/honda/honda_crv_touring_2016_can.dbc
deleted file mode 100644
index 3d9b48ab7154bc..00000000000000
--- a/opendbc/generator/honda/honda_crv_touring_2016_can.dbc
+++ /dev/null
@@ -1,69 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
-
-BO_ 399 STEER_STATUS: 6 EPS
- SG_ STEER_TORQUE_SENSOR : 7|12@0- (1,0) [-2047.5|2047.5] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_CONTROL_ACTIVE : 36|1@0+ (1,0) [0|1] "" EON
- SG_ STEER_STATUS : 35|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 35|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 404 STEERING_CONTROL: 4 EON
- SG_ STEER_TORQUE : 7|12@0- (1,0) [-768|768] "" EPS
- SG_ SET_ME_X00 : 11|4@0+ (1,0) [0|15] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EPS
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EPS
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 487 BRAKE_PRESSURE: 4 VSA
- SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 891 WIPERS: 8 XXX
- SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-
-CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
-VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_fit_ex_2018_can.dbc b/opendbc/generator/honda/honda_fit_ex_2018_can.dbc
deleted file mode 100644
index ce02d4cf8a161e..00000000000000
--- a/opendbc/generator/honda/honda_fit_ex_2018_can.dbc
+++ /dev/null
@@ -1,89 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 145 KINEMATICS: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
-
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 43|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 487 BRAKE_PRESSURE: 4 VSA
- SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
- SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
- SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 884 STALK_STATUS: 8 XXX
- SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
- SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
- SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
- SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
-CM_ SG_ 420 BRAKE_HOLD_RELATED "On when Brake Hold engaged";
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
-VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_insight_ex_2019_can.dbc b/opendbc/generator/honda/honda_insight_ex_2019_can.dbc
deleted file mode 100644
index ff988cf9dae796..00000000000000
--- a/opendbc/generator/honda/honda_insight_ex_2019_can.dbc
+++ /dev/null
@@ -1,44 +0,0 @@
-CM_ "IMPORT _bosch_2018.dbc"
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
- SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ BRAKE_ERROR_1 : 13|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 12|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
-
-BO_ 927 RADAR_HUD: 8 RADAR
- SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
- SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
- SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ HUD_LEAD : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_64 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ZEROS_BOH3 : 47|7@0+ (1,0) [0|127] "" XXX
- SG_ ZEROS_BOH4 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1029 DOORS_STATUS: 8 BDY
- SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
- SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
- SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
- VAL_ 419 GEAR 10 "R" 1 "D" 0 "P";
- VAL_ 419 GEAR_SHIFTER 32 "D" 16 "N" 8 "R" 4 "P" ;
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_odyssey_exl_2018.dbc b/opendbc/generator/honda/honda_odyssey_exl_2018.dbc
deleted file mode 100644
index fb54a29abc7955..00000000000000
--- a/opendbc/generator/honda/honda_odyssey_exl_2018.dbc
+++ /dev/null
@@ -1,105 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" EPS
-
-BO_ 316 GAS_PEDAL: 8 PCM
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ GEAR : 7|8@0+ (1,0) [0|256] "" EON
- SG_ GEAR_SHIFTER : 35|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 450 EPB_STATUS: 8 XXX
- SG_ EPB_BRAKE_AND_PULL : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ EPB_STATE : 29|2@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 662 SCM_BUTTONS: 4 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
-
-BO_ 806 SCM_FEEDBACK: 8 SCM
- SG_ CMBS_BUTTON : 22|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" EON
- SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" EON
- SG_ REVERSE_LIGHT : 18|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 891 WIPERS: 8 XXX
- SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
- SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
- SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 927 RADAR_HUD: 8 ADAS
- SG_ ZEROS_BOH : 7|17@0+ (1,0) [0|127] "" BDY
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|15] "" BDY
- SG_ ZEROS_BOH2 : 31|8@0+ (1,0) [0|127] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|15] "" BDY
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|15] "" BDY
- SG_ LEAD_SPEED : 39|9@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_STATE : 46|3@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_DISTANCE : 43|5@0+ (1,0) [0|31] "" BDY
- SG_ ZEROS_BOH3 : 54|7@0+ (1,0) [0|127] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-CM_ SG_ 419 GEAR "10 = reverse, 11 = transition";
-CM_ SG_ 420 BRAKE_HOLD_RELATED "On when Brake Hold engaged";
-CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
-CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
-CM_ SG_ 806 REVERSE_LIGHT "Might be reverse gear selected and not the lights";
-CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnings etc...";
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 419 GEAR_SHIFTER 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 450 EPB_STATE 3 "engaged" 2 "disengaging" 1 "engaging" 0 "disengaged" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 780 HUD_LEAD 3 "no_car" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 927 ACC_ALERTS 29 "esp_active_acc_canceled" 10 "b_pedal_applied" 9 "speed_too_low" 8 "speed_too_high" 7 "p_brake_applied" 6 "gear_no_d" 5 "seatbelt" 4 "too_steep_downhill" 3 "too_steep_uphill" 2 "too_close" 1 "no_vehicle_ahead" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_pilot_touring_2017_can.dbc b/opendbc/generator/honda/honda_pilot_touring_2017_can.dbc
deleted file mode 100644
index 779cd66f5be877..00000000000000
--- a/opendbc/generator/honda/honda_pilot_touring_2017_can.dbc
+++ /dev/null
@@ -1,61 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 145 KINEMATICS: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" EPS
-
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 316 GAS_PEDAL: 8 PCM
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 419 GEAR_SHIFTER 32 "D" 8 "R" 4 "P" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
-VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/honda/honda_ridgeline_black_edition_2017_can.dbc b/opendbc/generator/honda/honda_ridgeline_black_edition_2017_can.dbc
deleted file mode 100644
index d070d314d59e53..00000000000000
--- a/opendbc/generator/honda/honda_ridgeline_black_edition_2017_can.dbc
+++ /dev/null
@@ -1,56 +0,0 @@
-CM_ "IMPORT _honda_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 145 KINEMATICS: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" EPS
-
-BO_ 316 GAS_PEDAL: 8 PCM
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 419 GEARBOX: 8 PCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
-
-VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 419 GEAR_SHIFTER 32 "D" 8 "R" 4 "P" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
-VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/generator/toyota/_comma.dbc b/opendbc/generator/toyota/_comma.dbc
deleted file mode 100644
index aa6a55f8b00bd3..00000000000000
--- a/opendbc/generator/toyota/_comma.dbc
+++ /dev/null
@@ -1,27 +0,0 @@
-BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
-
- BO_ 512 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.159375,-151.111) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
-
- BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.159375,-75.555) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.159375,-151.111) [0|1] "" EON
- SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
-
- VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
diff --git a/opendbc/generator/toyota/_toyota_2017.dbc b/opendbc/generator/toyota/_toyota_2017.dbc
deleted file mode 100644
index 9084d65b422113..00000000000000
--- a/opendbc/generator/toyota/_toyota_2017.dbc
+++ /dev/null
@@ -1,311 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX DSU HCU EPS IPAS CGW
-
-BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
- SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
-
-BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
- SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
- SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
- SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
-
-BO_ 166 BRAKE: 8 XXX
- SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 170 WHEEL_SPEEDS: 8 XXX
- SG_ WHEEL_SPEED_FR : 7|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_FL : 23|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_RR : 39|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_RL : 55|16@0+ (0.01,-67.67) [0|250] "kph" XXX
-
-BO_ 180 SPEED: 8 XXX
- SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
-
-BO_ 353 DSU_SPEED: 8 XXX
- SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
-
-BO_ 466 PCM_CRUISE: 8 XXX
- SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ STANDSTILL_ON : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
- SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CANCEL_REQ : 49|1@1+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 467 PCM_CRUISE_2: 8 XXX
- SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 552 ACCELEROMETER: 8 XXX
- SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
- SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
-
-BO_ 560 BRAKE_MODULE2: 7 XXX
- SG_ BRAKE_PRESSED : 26|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 614 STEERING_IPAS: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 643 PRE_COLLISION: 7 DSU
- SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ FORCE : 23|16@0- (2,0) [0|255] "N" XXX
- SG_ SET_ME_X002 : 33|8@0+ (1,0) [0|3] "" XXX
- SG_ BRAKE_STATUS : 39|3@0+ (1,0) [0|255] "" XXX
- SG_ STATE : 36|3@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X003 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ PRECOLLISION_ACTIVE : 41|1@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 740 STEERING_LKA: 5 XXX
- SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
- SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 742 LEAD_INFO: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
- SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
- SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
-
-BO_ 835 ACC_CONTROL: 8 DSU
- SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
- SG_ SET_ME_X01 : 23|2@0+ (1,0) [0|3] "" HCU
- SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
- SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
- SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 836 PRE_COLLISION_2: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 869 DSU_CRUISE : 7 DSU
- SG_ RES_BTN : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ SET_BTN : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CANCEL_BTN : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ MAIN_ON : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ SET_SPEED : 15|8@0+ (1,0) [0|0] "km/h" XXX
- SG_ CRUISE_REQUEST : 31|8@0+ (100,-12800) [0|0] "N" XXX
- SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|0] "m" XXX
-
-BO_ 921 PCM_CRUISE_SM: 8 XXX
- SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ DISTANCE_LINES : 14|2@0+ (1,0) [0|3] "" XXX
- SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 951 ESP_CONTROL: 8 ESP
- SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1041 ACC_HUD: 8 DSU
- SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X10 : 39|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X80 : 55|8@0+ (1,0) [0|1] "" XXX
-
-BO_ 1042 LKAS_HUD: 8 XXX
- SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X01 : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X01_2 : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ REPEATED_BEEPS : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X0C : 23|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X2C : 47|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
-
-BO_ 1408 VIN_PART_1: 8 CGW
- SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1409 VIN_PART_2: 8 CGW
- SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1410 VIN_PART_3: 8 CGW
- SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1553 UI_SEETING: 8 XXX
- SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1556 STEERING_LEVERS: 8 XXX
- SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1568 SEATS_DOORS: 8 XXX
- SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1570 LIGHT_STALK: 8 SCM
- SG_ AUTO_HIGH_BEAM : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1161 RSA1: 8 FCM
- SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "kph" XXX
- SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1162 RSA2: 8 FCM
- SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" XXX
- SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" XXX
- SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" XXX
- SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1163 RSA3: 8 FCM
- SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" XXX
- SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" XXX
- SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
- SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
-
-CM_ SG_ 36 ACCEL_Y "unit is tbd";
-CM_ SG_ 36 YAW_RATE "verify";
-CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
-CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
-CM_ SG_ 37 STEER_RATE "factor is tbd";
-CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
-CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
-CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
-CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
-CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
-CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
-CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
-CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
-CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
-CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
-CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
-CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
-CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
-CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
-CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
-CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
-CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1163 TSREQPD "always 1";
-CM_ SG_ 1163 TSRMSW "always 1";
-CM_ SG_ 1163 OTSGNNTM "always 3";
-CM_ SG_ 1163 NTLVLSPD "always 3";
-CM_ SG_ 1163 OVSPNTM "always 3";
-CM_ SG_ 1163 OVSPVALL "-5 at start then 2 after 2 seconds";
-CM_ SG_ 1163 OVSPVALM "-5 at start then 5 after 2 seconds";
-CM_ SG_ 1163 OVSPVALH "-5 at start then 10 after 2 seconds";
-CM_ SG_ 1163 TSRSPU "always 1";
-
-VAL_ 466 CRUISE_STATE 8 "active" 7 "standstill" 1 "off";
-VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok";
-VAL_ 614 STATE 3 "enabled" 1 "disabled";
-VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
-VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
-VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
-VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
-VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
-VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
-VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
-VAL_ 1553 UNITS 1 "km" 2 "miles";
-VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
-VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
-VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
-VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
-VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 129 "no entry";
-VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
-
-
-CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
diff --git a/opendbc/generator/toyota/lexus_ct200h_2018_pt.dbc b/opendbc/generator/toyota/lexus_ct200h_2018_pt.dbc
deleted file mode 100644
index 55919570f94337..00000000000000
--- a/opendbc/generator/toyota/lexus_ct200h_2018_pt.dbc
+++ /dev/null
@@ -1,37 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 548 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 956 SPORT_ON 0 "off" 1 "on";
-VAL_ 956 ECON_ON 0 "off" 1 "on";
\ No newline at end of file
diff --git a/opendbc/generator/toyota/lexus_gs300h_2017_pt.dbc b/opendbc/generator/toyota/lexus_gs300h_2017_pt.dbc
deleted file mode 100644
index 070b4e6e728a53..00000000000000
--- a/opendbc/generator/toyota/lexus_gs300h_2017_pt.dbc
+++ /dev/null
@@ -1,38 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 1009 PCM_CRUISE_3: 8 XXX
- SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
- SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|15] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/generator/toyota/lexus_is_2018_pt.dbc b/opendbc/generator/toyota/lexus_is_2018_pt.dbc
deleted file mode 100644
index aebf81a1681db9..00000000000000
--- a/opendbc/generator/toyota/lexus_is_2018_pt.dbc
+++ /dev/null
@@ -1,39 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.66,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 1009 PCM_CRUISE_ALT: 8 XXX
- SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX
- SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/lexus_is_hybrid_2017_pt.dbc b/opendbc/generator/toyota/lexus_is_hybrid_2017_pt.dbc
deleted file mode 100644
index 7fb743770573c7..00000000000000
--- a/opendbc/generator/toyota/lexus_is_hybrid_2017_pt.dbc
+++ /dev/null
@@ -1,41 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.66,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 1009 PCM_CRUISE_ISH: 8 XXX
- SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX
- SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
-
-BO_ 1599 LIGHT_STALK_ISH: 8 SCM
- SG_ AUTO_HIGH_BEAM : 19|1@0+ (1,0) [0|1] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/lexus_rx_350_2016_pt.dbc b/opendbc/generator/toyota/lexus_rx_350_2016_pt.dbc
deleted file mode 100644
index 4a6fe48fd91bf5..00000000000000
--- a/opendbc/generator/toyota/lexus_rx_350_2016_pt.dbc
+++ /dev/null
@@ -1,37 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_PEDAL : 55|8@0+ (1,0) [0|255] "" XXX
-
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled" ;
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby" ;
-VAL_ 956 SPORT_ON 0 "off" 1 "on" ;
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P" ;
-VAL_ 956 ECON_ON 0 "off" 1 "on" ;
diff --git a/opendbc/generator/toyota/lexus_rx_hybrid_2017_pt.dbc b/opendbc/generator/toyota/lexus_rx_hybrid_2017_pt.dbc
deleted file mode 100644
index fb42de9f68d36f..00000000000000
--- a/opendbc/generator/toyota/lexus_rx_hybrid_2017_pt.dbc
+++ /dev/null
@@ -1,37 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 956 SPORT_ON 0 "off" 1 "on";
-VAL_ 956 ECON_ON 0 "off" 1 "on";
diff --git a/opendbc/generator/toyota/toyota_avalon_2017_pt.dbc b/opendbc/generator/toyota/toyota_avalon_2017_pt.dbc
deleted file mode 100644
index b867e937065b5f..00000000000000
--- a/opendbc/generator/toyota/toyota_avalon_2017_pt.dbc
+++ /dev/null
@@ -1,33 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|65535] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_camry_hybrid_2018_pt.dbc b/opendbc/generator/toyota/toyota_camry_hybrid_2018_pt.dbc
deleted file mode 100644
index 1d41d1e2020a49..00000000000000
--- a/opendbc/generator/toyota/toyota_camry_hybrid_2018_pt.dbc
+++ /dev/null
@@ -1,37 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 295 GEAR_PACKET: 8 XXX
- SG_ CAR_MOVEMENT : 39|8@0- (1,0) [0|255] "" XXX
- SG_ COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ GEAR : 47|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 8 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 31|16@0- (0.05527,0) [-500|500] "" XXX
-
-BO_ 610 EPS_STATUS: 8 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 295 GEAR 0 "P" 1 "R" 2 "N" 3 "D" 4 "B";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_corolla_2017_pt.dbc b/opendbc/generator/toyota/toyota_corolla_2017_pt.dbc
deleted file mode 100644
index 724b6e834bb0a4..00000000000000
--- a/opendbc/generator/toyota/toyota_corolla_2017_pt.dbc
+++ /dev/null
@@ -1,33 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 548 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 43|12@0+ (1,0) [0|4047] "" XXX
- SG_ BRAKE_PRESSED : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (1.0,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ SPORT_ON : 3|1@0+ (1,0) [0|1] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_highlander_2017_pt.dbc b/opendbc/generator/toyota/toyota_highlander_2017_pt.dbc
deleted file mode 100644
index b867e937065b5f..00000000000000
--- a/opendbc/generator/toyota/toyota_highlander_2017_pt.dbc
+++ /dev/null
@@ -1,33 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|65535] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_highlander_hybrid_2018_pt.dbc b/opendbc/generator/toyota/toyota_highlander_hybrid_2018_pt.dbc
deleted file mode 100644
index 8fe5ec1991f18a..00000000000000
--- a/opendbc/generator/toyota/toyota_highlander_hybrid_2018_pt.dbc
+++ /dev/null
@@ -1,33 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/generator/toyota/toyota_nodsu_hybrid_pt.dbc b/opendbc/generator/toyota/toyota_nodsu_hybrid_pt.dbc
deleted file mode 100644
index 4f641575188073..00000000000000
--- a/opendbc/generator/toyota/toyota_nodsu_hybrid_pt.dbc
+++ /dev/null
@@ -1,37 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 295 GEAR_PACKET: 8 XXX
- SG_ CAR_MOVEMENT : 39|8@0- (1,0) [0|255] "" XXX
- SG_ COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ GEAR : 47|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 8 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 31|16@0- (0.056,0) [-500|500] "" XXX
-
-BO_ 610 EPS_STATUS: 8 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-VAL_ 295 GEAR 0 "P" 1 "R" 2 "N" 3 "D" 4 "B";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_nodsu_pt.dbc b/opendbc/generator/toyota/toyota_nodsu_pt.dbc
deleted file mode 100644
index 026abdd88162a8..00000000000000
--- a/opendbc/generator/toyota/toyota_nodsu_pt.dbc
+++ /dev/null
@@ -1,49 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 401 STEERING_LTA: 8 XXX
- SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SETME_X3 : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ PERCENTAGE : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ SETME_X64 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ ANGLE : 55|8@0- (0.5,0) [0|255] "" XXX
- SG_ STEER_ANGLE_CMD : 15|16@0- (0.056,0) [-540|540] "" XXX
- SG_ STEER_REQUEST : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ BIT : 30|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 31|16@0- (0.056,0) [-500|500] "" XXX
-
-BO_ 610 EPS_STATUS: 8 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 956 SPORT_ON 0 "off" 1 "on";
-VAL_ 956 ECON_ON 0 "off" 1 "on";
diff --git a/opendbc/generator/toyota/toyota_prius_2017_pt.dbc b/opendbc/generator/toyota/toyota_prius_2017_pt.dbc
deleted file mode 100644
index d1a6d27db87ca1..00000000000000
--- a/opendbc/generator/toyota/toyota_prius_2017_pt.dbc
+++ /dev/null
@@ -1,40 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 295 GEAR_PACKET: 8 XXX
- SG_ CAR_MOVEMENT : 39|8@0- (1,0) [0|255] "" XXX
- SG_ COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ GEAR : 47|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 8 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.66,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 8 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1083 AUTOPARK_STATUS: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-CM_ SG_ 1083 STATE "when the dashboard button is pressed, the value changes from zero to non-zero";
-VAL_ 295 GEAR 0 "P" 1 "R" 2 "N" 3 "D" 4 "B";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_rav4_2017_pt.dbc b/opendbc/generator/toyota/toyota_rav4_2017_pt.dbc
deleted file mode 100644
index e9d748b6c258d6..00000000000000
--- a/opendbc/generator/toyota/toyota_rav4_2017_pt.dbc
+++ /dev/null
@@ -1,32 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 548 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 43|12@0+ (1,0) [0|4047] "" XXX
- SG_ BRAKE_PRESSED : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/generator/toyota/toyota_rav4_hybrid_2017_pt.dbc b/opendbc/generator/toyota/toyota_rav4_hybrid_2017_pt.dbc
deleted file mode 100644
index d5a265fbb8386d..00000000000000
--- a/opendbc/generator/toyota/toyota_rav4_hybrid_2017_pt.dbc
+++ /dev/null
@@ -1,45 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ SPORT_GEAR_ON : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ SPORT_GEAR : 38|3@0+ (1,0) [0|7] "" XXX
- SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ DRIVE_ENGAGED : 47|1@0+ (1,0) [0|1] "" XXX
-
-
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 SPORT_ON 0 "off" 1 "on";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 956 SPORT_GEAR_ON 0 "off" 1 "on";
-VAL_ 956 SPORT_GEAR 1 "S1" 2 "S2" 3 "S3" 4 "S4" 5 "S5" 6 "S6";
-VAL_ 956 ECON_ON 0 "off" 1 "on";
-VAL_ 956 DRIVE_ENGAGED 0 "off" 1 "on";
diff --git a/opendbc/generator/toyota/toyota_sienna_xle_2018_pt.dbc b/opendbc/generator/toyota/toyota_sienna_xle_2018_pt.dbc
deleted file mode 100644
index 0c6ba26bc1ed7d..00000000000000
--- a/opendbc/generator/toyota/toyota_sienna_xle_2018_pt.dbc
+++ /dev/null
@@ -1,33 +0,0 @@
-CM_ "IMPORT _toyota_2017.dbc"
-CM_ "IMPORT _comma.dbc"
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|65535] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 705 GAS_PEDAL: 8 XXX
- SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-CM_ SG_ 548 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 548 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby"
diff --git a/opendbc/gm_global_a_lowspeed.dbc b/opendbc/gm_global_a_lowspeed.dbc
deleted file mode 100644
index 9ea4d1da3d93db..00000000000000
--- a/opendbc/gm_global_a_lowspeed.dbc
+++ /dev/null
@@ -1,110 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: GMLAN NEO
-VAL_TABLE_ GearShifter 3 "Park" 0 "Drive/Low" ;
-VAL_TABLE_ DriverDoorStatus 1 "Opened" 0 "Closed" ;
-VAL_TABLE_ LKAGapButton 2 "???" 1 "??" 0 "None" ;
-VAL_TABLE_ CruiseButtons 6 "Cancel" 5 "Main" 3 "Set" 2 "Resume" 1 "None" ;
-VAL_TABLE_ CruiseControlActive 1 "Active" 0 "Inactive" ;
-VAL_TABLE_ BlinkerStatus 1 "Active" 0 "Inactive" ;
-
-
-BO_ 274923520 DriverDoorStatus: 1 GMLAN
- SG_ DriverDoorOpened : 0|1@0+ (1,0) [0|0] "" NEO
-
-BO_ 272629760 Chime: 5 NEO
- SG_ ChimeType : 7|8@0+ (1,0) [0|0] "" GMLAN
- SG_ ChimeRepeat : 23|8@0+ (1,0) [0|0] "" GMLAN
- SG_ ChimeDuration : 15|8@0+ (1,0) [0|0] "" GMLAN
- SG_ ChimeByte5 : 39|8@0+ (1,0) [0|0] "" GMLAN
- SG_ ChimeByte4 : 31|8@0+ (1,0) [0|0] "" GMLAN
-
-BO_ 270581760 BlinkerStatus: 5 GMLAN
- SG_ RightBlinker : 6|1@0+ (1,0) [0|0] "" NEO
- SG_ LeftBlinker : 7|1@0+ (1,0) [0|0] "" NEO
- SG_ BlinkerLight : 25|1@0+ (1,0) [0|0] "" NEO
-
-BO_ 270794752 SteeringWheelAngle: 8 GMLAN
- SG_ SteeringWheelAngle : 39|16@0- (0.0625,0) [-540|540] "deg" NEO
-
-BO_ 271368192 GearShifter: 8 GMLAN
- SG_ GearShifter : 17|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 271360000 GasPedalRegenCruise: 8 GMLAN
- SG_ CruiseControlActive : 56|1@0+ (1,0) [0|0] "" GMLAN
- SG_ MaxRegen : 12|1@0+ (1,0) [0|1] "" GMLAN,NEO
- SG_ GasPedal : 47|8@0+ (1,0) [0|254] "" GMLAN,NEO
- SG_ GearShifter2NotUsed : 55|8@0+ (1,0) [0|255] "" GMLAN,NEO
-
-BO_ 270860288 BrakePedal: 2 GMLAN
- SG_ BrakeLevel : 2|2@0+ (1,0) [0|3] "" NEO
- SG_ BrakeSensor : 15|8@0+ (1,0) [0|255] "" NEO
-
-BO_ 275480576 WheelSpeed: 8 GMLAN
- SG_ WheelSpeedFL : 7|16@0+ (0.01,0) [0|70] "yd/s" NEO
- SG_ WheelSpeedFR : 39|16@0+ (0.01,0) [0|70] "yd/s" NEO
- SG_ WheelSpeedRL : 23|16@0+ (0.01,0) [0|70] "yd/s" NEO
- SG_ WheelSpeedRR : 55|16@0+ (0.01,0) [0|70] "yd/s" NEO
-
-BO_ 270598144 VehicleSpeed: 8 GMLAN
- SG_ VehicleSpeed1 : 7|16@0+ (0.01,0) [0|100] "mph" NEO
- SG_ VehicleSpeed2 : 39|16@0+ (0.01,0) [0|100] "mph" NEO
-
-BO_ 276135936 CruiseButtons: 3 GMLAN
- SG_ CruiseButtons : 3|3@0+ (1,0) [0|12] "" NEO
-
-BO_ 276127744 CruiseButtons2: 1 GMLAN
- SG_ LKAGapButton : 1|2@0+ (1,0) [0|2] "" NEO
-
-
-
-BA_DEF_ "UseGMParameterIDs" INT 0 0;
-BA_DEF_ "ProtocolType" STRING ;
-BA_DEF_ "BusType" STRING ;
-BA_DEF_DEF_ "UseGMParameterIDs" 1;
-BA_DEF_DEF_ "ProtocolType" "GMLAN";
-BA_DEF_DEF_ "BusType" "";
-BA_ "BusType" "CAN";
-BA_ "ProtocolType" "GMLAN";
-VAL_ 274923520 DriverDoorOpened 1 "Opened" 0 "Closed" ;
-VAL_ 270581760 RightBlinker 1 "Active" 0 "Inactive" ;
-VAL_ 270581760 LeftBlinker 1 "Active" 0 "Inactive" ;
-VAL_ 270581760 BlinkerLight 1 "Active" 0 "Inactive" ;
-VAL_ 271368192 GearShifter 3 "Park" 0 "Drive/Low" ;
-VAL_ 271360000 CruiseControlActive 1 "Active" 0 "Inactive" ;
-VAL_ 276135936 CruiseButtons 6 "Cancel" 5 "Main" 3 "Set" 2 "Resume" 1 "None" ;
-VAL_ 276127744 LKAGapButton 2 "???" 1 "??" 0 "None" ;
-
diff --git a/opendbc/gm_global_a_lowspeed_1818125.dbc b/opendbc/gm_global_a_lowspeed_1818125.dbc
deleted file mode 100644
index 0920e47bc16478..00000000000000
--- a/opendbc/gm_global_a_lowspeed_1818125.dbc
+++ /dev/null
@@ -1,3993 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 2152177664 OTA_Electric_Pwr_Readiness_LS: 1 XXX
- SG_ RmtRflshElecPwrRdness : 7|8@0+ (0.025,0) [0|6.375] "AmpHour" XXX
-
-BO_ 2152013824 Smart_High_Beam_Cust_LS: 1 XXX
- SG_ SmrtHgBmAstCstSetAvail : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SmrtHgBmAstCstCurrSetVal : 7|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2159255552 ODI_CenterStack_2_BCM_LS: 8 XXX
- SG_ ODI_CntrStck2BCM : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159247360 ODI_BCM_2_CenterStack_LS: 8 XXX
- SG_ ODI_BCM2CntrStck : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2152046592 Remote_Climate_Control_Req_LS: 5 XXX
- SG_ RmClmCtrlHMIActIndReq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RmClmCtrlRcrcSetReq : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ RmClmCtrlACSetReq : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ RmClmCtrlFrntFanStReq : 15|5@0+ (1,0) [0|31] "" XXX
- SG_ RmClmCtrlFLAirDtStReq : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ RmClmCtrlClmModSetReq : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ RmClmCtrlLtSTempStReq : 29|6@0+ (1,0) [0|63] "" XXX
- SG_ RmClmCtrlRrDfgSetReq : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ RmClmCtrlRtSTempStReq : 37|6@0+ (1,0) [0|63] "" XXX
- SG_ RmClmCtrlSyncSetReq : 39|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152030208 Tuner_Frequency_Request_LS: 8 XXX
- SG_ TnrFrqBndReq : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ TnrFrqChnlReq : 15|56@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150531072 Regen_Power_Ind_LS: 4 XXX
- SG_ RegPwrLmtdDspPrcnt : 0|9@0- (0.392157,0) [-100.392192|100.000035] "%" XXX
- SG_ RegPwrLmtdDspPrcntVs : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RegPwrLmtdIO : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151833600 Heated_Wndshild_CstmrIhbt_Req_LS: 1 XXX
- SG_ HtdFrntWSCustRqIhbt : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ HtdFrntWSDispReq : 7|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2151817216 Heated_Wndshild_Cstmr_Req_LS: 1 XXX
- SG_ HtdFrntWSCustRq : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151849984 Seat_Level_Setting_Request_LS: 2 XXX
- SG_ AutoThrmlStPasLvlStRq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ AutoThrmlStDrvLvStRq : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ AutoThrmlStPassMdStRq : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ AutoThrmlStDrvMdStRq : 15|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2153897984 ARB_OpMode_Customization_LS: 1 XXX
- SG_ RunBrdExtdFtrAvail : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ RunBrdOpMdCstCurrStVal : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ RunBrdOpMdCstStAvail : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151702528 Lane_Keeping_Assist_LS: 2 XXX
- SG_ LnKpngAstRecfblIndRq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ LnMrkngIndLft : 4|2@0+ (1,0) [0|3] "" XXX
- SG_ LnKepAsstStIndLft : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ LnMrkngIndRgt : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ LnKepAsstStIndRgt : 15|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2156986368 PassPhrase_3_AMM_LS: 8 XXX
- SG_ WiFiPssPhrsDgts17to24_Mp : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156978176 PassPhrase_2_AMM_LS: 8 XXX
- SG_ WiFiPssPhrsDgts9to16_Mp : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156969984 PassPhrase_1_AMM_LS: 8 XXX
- SG_ WiFiPssPhrsDgts1to8_Mp : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2150236160 Unlock_Key_Store_Crypt_2_LS: 8 XXX
- SG_ UlckKyStrCrptoDt2Group : 4|61@0+ (1,0) [0|0] "" XXX
- SG_ UlckKyStrCrptoDt2 : 3|60@0+ (1,0) [0|1.15292150460685E+018] "" XXX
- SG_ UlckKyStrCrptoDt2M : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150170624 Unlock_Key_Store_Crypt_1_LS: 8 XXX
- SG_ UlckKyStrCrptoDt1Group : 4|61@0+ (1,0) [0|0] "" XXX
- SG_ UlckKyStrCrptoDt1 : 3|60@0+ (1,0) [0|1.15292150460685E+018] "" XXX
- SG_ UlckKyStrCrptoDt1M : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155126784 Drvr_Seat_Rearward_Movmnt_LS: 1 XXX
- SG_ DrvrSetRrwrdMvmnt : 7|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2154725376 Auxiliary_Heater_LS: 1 XXX
- SG_ AuxHtrAtv378 : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ AuxHtrRq : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2157051904 WiFi_Station_AMM_LS: 5 XXX
- SG_ WiFiStatnMpReq : 1|34@0+ (1,0) [0|0] "" XXX
- SG_ WSMR_WiFiAssnReq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ WSMR_WiFiStnMpMACAddr : 15|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2156994560 WiFi_AP_Data_AMM_LS: 2 XXX
- SG_ WiFiAccsPntData_Mp : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ WAPDM_WiFiEnStat : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ WAPDM_EncrptnType : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ WAPDM_SecurityType : 15|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2158133248 Hill_Top_Customization_LS: 6 XXX
- SG_ HTRCsStAvail : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCsAvail : 7|7@0+ (1,0) [0|0] "" XXX
- SG_ HTRCA_Res3Avail : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCA_Res2Avail : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCA_Res1Avail : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCA_OnAwAvail : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCA_OnHmAvail : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCA_OnAvail : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCA_OffAvail : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRCsCrStVal : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ HVDpltnMdMxCnfdcRgExt : 21|14@0+ (0.1,0) [0|1638.3] "km" XXX
- SG_ HVDpltnMdMiCnfdcRgExt : 37|14@0+ (0.1,0) [0|1638.3] "km" XXX
-
-BO_ 2154651648 Telematics_Audio_Control_LS: 1 XXX
- SG_ TeleAudCtl : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TAC_AudConctOutcm : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ TAC_AudChConctStat : 7|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2154635264 Telematics_Audio_Request_LS: 1 XXX
- SG_ TeleAudReq : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TAR_AudSrcStat : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ TAR_AudConctReq : 7|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2152529920 LVM_Audio_Video_Command_LS: 2 XXX
- SG_ LowVolModAudVidCmd : 5|14@0+ (1,0) [0|0] "" XXX
- SG_ LVMAVC_StreoAudRsp : 0|2@0+ (1,0) [0|3] "" XXX
- SG_ LVMAVC_PrmtAudRsp : 2|2@0+ (1,0) [0|3] "" XXX
- SG_ LVMAVC_RemtEnbl : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ LVMAVC_SpchRcgnAval : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ LVMAVC_RemSpchRcgnActn : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ LVMAVC_RemSpchRcgnID : 14|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2152513536 LVM_Audio_Video_Req_LS: 2 XXX
- SG_ LowVolModAudVidReq : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ LVMAVR_DispReq : 0|3@0+ (1,0) [0|7] "" XXX
- SG_ LVMAVR_SpchRcgnAct : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ LVMAVR_PrmtAudReq : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ LVMAVR_StreoAudReq : 13|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154889216 Cluster_HMI_Animation_Req_LS: 1 XXX
- SG_ ClstrHMIAnmReq : 7|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2154872832 Infotainment_Activation_Req_LS: 1 XXX
- SG_ RmRflshUpdtAvail : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ InfoActvnReq : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2156961792 SSID_AMM_3_LS: 8 XXX
- SG_ WiFiSSIDDgts17to24_Mp : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2154569728 Infotainment_System_State_LS: 1 XXX
- SG_ InfotnmntSysSt : 7|5@0+ (1,0) [0|31] "" XXX
-
-BO_ 2151931904 Custom_Launch_Ctrl_LS: 8 XXX
- SG_ LnchCtrlMdStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ LnchCtrlWhlSlpStat : 7|5@0+ (1,0) [0|31] "" XXX
- SG_ PTExPrtclFltWrng3IO : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ AWDRecmndIO : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ LnchCtrlEngRPMStat : 15|6@0+ (1,0) [0|63] "" XXX
- SG_ ACCSysSltdMd : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ VehSpdCntlSystmType : 20|3@0+ (1,0) [0|7] "" XXX
- SG_ PTExPartFltManRegStat : 23|3@0+ (1,0) [0|7] "" XXX
- SG_ TCSTempDsblReqIO : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ VehStbCmptvMdCstAvl : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ VehStbEnmntCstAvl : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ TCSysCstAvl : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ VehStbCmptvMdCurSt : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ ElctShfPriLtdPerfMdIO : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ RegVltCtlEngyRcvryAct : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCSysSltdMdDispIO : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ LnchCtrlTmrVal : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ VehStbEnhmntCurSt : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ TCSysCurSt : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ TracAndStbScrnCnfg : 39|2@0+ (1,0) [0|3] "" XXX
- SG_ BiFuelRflGaslinIndReq : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ AutoShtdwnIO : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ LnchCtrlBrkPresVal : 47|4@0+ (10,0) [0|150] "%" XXX
- SG_ AutoShtdwnTmr : 55|8@0+ (1,0) [0|255] "min" XXX
- SG_ FuelMdTrnstnIndReq : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2150244352 HMI_EngyConsmpHistGrph_1_LS: 8 XXX
- SG_ EngyCnsHsGrphDspDtVal : 7|55@0+ (1,0) [0|0] "" XXX
- SG_ ECHGDDV_Col1 : 2|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_EngyConsAvg : 7|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col3 : 8|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col2 : 13|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col4 : 19|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col6 : 25|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col5 : 30|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col7 : 36|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col9 : 42|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col8 : 47|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHGDDV_Col10 : 53|5@0+ (1,0) [0|31] "" XXX
-
-BO_ 2156953600 SSID_AMM_2_LS: 8 XXX
- SG_ WiFiSSIDDgts9to16_Mp : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2151686144 SD_Card_LS: 2 XXX
- SG_ SDCrdFullIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ SDCrdErrIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NoSDCrdPrIO : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155028480 Lane_Change_Threat_LS: 2 XXX
- SG_ RgtLnChgThrt : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RtLnChngThrtAprchSpd : 15|8@0- (1,0) [-128|127] "km/h" XXX
-
-BO_ 2151915520 HMI_Display_LS: 8 XXX
- SG_ AHDisbldDrOpnIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ AHDisbldStbltIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ AHAppBrkPedlIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ AHServcIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ShfToPrkBfExtngIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ AHEnbld : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ AHAct : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPDrvrIlkShfAtdIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPTransMalfIO : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPRngInvldReqIO : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPPrkInvldReqIO : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPHldShfLvrToEngRgIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPDrvrPrkIlkSftAtdIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ EngIntkArBstPrExtRngGroup : 14|15@0+ (1,0) [0|0] "" XXX
- SG_ EngIntkArBstPrExtRng : 8|9@0+ (1,-110) [-110|401] "kPa" XXX
- SG_ EngIntkArBstPrExtRngV : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ElcTransRngSlctVDA : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ ElecShfRngDispRCExtd : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ ElecShfRngDisp : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ DrvEffInd : 39|8@0- (0.78125,0) [-100|99.21875] "%" XXX
- SG_ ESPShfToDrvTryAgnIO : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPTrnVehOffFrPrkIO : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPTrnsCtlrMalfIO : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ ElcShfPriTwoGrsSlInRq : 47|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152153088 Right_Rear_Seat_Display_Stats_LS: 6 XXX
- SG_ RRStCtlDispStat : 3|44@0+ (1,0) [0|0] "" XXX
- SG_ RRSCDS_MassgTyp : 1|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSCDS_Massg : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_HdrstFwdRrwd : 8|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_HdrstUpDn : 10|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_MassgIntsty : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ RRSCDS_HdrstTltFwdRr : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_HdrstWngInOt : 19|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_HdrstFdRrUDn : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ RRSCDS_LmbrUDnFdRr : 25|3@0+ (1,0) [0|7] "" XXX
- SG_ RRSCDS_LmbrFwdRr : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_LmbrUpDwn : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_UprShldrFdRr : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_BkCshBlstInOt : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ RRSCDS_CshBlstrInOut : 36|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_BkBlstrInOut : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_UnsdRsrvd : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ RRSCDS_DispReq : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ RRSCDS_DispSz : 45|2@0+ (1,0) [0|3] "" XXX
- SG_ RRSCDS_CshLgAdjFdRr : 47|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152136704 Right_Rear_Seat_Massage_LS: 8 XXX
- SG_ RRStMassgPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ RRSMP_Type2 : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type1 : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type4 : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type3 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type6 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type5 : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type8 : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type7 : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type10 : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type9 : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type12 : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type11 : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type14 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_Type13 : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSMP_UnsdRsrvd : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ RRSMP_MaxDispVal : 59|3@0+ (1,0) [0|7] "" XXX
- SG_ RRSMP_Type15 : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2152120320 Right_Rear_Seat_Actuator_LS: 8 XXX
- SG_ RRStActPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ RRSAP_HdrstUpDn : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_Massg : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_HdrstUpDnFdRr : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_HdrstFwdRrwd : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_HdrstTltFwdRr : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_HdrstWngsInOut : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_LmbrUpDwn : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_UprShldrFwdRr : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_LmbrUpDnFdRr : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_LmbrFwdRr : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_CshBlstrInOut : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_BkBlstrInOut : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_CshLgthAdjFdRr : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_BkCshBlstrInOut : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_UnsdRsrvd : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ RRSAP_DispSz : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2152103936 Left_Rear_Seat_Display_Status_LS: 6 XXX
- SG_ LRStCtlDispStat : 3|44@0+ (1,0) [0|0] "" XXX
- SG_ LRSCDS_MassgTyp : 1|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSCDS_Massg : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_HdrstFwdRrwd : 8|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_HdrstUpDn : 10|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_MassgIntsty : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ LRSCDS_HdrstTltFwdRr : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_HdrstWngInOt : 19|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_HdrstFdRrUDn : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ LRSCDS_LmbrUDnFdRr : 25|3@0+ (1,0) [0|7] "" XXX
- SG_ LRSCDS_LmbrFwdRr : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_LmbrUpDwn : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_UprShldrFdRr : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_BkCshBlstInOt : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ LRSCDS_CshBlstrInOut : 36|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_BkBlstrInOut : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_UnsdRsrvd : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ LRSCDS_DispReq : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ LRSCDS_DispSz : 45|2@0+ (1,0) [0|3] "" XXX
- SG_ LRSCDS_CshLgAdjFdRr : 47|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152087552 Left_Rear_Seat_Massage_LS: 8 XXX
- SG_ LRStMassgPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ LRSMP_Type2 : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type1 : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type4 : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type3 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type6 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type5 : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type8 : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type7 : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type10 : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type9 : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type12 : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type11 : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type14 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_Type13 : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSMP_UnsdRsrvd : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ LRSMP_MaxDispVal : 59|3@0+ (1,0) [0|7] "" XXX
- SG_ LRSMP_Type15 : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2152071168 Left_Rear_Seat_Actuator_LS: 8 XXX
- SG_ LRStActPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ LRSAP_HdrstUpDn : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_Massg : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_HdrstUpDnFdRr : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_HdrstFwdRrwd : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_HdrstTltFwdRr : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_HdrstWngsInOut : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_LmbrUpDwn : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_UprShldrFwdRr : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_LmbrUpDnFdRr : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_LmbrFwdRr : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_CshBlstrInOut : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_BkBlstrInOut : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_CshLgthAdjFdRr : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_BkCshBlstrInOut : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_UnsdRsrvd : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ LRSAP_DispSz : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2153947136 Remote_Reflash_Stat_LS: 1 XXX
- SG_ RmtRflshMdAct : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2152628224 OnBoard_Tester_Response_LS: 2 XXX
- SG_ OBTCResp : 2|11@0+ (1,0) [0|0] "" XXX
- SG_ OBTCR_Stat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ OBTCR_ReqstrID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ OBTCMstrStat : 5|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2152112128 Performanc_Mode_Vis_Scrn_Stat_LS: 5 XXX
- SG_ PerfMdVislztnScrnStat : 0|33@0+ (1,0) [0|0] "" XXX
- SG_ PMVSS_Snd : 0|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Trans : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Eng : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Drvln : 17|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Susp : 20|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Strng : 23|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_PsngrSeat : 24|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_DrvrSeat : 27|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_AdptCrsCnt : 30|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Disps : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ PMVSS_Exhst : 37|3@0+ (1,0) [0|7] "" XXX
- SG_ PerfMdMainMenuType : 3|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2152775680 Front_360_Camera_On_LS: 3 XXX
- SG_ DispFrt360CamOn : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RrPedDetCstStAvl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RrPedDetCstStVal : 4|3@0+ (1,0) [0|7] "" XXX
- SG_ RrPdDetHptcStVbRqSeqN : 6|2@0+ (1,0) [0|3] "" XXX
- SG_ TrgdVidRecFetrPrsnt : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ RrPdDetHptcStVbRq : 13|6@0+ (1,0) [0|63] "Pulse" XXX
- SG_ DispTrgdVidOn : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ a_360DegVidFetrPrsnt : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ DispSmrtTwVidOn : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ RrPedDetCstAvail : 23|7@0+ (1,0) [0|0] "" XXX
- SG_ RPDCA_Resrv3Avail : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ RPDCA_Resrv2Avail : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ RPDCA_Resrv1Avail : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ RPDCA_AlrtBrkAvail : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ RPDCA_AlrtAvail : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ RPDCA_OnAvail : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ RPDCA_OfAvail : 23|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2153857024 Teen_Driver_Event_Report_2_LS: 8 XXX
- SG_ TnDrvRptCrdAvlDspDat : 6|13@0+ (1,0) [0|0] "" XXX
- SG_ TDRCADD_FCHdwyAlrt : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_ABSAtvEvt : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_StCtrlEvnts : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_TrCtrlEvnts : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_OvSpdEvnt : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_DistDrvn : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_MaxSpd : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_LDWEvnts : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_WOTEvnts : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_DrwDrvAlrt : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_FCMBrEvts : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_RCMBrEvts : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ TDRCADD_FCImntAlrts : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ TeenDrvWOTEvntsRpt : 9|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TnDrvABSAtvEvntsRpt : 31|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TnDrvStblCtrlEvntsRpt : 37|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TnDrvDrowDrvAlrtsRpt : 43|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TnDrvTrCtrlEvntsRpt : 49|10@0+ (1,0) [0|1023] "counts" XXX
-
-BO_ 2153865216 Teen_Driver_Customization_Req_LS: 4 XXX
- SG_ TeenDrvReq : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ TDOvSpdWrnCstStReq : 12|5@0+ (1,0) [0|0] "" XXX
- SG_ TDOWCSR_DecSwAct : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ TDOWCSR_IncSwAct : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ TDOWCSR_StatReq : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ TnDrvSpdLmtCstStReq : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ TeenDrvPinCd : 23|16@0+ (1,0) [0|39321] "" XXX
-
-BO_ 2153840640 Teen_Driver_Event_Report_1_LS: 8 XXX
- SG_ TDFwdClnHdwyAlrtsRpt : 5|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TnDrvDRLOffUnbIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvALCOffUnbIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ TDFwdClnImntAlrtsRpt : 11|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TDFwdClnMtgnBrEvRpt : 17|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TDRevClnMtgnBrEvRpt : 39|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TeenDrvMaxSpdRpt : 45|12@0+ (0.0625,0) [0|255.9375] "km/h" XXX
- SG_ TeenDrvLDWEvntsRpt : 49|10@0+ (1,0) [0|1023] "counts" XXX
-
-BO_ 2153824256 Teen_Driver_Control_Info_LS: 8 XXX
- SG_ TnDrvSpdLmtCstCrStVl : 2|11@0+ (1,0) [0|0] "" XXX
- SG_ TDSLCCSV_SpLmtStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ TDSLCCSV_SpLmDisVl : 15|8@0+ (2,0) [0|510] "km/h" XXX
- SG_ TnDrvSpdLmtCstStAvl : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvOvrSpdIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvGapAdjUnbIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ TeenDrvPINStrd : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ TeenDrvFtrAvl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ TDOvSpdWrnCstCrStVl : 22|15@0+ (1,0) [0|0] "" XXX
- SG_ TDOWCCSV_CrStVl : 19|12@0+ (0.0625,0) [0|255.9375] "km/h" XXX
- SG_ TDOWCCSV_CrStat : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ TDOvSpdWrnCstStAvl : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvOvSpdEvntsRpt : 33|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ TeenDrvRsp : 37|4@0+ (1,0) [0|15] "" XXX
- SG_ TeenDrvAct : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ TeenDrvAccelLimIO : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ TeenDrvDistDrvnRpt : 55|16@0+ (1,0) [0|65535] "km" XXX
-
-BO_ 2155151360 Psngr_Seat_Massage_Priority_LS: 8 XXX
- SG_ PsngrStMassgPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ PSMP_Type2 : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type1 : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type4 : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type3 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type6 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type5 : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type8 : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type7 : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type10 : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type9 : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type12 : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type11 : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type14 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_Type13 : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ PSMP_UnsdRsrvd : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ PSMP_MaxDispVal : 59|3@0+ (1,0) [0|7] "" XXX
- SG_ PSMP_Type15 : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2155134976 Psngr_Seat_Control_Disp_Stat_LS: 6 XXX
- SG_ PsngrStCtlDispStat : 3|44@0+ (1,0) [0|0] "" XXX
- SG_ PSCDS_MassgTyp : 1|4@0+ (1,0) [0|15] "" XXX
- SG_ PSCDS_Massg : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_HdrstFwdRrwd : 8|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_HdrstUpDn : 10|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_MassgIntsty : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ PSCDS_HdrstTltFwdRr : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_HdrstWngInOt : 19|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_HdrstUDnFdRr : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ PSCDS_LmbrUDnFdRr : 25|3@0+ (1,0) [0|7] "" XXX
- SG_ PSCDS_LmbrFwdRr : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_LmbrUpDwn : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_UprShldrFdRr : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_BkCshBlstInOt : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ PSCDS_CshBlstrInOut : 36|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_BkBlstrInOut : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_UnsdRsrvd : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ PSCDS_DispReq : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ PSCDS_DispSz : 45|2@0+ (1,0) [0|3] "" XXX
- SG_ PSCDS_CshLgAdjFdRr : 47|2@0+ (1,0) [0|3] "" XXX
- SG_ PsngrSetRrwdMvmnt : 6|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155118592 Psngr_Seat_Actuator_Priority_LS: 8 XXX
- SG_ PsngrStActPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ PSAP_HdrstUpDn : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_Massg : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_HdrstUpDnFdRr : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_HdrstFwdRrwd : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_HdrstTltFwdRr : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_HdrstWngsInOut : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_LmbrUpDwn : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_UprShldrFwdRr : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_LmbrUpDnFdRr : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_LmbrFwdRr : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_CshBlstrInOut : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_BkBlstrInOut : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_CshLgthAdjFdRr : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_BkCshBlstrInOut : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_UnsdRsrvd : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ PSAP_DispSz : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2155102208 Driver_Seat_Massage_Priority_LS: 8 XXX
- SG_ DrvStMassgPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ DSMP_Type2 : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type1 : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type4 : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type3 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type6 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type5 : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type8 : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type7 : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type10 : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type9 : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type12 : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type11 : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type14 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_Type13 : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ DSMP_UnsdRsrvd : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMP_MaxDispVal : 59|3@0+ (1,0) [0|7] "" XXX
- SG_ DSMP_Type15 : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2155085824 Driver_Seat_Control_Disp_Stat_LS: 8 XXX
- SG_ DrvStCtlDispStat : 3|44@0+ (1,0) [0|0] "" XXX
- SG_ DSCDS_MassgTyp : 1|4@0+ (1,0) [0|15] "" XXX
- SG_ DSCDS_Massg : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_HdrstFwdRrwd : 8|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_HdrstUpDn : 10|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_MassgIntsty : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ DSCDS_HdrstTltFwdRr : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_HdrstWngInOt : 19|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_HdrstUDnFdRr : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ DSCDS_LmbrUDnFdRr : 25|3@0+ (1,0) [0|7] "" XXX
- SG_ DSCDS_LmbrFwdRr : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_LmbrUpDwn : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_UprShldrFdRr : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_BkCshBlstInOt : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ DSCDS_CshBlstrInOut : 36|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_BkBlstrInOut : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_UnsdRsrvd : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ DSCDS_DispReq : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DSCDS_DispSz : 45|2@0+ (1,0) [0|3] "" XXX
- SG_ DSCDS_CshLgAdjFdRr : 47|2@0+ (1,0) [0|3] "" XXX
- SG_ CPMAPINFO4 : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ StrgColCommsFlt : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ StrgColInOutPos : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ StrgColUpDwnPos : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2155069440 Driver_Seat_Actuator_Priority_LS: 8 XXX
- SG_ DrvStActPrty : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ DSAP_HdrstUpDn : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_Massg : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_HdrstUpDnFdRr : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_HdrstFwdRrwd : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_HdrstTltFwdRr : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_HdrstWngsInOut : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_LmbrUpDwn : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_UprShldrFwdRr : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_LmbrUpDnFdRr : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_LmbrFwdRr : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_CshBlstrInOut : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_BkBlstrInOut : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_CshLgthAdjFdRr : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_BkCshBlstrInOut : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_UnsdRsrvd : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ DSAP_DispSz : 63|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2156937216 PassPhrase_Digits_17_to_24_LS: 8 XXX
- SG_ WiFiPssPhrsDgts17to24 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156929024 PassPhrase_Digits_9_to_16_LS: 8 XXX
- SG_ WiFiPssPhrsDgts9to16 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156920832 PassPhrase_Digits_1_to_8_LS: 8 XXX
- SG_ WiFiPssPhrsDgts1to8 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156871680 SSID_Digits_17_to_24_LS: 8 XXX
- SG_ WiFiSSIDDgts17to24 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156863488 SSID_Digits_9_to_16_LS: 8 XXX
- SG_ WiFiSSIDDgts9to16 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156855296 SSID_Digits_1_to_8_LS: 8 XXX
- SG_ WiFiSSIDDgts1to8 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2152480768 Perfr_Data_Recorder_Lap_Info_LS: 6 XXX
- SG_ PerfDatRecBstLpInfo : 2|19@0+ (1,0) [0|0] "" XXX
- SG_ PDRBLI_BstLpTmMins : 2|6@0+ (1,0) [0|63] "min" XXX
- SG_ PDRBLI_BstLpTmSecs : 12|6@0+ (1,0) [0|63] "sec" XXX
- SG_ PDRBLI_BstLpTm100s : 22|7@0+ (0.01,0) [0|1.27] "sec" XXX
- SG_ PerfDatRecLstLpInfo : 26|19@0+ (1,0) [0|0] "" XXX
- SG_ PDRLLI_LstLpTmMins : 26|6@0+ (1,0) [0|63] "min" XXX
- SG_ PDRLLI_LstLpTmSecs : 36|6@0+ (1,0) [0|63] "sec" XXX
- SG_ PDRLLI_LstLpTm100s : 46|7@0+ (0.01,0) [0|1.27] "sec" XXX
-
-BO_ 2152497152 Perf_Data_Recroder_RT_Info_LS: 4 XXX
- SG_ PerfDatRecRltmInfo : 1|26@0+ (1,0) [0|0] "" XXX
- SG_ PDRRI_CrLpTmMins : 1|6@0+ (1,0) [0|63] "min" XXX
- SG_ PDRRI_CrLpTmSecs : 11|6@0+ (1,0) [0|63] "" XXX
- SG_ PDRRI_LpDiffTmSecs : 17|6@0+ (1,0) [0|63] "sec" XXX
- SG_ PDRRI_CrLpTm10sSec : 21|4@0+ (0.1,0) [0|1.5] "sec" XXX
- SG_ PDRRI_LpDiffTm10s : 27|4@0+ (0.1,0) [0|1.5] "sec" XXX
-
-BO_ 2153791488 ARB_State_LS: 1 XXX
- SG_ ArtcldRngBrdSt : 2|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2149883904 BluetoothTetheringPairingRsp_LS: 7 XXX
- SG_ BTTethrngPrngRsp : 4|53@0+ (1,0) [0|0] "" XXX
- SG_ BTPR_RspInfoAvail : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ BTPR_RspStat : 4|4@0+ (1,0) [0|15] "" XXX
- SG_ BTPR_RspVal : 15|48@0+ (1,0) [0|281474976710655] "" XXX
-
-BO_ 2150252544 HMI_EngyConsmpHistGrph_LS: 8 XXX
- SG_ EngyConsmpHistGrph : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ECHG_EngyCnsmdAvg : 4|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_MeasUnit : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ ECHG_Column02 : 10|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column01 : 15|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column04 : 16|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column03 : 21|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column05 : 27|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column07 : 33|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column06 : 38|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column08 : 44|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column10 : 50|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_Column09 : 55|5@0+ (1,0) [0|31] "" XXX
- SG_ ECHG_YAxisMaxVal : 58|3@0+ (1,0) [0|7] "" XXX
- SG_ ECHG_XAxisTkMrkIntvl : 61|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2150391808 HMI_Hourmeter_Data_LS: 6 XXX
- SG_ EngIdlAtvTm : 7|24@0+ (1,0) [0|16777215] "min" XXX
- SG_ EngRunAtvTm : 31|24@0+ (1,0) [0|16777215] "min" XXX
-
-BO_ 2155913216 Diesel_Information_2_LS: 7 XXX
- SG_ DslExhFldRmngDstHRsGroup : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ DslExhFldRmngDstHRs : 6|15@0+ (2,0) [0|65534] "km" XXX
- SG_ DslExhFldRmngDstHRsV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ DslExhFluidLvlPrcntGroup : 16|9@0+ (1,0) [0|0] "" XXX
- SG_ DslExhFluidLvlPrcntV : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ DslExhFluidLvlPrcnt : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DslEmnsOBDMrkt : 18|2@0+ (1,0) [0|3] "" XXX
- SG_ PedFrndlyAlrtCsCrStVal : 21|3@0+ (1,0) [0|7] "" XXX
- SG_ PedFrndlyAlrtCsSetAvl : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ PedFrndlyAlrtStat : 39|24@0+ (1,0) [0|0] "" XXX
- SG_ PFAS_PFACrsOvrSpd : 34|8@0+ (1,0) [0|255] "km/h" XXX
- SG_ PFAS_PFARevSnd : 36|2@0+ (1,0) [0|3] "" XXX
- SG_ PFAS_PFAFwdSnd : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ PFAS_PFASndGenEn : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ PFAS_PFASndVolCtrl : 42|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ PFAS_SrvPedAlrtIO : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ PFAS_PFASysStat : 50|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2034 CCP_Data_Transmission_Object_LS: 8 XXX
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2032 CCP_Command_Receive_Object_LS: 8 XXX
- SG_ DgnInf : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2152095744 HSGMLAN_Customization_Setings_LS: 5 XXX
- SG_ DrvlnPerfMdCustAvl : 5|6@0+ (1,0) [0|0] "" XXX
- SG_ DPMCA_DrvlPrfMd6Avl : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DrvlPrfMd5Avl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DrvlPrfMd4Avl : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DrvlPrfMd3Avl : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DrvlPrfMd2Avl : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DrvlPrfMd1Avl : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ DispPerfCustMdAvl : 13|6@0+ (1,0) [0|0] "" XXX
- SG_ DPMCA_DispPrfMd6Avl : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DispPrfMd5Avl : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DispPrfMd4Avl : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DispPrfMd3Avl : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DispPrfMd2Avl : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ DPMCA_DispPrfMd1Avl : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ SndPerfMdCustAvl : 21|6@0+ (1,0) [0|0] "" XXX
- SG_ SPMCA_SndPrfMd6Avl : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SndPrfMd5Avl : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SndPrfMd4Avl : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SndPrfMd3Avl : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SndPrfMd2Avl : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SndPrfMd1Avl : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ StrPerfMdCustAvl : 29|6@0+ (1,0) [0|0] "" XXX
- SG_ SPMCA_StrPrfMd6Avl : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_StrPrfMd5Avl : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_StrPrfMd4Avl : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_StrPrfMd3Avl : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_StrPrfMd2Avl : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_StrPrfMd1Avl : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ SusPerfMdCustAvl : 37|6@0+ (1,0) [0|0] "" XXX
- SG_ SPMCA_SusPrfMd6Avl : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SusPrfMd5Avl : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SusPrfMd4Avl : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SusPrfMd3Avl : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SusPrfMd2Avl : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ SPMCA_SusPrfMd1Avl : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2156945408 SSID_AMM_1_LS: 8 XXX
- SG_ WiFiSSIDDgts1to8_Mp : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2152611840 OnBoard_Tester_Request_LS: 2 XXX
- SG_ OBTCReq : 4|5@0+ (1,0) [0|0] "" XXX
- SG_ OBTCR_Prty : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ OBTCR_Actv : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ OBTCReqstrStat : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ OBTCReqstrID : 15|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2153308160 Hyb_Redundant_Batt_Data2_LS: 4 XXX
- SG_ RdHVltBatPckCrntGroup : 6|15@0+ (1,0) [0|0] "" XXX
- SG_ RdHVltBatPckCrnt : 4|13@0- (0.15,0) [-614.4|614.25] "A" XXX
- SG_ RdHVltBatPckCrntV : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ RdHVltBatPckCrntM : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ RdHVltBatPckVltGroup : 21|14@0+ (1,0) [0|0] "" XXX
- SG_ RdHVltBatPckVlt : 19|12@0+ (0.125,0) [0|511.875] "V" XXX
- SG_ RdHVltBatPckVltV : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ RdHVltBatPckVltM : 21|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155970560 HVAC_PowerManager_Status_LS: 1 XXX
- SG_ ClmCntLdShdLvlRq : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ ClmCntBatSaverIO : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151178240 Lighting_Customization_Rqst_1_LS: 4 XXX
- SG_ LtRtHnTrGPSCstStRq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ LtRtHnTrCstStReq : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ AutHgBmAsSnCsStRq : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ AutHgBmAstCstStRq : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ AdpHgBmAsSnCsStRq : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ AdpHgBmAstCstStRq : 21|3@0+ (1,0) [0|7] "" XXX
- SG_ AFLGPSCstStReq : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ AFLCstStReq : 29|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2154790912 Lighting_Customization_Info_2_LS: 2 XXX
- SG_ AutHgBmAsCsCrStVal : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ AutHgBmAsSnCsCrStVa : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ AutHgBmAsCsStAvl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ AutHgBmAsSnCsStAvl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ AdpHgBmAsCsCrStVal : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ AdpHgBmAsSnCsCrStVal : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ AdpHgBmAsCsStAvl : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ AdpHgBmAsSnCsStAvl : 15|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151292928 V2V_Customization_Menu_LS: 5 XXX
- SG_ TrfRdsdInfCsStAvail : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CntdVehBrkAltCsStAvl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ IntrStopAlrtCsSetAvl : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ IntrStAlrtCsCrSetVal : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ TrfRdsdInfCsCrStVal : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ CntdVehBrAltCsCrStVal : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ IntrStAlrtCsAvail : 22|7@0+ (1,0) [0|0] "" XXX
- SG_ ISACA_Resrv4Avail : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ ISACA_Resrv3Avail : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ ISACA_Resrv2Avail : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ ISACA_Resrv1Avail : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ ISACA_AlrtBrkAvail : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ ISACA_AlrtAvail : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ ISACA_OfAvail : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ CntdVehBrkAlrtCsAvail : 30|7@0+ (1,0) [0|0] "" XXX
- SG_ CVBACA_Resrv5Avail : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CVBACA_Resrv4Avail : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ CVBACA_Resrv3Avail : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ CVBACA_Resrv2Avail : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ CVBACA_Resrv1Avail : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ CVBACA_OnAvail : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ CVBACA_OfAvail : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ TrfRdsdInfCsAvail : 38|7@0+ (1,0) [0|0] "" XXX
- SG_ TRICA_Resrv5Avail : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ TRICA_Resrv4Avail : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ TRICA_Resrv3Avail : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ TRICA_Resrv2Avail : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ TRICA_Resrv1Avail : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ TRICA_OnAvail : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ TRICA_OfAvail : 38|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151464960 V2V_Warnings_LS: 5 XXX
- SG_ V2VWrngIndReq : 4|5@0+ (1,0) [0|31] "" XXX
- SG_ V2VWrngDirctn : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ V2VWrngDistRemng : 9|10@0+ (1,0) [0|1023] "" XXX
- SG_ V2VTrfLghtInfo : 28|13@0+ (1,0) [0|0] "" XXX
- SG_ V2VTLI_TrfLghtTmPhsSw : 28|6@0+ (1,0) [0|63] "" XXX
- SG_ V2VTLI_TrfLghtMntngDirctn : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ V2VTLI_TrfLghtValDirctn : 34|2@0+ (1,0) [0|3] "" XXX
- SG_ V2VTLI_TrfLghtPhsArivl : 36|2@0+ (1,0) [0|3] "" XXX
- SG_ V2VTLI_TrfLghtActlPhs : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ V2VSrvIndReq : 30|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2151448576 V2V_Seat_Vib_Request_LS: 3 XXX
- SG_ V2VSysHptcStVibReq : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ V2VSysHptStVibRqSN : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ V2VSyLftHptStVbRq : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ V2VSyLftHptStVbRqSN : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ V2VSyRghtHptStVbRq : 21|6@0+ (1,0) [0|63] "" XXX
- SG_ V2VSyRghtHptStVbRqSN : 23|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2153930752 Lane_Centering_Convenience_LS: 3 XXX
- SG_ LCWrnIndReq : 4|5@0+ (1,0) [0|31] "" XXX
- SG_ LCCDrvrAwrnsIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ LnCntrVhlStpd : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ LnCntrNonRspDrvrCnd : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ LCConvMsgIndreq : 12|5@0+ (1,0) [0|31] "" XXX
- SG_ LCCIndReq : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ LnCntrEsclnStat : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ LnCntrSpchPrmtReq : 19|2@0+ (1,0) [0|3] "" XXX
- SG_ LnCntrngCtlIcnLoctn : 23|4@0- (1,0) [-8|7] "" XXX
-
-BO_ 2153889792 Lane_Centering_Arrow_LS: 5 XXX
- SG_ LCArrwBlk1Act : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ LCArrwBlk2Act : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ LCArrwBlk3Act : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ LCArrwBlk4Act : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ LCArrwBlk5Act : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ LCArrwBlk2Offst : 15|8@0- (1,0) [-128|127] "" XXX
- SG_ LCArrwBlk3Offst : 23|8@0- (1,0) [-128|127] "" XXX
- SG_ LCArrwBlk4Offst : 31|8@0- (1,0) [-128|127] "" XXX
- SG_ LCArrwBlk5Offst : 39|8@0- (1,0) [-128|127] "" XXX
-
-BO_ 2153914368 Energy_Usage_LS: 7 XXX
- SG_ EngyUsgScrScal : 7|56@0+ (1,0) [0|0] "" XXX
- SG_ EUSS_OTEgUgScrMxScVal : 0|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_OTEgUgScrMnScVal : 7|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_ITEgUgScrMnScVal : 9|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_ITEgUgScrMxScVal : 18|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_TcEgUgScrMnScVal : 27|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_TcEgUgScrMxScVal : 36|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_TrEgUgScrMnScVal : 45|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUSS_TrEgUgScrMxScVal : 54|7@0- (0.1,0) [-5|5] "" XXX
-
-BO_ 2151882752 PTO_Customization_Request_LS: 3 XXX
- SG_ PTOTpStpSpdCsStReq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ PTOEngRnTmrCsStRq : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ PTOStdbySpdCsStReq : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ PTOSet1SpdCsStReq : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ PTOSet2SpdCsStReq : 23|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151899136 PTO_Status_LS: 5 XXX
- SG_ PTORelBrkPedIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ PTORelAccPedIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PTORedEngSpdIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOPrsRelCltPedIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOPrsRelBrkPedIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOEngmntStatInd : 6|2@0+ (1,0) [0|3] "" XXX
- SG_ PTODisengCrsCntlIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOSet1SpdCsStAvl : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOSet2SpdCsStAvl : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOTpStpSpdCsStAvl : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOEngRnTmrCsStAvl : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOStdbySpdCsStAvl : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOTransInGearIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOSetPrkBrkIO : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ PTORelCltPedIO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOStdbSpdCsCrStVal : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ PTOGroup : 20|2@0+ (1,0) [0|0] "" XXX
- SG_ PTOVDA : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOVDM : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOManTransInGrIO : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOAccelUpnBrkRelIO : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOEngUpnBrkRelIO : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOTpStSpdCsCrStVal : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ PTOEnRnTmCsCrStVal : 30|4@0+ (1,0) [0|15] "" XXX
- SG_ PTOServIndOn : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOSet1SpdCsCrStVal : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ PTOSet2SpdCsCrStVal : 39|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2150580224 HMI_UtlChrgIntrfr_Indication_LS: 5 XXX
- SG_ CstmrNonUsblSOCGroup : 1|10@0+ (1,0) [0|0] "" XXX
- SG_ CstmrNonUsblSOCV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ CstmrNonUsblSOC : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ CstNonUsbSOCDspLvl : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ PrpDspTtlPwrLvlPct : 24|9@0- (0.392157,0) [-100.392192|100.000035] "%" XXX
-
-BO_ 2151735296 Rear_Cross_Traffic_Alert_Ind_LS: 1 XXX
- SG_ RrCrsTrfcAlrtOffIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ LnChgAlrtOffIndOn : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RtRrCrsTrfcAlrtEnbld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RtSBZAlrtEnbld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ RtLnChgAlrtEnbld : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ RtSdDetSysTmpDsbld : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ RtSdDetSysServDsbld : 6|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151792640 Rear_Cross_Traffic_Alert_Rght_LS: 5 XXX
- SG_ RrCTfcRHptcStRqSqN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RrCTfcRHptcStReq : 7|6@0+ (1,0) [0|63] "" XXX
- SG_ RrCrsTrfAltRgtIndCtrl : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ RCTARIC_IndReq : 33|2@0+ (1,0) [0|3] "" XXX
- SG_ RCTARIC_Indctr1Act : 34|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149826560 FCA_VisionBased_Info_2_LS: 4 XXX
- SG_ FCAGpStng : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ FCAHdwyStngIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ FCACrusCtrlCnclReqd : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ FCABrkPrflReq : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ FwdClnAlrtOffIO11E : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ FwdClnAlrtPr11E : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtVsnFsdSpdGroup : 15|15@0+ (1,0) [0|0] "" XXX
- SG_ SpdLmtVsnFsdSpd : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ SpdLmtVsnFsdSpdM : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ FwdObjAlrtInd11E : 16|9@0+ (1,0) [0|0] "" XXX
- SG_ FOAI_AlrtChmIhbRq11E : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ FOAI_VehAhdIndRq11E : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ FOAI_AlrtWrnIndRq11E : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ SpdLmtVnFsSpdNwDet : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtVsnFsdSpdUnt : 19|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149957632 Park_Assist_ESSprocess_Info_LS: 1 XXX
- SG_ ClsnMtgtnInhbtd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstInhbtReq : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstRrObjSnsngRqAct : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstOprtrDsrdStat : 4|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2149941248 Park_Assist_ESSbased_Info_LS: 5 XXX
- SG_ PrkAstRrExtdDstUnfltd : 3|12@0+ (0.01,0) [0|40.95] "m" XXX
- SG_ PrkAstRrSysStatUnfltd : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ PrkAstFntnSnsDstrbdIO : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstFntnSnrsBlkd : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstFntnFld : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstFntnDsbldIO : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstFntnClnPrkAstIO : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ ClsnMtgtnInhbtReqtd : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstRrObjSnsngAct : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ PARrRgn3ObjStatUnfltd : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ PARrRgn4ObjStatUnfltd : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ PARrRgn1ObjStatUnfltd : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ PARrRgn2ObjStatUnfltd : 39|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2156314624 High_Volt_Time_Based_Chrg_LS: 8 XXX
- SG_ TODCNxtPlnndDprtrTm : 5|14@0+ (1,0) [0|0] "" XXX
- SG_ TODCNPDT_Hr : 2|5@0+ (1,0) [0|31] "Hour" XXX
- SG_ TODCNPDT_DyOfWk : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ TODCNPDT_Min : 13|6@0+ (1,0) [0|63] "Minute" XXX
- SG_ OffBrdCSFltDtctd : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ OBVhCsACChgRqBnVs : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ HVChgSyChgLvlPrfDt : 16|25@0+ (1,0) [0|0] "" XXX
- SG_ HVCSCLPD_UsrIntTyp : 16|2@0+ (1,0) [0|3] "" XXX
- SG_ HVCSCLPD_NrmChrgC : 27|5@0+ (1,0) [0|31] "A" XXX
- SG_ HVCSCLPD_ChgLvlPfS : 30|3@0+ (1,0) [0|7] "" XXX
- SG_ HVCSCLPD_RdCrntLv2 : 33|5@0+ (1,0) [0|31] "A" XXX
- SG_ HVCSCLPD_RdCrntLv1 : 38|5@0+ (1,0) [0|31] "A" XXX
- SG_ HVCSCLPD_RdCrntLv3 : 44|5@0+ (1,0) [0|31] "A" XXX
- SG_ HVChrgAbrtRsn : 19|3@0+ (1,0) [0|7] "" XXX
- SG_ TODCOpMd : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ HVChrgSysSplyFltIO : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ TODCDspMnPgTmpOr : 52|5@0+ (1,0) [0|0] "" XXX
- SG_ TODCDMPTO_TpOvR : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ TODCDMPTO_CmPgR : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ HVChrgSysStNot : 55|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBatBlkSOC : 63|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2150449152 Engine_Information_5_LS: 4 XXX
- SG_ SrvcFlSysPrkInOpnArIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvTrCtrlOffUnbIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvStblCtrlOffUnbIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ InActFuelMdFuelLvlIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ FuelSysNEmsRltMalfAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ EngInltSpcfcHmdtyGroup : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ EngInltSpcfcHmdtyM : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ EngInltSpcfcHmdtyV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EngInltSpcfcHmdty : 15|8@0+ (0.0196078,0) [0|4.999989] "% water" XXX
- SG_ AutoStpInhbtRsnInd : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ ASIRI_Indication08 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication07 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication06 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication05 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication04 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication03 : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication02 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ ASIRI_Indication01 : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtrSttngTypAct : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ ManTransIndReq : 28|3@0+ (1,0) [0|7] "" XXX
- SG_ ESPDrvrExtIO : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPDrvrDrStIndtrmntIO : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ ESPAutoPrkIO : 31|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149810176 FCA_VisionBased_Info_1_LS: 1 XXX
- SG_ FCAHptcStVbnRqSeqN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ FCAHptcStVbnReq : 7|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 2149793792 FCA_VisionBased_Info_LS: 6 XXX
- SG_ FwdClnAlrtCustCrntSetngVal : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ FCACustStngAvlbl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ VhlAhdDstIndReq : 26|19@0+ (1,0) [0|0] "" XXX
- SG_ VADIR_IndLvl : 26|4@0+ (1,0) [0|15] "" XXX
- SG_ VADIR_FlwTme : 38|7@0+ (0.1,0) [0|12.7] "s" XXX
- SG_ VADIR_FlwDst : 47|8@0+ (1,0) [0|255] "m" XXX
-
-BO_ 2150080512 Aux_Coolant_Heater_Status_LS: 8 XXX
- SG_ EngAstHtDfrdHtMdAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCsCrStVal : 2|2@0+ (1,0) [0|3] "" XXX
- SG_ AuxClntHtrVlvStat : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ LBCChrgLvlPrfExpIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCsStAvl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCstmrDaRstResp : 12|5@0+ (1,0) [0|0] "" XXX
- SG_ LBCCDRR_PosNumbr : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ LBCCDRR_ClrStrdPosResp : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ LBCPosStgStat : 20|5@0+ (1,0) [0|0] "" XXX
- SG_ LBCPSS_PosUpdtLct : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ LBCPSS_PosUpdtStat : 20|2@0+ (1,0) [0|3] "" XXX
- SG_ LBCVehLctStat : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ LBCVLS_VehGPSLct : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ LBCVLS_VehGPSLctV : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCstmrFdbk : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ LBCCF_Lct4PosStrdIO : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCF_Lct3PosStrdIO : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCF_Lct2PosStrdIO : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCCF_Lct1PosStrdIO : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ ChrgCyclElecEngyEcnEq : 35|12@0+ (0.1,0) [0|409.5] "km/l" XXX
- SG_ ChrgCyclOvrlEngyEcnEq : 51|12@0+ (0.1,0) [0|409.5] "km/l" XXX
-
-BO_ 2153873408 Heated_Steering_Whl_Rqsted_LS: 1 XXX
- SG_ MnlHtdStWhlRqstd : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2152128512 Performance_Mode_Cust_Setings_LS: 4 XXX
- SG_ ACCPerfMdCustAvl : 5|6@0+ (1,0) [0|0] "" XXX
- SG_ ACCPMCA_ACCPrfMd6Avl : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCPMCA_ACCPrfMd5Avl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCPMCA_ACCPrfMd4Avl : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCPMCA_ACCPrfMd3Avl : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCPMCA_ACCPrfMd2Avl : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCPMCA_ACCPrfMd1Avl : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvrStPerfMdCustAvl : 13|6@0+ (1,0) [0|0] "" XXX
- SG_ DSPMCA_DrvrStPrfMd6Avl : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvrStPrfMd5Avl : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvrStPrfMd4Avl : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvrStPrfMd3Avl : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvrStPrfMd2Avl : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvrStPrfMd1Avl : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ PsngStPerfMdCustAvl : 21|6@0+ (1,0) [0|0] "" XXX
- SG_ PSPMCA_PsngStPrfMd6Avl : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ PSPMCA_PsngStPrfMd5Avl : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ PSPMCA_PsngStPrfMd4Avl : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ PSPMCA_PsngStPrfMd3Avl : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ PSPMCA_PsngStPrfMd2Avl : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ PSPMCA_PsngStPrfMd1Avl : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvStyPerfMdCustAvl : 30|7@0+ (1,0) [0|0] "" XXX
- SG_ DSPMCA_DrvStyPrfMd7Avl : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvStyPrfMd6Avl : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvStyPrfMd5Avl : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvStyPrfMd4Avl : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvStyPrfMd3Avl : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvStyPrfMd2Avl : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ DSPMCA_DrvStyPrfMd1Avl : 30|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151997440 Driver_Drowsiness_Dtctn_Stat_LS: 5 XXX
- SG_ DrvDrowSysIndRq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvDrwDetCsCrStVal : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvDrowDetCstStAvl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvDrsnHptcStRqSeqN : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ DrDrwSysHptcStVbnRq : 15|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 2156331008 High_Voltage_EnergyMgmt_Ctrl_LS: 7 XXX
- SG_ LwRngLVLdShdRq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ HVDpltnMdMxCnfdcRg : 11|12@0+ (0.1,0) [0|409.5] "km" XXX
- SG_ HVDpltnMdMiCnfdcRg : 27|12@0+ (0.1,0) [0|409.5] "km" XXX
- SG_ HVDpltnMdMxGugRg : 43|12@0+ (0.1,0) [0|409.5] "km" XXX
-
-BO_ 2151776256 Rear_Cross_Traffic_Alert_Left_LS: 5 XXX
- SG_ RrCTfcLHptcStRqSeqN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RrCTfcLHptcStReq : 7|6@0+ (1,0) [0|63] "" XXX
- SG_ RrCrsTrfAltLftIndCtrl : 34|3@0+ (1,0) [0|0] "" XXX
- SG_ RCTALIC_IndReq : 33|2@0+ (1,0) [0|3] "" XXX
- SG_ RCTALIC_Indctr1Act : 34|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154774528 Lighting_Customization_Info_1_LS: 1 XXX
- SG_ LtRtHnTrCstStVal : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ LtRtHnTrGPCsCrStVal : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ LtRtHnTrCstStAvail : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ LtRtHnTrGPSCsStAvl : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150375424 Eng_Maintenance_Mode_Strt_Req_LS: 3 XXX
- SG_ MntnceMdStEngRq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ EngAstHtCstStRq : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ EngAstHtPlgInCstStRq : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ DsplTrnsShftLvrLckRqd : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EngyCnsHistGrphRstRq : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ USBProgInPrgrs : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ LBCPosMdfcReq : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ LBCCsStReq : 14|2@0+ (1,0) [0|3] "" XXX
- SG_ LBCCstmrDaRstReq : 20|5@0+ (1,0) [0|0] "" XXX
- SG_ LBCCDRR_PosNum : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ LBCCDRR_ClrStrdPosReq : 20|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2150383616 Engine_Maintenance_Mode_Req_LS: 8 XXX
- SG_ MntnceMdDsplyRq : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ EngMntnceMdAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ EngMntncePrcntCpl : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ EngPrpDspPwrLvlPct : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ EstElecPrpCap : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ PrpCapDspOpPs : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ PrpDspTtlPwr : 45|13@0+ (0.5,-326.6) [-326.6|3768.9] "kW" XXX
- SG_ BatPrpDspPwrLvlPct : 48|9@0- (0.392157,0) [-100.392192|100.000035] "%" XXX
-
-BO_ 2151981056 Drive_Cycle_Efficiency_LS: 8 XXX
- SG_ DstTrvldDt : 7|51@0+ (1,0) [0|0] "" XXX
- SG_ DTD_BattPrpDstTrvld : 7|17@0+ (0.015625,0) [0|2047.984375] "km" XXX
- SG_ DTD_FuelPrpDstTrvld : 22|17@0+ (0.015625,0) [0|2047.984375] "km" XXX
- SG_ DTD_DrvCyclDstTrvld : 37|17@0+ (0.015625,0) [0|2047.984375] "km" XXX
- SG_ DrvCyclBatPropRat : 50|11@0+ (0.048852,0) [0|100.000044] "%" XXX
-
-BO_ 2151964672 Drive_Cycle_Energy_Efficiency_LS: 8 XXX
- SG_ DrvCyclBatCondEnrgEfncy : 7|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DrvCyclCbnCondEnrgEfncy : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DrvCyclDrvStEnrgEfncy : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DrvCyclTtlEnrgEfncy : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DrvCyclFuelEnmy : 47|12@0+ (0.1,0) [0|409.5] "km/liters" XXX
- SG_ DrvCyclFuelUsd : 51|12@0+ (0.125,0) [0|511.875] "liters" XXX
-
-BO_ 2156298240 High_Volt_Batt_Time_Pwr_Chrg_LS: 8 XXX
- SG_ HVBatCmpltTmHghPwrChrg : 7|14@0+ (1,0) [0|0] "" XXX
- SG_ HVBCTHPC_HrOfDy : 4|5@0+ (1,0) [0|31] "Hour" XXX
- SG_ HVBCTHPC_DyOfWk : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBCTHPC_MntOfHr : 15|6@0+ (1,0) [0|63] "Minute" XXX
- SG_ HVBatCmpltTmLwPwrChrg : 9|14@0+ (1,0) [0|0] "" XXX
- SG_ HVBCTLPC_DyOfWk : 9|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBCTLPC_MntOfHr : 17|6@0+ (1,0) [0|63] "Minute" XXX
- SG_ HVBCTLPC_HrOfDy : 22|5@0+ (1,0) [0|31] "Hour" XXX
- SG_ HVBatStrTmHghPwrChrg : 27|14@0+ (1,0) [0|0] "" XXX
- SG_ HVBSTHPC_HrOfDy : 24|5@0+ (1,0) [0|31] "Hour" XXX
- SG_ HVBSTHPC_DyOfWk : 27|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBSTHPC_MntOfHr : 35|6@0+ (1,0) [0|63] "Minute" XXX
- SG_ HVBatStrTmLwPwrChrg : 45|14@0+ (1,0) [0|0] "" XXX
- SG_ HVBSTLPC_HrOfDy : 42|5@0+ (1,0) [0|31] "Hour" XXX
- SG_ HVBSTLPC_DyOfWk : 45|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBSTLPC_MntOfHr : 53|6@0+ (1,0) [0|63] "Minute" XXX
- SG_ HVChrgSysDpTmExdSt : 58|3@0+ (1,0) [0|0] "" XXX
- SG_ HVCSDTES_NPDTIO : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ HVCSDTES_HiPwrCIO : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ HVCSDTES_LoPwrCIO : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ HTRActvIndOn : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ InsfcntTmTFlChrgIO : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ InvldHMIEtrIO : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ HVBatChrgCrdAlrtReq : 63|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2149924864 Drv_Pref_Mode_Switch_Status_LS: 8 XXX
- SG_ DrvSelMd1Stat : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd1ReqDnd : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd2Stat : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd2ReqDnd : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd3Stat : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd3ReqDnd : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ HilRlbkCtrlActIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ FwdClnMtgnBrkReqAct : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMdSelnStat : 8|17@0+ (1,0) [0|0] "" XXX
- SG_ DSMSS_DrvSelMd1Un : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd1Pn : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd8Un : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd7Un : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd6Un : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd5Un : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd4Un : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd3Un : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd2Un : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd0Pn : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd8Pn : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd7Pn : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd6Pn : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd5Pn : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd4Pn : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd3Pn : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ DSMSS_DrvSelMd2Pn : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd4Stat : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd4ReqDnd : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd5Stat : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd5ReqDnd : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd6Stat : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd6ReqDnd : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ PTOMobModTrnsInGrIO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ ECODrvAsstDsplyStat : 34|11@0+ (1,0) [0|0] "" XXX
- SG_ EDADS_ShftIndStat : 33|2@0+ (1,0) [0|3] "" XXX
- SG_ EDADS_EcoDrvShftIO : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ EDADS_RcmndtFwdGr : 43|4@0+ (1,0) [0|15] "" XXX
- SG_ EDADS_CrntFwdMsdG : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ DrvSelMd7Stat : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd7ReqDnd : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd8Stat : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvSelMd8ReqDnd : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ FstIdlMdAct : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ DsplyPerfMdRq : 50|3@0+ (1,0) [0|7] "" XXX
- SG_ TireLFLowTracIO : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ TireLRLowTracIO : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ TireRFLowTracIO : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ TireRRLowTracIO : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ a_12VBatSysUnstab : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ ColPrepSysCustAvail : 62|7@0+ (1,0) [0|0] "" XXX
- SG_ CPSCA_Resrv3Avail : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSCA_Resrv2Avail : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSCA_Resrv1Avail : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSCA_AlrtBrkStrAvail : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSCA_AlrtBrkAvail : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSCA_AlrtAvail : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSCA_OffAvail : 62|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2152054784 HMI_Disp_Hyb_Animation_Status_LS: 1 XXX
- SG_ AnmStrtReq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ IntPnlClstrAnmtStat : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ FuelEconMetDispUnts : 6|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150301696 HMI_Animation_Initiator_LS: 1 XXX
- SG_ WlcAnmReq : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150563840 HMI_AnimationHybridRadio_LS: 3 XXX
- SG_ RadAnmtStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ RadAudQueStat : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ DrStStatDispAct : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ PsStStatDispAct : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154758144 Auxiliary_Heater_Active_LS: 1 XXX
- SG_ ChldLckOtSwAct : 1|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154577920 Amp_Sink_Stat_LS: 2 XXX
- SG_ AmpSnkStat : 4|13@0+ (1,0) [0|0] "" XXX
- SG_ ASS_SurndAvail : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPAvail : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_VehNoisCmpnAvail : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_PhLckdLpLckd : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_MtxSnkMutStat : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd7Prsnt : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd6Prsnt : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd5Prsnt : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd4Prsnt : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd3Prsnt : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd2Prsnt : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd1Prsnt : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ASS_DSPMd0Prsnt : 15|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154594304 Amp_Settings_Tone_Ctrl_LS: 5 XXX
- SG_ AmpSetTonCtrl : 1|34@0+ (1,0) [0|0] "" XXX
- SG_ ASTC_ChimSnkLvl : 1|8@0+ (0.5,-127.5) [-127.5|0] "dB" XXX
- SG_ ASTC_ChimSnkSpkrPos : 9|4@0+ (1,0) [0|15] "" XXX
- SG_ ASTC_SurndLvl : 21|6@0- (1,0) [-32|31] "" XXX
- SG_ ASTC_MtxSnkMutRmpTm : 25|8@0+ (5,0) [0|1275] "ms" XXX
- SG_ ASTC_MtxSnkMut : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ ASTC_DSPMd : 30|4@0+ (1,0) [0|15] "" XXX
- SG_ ASTC_VehNoisCmpnAct : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ ASTC_GblAudSnkMut : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ ASTC_AmpLwPwrSt : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ InfotnBkltngConfigSt : 3|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154586112 Amp_Settings_Sink_Lvl_Ctrl_LS: 8 XXX
- SG_ AmpSetSnkLvlCtrl : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ASSLC_MtxSnkLvl : 7|8@0+ (0.5,-127.5) [-127.5|0] "dB" XXX
- SG_ ASSLC_MxPrmtSnkLvl : 15|8@0+ (0.5,-127.5) [-127.5|0] "dB" XXX
- SG_ ASSLC_AudFdbkSnkLvl : 23|8@0+ (0.5,-127.5) [-127.5|0] "dB" XXX
- SG_ ASSLC_FvSnkLvl : 31|8@0+ (0.5,-127.5) [-127.5|0] "dB" XXX
- SG_ ASSLC_MtxSnkFd : 33|6@0- (1,0) [-32|31] "" XXX
- SG_ ASSLC_MtxSnkBal : 39|6@0- (1,0) [-32|31] "" XXX
- SG_ ASSLC_MtxSnkBass : 43|6@0- (1,0) [-32|31] "" XXX
- SG_ ASSLC_MtxSnkMdrng : 53|6@0- (1,0) [-32|31] "" XXX
- SG_ ASSLC_AutoLdnsCmpnAct : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ ASSLC_VcSrcActOnMtx : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ ASSLC_MtxSnkTrbl : 63|6@0- (1,0) [-32|31] "" XXX
-
-BO_ 2152857600 ACC_TrafficJam_RouteSpd_Stat_LS: 3 XXX
- SG_ ACCRteSpdDrvIntvReq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ ACCTrfcJamAstActStat : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ ACCRteSpdAdaptStat : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ ACCGrnMdStat : 14|2@0+ (1,0) [0|3] "" XXX
- SG_ ACCTrfcJamAstRmnTm : 23|8@0+ (1,0) [0|255] "sec" XXX
-
-BO_ 2158149632 High_Volt_Bat_Time_Bsd_Rsp_1_LS: 7 XXX
- SG_ HVBatTmBsSsnChRsp : 0|14@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBSCR_SsnStat : 0|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBTBSCR_SsnMthStat : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBSCR_SsnSlctStat : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBTBSCR_SsnDyStat : 23|5@0+ (1,0) [0|31] "day" XXX
- SG_ HVBatTmBsChrgStRsp : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBatCrgDspStat : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBatTmBsChrgRtRsp : 17|10@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBCRS_ChRtEnblStat : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBTBCRS_ChRtSlctStat : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBCRS_ChRtDStat : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ EngyCnsHsGrphCnfgDt : 36|13@0+ (1,0) [0|0] "" XXX
- SG_ ECHGCD_YAxMaxVal : 32|6@0+ (4,0) [0|252] "" XXX
- SG_ ECHGCD_MeasUt : 36|4@0+ (1,0) [0|15] "" XXX
- SG_ ECHGCD_XAxTkMrkInterv : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ EgyCnsHstGphInsEgyCns : 55|5@0+ (1,0) [0|31] "" XXX
-
-BO_ 2158116864 High_Volt_Bat_Time_Bsd_Rsp_LS: 8 XXX
- SG_ OBHVBCMinsRmng : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ OBHVBCCompTmDispFrmt : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBatTmBsDelChrgRsp : 12|21@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBDCRS_DlChHRsp : 12|5@0+ (1,0) [0|31] "hr" XXX
- SG_ HVBTBDCRS_DlChSlctStat : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBDCRS_DlChDStat : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBDCRS_DlChMHRsp : 29|6@0+ (1,0) [0|63] "min" XXX
- SG_ HVBTBDCRS_DlChSsnStat : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBatTmBsRtChrgRsp : 34|27@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBRCR_RtChMHRsp : 32|6@0+ (1,0) [0|63] "min" XXX
- SG_ HVBTBRCR_RtChSsnStat : 34|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBTBRCR_RtChSlctStat : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBTBRCR_RtChDStat : 50|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBRCR_RtChHRsp : 55|5@0+ (1,0) [0|31] "hr" XXX
- SG_ HVBTBRCR_RtCHSlctTblRwStat : 58|3@0+ (1,0) [0|7] "rows" XXX
- SG_ HVBTBRCR_RtChSlRtStat : 62|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2156281856 High_Volt_Bat_Time_Bsd_Req_1_LS: 7 XXX
- SG_ HVBatTmBsSsnChStReq : 0|14@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBSCSR_SsnStReq : 0|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBTBSCSR_SsnMthStReq : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBSCSR_SsnSlStReq : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBTBSCSR_SsnDayStReq : 23|5@0+ (1,0) [0|31] "day" XXX
- SG_ HVBatTmBsChrgMdReq : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ HVChgSyChgLvlPrfSt : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ StTODChrgTmpOvrd : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ HVBatTmBsChrgRtStReq : 17|10@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBCRSR_ChRtEnblStReq : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBTBCRSR_ChRtSlStReq : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBCRSR_ChRtDStReq : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ TmpOvdNxtPlnDptTmRq : 32|17@0+ (1,0) [0|0] "" XXX
- SG_ TONPDTR_StTmpOvrAtv : 32|2@0+ (1,0) [0|3] "" XXX
- SG_ TONPDTR_HrOfDy : 42|5@0+ (1,0) [0|31] "Hour" XXX
- SG_ TONPDTR_DyOfWk : 46|4@0+ (1,0) [0|15] "" XXX
- SG_ TONPDTR_MntOfHr : 53|6@0+ (1,0) [0|63] "Minute" XXX
- SG_ RtBsChrgCmplnTmPrfReq : 34|2@0+ (1,0) [0|3] "" XXX
- SG_ HTRCsStReq : 37|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2156265472 High_Volt_Bat_Time_Bsd_Req_LS: 8 XXX
- SG_ ChgCdTfAlCzStRq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ ChgPwLsAlCzStRq : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ PrtyChrgRq : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBatTmBsDlChStReq : 12|21@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBDCSRQ_DlChHStReq : 12|5@0+ (1,0) [0|31] "hr" XXX
- SG_ HVBTBDCSRQ_DlChSlStReq : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBDCSRQ_DlChDStReq : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBDCSRQ_DlChMHStReq : 29|6@0+ (1,0) [0|63] "min" XXX
- SG_ HVBTBDCSRQ_DlChSsnStReq : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ ChgSysAudInCsStReq : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBatTmBsRtChrgStReq : 34|27@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBRCSR_RtChDStReq : 34|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBRCSR_RtChSlStReq : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ HVBTBRCSR_RtChSlRtStReq : 46|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBRCSR_RtChMHStReq : 48|6@0+ (1,0) [0|63] "min" XXX
- SG_ HVBTBRCSR_RtChSsnStReq : 50|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBTBRCSR_RtChHStReq : 55|5@0+ (1,0) [0|31] "hr" XXX
- SG_ HVBTBRCSR_RtChSlTbRwReq : 58|3@0+ (1,0) [0|7] "rows" XXX
- SG_ OffBrdHVCVehCsChRq : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ EngyUsgScrnMeasUtStat : 39|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2150113280 Energy_Storage_System_LS: 8 XXX
- SG_ EngyStgSysActCoolEnb : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvCycElEnrgUsd : 21|14@0+ (0.36,0) [0|5897.88] "MJ" XXX
- SG_ DrvCyclElecEngyEcon : 32|9@0+ (0.1,0) [0|51.1] "" XXX
- SG_ HVChrgInhbRsn : 36|4@0+ (1,0) [0|15] "" XXX
- SG_ DrvCyclTrpDstTrvld : 54|15@0+ (0.1,0) [0|3276.7] "km" XXX
-
-BO_ 2150055936 Climate_Control_Status_LS: 5 XXX
- SG_ ClmtCtrlUpprPwrLmt : 7|8@0+ (0.1,0) [0|25.5] "kW" XXX
- SG_ ClmtCtrlLwrPwrLmt : 15|8@0+ (0.1,0) [0|25.5] "kW" XXX
- SG_ ClimCtrlHVDvcShtdwnCmd : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmCntCmpPwrUsdClc : 39|8@0+ (0.04,0) [0|10.2] "kW" XXX
-
-BO_ 2150039552 Thrml_Ref_Compressor_Status_LS: 5 XXX
- SG_ ThrmlRefCompStat : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ EvpCorOtltAirTmpCalcdGroup : 4|13@0+ (1,0) [0|0] "" XXX
- SG_ EvpCorOtltAirTmpCalcdV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ EvpCorOtltAirTmpCalcd : 15|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
- SG_ ThrmlRefCompSpdGroup : 22|15@0+ (1,0) [0|0] "" XXX
- SG_ ThrmlRefCompSpd : 21|14@0+ (1,0) [0|16383] "rpm" XXX
- SG_ ThrmlRefCompSpdV : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ ThrmlRfCmpOvTmpFltPr : 23|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154856448 Humidity_Sensor_Status_LS: 5 XXX
- SG_ HmdtySnsrGlssTemp : 1|10@0+ (0.146628,-50) [-50|100.000444] "deg C" XXX
- SG_ HmdtySnsrTemp : 17|10@0+ (0.146628,-50) [-50|100.000444] "deg C" XXX
- SG_ HmdtySnsrRltvHmdty : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2151342080 Park_Assistant_Right_Status_LS: 2 XXX
- SG_ PARtRgn1ObjStat : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ PrkAstRtSysStat : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ PARtRgn3ObjStat : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ PARtRgn2ObjStat : 15|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151325696 Park_Assistant_Left_Status_LS: 2 XXX
- SG_ PALtRgn1ObjStat : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ PrkAstLtSysStat : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ PALtRgn3ObjStat : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ PALtRgn2ObjStat : 15|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151809024 Drv_Cycl_Elec_Enrgy_Consumd_LS: 8 XXX
- SG_ DrvCycElecEngySt5 : 5|14@0+ (0.36,0) [0|5897.88] "MJ" XXX
- SG_ DrvCycElecEngyCnsmd : 23|32@0+ (1,0) [0|0] "" XXX
- SG_ DCEEC_EngyPct1 : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DCEEC_EngyPct2 : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DCEEC_EngyPct3 : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ DCEEC_EngyPct4 : 47|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ ElecEngyEconAvg : 48|9@0+ (0.1,0) [0|51.1] "" XXX
-
-BO_ 2151858176 Drv_Cycl_Elec_Enrgy_States_LS: 8 XXX
- SG_ DrvCycElecEngySt1 : 5|14@0+ (0.36,0) [0|5897.88] "MJ" XXX
- SG_ DrvCycElecEngySt2 : 21|14@0+ (0.36,0) [0|5897.88] "MJ" XXX
- SG_ DrvCycElecEngySt3 : 37|14@0+ (0.36,0) [0|5897.88] "MJ" XXX
- SG_ DrvCycElecEngySt4 : 53|14@0+ (0.36,0) [0|5897.88] "MJ" XXX
-
-BO_ 2150547456 HMI_Hybrid_Vehicle_Status_LS: 8 XXX
- SG_ HVDpltnMdRng : 0|16@0+ (0.015625,0) [0|1023.984375] "km" XXX
- SG_ VehChrgMdSt : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ GrnAudQueReq : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SvcHybChrgSysIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ HVBatChrgCrdConnIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ CntrsOpnUndrTmpIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ OffBrdHVCVehCplrLkd : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ HVBatLimDTmpInd : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ OffBrdHVCVehPwrDrtd : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ HVChrgrSysStat : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ HVChrgrCplrStat : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ ChgrSysAdblIndReq : 33|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBatOutOfEnrgyInd : 36|3@0+ (1,0) [0|7] "" XXX
- SG_ OffBrdHVBlkChrgCmp : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ ElecPrplsnMtrOvrSpdIO : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ HVBatCntctrsOpnIO : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ HVDpltnMdCnfdcTrndg : 47|8@0- (0.787402,0) [-100.787456|100.000054] "%" XXX
- SG_ OffBrdHVBlkChgCpltTm : 53|14@0+ (1,0) [0|0] "" XXX
- SG_ OBHVBCCT_HrofDay : 50|5@0+ (1,0) [0|31] "" XXX
- SG_ OBHVBCCT_DayofWk : 53|3@0+ (1,0) [0|7] "" XXX
- SG_ OBHVBCCT_MinofHr : 61|6@0+ (1,0) [0|63] "" XXX
- SG_ OffBrdHVCVehPwrLvl : 55|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2151489536 CSV_EOCM_R_Indications_LS: 1 XXX
- SG_ RVBShtToPrkBfExtngVehIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RVBAutoBrkRlsIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NVSysStat : 4|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2149761024 Chassis_Information_2_LS: 6 XXX
- SG_ PerfTrcCrnExStngVal : 4|5@0+ (1,0) [0|31] "" XXX
- SG_ ActVehAccelGroup : 5|22@0+ (1,0) [0|0] "" XXX
- SG_ ActVehAccelV : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ ActVehAccel : 11|12@0- (0.01,0) [-20.48|20.47] "m/s^2" XXX
- SG_ TrlrStabAstActIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ ElvtdIdlCstStAvl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ ElvtdIdlCstCrStVal : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ TrnsCltchThrmlProtIndR : 27|20@0+ (1,0) [0|0] "" XXX
- SG_ TCTPIR_DrvNotfn : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ TCTPIR_TnsEsClTmpD : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ TCTPIR_TnsEsClCDwT : 47|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ PsngStPerfMdCsCrStVal : 30|3@0+ (1,0) [0|7] "" XXX
- SG_ PsngStPerfMdCsStAvl : 31|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155012096 SBZA_Right_Status_LS: 1 XXX
- SG_ SODTmpUnavlbleIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ SODSnsClnRqdIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SODRtIndCntl : 6|5@0+ (1,0) [0|0] "" XXX
- SG_ SODRIC_Ind3 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ SODRIC_Ind2 : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ SODRIC_Ind1 : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SODRIC_IndReq : 6|2@0+ (1,0) [0|3] "" XXX
- SG_ SrvSODSysIO : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150514688 Power_Slidining_Door_Status_LS: 1 XXX
- SG_ SldngDrRgtStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ SldngDrLftStat : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ PwrSldngDrUnavlblIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ SdClsrObstclDtctdStat : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2158067712 Video_Master_Info_2_LS: 5 XXX
- SG_ TchScnDsplUsrActnExt : 1|34@0+ (1,0) [0|0] "" XXX
- SG_ TSDUAE_RotBtnPsh : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TSDUAE_ScrnPrsdRq : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TSDUAE_GrphStrkInfRq : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ TSDUAE_XCoOdntRq : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ TSDUAE_YCoOdntRq : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ TSDUAE_RotEnc : 39|8@0- (1,0) [-128|127] "Detentions" XXX
-
-BO_ 2158051328 Video_Master_Info_1_LS: 5 XXX
- SG_ RemRcvrSrcInpCmd : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ VidMstrDsplyMd : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ VidSrcUICntrlStat : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ RmtRcvrTunCmnd : 12|5@0+ (1,0) [0|31] "" XXX
- SG_ VidMstrArbCmd : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ RmtRcvrTunVal : 23|16@0- (1,0) [-32768|32767] "" XXX
- SG_ VidMstrSrcType : 36|5@0+ (1,0) [0|31] "" XXX
- SG_ TVDspCmd : 39|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2158034944 TV_Tuner_Info_LS: 6 XXX
- SG_ VidSrcCompFormatER : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ CurntTVStnServc : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ CurntTVStnQual : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ RmtRcvrCmndStat : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ RmtRecvtDataTyp : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ RmtRcvrTunStat : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ TVTunerPres : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ RmtRcvrPrgrmServID : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ VidSrcStatCode : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ RemRcvrSrcInpStat : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ VidSrcType : 44|5@0+ (1,0) [0|31] "" XXX
-
-BO_ 2158018560 TV_Station_Name_LS: 8 XXX
- SG_ TVStatNmeChar1_8 : 7|64@0+ (1,0) [0|0] "" XXX
-
-BO_ 2156838912 WiFi_Station_LS: 7 XXX
- SG_ WiFiStationResp : 3|52@0+ (1,0) [0|0] "" XXX
- SG_ WSR_WiFiAssnStat : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ WSR_WiFiStnMACAddr : 15|48@0+ (1,0) [0|281474976710655] "" XXX
-
-BO_ 2156822528 WiFi_AP_Data_LS: 2 XXX
- SG_ WiFiAccsPntData : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ WAPD_IHUWiFiEnStat : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ WAPD_EncrptnType : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ WAPD_SecurityType : 15|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151948288 Driver_Drow_Det_Cst_Rqst_LS: 1 XXX
- SG_ DrvDrowDetCstStRq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ RunBrdOpMdCstStReq : 7|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2158002176 XM_Radio_Service_LS: 1 XXX
- SG_ CurntStnServc : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ SrvcPrvdr : 5|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2149728256 Charging_Sys_Trans_Shift_Lock_LS: 5 XXX
- SG_ ChrgSysTrnsShftLckRq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ChrgPrtDrStat : 2|2@0+ (1,0) [0|3] "" XXX
- SG_ PrtyChrgActIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PrtyChrgAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ HghVltgPropState : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ ChgCdTfAlCzCrStVal : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ ChgCdTfAlCzStAvbl : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ChgPwLsAlCzCrStVal : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ ChgPwLsAlCzStAvbl : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ ChgSyAudInCsCrStVa : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ ChgSysAudInCsStAvl : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ HVChrgPwrLvl : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ EngAstHtCsCrStVal : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ EngAstHtCsStAvl : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ EngAstHtPlgInCsCrStVl : 30|3@0+ (1,0) [0|7] "" XXX
- SG_ EngAstHtPlgInCsStAvl : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ PrtyChrgStPnt : 38|7@0+ (1,0) [0|127] "" XXX
-
-BO_ 2150023168 Hybrid_Information_LS: 5 XXX
- SG_ HybChrgMdStat : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ HVInvRatVltGroup : 2|19@0+ (1,0) [0|0] "" XXX
- SG_ HVInvRatVltV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ HVInvRatVlt : 8|9@0+ (1,0) [0|511] "volts" XXX
- SG_ OffBrdVehImmbNot : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ ElecPrplsnMtrTach : 28|13@0+ (1,0) [0|8191] "rpm" XXX
-
-BO_ 2153988096 Power_Elec_Info_LS: 7 XXX
- SG_ PwrElecCoolLpTempGroup : 1|10@0+ (1,0) [0|0] "" XXX
- SG_ PwrElecCoolLpTempV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ PwrElecCoolLpTempM : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PwrElecCoolLpTemp : 15|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ EngyUsgScr : 20|37@0+ (1,0) [0|0] "" XXX
- SG_ EUS_TcEngyUsgScrAvVal : 20|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUS_TrEngyUsgScrAvVal : 29|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUS_OTEngyUsgScrAvVal : 38|7@0- (0.1,0) [-5|5] "" XXX
- SG_ EUS_TtEngyUsgScrAvVal : 40|9@0- (0.1,0) [-20|20] "" XXX
- SG_ EUS_ITEngyUsgScrAvVal : 47|7@0- (0.1,0) [-5|5] "" XXX
-
-BO_ 2155945984 Jump_Start_Req_LS: 1 XXX
- SG_ JmpStrtReq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TCSysCurStReq : 2|2@0+ (1,0) [0|3] "" XXX
- SG_ VehStbEnhmntCurStRq : 4|2@0+ (1,0) [0|3] "" XXX
- SG_ VehStbCmptvMdCurStRq : 6|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2155585536 MSB_Customization_Setting_Req_LS: 1 XXX
- SG_ StBltTgtCSRq : 2|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155569152 CPS_Customization_Setting_Req_LS: 3 XXX
- SG_ ColPrSysCustReq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ ExtHlStrAssCsStRq : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ IntDimSeldClrTypStReq : 12|5@0+ (1,0) [0|31] "" XXX
- SG_ HLOCCstSetReq : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ IntDimSeldAnmTypStReq : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SmPhRmFunCstStReq : 22|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155233280 VICM_Info_LS: 8 XXX
- SG_ VehRefuelSt : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ FlDrOpenIndOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ UtlChrgPopUpAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ UtlChrgIntrfrIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ ShftPrkIO_3B2 : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ NtrlCstdwnCrtMdActvIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ RtBsChrgCmplnTmPrfRsp : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ EngRnngDutoVehSpdIO : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ NtrlGrWrngIO : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ LftmFuelEcon : 19|12@0+ (0.1,0) [0|409.5] "kilometers/liter" XXX
- SG_ LiftimeFuelEcnEquiv : 35|12@0+ (0.1,0) [0|409.5] "km/l" XXX
- SG_ ChrgCyclFuelEcn : 51|12@0+ (0.1,0) [0|409.5] "km/l" XXX
-
-BO_ 2152169472 Coolant_Heater_Status_LS: 3 XXX
- SG_ ClntHtrSt : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ ClntHtrPCBOvTmpFlt : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntHtrHtSnkOvTmpFlt : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntHtrElecPwrGroup : 4|13@0+ (1,0) [0|0] "" XXX
- SG_ ClntHtrElecPwrV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntHtrElecPwr : 15|8@0+ (0.04,0) [0|10.2] "kW" XXX
- SG_ ClntHtrFlt : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ ClntHtrInltClntTmp : 23|8@0+ (1,-40) [-40|215] "deg C" XXX
-
-BO_ 2152759296 SITM_Front_Sensor_IO_LS: 1 XXX
- SG_ FrtCmrBlckdIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ FrtEOCMMdlFldIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ FrtCmrFldIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ FrtRdrFldIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PedWrnIndReq : 5|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152742912 SITM_Rear_Sensor_IO_LS: 1 XXX
- SG_ RrEOCMMdlFldIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RrRdrBlckdIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RrRdrFldIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ShrtRngRdrOffIO : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150891520 Go_Notifier_Req_LS: 5 XXX
- SG_ DgtlMapSpdCat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ FwdClnAlrtCustStngReq : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ GNCustStngReq : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ DgtlMapDrvngSd : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ DgtlMapPsgRstrctn : 11|3@0+ (1,0) [0|7] "" XXX
- SG_ RrStRmndrCstSetReq : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ DgtlMapEffSpdLmt : 20|5@0+ (1,0) [0|31] "" XXX
- SG_ DgtlMapEffSpdLmtTyp : 23|3@0+ (1,0) [0|7] "" XXX
- SG_ DgtlMapVerYr : 29|6@0+ (1,0) [0|63] "" XXX
- SG_ DgtlMapVerQtr : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ DgtlMapCndlSpdLmt : 36|5@0+ (1,0) [0|31] "" XXX
- SG_ DgtlMapCndlSpdLmtTyp : 39|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2151751680 Haptic_Seat_Status_LS: 3 XXX
- SG_ CrshAlrtDrvrSlctdType : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CrshAlrtStPrsnt : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ HptcStVbnStat : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ HptcStFldIO : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155536384 Rear_Virtual_Bmper_Indication_LS: 1 XXX
- SG_ RVBDsbldIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RVBEnbldIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RVBFldIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RVBUnblIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvRIMOffUnbIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ RevClnMtgnBrkReqAct : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151481344 CSV_FSRACC_Indications_LS: 1 XXX
- SG_ AutoBrkRlsIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ShtToPrkBfExtngVehIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ HdUpDsplyUnblIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ FSRACCFrstRsmPrssIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ FrtRdrBlckdIO : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151432192 ACC_Drv_Seat_Vib_Req_IO_LS: 1 XXX
- SG_ ACCHptcStVbnRqSeqN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ ACCHptcStVbnReq : 7|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 2151415808 Ln_Dep_Wrn_Drv_Seat_Vib_Req_LS: 5 XXX
- SG_ LDWLftHptcStRqSN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ LDWLftHptcStRq : 7|6@0+ (1,0) [0|63] "" XXX
- SG_ LDWRghtHptcStRqSN : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ LDWRghtHptcStRq : 15|6@0+ (1,0) [0|63] "" XXX
- SG_ LftLnChgThrtHptStRqSN : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ LftLnChgThrtHptStRq : 23|6@0+ (1,0) [0|63] "Pulse" XXX
- SG_ RgtLnChgThrtHptStRqSN : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ RgtLnChgThrtHptStRq : 31|6@0+ (1,0) [0|63] "Pulse" XXX
- SG_ FrPedDetCsStAvl : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ FrPedDetCsCrStVal : 35|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2151350272 Frnt_Prk_Ast_Drv_Seat_Vib_Req_LS: 3 XXX
- SG_ FPAHptcStVbnRqSeqN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ FPAHptcStVbnReq : 7|6@0+ (1,0) [0|63] "" XXX
- SG_ APAIconDispRq : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ APAIconFilPctRq : 22|7@0+ (1,0) [0|127] "" XXX
-
-BO_ 2151333888 Rear_Prk_Ast_Drv_Seat_Vib_Req_LS: 1 XXX
- SG_ RPAHptcStVbRqSeqN : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RPAHptcStVbnReq : 7|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 2151522304 Reset_FuelLife_Request_LS: 1 XXX
- SG_ FuelFltLfRstRqd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ElEngyEconAvgRstRq : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TCSTmpDsblReqConf : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ LnchCtrlRelLnLockReqd : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150629376 CV_System_Failure_LS: 1 XXX
- SG_ CVSysFlrIO : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155929600 Diesel_Information_LS: 8 XXX
- SG_ DslExFldTpWrngIndRq : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ DslExhFldDiagWrnIdRq : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ DslExhFldQlyWrngIReq : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ DslExhFldWrngIdRqER : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ DslExhFluidDistTIndcmt : 22|15@0+ (2,0) [0|65534] "km" XXX
- SG_ DslExNxEmWrngIndRq : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ DslExFldCnWrngIndRq : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ DslExFldWrngVSpdLmt : 47|24@0+ (1,0) [0|0] "" XXX
- SG_ DEFWVSL_S1SpdLmt : 47|8@0+ (1,0) [0|255] "km / h" XXX
- SG_ DEFWVSL_S2SpdLmt : 55|8@0+ (1,0) [0|255] "km / h" XXX
- SG_ DEFWVSL_S3SpdLmt : 63|8@0+ (1,0) [0|255] "km / h" XXX
-
-BO_ 2154741760 RSA_Status_LS: 1 XXX
- SG_ RSAPrsnt : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154807296 Lighting_Customization_Info_3_LS: 4 XXX
- SG_ AFLGPSCstCrStVal : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ AFLCstCrStVal : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ AFLGPSCstStAvl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ AFLCstStAvl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ AFLGPSMnu2CstStAvl : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ AFLMnu2CstStAvl : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ AFLMnu3CstStAvl : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ EngAutoStpNotProb : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ESCMHiEleclLdReqAct : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ EngAutoStrtStpInfo : 17|10@0+ (1,0) [0|0] "" XXX
- SG_ EASSI_StrtStpSt : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ EASSI_UnsdRsrvd2 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ EASSI_TorqDetdIndet : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ EASSI_StlDetd : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ EASSI_TrqDetd : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ EASSI_FuelReqOn : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ EASSI_StrtTyp : 31|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2151079936 PDIM_Status_LS: 1 XXX
- SG_ PDIMPrsnt : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155364352 Hybrid_Information_SuperSlow_LS: 5 XXX
- SG_ SvcHybridSysIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ JmpStrtStat : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ HybMdDisp : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ CstmrUsblSOCGroup : 15|15@0+ (1,0) [0|0] "" XXX
- SG_ CstmrUsblSOC : 15|8@0+ (0.39216,0) [0|100.0008] "%" XXX
- SG_ CstmrUsblSOCV : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ BattCntrlPrcssrVDA : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ InstDrvEff : 31|8@0- (0.78125,0) [-100|99.21875] "%" XXX
- SG_ ClntCrcFlwRtEst : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2154979328 Front_Seat_Heat_Cool_Req_LS: 1 XXX
- SG_ FrntStVoltBstModReq : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155282432 RearSeat_HeatVent_Cool_LS: 1 XXX
- SG_ RrStVoltBstModReq : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151505920 VehInfoTripComputer_LS: 7 XXX
- SG_ SpdCurvAdvSysEnbld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrBrkDsplyAct : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCSettingType : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ AutoMdSpdLmtCnfrmd : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PTExPrtclFltManRgnRqd : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ Trp2OdomtrGroup : 6|55@0+ (1,0) [0|0] "" XXX
- SG_ Trp2OdomtrV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ Trp2Odomtr : 38|23@0+ (0.015625,0) [0|131071.984375] "km" XXX
- SG_ Trp1OdomtrGroup : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ Trp1OdomtrV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ Trp1Odomtr : 14|23@0+ (0.015625,0) [0|131071.984375] "km" XXX
-
-BO_ 2155896832 Alternative_Fuel_Information_LS: 5 XXX
- SG_ FuelMdStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ AltFuelMdReqDndIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ FlLvlTank2PctGroup : 4|13@0+ (1,0) [0|0] "" XXX
- SG_ FlLvlTank2PctV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ FlLvlTank2Pct : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ AltFuelAccWrnngAct : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ AltFuelLvlLo : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ AltFuelPHeatAct : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ FuelTotCapTnk2 : 19|12@0+ (0.125,0) [0|511.875] "liters" XXX
- SG_ FuelAlchlCompAdptnPrg : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ FuelAlcoholCompGroup : 21|22@0+ (1,0) [0|0] "" XXX
- SG_ FuelAlcoholCompV : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ FuelAlcoholComp : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2155552768 Exterior_Lock_Switch_Req_LS: 1 XXX
- SG_ PsvEntCmftWndRq : 1|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154496000 Rear_Closure_Soft_Top_Info_LS: 1 XXX
- SG_ CmpSftTopMotBfrOpTrnkIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TargaTopStateGroup : 2|2@0+ (1,0) [0|0] "" XXX
- SG_ TargaTopState : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TargaTopStateV : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155208704 Power_Conv_Top_Info_LS: 3 XXX
- SG_ SftTpAbvWrngSpdIndOn : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpFlrIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpLtcIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpMnlLtchIndOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpMchnOvhtIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpRmCrgCrrIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpStrIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpTmpLwIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpTneuCvrIO : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpVehOvSpdIndOn : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpVltLwIO : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ CkSoftTpIO : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ClsTrnkLidIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ FTUpdWndPsLmtEnbld : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ VltSwAtvIndOn : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpTrnLmpsRqd : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ FldngTpSt : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ FldngTpWndCmftRq : 20|2@0+ (1,0) [0|3] "" XXX
- SG_ SftTpPlsDnSrtdIndOn : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SftTpPlsDnWrngIndOn : 22|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2153390080 Manual_Liftgate_Control_LS: 1 XXX
- SG_ RrClosOpenSwAct_2D1Group : 3|3@0+ (1,0) [0|0] "" XXX
- SG_ RrClosOpenSwAct_2D1 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClosOpenSwAct_2D1V : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155175936 CruiseControlGapSwitch_LS: 1 XXX
- SG_ AdptCrsGapSwAct : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ AdptCrsLKALDWSwAct : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2156806144 Cellular_Network_Date_and_Time: 6 XXX
- SG_ CldrDayCmpstdVal : 4|5@0+ (1,0) [0|31] "days" XXX
- SG_ HrsCmpstdValGroup : 5|30@0+ (1,0) [0|0] "" XXX
- SG_ HrsCmpstdValV : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ HrsCmpstdVal : 28|5@0+ (1,0) [0|31] "h" XXX
- SG_ MinsCmpstdValGroup : 6|39@0+ (1,0) [0|0] "" XXX
- SG_ MinsCmpstdValV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ MinsCmpstdVal : 37|6@0+ (1,0) [0|63] "min" XXX
- SG_ SecCmpstdValGroup : 7|48@0+ (1,0) [0|0] "" XXX
- SG_ SecCmpstdValV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ SecCmpstdVal : 45|6@0+ (1,0) [0|63] "secs" XXX
- SG_ CldrMthCmpstdVal : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ CellNtwrkDtTmAvl : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ CldrYrCmpstdVal : 23|8@0+ (1,2000) [2000|2255] "year" XXX
-
-BO_ 2154078208 Window_Position_Status_LS: 2 XXX
- SG_ DrvWndPosStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ LRWndPosStat : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ PsWndPosStat : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ RRWndPosStat : 13|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2159058944 ODIEvent_IPC_LS: 3 XXX
- SG_ ODIEvntPkt_IPC : 5|22@0+ (1,0) [0|0] "" XXX
- SG_ ODIEI_EvID : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIEI_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIEI_MultiFrRetCh : 23|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2159042560 ODI_DynData_IPC_LS: 8 XXX
- SG_ ODIDynData_IPC : 14|55@0+ (1,0) [0|0] "" XXX
- SG_ ODDI_InvldData : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDI_DataType : 14|6@0+ (1,0) [0|63] "" XXX
- SG_ ODDI_FUCID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDI_DataId : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDI_DataVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2150006784 System_Power_Mode_Pushbutton_LS: 1 XXX
- SG_ SysPwrMdPshbtnActGroup : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ SysPwrMdPshbtnAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ SysPwrMdPshbtnActV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PEPSRunCrnkRlyDctd : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155216896 Road_Type_Information_LS: 6 XXX
- SG_ MpDataAvlbl : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ BldUpArDet : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SprtLnRd : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ CntrldAccRd : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ CurvAdvInd : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ SpdLmtPstdSpdGroup : 6|23@0+ (1,0) [0|0] "" XXX
- SG_ SpdLmtPstdSpdM : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtPstdSpd : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ DgtlMapPstdSpdLimAsrd : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ FncRdClass : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ RdSpdCatType : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ LnCat : 14|2@0+ (1,0) [0|3] "" XXX
- SG_ SpdLmtUnits : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtRecmndSpd : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ IntlStdAlph2CddCntryCd : 33|10@0+ (1,0) [0|0] "" XXX
- SG_ ISA2CCC_FrstCdChr : 33|5@0+ (1,0) [0|31] "" XXX
- SG_ ISA2CCC_ScndCdChr : 44|5@0+ (1,0) [0|31] "" XXX
-
-BO_ 2156216320 TTY_Status_LS: 1 XXX
- SG_ TxtTelephoneDevPr : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2158813184 ODIIndication_IPC_LS: 8 XXX
- SG_ ODIInd_IPC : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODIIIPC_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIIIPC_ODIInd8 : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd7 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd6 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd5 : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd4 : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd3 : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd2 : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd1 : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd16 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd15 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd14 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd13 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd12 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd11 : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd10 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd9 : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd24 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd23 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd22 : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd21 : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd20 : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd19 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd18 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd17 : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd32 : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd31 : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd30 : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd29 : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd28 : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd27 : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd26 : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd25 : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd40 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd39 : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd38 : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd37 : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd36 : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd35 : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd34 : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd33 : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd48 : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd47 : 49|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd46 : 50|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd45 : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd44 : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd43 : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd42 : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd41 : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd56 : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd55 : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd54 : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd53 : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd52 : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd51 : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd50 : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIIPC_ODIInd49 : 63|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150277120 GPS_Geographical_Position_LS: 8 XXX
- SG_ PsngSysLatGroup : 6|31@0+ (1,0) [0|0] "" XXX
- SG_ PsngSysLat : 5|30@0- (1,0) [-536870912|536870911] "ms arc" XXX
- SG_ PsngSysLatV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ PsngSysLongGroup : 39|32@0+ (1,0) [0|0] "" XXX
- SG_ PsngSysLong : 38|31@0- (1,0) [-1073741824|1073741823] "ms arc" XXX
- SG_ PsngSysLongV : 39|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150285312 GPS_Elevation_and_Heading_LS: 8 XXX
- SG_ PsngSysHdingGroup : 3|37@0+ (1,0) [0|0] "" XXX
- SG_ PsngSysHding : 3|12@0+ (0.1,0) [0|409.5] "deg" XXX
- SG_ PsngSysHdingV : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ PsngSysDilPrcsGroup : 4|29@0+ (1,0) [0|0] "" XXX
- SG_ PsngSysDilPrcsV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PsngSysDilPrcs : 17|10@0+ (0.1,0) [0|102.3] "" XXX
- SG_ PsngSysCalcSpdGroup : 39|10@0+ (1,0) [0|0] "" XXX
- SG_ PsngSysCalcSpd : 39|8@0+ (1,0) [0|255] "km / h" XXX
- SG_ PsngSysCalcSpdV : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ PsngSysElvtnGroup : 45|22@0+ (1,0) [0|0] "" XXX
- SG_ PsngSysElvtn : 44|21@0+ (1,-100000) [-100000|1997151] "cm" XXX
- SG_ PsngSysElvtnV : 45|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151890944 Telematics_Indication_Request_LS: 4 XXX
- SG_ TlmtcsIndCntrlReq : 15|24@0+ (1,0) [0|0] "" XXX
- SG_ TICR_Ind1Cnt : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ TICR_Ind1 : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ TICR_Ind1Req : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ TICR_Ind1FlshRtOff : 23|8@0+ (10,0) [0|2550] "ms" XXX
- SG_ TICR_Ind1FlshRtOn : 31|8@0+ (10,0) [0|2550] "ms" XXX
-
-BO_ 2151251968 Telematics_Indication_Control_LS: 4 XXX
- SG_ TlmtcsIndCntrlStat : 12|21@0+ (1,0) [0|0] "" XXX
- SG_ TICS_Ind1V : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ TICS_Ind1 : 10|2@0+ (1,0) [0|3] "" XXX
- SG_ TICS_Ind1Stat : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ TICS_Ind1FlshRtOffSt : 23|8@0+ (10,0) [0|2550] "ms" XXX
- SG_ TICS_Ind1FlshRtOnSt : 31|8@0+ (10,0) [0|2550] "ms" XXX
-
-BO_ 2155495424 Remote_Start_Seat_Request_LS: 1 XXX
- SG_ RmStrCldStEnReq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RmStrHtdStEnRq : 1|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149990400 HS_Indications_Fast_LS: 8 XXX
- SG_ ABSIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ StpOnBrkToRelPBIndOn : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrBrkngVDA : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvThrtlOvrdIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ TreInfMonSysRstPrfmd : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCHdwayStngIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCDrvrSeltdSpdIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrWiringFltIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ AdvHlmpsVDA : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ SADmpVDA : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ScndryAxleVDA : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvTrlrBrkngSysIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrBrkngGainSetIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrCnctdIO : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ChkTrlrIO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrBrkngFrcOtpt : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ TrlrBrkngGainSet : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ TrlrHtchSwAtv_ITBC : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ TransNtrlCntrlMdStat : 34|2@0+ (1,0) [0|3] "" XXX
- SG_ MotStBltFldIO : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ MotStBltUnblIO : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsfrCsRngShfSpdLmt : 47|8@0+ (1,0) [0|255] "km / h" XXX
- SG_ InstFuelConsmpRate : 51|12@0+ (0.025,0) [0|102.375] "ltrs/hr" XXX
- SG_ SecAxlOperMod : 55|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2155380736 HS_Indications_SuperSlow_LS: 6 XXX
- SG_ VehOvrLdIndOn : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvLevSysIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ HdLtLvlFlrIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RrLevVDA : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ AirCndOffIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilHotIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ PTExPrtclFltrWrnIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ DslGlwPlgIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EngHotFuelEnrchmntIO : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilChngIO : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilLvlLwIO : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilPrsLwIO : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ EngWtrInFlIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ RdcdPwrIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ CkFlFilrCapIO : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ EngHt_StpEngIO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ StrAsstRdcdLvl2IO : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ PwrStrIO : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ PTExPrtclFltrWrn2IO : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ AdvFrntLghtSysIndRq : 21|3@0+ (1,0) [0|7] "" XXX
- SG_ StrngAsstRdcdIO : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ StrAsstRdcdLvl3IO : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ PwrPckAirInTempFlt : 31|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ PwrPkFnSpd : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ ARSFlrIO : 40|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150498304 Analog_Values_Slow_LS: 8 XXX
- SG_ EngCltTmpGroup : 0|57@0+ (1,0) [0|0] "" XXX
- SG_ EngCltTmpV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ EngCltTmp : 63|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ EngIntAirTmpGroup : 1|50@0+ (1,0) [0|0] "" XXX
- SG_ EngIntAirTmpV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ EngIntAirTmp : 55|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ EngOilTmpGroup : 2|43@0+ (1,0) [0|0] "" XXX
- SG_ EngOilTmpV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilTmp : 47|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ OAT_PT_EstGroup : 4|37@0+ (1,0) [0|0] "" XXX
- SG_ OAT_PT_EstV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ OAT_PT_EstM : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ OAT_PT_Est : 39|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
- SG_ TrnOilTmpGroup : 5|30@0+ (1,0) [0|0] "" XXX
- SG_ TrnOilTmpV : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnOilTmp : 31|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ BarPrsAbsGroup : 6|23@0+ (1,0) [0|0] "" XXX
- SG_ BarPrsAbsV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ BarPrsAbs : 23|8@0+ (0.5,0) [0|127.5] "kPa" XXX
- SG_ EngOilPrsGroup : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ EngOilPrsV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilPrs : 15|8@0+ (4,0) [0|1020] "kPa" XXX
-
-BO_ 2151047168 HUD_Status_LS: 1 XXX
- SG_ HUDActv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ HdUpDspAnmtStat : 3|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155331584 Wheel_Pulses_LS: 4 XXX
- SG_ WhlPlsPerRevDrvn : 6|7@0+ (1,0) [0|127] "" XXX
- SG_ WhlPlsPerRevNonDrvn : 14|7@0+ (1,0) [0|127] "" XXX
- SG_ WhlRotStatTmstmpRes : 18|11@0+ (0.002,0) [0|4.094] "uSec" XXX
-
-BO_ 2154225664 Door_Handle_Switch_Status_LS: 1 XXX
- SG_ DrvDrHndleSwAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ PasDrHndleSwAtv : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RCHndleSwAtv : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RRDrHndleSwAtv : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ RLDrHndleSwAtv : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149900288 Telematics_Contol_LS: 3 XXX
- SG_ EnhSrvRClsRlsRq : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ EnhSrvVisAlRq : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ EnhSrvAudAlRq : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ EnhSrvRmStrtRq : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ EnhSrvLckRq : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ BTTethrngPrngReq : 14|4@0+ (1,0) [0|15] "" XXX
- SG_ EnhSvVehTopSpdLim : 23|8@0+ (2,0) [0|510] "km / h" XXX
-
-BO_ 2159001600 ODIEnumDynamicData_IPC_LS: 8 XXX
- SG_ ODIEnmDynData_IPC : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIEDDIPC_Data2Value : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data1Value : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data5Value : 9|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data4Value : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data3Value : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data8Value : 16|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data7Value : 19|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data6Value : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data10Value : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data9Value : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data13Value : 33|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data12Value : 36|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data11Value : 39|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data16Value : 40|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data15Value : 43|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data14Value : 46|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data18Value : 50|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_Data17Value : 53|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDIPC_FUCID : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2158993408 ODIEnumDynamicData_CntrStack_LS: 8 XXX
- SG_ ODIEnmDynData_CenterStack : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIEDDCS_Data2Value : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data1Value : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data5Value : 9|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data4Value : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data3Value : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data8Value : 16|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data7Value : 19|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data6Value : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data10Value : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data9Value : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data13Value : 33|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data12Value : 36|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data11Value : 39|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data16Value : 40|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data15Value : 43|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data14Value : 46|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data18Value : 50|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_Data17Value : 53|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDDCS_FUCID : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2154708992 Audio_Master_Source_Status_LS: 2 XXX
- SG_ AudSrcStat2 : 3|12@0+ (1,0) [0|0] "" XXX
- SG_ ASS2AudSrcType : 3|5@0+ (1,0) [0|31] "" XXX
- SG_ ASS2AudSrcStatCode : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ ASS2AudSrcChType : 14|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2158985216 ODIDynDataMultiReq_OTIM_LS: 8 XXX
- SG_ ODIDynDataMltRq_OTIM : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODDMO_DataID2Vld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMO_DataID3Vld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMO_DataID4Vld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMO_DataID5Vld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMO_ReqType : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ODDMO_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMO_DispMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMO_DataID1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMO_DataID2 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMO_DataID3 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMO_DataID4 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMO_DataID5 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2154471424 Rear_Closure_Ajar_Switch_Status: 1 XXX
- SG_ RrClosAjarSwAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClsrSnwLdIO : 1|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2159149056 ODI_TEL_2_CenterStack_LS: 8 XXX
- SG_ ODI_TEL2CntrStck : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159116288 ODI_TEL_2_AuxIP_LS: 8 XXX
- SG_ ODI_TEL2AxIP : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2158796800 ODIIndication_LS: 8 XXX
- SG_ ODIInd : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODII_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODII_ODIInd8 : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd7 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd6 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd5 : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd4 : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd3 : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd2 : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd1 : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd16 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd15 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd14 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd13 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd12 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd11 : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd10 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd9 : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd24 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd23 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd22 : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd21 : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd20 : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd19 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd18 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd17 : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd32 : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd31 : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd30 : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd29 : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd28 : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd27 : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd26 : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd25 : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd40 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd39 : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd38 : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd37 : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd36 : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd35 : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd34 : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd33 : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd48 : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd47 : 49|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd46 : 50|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd45 : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd44 : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd43 : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd42 : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd41 : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd56 : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd55 : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd54 : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd53 : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd52 : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd51 : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd50 : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ ODII_ODIInd49 : 63|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2158755840 ODIEvent_LS: 4 XXX
- SG_ ODIEvntPkt : 13|22@0+ (1,0) [0|0] "" XXX
- SG_ ODIE_EvID : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIE_FUCID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIE_MultiFrRetCh : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2159157248 ODI_CenterStack_2_TEL_LS: 8 XXX
- SG_ ODI_CntrStck2TEL : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2153955328 Infrastructure_Timer_Status_LS: 5 XXX
- SG_ EngOffTmExtRngGroup : 0|33@0+ (1,0) [0|0] "" XXX
- SG_ EngOffTmExtRngV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOffTmExtRng : 39|8@0+ (4,0) [0|1020] "min" XXX
- SG_ ElpsdTimeCntRstOcc : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ElpsdTimeCnt : 15|24@0+ (1,0) [0|16777215] "min" XXX
-
-BO_ 2151063552 Infotainment_Operation_LS: 7 XXX
- SG_ InftnOprAlwd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ValetMdAct : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ Frnt360CamSwAct : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ CamVideoICSDispAct : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ LRStStatDispAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ RRStStatDispAct : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ TrgdVidRecSwAct : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ RrPedDetCstStReq : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ IntrStopAlrtCsSetReq : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ ICSTchStat : 17|34@0+ (1,0) [0|0] "" XXX
- SG_ ICSTS_TchPrxmty : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ ICSTS_X1TchCrdnt : 31|16@0+ (0.001526,0) [0|100] "" XXX
- SG_ ICSTS_Y1TchCrdnt : 47|16@0+ (0.001526,0) [0|100] "" XXX
- SG_ TrfRdsdInfCsStReq : 20|3@0+ (1,0) [0|7] "" XXX
- SG_ CntdVehBrAltCsStReq : 23|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2157985792 Fob_Programming_Request_LS: 1 XXX
- SG_ FobProgEvntRqd : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151284736 Park_Assistant_General_Status: 1 XXX
- SG_ PrkAsstClnPrkAstIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAsstDisablIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstFld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstSnrsBlk : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstSnsDistrbdIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvPrkAstOffUnbIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAstOprtrDsrdStat_1D0 : 7|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2159099904 ODI_DAB_2_AuxIP_LS: 8 XXX
- SG_ ODI_DAB2AxIP : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159067136 ODI_DAB_2_IPC_LS: 8 XXX
- SG_ ODI_DAB2IPC : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159206400 ODI_AuxIP_2_IPC_LS: 8 XXX
- SG_ ODI_AxIP2IPC : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159198208 ODI_IPC_2_AuxIP_LS: 8 XXX
- SG_ ODI_IPC2AxIP : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159190016 ODI_AuxIP_2_CenterStack_LS: 8 XXX
- SG_ ODI_AxIP2CntrStck : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159181824 ODI_CenterStack_2_AuxIP_LS: 8 XXX
- SG_ ODI_CntrStck2AxIP : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159173632 ODI_IPC_2_CenterStack_LS: 8 XXX
- SG_ ODI_IPC2CntrStck : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159165440 ODI_CenterStack_2_IPC_LS: 8 XXX
- SG_ ODI_CntrStck2IPC : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159108096 ODI_AuxIP_2_DAB_LS: 8 XXX
- SG_ ODI_AxIP2DAB : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159075328 ODI_IPC_2_DAB_LS: 8 XXX
- SG_ ODI_IPC2DAB : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2151718912 Chime_Active: 1 XXX
- SG_ ChmAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ChmVolSt : 2|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2155479040 Customization_Setting_Request_LS: 5 XXX
- SG_ DrvlnCustStngReq : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ RstrCustFctrDef : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PedFrndlyAlrtCsStReq : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ SusCustStngReq : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ StrCustStngReq : 13|3@0+ (1,0) [0|7] "" XXX
- SG_ ElvtdIdlCstStReq : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ SndPerfMdCsStRq : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ DispPerfMdCsStRq : 21|3@0+ (1,0) [0|7] "" XXX
- SG_ ACCPerfMdCsStReq : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvrStPerfMdCsStReq : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ PsngStPerfMdCsStReq : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvStyPerfMdCsStReq : 37|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2151383040 Reset_TP_request_LS: 1 XXX
- SG_ TreInfMonSysRstReq : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155421696 Passive_Entry_Challenge_LS: 5 XXX
- SG_ PsvEntChlng : 7|32@0+ (1,0) [0|4294967295] "passwrd" XXX
- SG_ ServKylsStSysIO : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ PsvEntApprchDtcd : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ PsvEntAprchDrctn : 36|3@0+ (1,0) [0|7] "" XXX
- SG_ PsvEntApprchCnfgReq : 39|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155413504 Drv_Dr_Key_Cyl_Status_LS: 3 XXX
- SG_ DrvrDrKeyCylUlkSwActGroup : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ DrvrDrKeyCylUlkSwAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvrDrKeyCylUlkSwActV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PsvLckngReqd : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PsvApprchVehId : 15|16@0+ (1,0) [0|65535] "" XXX
-
-BO_ 2159026176 ODIDynamicData_LS: 8 XXX
- SG_ ODIDynData : 14|55@0+ (1,0) [0|0] "" XXX
- SG_ ODD_InvldData : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ODD_DataType : 14|6@0+ (1,0) [0|63] "" XXX
- SG_ ODD_FUCID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODD_DataId : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODD_DataVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2158936064 ODIEnumDynamicData_LS: 8 XXX
- SG_ ODIEnmDynData : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIEDD_Data2Value : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data1Value : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data5Value : 9|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data4Value : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data3Value : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data8Value : 16|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data7Value : 19|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data6Value : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data10Value : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data9Value : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data13Value : 33|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data12Value : 36|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data11Value : 39|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data16Value : 40|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data15Value : 43|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data14Value : 46|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data18Value : 50|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_Data17Value : 53|3@0+ (1,0) [0|7] "" XXX
- SG_ ODIEDD_FUCID : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2158845952 ODIAction_CntrStack_LS: 8 XXX
- SG_ ODIActn_CntrStck : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIAC_DaTy : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIAC_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAC_ActnID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAC_DspMID : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAC_ActnVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2158886912 ODIDynDataListRequest_IPC_LS: 8 XXX
- SG_ ODIDynDataLstRq_IPC : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODDLI_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLI_DataId : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLI_DspMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLI_ReqDir : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLI_NmEntries : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ ODDLI_Idx : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ODDLI_SubIdReqM : 51|12@0+ (1,0) [0|4095] "" XXX
- SG_ ODDLI_WrpArnd : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLI_BckgndFlag : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLI_ReqType : 55|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2151366656 Man_Prk_Brk_LS: 1 XXX
- SG_ RrAxlLckIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ FrntAxlLckIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkBrkSwAtv : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ AxlLcksServIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ AxlLckUnavailIndReq : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ AxlLcksVDA : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149842944 Vehicle_Stability_LS: 8 XXX
- SG_ IMUProtLonAccGroup : 2|11@0+ (1,0) [0|0] "" XXX
- SG_ IMUProtLonAcc : 1|10@0- (0.03,0) [-15.36|15.33] "m/s^2" XXX
- SG_ IMUProtLonAccV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ TCSysAtv : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkSysAutBrkFld : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ VSEAct : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ StrWhAngGroup : 6|47@0+ (1,0) [0|0] "" XXX
- SG_ StrWhAngV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ StrWhAng : 39|16@0- (0.0625,0) [-2048|2047.9375] "deg" XXX
- SG_ StWhAnVDA : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ VehStabEnhmntStat : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ VehStabEnhmntMd : 21|3@0+ (1,0) [0|7] "" XXX
- SG_ StrWhlAngSenCalStat : 23|2@0+ (1,0) [0|3] "" XXX
- SG_ TCSysOpMd : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ TCSysOpStat : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ VSELatAccGroup : 52|13@0+ (1,0) [0|0] "" XXX
- SG_ VSELatAcc : 51|12@0- (0.015625,0) [-32|31.984375] "m/s^2" XXX
- SG_ VSELatAccV : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ AdptDrvrSeatStng : 55|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2159132672 ODIAction_RearSeat_LS: 8 XXX
- SG_ ODIActn_RSD : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIAR_DaTy : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIAR_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAR_ActnID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAR_DspMID : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAR_ActnVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2158968832 ODI_RearSeat_2_Centerstack_LS: 8 XXX
- SG_ ODI_RSD2CntrStck : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2158960640 ODIIndication_Centerstack_LS: 8 XXX
- SG_ ODIInd_CntrStck : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODIIC_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIIC_ODIInd8 : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd7 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd6 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd5 : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd4 : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd3 : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd2 : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd1 : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd16 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd15 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd14 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd13 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd12 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd11 : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd10 : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd9 : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd24 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd23 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd22 : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd21 : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd20 : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd19 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd18 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd17 : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd32 : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd31 : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd30 : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd29 : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd28 : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd27 : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd26 : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd25 : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd40 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd39 : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd38 : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd37 : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd36 : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd35 : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd34 : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd33 : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd48 : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd47 : 49|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd46 : 50|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd45 : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd44 : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd43 : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd42 : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd41 : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd56 : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd55 : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd54 : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd53 : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd52 : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd51 : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd50 : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ ODIIC_ODIInd49 : 63|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2158977024 ODIEvent_Centerstack_LS: 4 XXX
- SG_ ODIEvntPkt_CntrStck : 13|22@0+ (1,0) [0|0] "" XXX
- SG_ ODIEC_EvID : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIEC_FUCID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIEC_MultiFrRetCh : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2158952448 ODIDynDataMultiReq_RearSeat_LS: 8 XXX
- SG_ ODIDynDataMltRq_RSD : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODDMR_DataID2Vld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMR_DataID3Vld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMR_DataID4Vld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMR_DataID5Vld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMR_ReqType : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ODDMR_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMR_DispMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMR_DataID1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMR_DataID2 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMR_DataID3 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMR_DataID4 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMR_DataID5 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2158944256 ODIDynDataListReq_RearSeat_LS: 8 XXX
- SG_ ODIDynDataLstRq_RSD : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODDLR_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLR_DataId : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLR_DspMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLR_ReqDir : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLR_NmEntries : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ ODDLR_Idx : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ODDLR_SubIdReqM : 51|12@0+ (1,0) [0|4095] "" XXX
- SG_ ODDLR_WrpArnd : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLR_BckgndFlag : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLR_ReqType : 55|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2158927872 ODI_DynData_CenterStack_LS: 8 XXX
- SG_ ODIDynData_CntrStck : 14|55@0+ (1,0) [0|0] "" XXX
- SG_ ODDC_InvldData : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDC_DataType : 14|6@0+ (1,0) [0|63] "" XXX
- SG_ ODDC_FUCID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDC_DataId : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDC_DataVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2158895104 ODI_CenterStack_2_RearSeat_LS: 8 XXX
- SG_ ODI_CntrStck2RSD : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2152038400 Infomatics_Response_Payload_LS: 8 XXX
- SG_ InfMdRspPld : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2152022016 Infomatics_Metadata_Response_LS: 7 XXX
- SG_ InfMdRspCmplt : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ InfMdRspInf : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ InfMdStRsp : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ AudSelctdSrcReq : 44|5@0+ (1,0) [0|31] "" XXX
- SG_ AudSysVolSetCtrl : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ ASVSC_ReqEnbld : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ ASVSC_VolReq : 55|7@0+ (0.787402,0) [0|100.000054] "" XXX
-
-BO_ 2152005632 Infomatics_Request_Payload_LS: 8 XXX
- SG_ InfMdRqstPld : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2151989248 Infomatics_Metadata_Request_LS: 5 XXX
- SG_ InfMdRqstCmplt : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ InfMdRqstInt : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ InfMdStReq : 35|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151972864 Fuel_Level_Status_LS: 4 XXX
- SG_ FuelLvlLwIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ LnchCtrlMdReq : 2|2@0+ (1,0) [0|3] "" XXX
- SG_ LnchCtrlWhlSlpReq : 7|5@0+ (1,0) [0|31] "" XXX
- SG_ VehFuelRngCalcGroup : 9|18@0+ (1,0) [0|0] "" XXX
- SG_ VehFuelRngCalc : 8|17@0+ (0.015625,0) [0|2047.984375] "km" XXX
- SG_ VehFuelRngCalcV : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ LnchCtrlEngRPMReq : 15|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 2154528768 Wheel_Grnd_Velocity_LS: 8 XXX
- SG_ WhlGrndVlctyLftDrvnGroup : 6|15@0+ (1,0) [0|0] "" XXX
- SG_ WhlGrndVlctyLftDrvn : 5|14@0+ (0.03125,0) [0|511.96875] "km / h" XXX
- SG_ WhlGrndVlctyLftDrvnV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ WhlGrndVlctyLftNnDrvnGroup : 22|15@0+ (1,0) [0|0] "" XXX
- SG_ WhlGrndVlctyLftNnDrvn : 21|14@0+ (0.03125,0) [0|511.96875] "km / h" XXX
- SG_ WhlGrndVlctyLftNnDrvnV : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ WhlGrndVlctyRtDrvnGroup : 38|15@0+ (1,0) [0|0] "" XXX
- SG_ WhlGrndVlctyRtDrvn : 37|14@0+ (0.03125,0) [0|511.96875] "km / h" XXX
- SG_ WhlGrndVlctyRtDrvnV : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ WhlGrndVlctyRtNnDrvnGroup : 54|15@0+ (1,0) [0|0] "" XXX
- SG_ WhlGrndVlctyRtNnDrvn : 53|14@0+ (0.03125,0) [0|511.96875] "km / h" XXX
- SG_ WhlGrndVlctyRtNnDrvnV : 54|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150916096 Park_Heater_Info_LS: 4 XXX
- SG_ PrkHtrAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntCircPmpAct : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkHtrCoolntTempGroup : 2|11@0+ (1,0) [0|0] "" XXX
- SG_ PrkHtrCoolntTempV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkHtrCoolntTemp : 15|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ PrkHtrFlCsmdRlCntRsOc : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkHtrFlCnsmdRolCntGroup : 4|29@0+ (1,0) [0|0] "" XXX
- SG_ PrkHtrFlCnsmdRolCntV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkHtrFlCnsmdRolCnt : 23|16@0+ (3.05176E-006,0) [0|0.1999970916] "liters" XXX
- SG_ PrkHtrPrhtAch : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150367232 Immobilizer_Identifier_LS: 5 XXX
- SG_ ImoId : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ LrnEnvId : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ LrnEnvIdSt : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ ImoIdSt : 33|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150621184 Keyless_Start_Auth_LS: 1 XXX
- SG_ KylsStrAuthRslt : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ KSARUID8 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID7 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID6 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID5 : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID4 : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID3 : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID2 : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ KSARUID1 : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151309312 Inflatable_Restraints_Key_Id_LS: 2 XXX
- SG_ InflRestId : 7|16@0+ (1,0) [0|39321] "" XXX
-
-BO_ 2154061824 Window_Normalized_Indication_LS: 1 XXX
- SG_ PsWndNtNrmIndOn : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrWndNtNrmIndOn : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RLWndNtNrmIndOn : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RRWndNtNrmIndOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ RmtWndMvmntAtv : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ WndOprAlwd : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ RrDrUnlckIO : 6|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154512384 Rear_Closure_Rel_Sw_Sta_LS: 1 XXX
- SG_ RrClosRelSwActGroup : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ RrClosRelSwAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClosRelSwActV : 1|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155347968 HS_Indications_Slow_LS: 8 XXX
- SG_ ActVbnCtrlMlfIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ PedtrnProtSysDpl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TirePrsLowIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCUnavlbleDTWthrIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilStrvtnIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ SecAxlNonEmMalfIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkFldLvlLwGroup : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ BrkFldLvlLwV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkFldLvlLw : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCSnsClnRqdIO : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCTmpUnavlbleIO : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ EngRecmndUpshftIO : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ ServAdpCrsCtrlIndOn : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvSuspSysIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkPadWrnIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkSysMalFuncIndOn : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ EngEmsRelMalfIndReq : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ RrAxlMalfIO : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ DrShftCntrlReqDndIO : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ CompOvrhtIndOn : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsSkpShftIO : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ RrAxlTmpInhIO : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ SecAxlTmpInhIO : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSAlrtOnlIO : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ EPBSysStatIndReq : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ EPBSysWrnIndReq : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ CPSFldIO : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSOffIO : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ CPSUnblIO : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvPedtrnProtSysIO : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ PedtrnProtSysDisbld : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ PedtrnProtVDA : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ AppCltchAutSrtIO : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ StBltTgtSetAvl : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ FourWhlDrvIndReq : 42|3@0+ (1,0) [0|7] "" XXX
- SG_ EngRecDwnshftIO : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ StBltTgtCrtSetVal : 46|3@0+ (1,0) [0|7] "" XXX
- SG_ HillDesCtrlRedVehSpIO : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ VehRollAngleGroup : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VehRollAngle : 54|7@0+ (0.703125,-45) [-45|44.296875] "deg" XXX
- SG_ VehRollAngleV : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCPerfMdCsCrStVal : 58|3@0+ (1,0) [0|7] "" XXX
- SG_ ACCPerfMdCsStAvl : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvrStPerfMdCsCrStVal : 62|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvrStPerfMdCsStAvl : 63|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149777408 Non_Drvn_Whl_Rot_Status_LS: 8 XXX
- SG_ WhlRotStatLftNDrvn : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ WRSLNDWhlDistPCntr : 1|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ WRSLNDWhlDistVal : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSLNDWhlRotStRst : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSLNDSeqNum : 5|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSLNDWhlDisTpRC : 7|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSLNDWhlDistTstm : 23|16@0+ (1,0) [0|65535] "counts" XXX
- SG_ WhlRotStatRghtNDrvn : 39|32@0+ (1,0) [0|0] "" XXX
- SG_ WRSRNDWhlDistPCntr : 33|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ WRSRNDWhlDistVal : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSRNDWhlRotStRst : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSRNDSeqNum : 37|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSRNDWhlDisTpRC : 39|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSRNDWhlDistTstm : 55|16@0+ (1,0) [0|65535] "counts" XXX
-
-BO_ 2149769216 Driven_Whl_Rotational_Stat_LS: 8 XXX
- SG_ WhlRotatStatLftDrvn : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ WRSLDWhlDistPlsCntr : 1|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ WRSLDWhlDistVal : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSLDWhlRotStatRst : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSLDSeqNum : 5|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSLDWhlDisTpRC : 7|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSLDWhlDistTmstm : 23|16@0+ (1,0) [0|65535] "counts" XXX
- SG_ WhlRotatStatRtDrvn : 39|32@0+ (1,0) [0|0] "" XXX
- SG_ WRSRDWhlDistPlsCntr : 33|10@0+ (1,0) [0|1023] "counts" XXX
- SG_ WRSRDWhlDistVal : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSRDWhlRotStatRst : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ WRSRDSeqNum : 37|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSRDWhlDisTpRC : 39|2@0+ (1,0) [0|3] "counts" XXX
- SG_ WRSRDWhlDistTmstm : 55|16@0+ (1,0) [0|65535] "counts" XXX
-
-BO_ 2156789760 Time_of_Day_LS: 6 XXX
- SG_ CldrYr : 7|8@0+ (1,2000) [2000|2255] "year" XXX
- SG_ CldrMth : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ FrPedDetCsStReq : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ CldrDay : 20|5@0+ (1,0) [0|31] "days" XXX
- SG_ SmrtHgBmAstCstSetReq : 23|3@0+ (1,0) [0|7] "" XXX
- SG_ TmofDay : 24|17@0+ (1,0) [0|0] "" XXX
- SG_ TOD_HrofDay : 24|5@0+ (1,0) [0|31] "hr" XXX
- SG_ TOD_MinofHr : 35|6@0+ (1,0) [0|63] "min" XXX
- SG_ TOD_SecofMin : 45|6@0+ (1,0) [0|63] "s" XXX
- SG_ TimeDispFormat : 25|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155020288 Language_Selection_LS: 1 XXX
- SG_ LngSelExt : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ChVolRq2 : 7|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2150432768 Engine_Information_4_LS: 8 XXX
- SG_ TransOilTempSensPres : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ GenFldDutCycGroup : 1|42@0+ (1,0) [0|0] "" XXX
- SG_ GenFldDutCycV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ GenFldDutCyc : 47|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ FuelFltLifRstPerf : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnEmsMlfAtv : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ GrdBrkgAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsNEmsRltMalfActv : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ EngShtdwnPndgIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ EngManfldAirTempCrtdGroup : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ EngManfldAirTempCrtdV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EngManfldAirTempCrtd : 15|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ FuelTotCap : 19|12@0+ (0.125,0) [0|511.875] "liters" XXX
- SG_ TrnsThrmlMngmntStat : 21|2@0+ (1,0) [0|3] "" XXX
- SG_ PTHiElecLdReqd : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ EngOilRmnLf : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ FuelFltRmnLf : 63|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2155298816 Tire_Pressure_Sensor_Prog_Req_LS: 1 XXX
- SG_ TrPrsSnsProgEvntRqd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TrPrsMntrTrLdRstRqstd : 2|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2158878720 ODIDynDataListReq_CntrStack_LS: 8 XXX
- SG_ ODIDynDataLstRq_CntrStck : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODDLC_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLC_DataId : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLC_DspMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLC_ReqDir : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLC_NmEntries : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ ODDLC_Idx : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ODDLC_SubIdReqM : 51|12@0+ (1,0) [0|4095] "" XXX
- SG_ ODDLC_WrpArnd : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLC_BckgndFlag : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLC_ReqType : 55|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2158870528 ODIDynDataListRequest_AuxIP_LS: 8 XXX
- SG_ ODIDynDataLstRq_AxIP : 7|64@0+ (1,0) [0|0] "" XXX
- SG_ ODDLA_FUCID : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLA_DataId : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLA_DspMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDLA_ReqDir : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLA_NmEntries : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ ODDLA_Idx : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ODDLA_SubIdReqM : 51|12@0+ (1,0) [0|4095] "" XXX
- SG_ ODDLA_WrpArnd : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLA_BckgndFlag : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDLA_ReqType : 55|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154692608 Audio_Source_Status_LS: 2 XXX
- SG_ AudSrcStat : 3|12@0+ (1,0) [0|0] "" XXX
- SG_ ASSAudSrcType : 3|5@0+ (1,0) [0|31] "" XXX
- SG_ ASSAudSrcStatCode : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ ASSAudSrcChType : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ LgclAVChnl : 7|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2154627072 Audio_Master_Arbitration_Command: 2 XXX
- SG_ AudMstrArbCom : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LgclAVChnl_368 : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ AudMstrSrcTyp : 12|5@0+ (1,0) [0|31] "" XXX
- SG_ AudMstrChnnlTyp : 15|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2151112704 Occupant_Sensning_Status_LS: 2 XXX
- SG_ FrntPassClass : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ FrPsSeatOccSnsOpMd : 5|3@0+ (1,0) [0|7] "N/A" XXX
- SG_ FrPasSeatResCtrlOccStGroup : 7|14@0+ (1,0) [0|0] "" XXX
- SG_ FrPasSeatResCtrlOccSt : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ FrPasSeatResCtrlOccStV : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ FrPsSeatOccFltSt : 9|2@0+ (1,0) [0|3] "N/A" XXX
- SG_ FrPasSeatbltRemOccSt : 11|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2153938944 Remote_Reflash_Req_LS: 1 XXX
- SG_ RmtRflshMdReqtd : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2159239168 ODI_TEL_2_OTIM_LS: 8 XXX
- SG_ ODI_TEL2OTIM : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159230976 ODI_OTIM_2_TEL_LS: 8 XXX
- SG_ ODI_OTIM2TEL : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159222784 ODI_PDIM_2_CenterStack_LS: 8 XXX
- SG_ ODI_PDIM2CntrStck : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2159214592 ODI_CenterStack_2_PDIM_LS: 8 XXX
- SG_ ODI_CntrStck2PDIM : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2158862336 ODIAction_OTIM_LS: 8 XXX
- SG_ ODIActn_OTIM : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIAOT_DaTy : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIAOT_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAOT_ActnID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAOT_DspMID : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAOT_ActnVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2150662144 Environment_Id_Resp_3_LS: 3 XXX
- SG_ EnvIdRsp3 : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ EnvIdRspSt3 : 17|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2150653952 Environment_Id_Resp_2_LS: 3 XXX
- SG_ EnvIdRsp2 : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ EnvIdRspSt2 : 17|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2150850560 Seatbelt_Information_LS: 1 XXX
- SG_ DrSbltAtcGroup : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ DrSbltAtc : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrSbltAtcV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PsSbltAtcGroup : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ PsSbltAtc : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PsSbltAtcV : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154659840 Column_Lock_Status_2: 2 XXX
- SG_ UnlckRtryRotIndOn : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ UnlockRtryPshIndOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ StrgClmnLckVisNot : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmnLckStatGroup : 5|6@0+ (1,0) [0|0] "" XXX
- SG_ ClmnLckStat : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ ClmnLckStatV : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmSysFlrIndOn : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ StrngClmnLckTT : 9|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154938368 Fob_Programming_Mode_Status_LS: 1 XXX
- SG_ FobProgMdStat : 1|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2155266048 Rear_Seat_Heat_Cool_Switches_LS: 1 XXX
- SG_ RLHCSeatSw1Act : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSeatSw2Act : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSeatSw3Act : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSeatSw1Act : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSeatSw2Act : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSeatSw3Act : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155249664 Rear_Seat_Heat_Cool_Control_LS: 4 XXX
- SG_ RLHCSModeIndCtrl : 4|5@0+ (1,0) [0|0] "" XXX
- SG_ RLHCSMInd3 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSMInd2 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSMInd1 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSMIndReq : 4|2@0+ (1,0) [0|3] "" XXX
- SG_ RRHCSModeIndCtrl : 12|5@0+ (1,0) [0|0] "" XXX
- SG_ RRHCSMInd3 : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSMInd2 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSMInd1 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSMIndReq : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ RLHCSeatLevIndCtrl : 22|7@0+ (1,0) [0|0] "" XXX
- SG_ RLHCSLSeatLev5 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSLSeatLev4 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSLSeatLev3 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSLSeatLev2 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSLSeatLev1 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ RLHCSLIndReq : 22|2@0+ (1,0) [0|3] "" XXX
- SG_ RRHCSeatLevIndCtrl : 30|7@0+ (1,0) [0|0] "" XXX
- SG_ RRHCSLSeatLev5 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSLSeatLev4 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSLSeatLev3 : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSLSeatLev2 : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSLSeatLev1 : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ RRHCSLIndReq : 30|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2155184128 CruiseControl_LS: 3 XXX
- SG_ CrsCntAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsSpdLmtrSwStat : 4|4@0+ (1,0) [0|15] "" XXX
- SG_ TrnsShftLvrLckStat : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ RrStRmndrIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ RrStRmndrCstSetAvail : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntrlSwStat : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ CrsCntrlSwStSwDataIntgty : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ CrsCntrlSwStSpDcSwAct : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntrlSwStSpdInSwAct : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntrlSwStSetSwAct : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntrlSwStResSwAct : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntrlSwStOnSwAct : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntrlSwStCanSwAct : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ SmPhRmFunCstCurStVal : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ SmPhRmFunCstStAval : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ IdlRecmndToClEngIO : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ RrStRmndrCstCurrSetVal : 23|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155167744 Power_Mode_Info_LS: 3 XXX
- SG_ ShftPrkIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ShftToNtrlIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ Ky_IdDevPr : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ SecPwrMdPshBtnAtv : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ TransModActIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TransModInactIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ KylsStrtUseTxPckIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ TrStLgMdAtv : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ VehMovState : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ AutoShtdwnDsblIO : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ AppPrkBrkIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ NRmtDtdPsCluRstIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ ApplyBrkPdlIO : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ ApplyCltPdlIO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ NoReDetInOn : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ NRmtDtdPsBrkRstIO : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ PrsBtnAgnTTrnEngOffIO : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ TSLgMdPwrCtOWAtv : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ NRmtDtctdRstrtAllwd : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ PrsStrtAgnIO : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ PrsCltchPrsStrtAgnIO : 22|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154921984 Fob_Status_LS: 2 XXX
- SG_ RFAFnc : 1|10@0+ (1,0) [0|0] "" XXX
- SG_ RFRmtCntFobNm : 1|3@0+ (1,0) [0|7] "" XXX
- SG_ RFRmtCntFobBatLw : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ RFRmtCntrlFobFnc : 14|6@0+ (1,0) [0|63] "" XXX
- SG_ FobPogLimRchdIndOn : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151317504 Park_Assistant_Rear_Status: 4 XXX
- SG_ PrkAsstRrExtdDist : 3|12@0+ (0.01,0) [0|40.95] "m" XXX
- SG_ PrkAstRrSysStat : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ PARrRgn1ObjStat : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ PARrRgn2ObjStat : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ PARrRgn3ObjStat : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ PARrRgn4ObjStat : 31|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151301120 Park_Assistant_Front_Status: 4 XXX
- SG_ PrkAsstFrtExtdDist : 3|12@0+ (0.01,0) [0|40.95] "m" XXX
- SG_ PrkAstFrSysStat : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ PrkAstAdvSysAct : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkAsstRrOffIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ PAFrtRgn1ObjStat : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ PAFrtRgn2ObjStat : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ PAFrtRgn3ObjStat : 27|4@0+ (1,0) [0|15] "" XXX
- SG_ PAFrtRgn4ObjStat : 31|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2159083520 ODI_TEL_2_IPC_LS: 8 XXX
- SG_ ODI_TEL2IPC : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2153922560 Climate_Control_Voltage_LS: 3 XXX
- SG_ ClimCtrlVoltBstModReq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmtCtrlHtrEngRunRq : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ HtrVlvRqstdPstn : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ ClntHtrElecPwrRatGroup : 4|13@0+ (1,0) [0|0] "" XXX
- SG_ ClntHtrElecPwrRatV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntHtrElecPwrRat : 15|8@0+ (0.04,0) [0|10.2] "kW" XXX
- SG_ ClmCtrHiVltPwrRqtd : 23|8@0+ (0.1,0) [0|25.5] "kW" XXX
-
-BO_ 2153807872 Door_Open_Switch_Status_LS: 1 XXX
- SG_ DrDoorOpenSwActGroup : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ DrDoorOpenSwAct : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrDoorOpenSwActV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ PsDoorOpenSwActGroup : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ PsDoorOpenSwAct : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PsDoorOpenSwActV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmSysAuxFlrIndOn : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PsvStrtStrngClmnLckTT : 6|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2150703104 Audio_Amplifier_Status: 1 XXX
- SG_ AudSysDigSigProcPres : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ AudSysSurSndSysPres : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ AudSysVNoisCompPres : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151399424 Wash_Level_LS: 1 XXX
- SG_ WshFldLw : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151956480 Driver_Workload_LS: 2 XXX
- SG_ DrvWrkldLvl : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ ClstrHMIAnmSt : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ ClstrHMIRdy : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ StrWhlThbwhlCnts : 13|6@0- (1,0) [-32|31] "counts" XXX
-
-BO_ 2151940096 Alarm_2_Request_LS: 7 XXX
- SG_ Alrm2ExtRngReq : 1|26@0+ (1,0) [0|0] "" XXX
- SG_ A2ERRAlrmReq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ A2ERRAlrmTime : 15|24@0+ (1,0) [0|16777215] "min" XXX
- SG_ EstBulkIntAirTmpGroup : 2|35@0+ (1,0) [0|0] "" XXX
- SG_ EstBulkIntAirTmpV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ EstBulkIntAirTmp : 39|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
- SG_ EstIntRfSrfcTmpGroup : 3|44@0+ (1,0) [0|0] "" XXX
- SG_ EstIntRfSrfcTmpV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ EstIntRfSrfcTmp : 47|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
- SG_ EstIntHorzDshSrfTmpGroup : 4|53@0+ (1,0) [0|0] "" XXX
- SG_ EstIntHorzDshSrfTmpM : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ EstIntHorzDshSrfTmp : 55|8@0+ (1,-40) [-40|215] "deg C" XXX
-
-BO_ 2151923712 Alarm_1_Request_LS: 5 XXX
- SG_ Alrm1ExtRngReq : 1|26@0+ (1,0) [0|0] "" XXX
- SG_ A1ERRAlrmReq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ A1ERRAlrmTime : 15|24@0+ (1,0) [0|16777215] "min" XXX
- SG_ HLOCCstCurrSetVal : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ HLOCCstSetAvail : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCstAvail : 39|7@0+ (1,0) [0|0] "" XXX
- SG_ HLOCCA_Res4Avail : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCA_Res3Avail : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCA_Res2Avail : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCA_Res1Avail : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCA_OnOpnOnlyAvail : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCA_OnAvail : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ HLOCCA_OffAvail : 39|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150645760 Environment_Id_Resp_1_LS: 3 XXX
- SG_ EnvIdRsp1 : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ EnvIdRspSt1 : 17|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152464384 Lane_Departure_Warning_LS: 3 XXX
- SG_ LaneDepWrnDisbldIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ LnKpAstDisbldIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvcLaneDepWrnSysIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvcLnKpAstSysIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ HndsOffStrWhlDtIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TnDrvLDWOffUnbIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ LftLnDepWrnSt : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ LaneDepWrnIndCntrl : 13|6@0+ (1,0) [0|0] "" XXX
- SG_ LDWIC_LnDepWAWLn : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ LDWIC_Ind2 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ LDWIC_Ind1 : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ LDWIC_IndReq : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ RtLnDepWrnSt : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ LnKpAstIndCntrl : 21|6@0+ (1,0) [0|0] "" XXX
- SG_ LKAIC_AdbWngLn : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ LKAIC_Ind2 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ LKAIC_Ind1 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ LKAIC_IndReq : 21|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154971136 Front_Seat_Heat_Cool_Switches_LS: 1 XXX
- SG_ DrvHCSeatSw1Act : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSeatSw2Act : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSeatSw3Act : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSeatSw1Act : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSeatSw2Act : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSeatSw3Act : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154962944 Front_Seat_Heat_Cool_Control_LS: 4 XXX
- SG_ DrvHCSModeIndCtrl : 4|5@0+ (1,0) [0|0] "" XXX
- SG_ DrvHCSMInd3 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSMInd2 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSMInd1 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSMIndReq : 4|2@0+ (1,0) [0|3] "" XXX
- SG_ PassHCSModeIndCtrl : 12|5@0+ (1,0) [0|0] "" XXX
- SG_ PassHCSMInd3 : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSMInd2 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSMInd1 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSMIndReq : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ DrvHCSLevIndCtrl : 22|7@0+ (1,0) [0|0] "" XXX
- SG_ DrvHCSLSeatLev5 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSLSeatLev4 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSLSeatLev3 : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSLSeatLev2 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSLSeatLev1 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvHCSLIndReq : 22|2@0+ (1,0) [0|3] "" XXX
- SG_ PassHCSeatLevIndCtrl : 30|7@0+ (1,0) [0|0] "" XXX
- SG_ PassHCSLSeatLev5 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSLSeatLev4 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSLSeatLev3 : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSLSeatLev2 : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSLSeatLev1 : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ PassHCSLIndReq : 30|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2156232704 Alarm_Clock_Status_LS: 4 XXX
- SG_ AlrmClkStat : 7|32@0+ (1,0) [0|0] "" XXX
- SG_ ACSAlarm3 : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm2 : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm1 : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm0 : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm7 : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm6 : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm5 : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm4 : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm11 : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm10 : 19|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm9 : 21|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm8 : 23|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm15 : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm14 : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm13 : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ ACSAlarm12 : 31|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2154987520 Hood_Status_LS: 1 XXX
- SG_ HdStGroup : 2|3@0+ (1,0) [0|0] "" XXX
- SG_ HdSt : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ HdStV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ WrlsChrgSysChrgStat : 5|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2154840064 Compass_Status_LS: 4 XXX
- SG_ CmpsOctHdingDataSrc : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsModFltPrs : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsModManCalInPrc : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsZnNvrSet : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsDecZone : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ CmpsOctHding : 14|3@0+ (1,0) [0|7] "" XXX
- SG_ CmpsSatrtd : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsCrHding : 23|16@0+ (0.0054932,0) [0|359.996862] "deg" XXX
-
-BO_ 2154676224 Compass_Request_LS: 1 XXX
- SG_ CmpsDecZonCmndVal : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ CmpsDecZonSetReq : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsModManCalReq : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ CmpsModSlfTstReq : 6|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154643456 Auxiliary_Heater_Status_LS: 3 XXX
- SG_ AuxHtrAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ HtrCoreInltClntTmpCalcGroup : 4|21@0+ (1,0) [0|0] "" XXX
- SG_ HtrCoreInltClntTmpCalcV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ HtrCoreInltClntTmpCalc : 23|8@0+ (1,-40) [-40|215] "deg C" XXX
- SG_ CCClntCrcFlwRtReq : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2154905600 Driver_Identifier_LS: 1 XXX
- SG_ DrId : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvSeatPrsMemID : 5|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2154954752 High_Volt_Climate_Pwr_Status_LS: 5 XXX
- SG_ ClmtHtPwrRqd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ HtdStWhlCmd : 2|2@0+ (1,0) [0|3] "" XXX
- SG_ HtdStWhlInd : 4|2@0+ (1,0) [0|3] "" XXX
- SG_ HtdStWhlCtrlSrc : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntHtrElecPwrReq : 15|8@0+ (0.04,0) [0|10.2] "kW" XXX
- SG_ EstACCompPwrRchCbnCmf : 23|8@0+ (0.04,0) [0|10.2] "kw" XXX
- SG_ EstACCompPwrMtnCbnCmf : 31|8@0+ (0.04,0) [0|10.2] "kW" XXX
-
-BO_ 2153381888 Control_Power_Liftgate_LS: 4 XXX
- SG_ FnshRrClsrMtnBfrDrvIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClsrObstclDtctd : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClsrInMtn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClosOpenSwActGroup : 4|3@0+ (1,0) [0|0] "" XXX
- SG_ RrClosOpenSwAct : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClosOpenSwActV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ RrWprInhbRq : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ GrgPrgMdCmpl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ PwrLftgtInclAngGroup : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ PwrLftgtInclAngV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ PwrLftgtInclAng : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ VehIncAngEst : 23|8@0+ (1,0) [0|255] "deg" XXX
- SG_ PwrLftgtMotStat : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ VltActRrAccUnavlIO : 27|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149752832 Chassis_Information_LS: 8 XXX
- SG_ VehHghtStatGroup : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ VehHghtStatV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ VehHghtStat : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ IntBrkAssPreFilReq : 1|1@0+ (1,0) [0|1] "N/A" XXX
- SG_ BksOvht : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ HalfSysFail : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkSysRedBrkTlltlReq : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ABSAtv : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvlnCustStngAvlbl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ StrCustStngAvlbl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkBrkVDA : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ PowStVDA : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ RrDrCntVDA : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkSysVDA : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ SprTireSt : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ EPBSysAudWarnReq : 20|2@0+ (1,0) [0|3] "" XXX
- SG_ EPBSysDspMsgReq : 23|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvlnCustCurrStngVal : 26|3@0+ (1,0) [0|7] "" XXX
- SG_ StrCustCurrStngVal : 29|3@0+ (1,0) [0|7] "" XXX
- SG_ SusCustStngAvlbl : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ EBDFailed : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ SusCustCurrStngVal : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ HillDscntCntlSysStat : 37|3@0+ (1,0) [0|7] "" XXX
- SG_ ElecPrkBrkStat : 39|2@0+ (1,0) [0|3] "" XXX
- SG_ HlStrAssActIO : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ ColPrSysStngAvl : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ GNCustSetngAvlbl : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ GNCustCrntStngVal : 47|3@0+ (1,0) [0|7] "" XXX
- SG_ CPSInfotmntMtReq : 49|2@0+ (1,0) [0|3] "" XXX
- SG_ ColPrSysCrntStng : 52|3@0+ (1,0) [0|7] "" XXX
- SG_ SndEnhcmtPerfMdRq : 55|3@0+ (1,0) [0|7] "" XXX
- SG_ DispPerfMdCsCrStVal : 58|3@0+ (1,0) [0|7] "" XXX
- SG_ DispPerfMdCsStAvl : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ SndPerfMdCsCrStVal : 62|3@0+ (1,0) [0|7] "" XXX
- SG_ SndPerfMdCsStAvl : 63|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151514112 Reset_OilLife_Request_LS: 1 XXX
- SG_ EngOilLfRstRq : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2158903296 ODIDynDataMultiRequest_AuxIP_LS: 8 XXX
- SG_ ODIDynDataMltRq_AuxIP : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODDMA_DataID2Vld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMA_DataID3Vld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMA_DataID4Vld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMA_DataID5Vld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMA_ReqType : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ODDMA_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMA_DispMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMA_DataID1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMA_DataID2 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMA_DataID3 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMA_DataID4 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMA_DataID5 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2158911488 ODIDynDataMultiReq_CntrStack_LS: 8 XXX
- SG_ ODIDynDataMltRq_CntrStck : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODDMC_DataID2Vld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMC_DataID3Vld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMC_DataID4Vld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMC_DataID5Vld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMC_ReqType : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ODDMC_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMC_DispMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMC_DataID1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMC_DataID2 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMC_DataID3 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMC_DataID4 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMC_DataID5 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2158919680 ODIDynDataMultiRequest_IPC_LS: 8 XXX
- SG_ ODIDynDataMltRq_IPC : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODDMI_DataID2Vld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMI_DataID3Vld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMI_DataID4Vld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMI_DataID5Vld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ODDMI_ReqType : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ODDMI_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMI_DispMID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMI_DataID1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMI_DataID2 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMI_DataID3 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMI_DataID4 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ ODDMI_DataID5 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2151825408 Outside_Air_Temperature_LS: 3 XXX
- SG_ OtsAirTmpCrValGroup : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ OtsAirTmpCrValV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ OtsAirTmpCrVal : 15|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
- SG_ OtsAirTmpGroup : 1|18@0+ (1,0) [0|0] "" XXX
- SG_ OtsAirTmpV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ OtsAirTmp : 23|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
- SG_ OtsAirTmpCrValMsk : 2|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151153664 Rear_Window_Defog_Status_LS: 1 XXX
- SG_ RrWndDfgOn : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151170048 Trailer_Status_LS: 2 XXX
- SG_ TrlrHtchSwAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrBrkLtFld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrFgLtFld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrRvsLtFld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrTlLtFld : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrFgLtPrs : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlrRtTrInLtFld : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ TrlLfTrInLtFld : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ LftSecTrnIndFld : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ RtSecTrnIndFld : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ DisRrPrmryLmps : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ RLftPrkLmpFld : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ RRPrkLmpFld : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ RrEndCrrStat : 13|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151841792 Wipe_Wash_Status_LS: 1 XXX
- SG_ TurnWprIntIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RnSnsActIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RnSnsOffIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ WSWprAct : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ HtdFrntWSSt : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154995712 Air_Conditioning_Comp_Type_LS: 1 XXX
- SG_ HVHtrOvrTmpIndOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ HVHtrFldIO : 4|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154094592 Adjustable_Pedal_Motion_Inh_LS: 8 XXX
- SG_ AdjPdlMotInhbtd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ IntDimSeldAnmTypStVal : 4|4@0+ (1,0) [0|15] "" XXX
- SG_ IntDimSeldClrTypStVal : 12|5@0+ (1,0) [0|31] "" XXX
- SG_ IntDimAnmTypAvl : 22|15@0+ (1,0) [0|0] "" XXX
- SG_ IDATA_AnmTyp6Avl : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp5Avl : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp4Avl : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp3Avl : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp2Avl : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp1Avl : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_OffAvl : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp14Avl : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp13Avl : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp12Avl : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp11Avl : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp10Avl : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp9Avl : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp8Avl : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ IDATA_AnmTyp7Avl : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ IntDimClrTypAvl : 38|31@0+ (1,0) [0|0] "" XXX
- SG_ IDCTA_ClrTyp6Avl : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp5Avl : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp4Avl : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp3Avl : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp2Avl : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp1Avl : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_OffAvl : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp14Avl : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp13Avl : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp12Avl : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp11Avl : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp10Avl : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp9Avl : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp8Avl : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp7Avl : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp22Avl : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp21Avl : 49|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp20Avl : 50|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp19Avl : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp18Avl : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp17Avl : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp16Avl : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp15Avl : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp30Avl : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp29Avl : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp28Avl : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp27Avl : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp26Avl : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp25Avl : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp24Avl : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ IDCTA_ClrTyp23Avl : 63|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149711872 ACC_YawRate_Information_LS: 8 XXX
- SG_ ACCDrvrSeltdSpd : 3|12@0+ (0.0625,0) [0|255.9375] "km / h" XXX
- SG_ AdapCrsCntVDA : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCAct370 : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsCntlDrSelSpdAct : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ CrsSpdLmtrDrvSelSpd : 19|12@0+ (0.0625,0) [0|255.9375] "km / h" XXX
- SG_ ACCHdwyStg : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ FwdClnAlrtPr : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ VehDynYawRateGroup : 36|13@0+ (1,0) [0|0] "" XXX
- SG_ VehDynYawRate : 35|12@0- (0.0625,0) [-128|127.9375] "deg/sec" XXX
- SG_ VehDynYawRateV : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtrSpdWrngEnbld : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ SpdLmtrSpdWrngAct : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ FwdClnAlrtOffIO : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ FwdObjAlrtInd : 48|9@0+ (1,0) [0|0] "" XXX
- SG_ FOAI_AlrtChmIhbRq : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ FOAI_AlrtWrnIndRq : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ FOAI_VehAhdIndRq : 63|4@0+ (1,0) [0|15] "" XXX
- SG_ AutoMdSpdLmtStat : 50|2@0+ (1,0) [0|3] "" XXX
- SG_ ACCAutoSetSpdStat : 52|2@0+ (1,0) [0|3] "" XXX
- SG_ SetSpdLmtRchd : 54|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2153979904 BulbOutage_LS: 2 XXX
- SG_ CHMSLFld : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ FLTrnIndLtFld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ FRTrnIndLtFld : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ LftBrkLtFld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ LftLwBmFld : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ LftPrkLtFld : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ LicPltLtFld : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ RLTrnIndLtFld : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ RRTrnIndLtFld : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ RtBrkLtFld : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ RtLwBmFld : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ RtPrkLtFld : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ RFgLtFld : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ RvsLtFld : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ LftDytmRunLmpFld : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ RtDytmRunLmpFld : 15|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150154240 Passive_Entry_Reply_LS: 8 XXX
- SG_ PsvEntVehIdExt : 7|32@0+ (1,0) [0|4294967295] "" XXX
- SG_ PsvEntChlngRply : 39|32@0+ (1,0) [0|4294967295] "passwrd" XXX
-
-BO_ 2155003904 Side_Blind_Zone_Alert_Status: 2 XXX
- SG_ SBZASysClnIndOn : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ SBZASysOffIndOn : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SBZASysSrvIndOn : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ SBZATmpUnvIndOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ LftLnChgThrt : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ LfLnChngThrtAprchSpd : 15|8@0- (1,0) [-128|127] "km/h" XXX
-
-BO_ 2150817792 Airbag_Impact_Data_5: 3 XXX
- SG_ ImpMaxLateralDeltaVel : 7|8@0- (1,0) [-128|127] "" XXX
- SG_ ImpMaxLongDeltaVel : 15|8@0- (1,0) [-128|127] "" XXX
- SG_ ImpTimeToMaxDeltaVel : 23|8@0+ (10,0) [0|2550] "ms" XXX
-
-BO_ 2150227968 Phone_Speech_Rec_Status_LS: 1 XXX
- SG_ PhnSpRcgnApSt : 1|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2162982912 VIN_Digits_10_to_17: 8 XXX
- SG_ VehIdNmDig10_17 : 7|64@0+ (1,0) [0|1] "" XXX
-
-BO_ 2162966528 VIN_Digits_2_to_9: 8 XXX
- SG_ VehIdNmDig2_9 : 7|64@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151497728 Tire_Pressure_Sensors_LS: 6 XXX
- SG_ TireLFPrsGroup : 0|17@0+ (1,0) [0|0] "" XXX
- SG_ TireLFPrsV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TireLFPrs : 23|8@0+ (4,0) [0|1020] "kPaG" XXX
- SG_ TireRFPrsGroup : 1|34@0+ (1,0) [0|0] "" XXX
- SG_ TireRFPrsV : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TireRFPrs : 39|8@0+ (4,0) [0|1020] "kPaG" XXX
- SG_ TireLFPrsStat : 4|3@0+ (1,0) [0|7] "" XXX
- SG_ TireRFPrsStat : 7|3@0+ (1,0) [0|7] "" XXX
- SG_ TireLRPrsGroup : 8|17@0+ (1,0) [0|0] "" XXX
- SG_ TireLRPrsV : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ TireLRPrs : 31|8@0+ (4,0) [0|1020] "kPaG" XXX
- SG_ TireRRPrsGroup : 9|34@0+ (1,0) [0|0] "" XXX
- SG_ TireRRPrsV : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ TireRRPrs : 47|8@0+ (4,0) [0|1020] "kPaG" XXX
- SG_ TireLRPrsStat : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ TireRRPrsStat : 15|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2151219200 Remote_Start_Status: 1 XXX
- SG_ RemStrtSt : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RmVehStrRq : 1|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2153775104 DTC_Triggered: 7 XXX
- SG_ DTCInfo : 7|56@0+ (1,0) [0|0] "" XXX
- SG_ DTCI_DTCTriggered : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused1 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused2 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused3 : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused4 : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused5 : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused6 : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCIUnused7 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_DTCSource : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ DTCI_DTCNumber : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ DTCI_DTCFailType : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ DTCI_CodeSupported : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_CurrentStatus : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_TstNPsdCdClrdSt : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_TstFldCdClrdStat : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_HistStat : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_TstNPsdPwrUpSt : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_TstFldPwrUpSt : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_WrnIndRqdSt : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ DTCI_DTCFaultType : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2151235584 Vehicle_Theft_Notification_Stat: 5 XXX
- SG_ DrIdDevLrnd : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSecSysFldIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ VTDTmprDetected : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ EhnSrvEngImmStat : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ IllDrIdDevDtctd : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ AlcKyIIncmIndOn : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSecStrgColLckPwdGroup : 6|31@0+ (1,0) [0|0] "" XXX
- SG_ VehSecStrgColLckPwdV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSecStrgColLckPwd : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ VehSecAuthnSesComp : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ VhSecNImmoIndRq : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ StrgColLckCmd : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ NmofPrgKFbExtd : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ VehStatStAtv : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ EhnSrvImmbComRst : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmSysBkupFlrIndOn : 34|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150809600 Airbag_Impact_Data_4: 8 XXX
- SG_ ImpDltVlcSamp12 : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS12_Axis1 : 7|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS12_Axis2 : 15|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp13 : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS13_Axis1 : 23|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS13_Axis2 : 31|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp14 : 39|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS14_Axis1 : 39|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS14_Axis2 : 47|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp15 : 55|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS15_Axis1 : 55|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS15_Axis2 : 63|8@0- (1,0) [-128|127] "counts" XXX
-
-BO_ 2150793216 Airbag_Impact_Data_2: 8 XXX
- SG_ ImpDltVlcSamp4 : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS4_Axis1 : 7|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS4_Axis2 : 15|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp5 : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS5_Axis1 : 23|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS5_Axis2 : 31|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp6 : 39|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS6_Axis1 : 39|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS6_Axis2 : 47|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp7 : 55|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS7_Axis1 : 55|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS7_Axis2 : 63|8@0- (1,0) [-128|127] "counts" XXX
-
-BO_ 2150801408 Airbag_Impact_Data_3: 8 XXX
- SG_ ImpDltVlcSamp8 : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS8_Axis1 : 7|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS8_Axis2 : 15|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp9 : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS9_Axis1 : 23|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS9_Axis2 : 31|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp10 : 39|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS10_Axis1 : 39|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS10_Axis2 : 47|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp11 : 55|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS11_Axis1 : 55|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS11_Axis2 : 63|8@0- (1,0) [-128|127] "counts" XXX
-
-BO_ 2150785024 Airbag_Impact_Data_1: 8 XXX
- SG_ ImpDltVlcScal : 7|8@0+ (0.00245,0.706) [0.706|1.33075] "kph/cnt" XXX
- SG_ AirbgAccelOrien : 10|3@0+ (45,0) [0|315] "deg" XXX
- SG_ ImpDltVlcSamp1 : 23|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS1_Axis1 : 23|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS1_Axis2 : 31|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp2 : 39|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS2_Axis1 : 39|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS2_Axis2 : 47|8@0- (1,0) [-128|127] "counts" XXX
- SG_ ImpDltVlcSamp3 : 55|16@0+ (1,0) [0|0] "" XXX
- SG_ IDVS3_Axis1 : 55|8@0- (1,0) [-128|127] "counts" XXX
- SG_ IDVS3_Axis2 : 63|8@0- (1,0) [-128|127] "counts" XXX
-
-BO_ 2151202816 Rear_Window_Defog_Inhibit: 5 XXX
- SG_ RrWndDfgInhRq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RrWndDfgSwAtv : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ ILSSCommErr : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ IPSnsrRwSolrIntFltd : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ IPSnsrSolrAnglFltd : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ IPSnsrTpCvrTempFltd : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ AuxHtrAlwd : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ IPSnsrRwSolrInt : 15|8@0+ (3,0) [0|765] "W/m2" XXX
- SG_ IPSnsrSolrAzmthAngl : 23|8@0+ (2,-180) [-180|330] "deg" XXX
- SG_ IPSnsrSolrElvtnAngl : 31|8@0+ (1,0) [0|255] "deg" XXX
- SG_ IPSnsrTpCvrTemp : 39|8@0+ (0.5,-40) [-40|87.5] "deg C" XXX
-
-BO_ 2150825984 Airbag_Indications: 6 XXX
- SG_ FsnDrvStbltIC : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ FDSIC_IndPer : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ FDSIC_IndDC : 6|3@0+ (12.5,12.5) [12.5|100] "%" XXX
- SG_ FDSIC_IO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ FsnPsngStbltIC : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ FPSIC_IndPer : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ FPSIC_IndDtCyc : 14|3@0+ (12.5,12.5) [12.5|100] "%" XXX
- SG_ FPSIC_IO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ AirbgIC : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ AirbgICIndPer : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ AirbgICDutCyc : 22|3@0+ (12.5,12.5) [12.5|100] "%" XXX
- SG_ AirbgICIO : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ FstnSndRwLtPsStbtInR : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ FstnSndRwCtPsStbtInR : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ FstnSndRwRtPsStbtInR : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ FsnDrStbAuxIR : 31|2@0+ (1,0) [0|3] "" XXX
- SG_ FsnPsStbAuxIR : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ AirbgFldIO : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ SndRwStbltRdIndMd : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ FstnThrdRwCtPsStbtInR : 39|2@0+ (1,0) [0|3] "" XXX
- SG_ FstnThrdRwRtPsStbtInR : 41|2@0+ (1,0) [0|3] "" XXX
- SG_ FstnThrdRwLtPsStbtInR : 43|2@0+ (1,0) [0|3] "" XXX
- SG_ SrvIntdPdstProtSysIO : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ PdstIntdProtSysDsbld : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ PdstIntdProtSysDplyd : 46|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151759872 Door_Lock_Command: 4 XXX
- SG_ CntrlLckRqwExtActFun : 9|18@0+ (1,0) [0|0] "" XXX
- SG_ CLRAF_Unl_Lk : 9|3@0+ (1,0) [0|7] "" XXX
- SG_ CLRAF_FuelD : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_RrCls : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_Hd : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_RLD : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_RRD : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_PD : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_DD : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_ActFunc : 28|5@0+ (1,0) [0|31] "" XXX
- SG_ CLRAF_UnandRsv3 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_UnandRsv2 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ CLRAF_UnandRsv1 : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ RrClsRelRq : 10|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149974016 Content_Theft_Sensor_Status: 3 XXX
- SG_ SrvAlrmSysIO : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ IntrSnsDisbld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgDrvDr : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgPsngDr : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgRrRtDr : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgRrLftDr : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrigTonn : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgTrnk : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgTltSns : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgIntMvmntSns : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrggrdBattRcnctd : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgGlsBrkSns : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgNonOffPM : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrigMidClsr : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmTrgdIO : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ AlrmStat : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ AlrmTrgHd : 21|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2151907328 Steering_Wheel_Control_Switches: 1 XXX
- SG_ StrgWhlUnit1SwStat : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ StrgWhlUnit2SwStat : 7|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2150219776 Voice_Recognition_Status: 1 XXX
- SG_ PhnSpRcgnRq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ VcRecVcFdbckSt : 3|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2152685568 Radiomarks_Response: 8 XXX
- SG_ RadBrdcstSrc : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ RadConInfReqSrc : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ RadConInfCmd : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ RadConInfID : 31|40@0+ (1,0) [0|1099511627775] "" XXX
-
-BO_ 2151874560 Vehicle_Theft_Notify_Reset_Req: 8 XXX
- SG_ EhnSrvEngImmbCom : 0|57@0+ (1,0) [0|0] "" XXX
- SG_ ESEIC_EngImmbRq : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ESEIC_EngImRqPsw : 15|56@0+ (1,0) [0|1] "" XXX
- SG_ RstVTDTmprDtctd : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ RstIllDrIdDevDtctd : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ RstDrIdDevLrnd : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150268928 GPS_Date_and_Time_LS: 6 XXX
- SG_ CldrYr_154 : 7|8@0+ (1,2000) [2000|2255] "year" XXX
- SG_ CldrMth_154 : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ CldrDay_154 : 20|5@0+ (1,0) [0|31] "days" XXX
- SG_ HrsGroup : 29|6@0+ (1,0) [0|0] "" XXX
- SG_ Hrs : 28|5@0+ (1,0) [0|31] "h" XXX
- SG_ HrsV : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ MinsGroup : 38|7@0+ (1,0) [0|0] "" XXX
- SG_ Mins : 37|6@0+ (1,0) [0|63] "min" XXX
- SG_ MinsV : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ SecGroup : 46|7@0+ (1,0) [0|0] "" XXX
- SG_ Sec : 45|6@0+ (1,0) [0|63] "s" XXX
- SG_ SecV : 46|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150137856 RFA_Status_LS: 3 XXX
- SG_ FobPrevLrndIndOn : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ Ky_IdDevNotPrIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ FbProgCustActRqd : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ KeyInWrnIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSecAtoLrnAtv : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ Ky_IdDevPrgmAuthReq : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ LMTTCPrsnOffStat : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSecAtoLrnDlyTmr : 12|5@0+ (1,0) [0|31] "min" XXX
- SG_ FldTpMotReq : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ RemCtrlFobNumForProgER : 19|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 2151677952 Chime_Command: 5 XXX
- SG_ SndChrs : 3|28@0+ (1,0) [0|0] "" XXX
- SG_ SC_SndTne : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ SC_SndCdnPrd : 15|8@0+ (10,0) [0|2550] "ms" XXX
- SG_ SC_NmofRp : 23|8@0+ (1,0) [0|255] "reps" XXX
- SG_ SC_SndDutCyc : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ SndLoc : 7|4@0+ (1,0) [0|0] "" XXX
- SG_ SndLocRtRr : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SndLocLftRr : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ SndLocPasFr : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ SndLocDrFr : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ SndPriority : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2150776832 Airbag_Status: 6 XXX
- SG_ ShfUlkBrToShftIndCtrl : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ShftLkdBuStbltIndCtrl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SbItlkTrnsShftLvLkRd : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ MmryRclImpctDisRq : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ EvntEnbld : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SftyMuteRd : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ HybVehHiVltInvDisRqd : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ HybImpSnsDsbld : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ SIREvntSychCntr : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ FrPsngrStOccSnsngPriDat : 39|16@0+ (1,0) [0|39321] "" XXX
-
-BO_ 2150760448 Airbag_Impact_Data: 8 XXX
- SG_ SIRDpl : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NotPsSeatStat : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ NotDrvSeatStat : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ NotSecRowRtSeaOccStat : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ NotSndRwMdlSeatStat : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ NotSndRwRtSeatStat : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ NotSndRwLtSeatStat : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ NotEventStat : 17|2@0+ (1,0) [0|3] "" XXX
- SG_ NotSecRowLeSeaOccStat : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ NotSecRowCtSeaOccStat : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ NotiFrntPasSeatOccSta : 34|3@0+ (1,0) [0|7] "" XXX
- SG_ NoEvDeLoSt : 46|7@0+ (1,0) [0|0] "" XXX
- SG_ NEDLSSdCrtnArbgDpld : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ NEDLSRtSdArbgDld : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ NEDLSLtSdArbgDld : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ NEDLSPaFrSt2De : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ NEDLSPaFrSt1De : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ NEDLSDrFrSt2De : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ NEDLSDrFrSt1De : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ NoEvSevSt : 54|7@0+ (1,0) [0|0] "" XXX
- SG_ NESSRoSevSt : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ NESSRiSiSevSt : 49|1@0+ (1,0) [0|1] "" XXX
- SG_ NESSReImpSevSt : 50|1@0+ (1,0) [0|1] "" XXX
- SG_ NESSLeSiSevSt : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ NESSFrImpSt2SevSt : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ NESSFrImpSt1SevSt : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ NESSFrImpPreSevSt : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ NotiEventCount : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2155872256 Fuel_Information: 6 XXX
- SG_ FlLvlPctGroup : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ FlLvlPctV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ FlLvlPct : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ FlInjRlCtRstOcc : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ FuelFltChgNwIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DrvStyPerfMdCsCrStVal : 5|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvStyPerfMdCsStAvl : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ RdWhlAngGroup : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ RdWhlAng : 22|7@0+ (0.703125,-45) [-45|44.296875] "deg" XXX
- SG_ RdWhlAngV : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ VehPitchAngleGroup : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VehPitchAngle : 30|7@0+ (0.703125,-45) [-45|44.296875] "deg" XXX
- SG_ VehPitchAngleV : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ FlInjRlCt : 39|16@0+ (3.05176E-005,0) [0|1.999970916] "liters" XXX
-
-BO_ 2156175360 Display_Measurement_System_LS: 1 XXX
- SG_ DispMeasSysExt : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ DispMeasSys : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ NtVsnSysEnbld : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149859328 System_Power_Mode_Backup_LS: 1 XXX
- SG_ SysBkupPwrMdEn : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ SysBkUpPwrMdGroup : 3|4@0+ (1,0) [0|0] "" XXX
- SG_ SysBkUpPwrMd : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ SysBkUpPwrMdV : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2158854144 ODIAction_IPC_LS: 8 XXX
- SG_ ODIActn_IPC : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIAI_DaTy : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIAI_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAI_ActnID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAI_DspMID : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAI_ActnVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2158837760 ODIAction_AuxIP_LS: 8 XXX
- SG_ ODIActn_AxIP : 5|62@0+ (1,0) [0|0] "" XXX
- SG_ ODIAA_DaTy : 5|6@0+ (1,0) [0|63] "" XXX
- SG_ ODIAA_FUCID : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAA_ActnID : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAA_DspMID : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ ODIAA_ActnVal : 39|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 2159091712 ODI_IPC_2_TEL_LS: 8 XXX
- SG_ ODI_IPC2TEL : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2154561536 Vehicle_Odo_LS: 5 XXX
- SG_ VehOdoGroup : 7|40@0+ (1,0) [0|0] "" XXX
- SG_ VehOdo : 7|32@0+ (0.015625,0) [0|67108863.984375] "km" XXX
- SG_ VehOdoV : 32|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149908480 Brake_Pedal_Status_LS: 2 XXX
- SG_ BrkPedInitTrvlAchvdStat : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ BrkPedTrvlAchvdV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkPedTrvlAchvd : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkPdlModTrvlGroup : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ BrkPdlModTrvl : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkPdlModTrvlV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkPdlPos : 15|8@0+ (0.392157,0) [0|100.000035] "% full" XXX
-
-BO_ 2151268352 Column_Lock_Status: 1 XXX
- SG_ ClmnLckTT : 1|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2150604800 Right_Rear_Door_Status: 1 XXX
- SG_ RRDoorAjarSwAct : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150588416 Passenger_Door_Status_LS: 1 XXX
- SG_ PDAjrSwAtv : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150596608 Left_Rear_Door_Status: 1 XXX
- SG_ RLDoorAjarSwAct : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2155036672 Climate_Control_General_Status: 6 XXX
- SG_ ACCompNormLdGroup : 0|9@0+ (1,0) [0|0] "" XXX
- SG_ ACCompNormLdV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCompNormLd : 15|8@0+ (0.1,0) [0|25.5] "l/min" XXX
- SG_ ACCmEngRunReq : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCmpsrFldOn : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCompModReq : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ ClmtCtrlTrgtTemp : 17|10@0+ (0.1,-10) [-10|92.3] "deg C" XXX
-
-BO_ 2150424576 Engine_Information_3_LS: 8 XXX
- SG_ TrnsEngdStateGroup : 2|3@0+ (1,0) [0|0] "" XXX
- SG_ TrnsEngdState : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ TrnsEngdStateV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ ACRfHiSdFldPrsGroup : 3|20@0+ (1,0) [0|0] "" XXX
- SG_ ACRfHiSdFldPrsV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ACRfHiSdFldPrs : 23|8@0+ (14,0) [0|3570] "kPaG" XXX
- SG_ ACCompCmnd : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ RrAxlELSDCplLwResGroup : 5|46@0+ (1,0) [0|0] "" XXX
- SG_ RrAxlELSDCplLwResV : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ RrAxlELSDCplLwRes : 47|8@0+ (10,0) [0|2550] "Nm" XXX
- SG_ EngAirIntBstPrGroup : 6|39@0+ (1,0) [0|0] "" XXX
- SG_ EngAirIntBstPrV : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ EngAirIntBstPr : 39|8@0- (1,0) [-128|127] "kPaG" XXX
- SG_ ExtHlStrAssCsStAvl : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsRngInhbtStat : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ DrvtShftCntrlTrgtGear : 14|4@0+ (1,0) [0|15] "" XXX
- SG_ ACCmpNrmLdGrdAld : 31|8@0+ (0.1,0) [0|25.5] "dm3/m/s" XXX
- SG_ EngTrqDrRqdExtRngGroup : 52|13@0+ (1,0) [0|0] "" XXX
- SG_ EngTrqDrRqdExtRng : 51|12@0+ (0.5,-848) [-848|1199.5] "Nm" XXX
- SG_ EngTrqDrRqdExtRngV : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ ExtHlStrAssCsCrStVal : 55|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2150416384 Engine_Information_2_LS: 8 XXX
- SG_ EngBstPrsIndGroup : 0|33@0+ (1,0) [0|0] "" XXX
- SG_ EngBstPrsIndV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ EngBstPrsInd : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ VaccBoostFailure : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ GenFld : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ EngSpdLmtnMdAct : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ PTWrmgWtToShftIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ EngNEmsnsRelMalfAct : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ EngCstFlCutAct : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EngRunAtv : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ EngIdlAtv : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ VehTopSpdLmtMdAct : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ EngCylDeactMd : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ TransEstGearGroup : 20|5@0+ (1,0) [0|0] "" XXX
- SG_ TransEstGear : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ TransEstGearV : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ EngTrqActExtRngGroup : 21|46@0+ (1,0) [0|0] "" XXX
- SG_ EngTrqActExtRngV : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ EngTrqActExtRng : 51|12@0+ (0.5,-848) [-848|1199.5] "Nm" XXX
- SG_ EngVDA : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsVDA : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ EngCoolFanSpd : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ VehTopSpdLmtArbVal : 47|8@0+ (2,0) [0|510] "km / h" XXX
- SG_ EngSpdStat : 53|2@0+ (1,0) [0|3] "" XXX
- SG_ RmVhStrtEngRng : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnCrpMdAtv : 55|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2150408192 Engine_Information_1_LS: 8 XXX
- SG_ TrnsSftMdStat : 2|3@0+ (1,0) [0|7] "" XXX
- SG_ ThrPosGroup : 3|36@0+ (1,0) [0|0] "" XXX
- SG_ ThrPosV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ThrPos : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ AccActPosGroup : 4|45@0+ (1,0) [0|0] "" XXX
- SG_ AccActPosV : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ AccActPos : 47|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ ElcRngSelDrvAct : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ TmpDrvrShftCtlAct : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ AccPdlOvrrdAtv : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnShftPtrnActStat : 10|3@0+ (1,0) [0|7] "" XXX
- SG_ TransTUDMdStat : 12|2@0+ (1,0) [0|3] "" XXX
- SG_ Eng12vStrtrMtrCmmdOn : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ EngRunng : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsShftLvrPosGroup : 15|48@0+ (1,0) [0|0] "" XXX
- SG_ TrnsShftLvrPosV : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnsShftLvrPos : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ EngSpd : 23|16@0+ (0.25,0) [0|16383.75] "rpm" XXX
- SG_ AutoTransComndGear : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CrsCntEnbld : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ CltStartSwAtvGroup : 58|2@0+ (1,0) [0|0] "" XXX
- SG_ CltStartSwAtv : 57|1@0+ (1,0) [0|1] "" XXX
- SG_ CltStartSwAtvV : 58|1@0+ (1,0) [0|1] "" XXX
- SG_ TopTrvlCltchSwActGroup : 60|2@0+ (1,0) [0|0] "" XXX
- SG_ TopTrvlCltchSwAct : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ TopTrvlCltchSwActV : 60|1@0+ (1,0) [0|1] "" XXX
- SG_ AdptPsngrSeatStng : 63|3@0+ (1,0) [0|7] "" XXX
-
-BO_ 2155954176 Climate_Control_Basic_Status_LS: 4 XXX
- SG_ ACHtIdleBstLevReq : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ ClimCtrlAftBlowModActv : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ AirCndActIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmCntlExtDefActIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ ClntCircPmpRq : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ ClmCntFrBlwFnSp : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ AirCndCmptLdEst : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ ClmCntRrBlwFnSp : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2153971712 Driver_Door_Status: 1 XXX
- SG_ LftglsAjrSwAct : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ LftglsRelSwAct : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DDAjrSwAtvGroup : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ DDAjrSwAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DDAjrSwAtvM : 7|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149875712 Battery_Voltage: 7 XXX
- SG_ BatVltGroup : 0|17@0+ (1,0) [0|0] "" XXX
- SG_ BatVltV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ BatVlt : 23|8@0+ (0.1,3) [3|28.5] "volts" XXX
- SG_ BatSaverIO : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvBattChrgSysIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ BatSOCGroup : 3|28@0+ (1,0) [0|0] "" XXX
- SG_ BatSOCV : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ BatSOC : 31|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ BattStOfChrgCrtyLow : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ IntlgntBattSnsFldIO : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ BattStOfChrgLowIO : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ DCCnvStblznErrIO : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ EnrgMgtLdShdRq : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ BattVltIRq : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ PwrMdOffBattSOC : 39|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ BattCrntFltrd : 47|8@0- (0.5,0) [-64|63.5] "A" XXX
- SG_ BatSvrMdSevLvl : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2151186432 Auto_High_Beam_Status: 1 XXX
- SG_ AutoBmSlctStat : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ CtLghtDet : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ AutoHgBmCtrlInOn : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2149629952 Lighting_Status_LS: 5 XXX
- SG_ OtsdAmbtLtLvlStatGroup : 0|23@0+ (1,0) [0|0] "" XXX
- SG_ OtsdAmbtLtLvlStatV : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ OtsdAmbtLtLvlStat : 27|2@0+ (1,0) [0|3] "" XXX
- SG_ DRLAct : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ HazSwAtv : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkLtLeftIO : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkLtRightIO : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ TrnSwAct : 6|2@0+ (1,0) [0|3] "" XXX
- SG_ FrFogLmpsAct : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkLtLeftOn : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ FrFgLtIO : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ AutoLtsInactIO : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ AutoLtsActIO : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ RrFgLtIO : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ HiBmIO : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkLtIO : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ BrkLtsAtv : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ FlToPsSwAtv : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ RevLmpAtv : 17|1@0+ (1,0) [0|1] "N/A" XXX
- SG_ PrkngLtsAct : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ RrFogLmpsAct : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ HiBmReqd : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ AutoBmSlctAllwd : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ PrkLtRightOn : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ SrvlnceMdAct : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ RtTrnLmpAtv : 25|2@0+ (1,0) [0|3] "" XXX
- SG_ LftTrnLmpAtv : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ MainLghtSw : 31|2@0+ (1,0) [0|3] "N/A" XXX
- SG_ HdlmpBmSelectStat : 33|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 2149646336 Vehicle_Speed_Information: 8 XXX
- SG_ VehSpdAvgDrvnGroup : 7|16@0+ (1,0) [0|0] "" XXX
- SG_ VehSpdAvgDrvn : 6|15@0+ (0.015625,0) [0|511.984375] "km / h" XXX
- SG_ VehSpdAvgDrvnV : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ DstRolCntAvgDrnRstOc : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ DistRollCntAvgDrvnGroup : 22|15@0+ (1,0) [0|0] "" XXX
- SG_ DistRollCntAvgDrvn : 20|13@0+ (0.125,0) [0|1023.875] "m" XXX
- SG_ DistRollCntAvgDrvnV : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSpdAvgDrvnSrc : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ VehSpdAvgNDrvnGroup : 38|17@0+ (1,0) [0|0] "" XXX
- SG_ VehSpdAvgNDrvn : 38|15@0+ (0.015625,0) [0|511.984375] "km / h" XXX
- SG_ VehSpdAvgNDrvnV : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ DstRolCntAvgNonDrvnGroup : 39|32@0+ (1,0) [0|0] "" XXX
- SG_ DstRolCntAvgNonDrvnV : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ DstRolCntAvgNonDrvn : 52|13@0+ (0.125,0) [0|1023.875] "m" XXX
- SG_ DstRolCntAvNDrRstOc : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ DistRollCntAvgDrvnSrc : 55|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2154053632 Dimming_Information_LS: 3 XXX
- SG_ IntDimNtPnlAtv : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DispNtSchmAtv : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ CargoLmpActIO : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ IntDimLvl : 15|8@0+ (0.392157,0) [0|100.000035] "%" XXX
- SG_ IntDimDspLvl : 23|8@0+ (0.392157,0) [0|100.000035] "%" XXX
-
-BO_ 2149851136 System_Power_Mode_LS: 1 XXX
- SG_ SysPwrMdGroup : 2|3@0+ (1,0) [0|0] "" XXX
- SG_ SysPwrMd : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ SysPwrMdV : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ KylsStrtAuthRq : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 2159124480 ODI_AuxIP_2_TEL_LS: 8 XXX
- SG_ ODI_AxIP2TEL : 7|64@0+ (1,0) [0|1.84467440737096E+019] "" XXX
-
-BO_ 2151530496 TPM_Display_Commands: 6 XXX
- SG_ TPMTrLrnMdCmplt : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ TrPrsMntrAtLocFld : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ TrPrsMntrTrLdStat : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ TireTrdTmpStat : 6|3@0+ (1,0) [0|7] "" XXX
- SG_ TrFrntAxlPresStat : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ TrRrAxlPresStat : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ WintTrRecIndOn : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ TrPrsMntrFld : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ TireLocatnWarnEn : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ HVChgSyChgLvPfStRmt1 : 18|3@0+ (1,0) [0|7] "" XXX
- SG_ StTODChrgTmpOvrdRmt1 : 20|2@0+ (1,0) [0|3] "" XXX
- SG_ PrtyChrgRqRmt1 : 22|2@0+ (1,0) [0|3] "" XXX
- SG_ OfBrdHVCVhCsChRqRmt1 : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ HVBatTmBsDlChStRqRmt1 : 28|21@0+ (1,0) [0|0] "" XXX
- SG_ HVBTBDCSRR1_DChHStRq : 28|5@0+ (1,0) [0|31] "hr" XXX
- SG_ HVBTBDCSRR1_DChSlSRq : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBDCSRR1_DChDStRq : 39|4@0+ (1,0) [0|15] "" XXX
- SG_ HVBTBDCSRR1_DChMHSRq : 45|6@0+ (1,0) [0|63] "min" XXX
- SG_ HVBTBDCSRR1_DChSnSRq : 47|2@0+ (1,0) [0|3] "" XXX
- SG_ HVBatTmBsChgMdRqRmt1 : 31|3@0+ (1,0) [0|7] "" XXX
-
-
-
-BA_DEF_ "UseGMParameterIDs" INT 0 0;
-BA_DEF_ "ProtocolType" STRING ;
-BA_DEF_ "BusType" STRING ;
-BA_DEF_DEF_ "UseGMParameterIDs" 1;
-BA_DEF_DEF_ "ProtocolType" "GMLAN";
-BA_DEF_DEF_ "BusType" "";
-BA_ "ProtocolType" "GMLAN";
-BA_ "BusType" "CAN";
-
diff --git a/opendbc/gm_global_a_object.dbc b/opendbc/gm_global_a_object.dbc
index 1532e90dadac90..4643a640ac85f4 100644
--- a/opendbc/gm_global_a_object.dbc
+++ b/opendbc/gm_global_a_object.dbc
@@ -37,7 +37,7 @@ BU_: K109_FCM B233B_LRR NEO VIS_FO VIS2_FO K124_ASCM Vector__XXX EOCM_F_FO EOCM2
VAL_TABLE_ RangeMode 1 "Active" 0 "Inactive" ;
VAL_TABLE_ TrkConf 3 "Confident" 2 "Speculative" 1 "Highly speculative" 0 "Invalid" ;
VAL_TABLE_ TrkMeasStatus 3 "Measured current cycle" 2 "Latent track not detected" 1 "New object" 0 "No object" ;
-VAL_TABLE_ TrkDynProp 4 "Moving in opposite direction" 3 "Moving in same direction" 2 "Has moved but currenty stopped" 1 "Has never moved," 0 "Unkown" ;
+VAL_TABLE_ TrkDynProp 4 "Moving in opposite direction" 3 "Moving in same direction" 2 "Has moved but currently stopped" 1 "Has never moved," 0 "Unknown" ;
VAL_TABLE_ FrntVsnInPthVehBrkNwSt 10 "Active" 5 "Inactive" ;
VAL_TABLE_ FrntVsnClostPedBrkNwSt 10 "Active" 5 "Inactive" ;
VAL_TABLE_ LaneSnsLLnPosValid 1 "Invalid" 0 "Valid" ;
diff --git a/opendbc/gm_global_a_powertrain.dbc b/opendbc/gm_global_a_powertrain.dbc
index 3caf60ce4a01ec..948a519b03b5f2 100644
--- a/opendbc/gm_global_a_powertrain.dbc
+++ b/opendbc/gm_global_a_powertrain.dbc
@@ -116,7 +116,7 @@ BO_ 388 PSCMStatus: 8 K43_PSCM
SG_ LKATorqueDelivered : 18|11@0- (0.01,0) [0|1] "" NEO
SG_ LKATotalTorqueDelivered : 2|11@0- (0.01,0) [-10.24|10.23] "Nm" NEO
-BO_ 417 AcceleratorPedal: 8 XXX
+BO_ 417 AcceleratorPedal: 7 XXX
SG_ AcceleratorPedal : 55|8@0+ (1,0) [0|0] "" NEO
BO_ 451 GasAndAcc: 8 XXX
@@ -170,7 +170,7 @@ BO_ 840 EBCMWheelSpdFront: 4 K17_EBCM
SG_ FLWheelSpd : 7|16@0+ (0.0311,0) [0|255] "km/h" NEO
SG_ FRWheelSpd : 23|16@0+ (0.0311,0) [0|255] "km/h" NEO
-BO_ 842 EBCMWheelSpdRear: 4 K17_EBCM
+BO_ 842 EBCMWheelSpdRear: 5 K17_EBCM
SG_ RLWheelSpd : 7|16@0+ (0.0311,0) [0|255] "km/h" NEO
SG_ RRWheelSpd : 23|16@0+ (0.0311,0) [0|255] "km/h" NEO
@@ -195,7 +195,7 @@ BO_ 1033 ASCMKeepAlive: 7 NEO
BO_ 1034 ASCM_40A: 7 K124_ASCM
BO_ 1217 ECMEngineCoolantTemp: 8 K20_ECM
- SG_ EngineCoolantTemp : 23|8@0+ (1,-40) [0|0] "°C" NEO
+ SG_ EngineCoolantTemp : 23|8@0+ (1,-40) [0|0] "C" NEO
BO_ 1249 VIN_Part2: 8 K20_ECM
SG_ VINPart2 : 7|64@0+ (1,0) [0|0] "" NEO
@@ -241,7 +241,7 @@ VAL_ 481 LKAButton 1 "Active" 0 "Inactive" ;
VAL_ 481 ACCButtons 6 "Cancel" 5 "Main" 3 "Set" 2 "Resume" 1 "None" ;
VAL_ 481 DriveModeButton 1 "Active" 0 "Inactive" ;
VAL_ 452 CruiseState 4 "Standstill" 3 "Faulted" 1 "Active" 0 "Off" ;
-VAL_ 309 PRNDL 3 "Reverse" 2 "Drive" 1 "Neutral" 0 "Park" ;
+VAL_ 309 PRNDL 3 "R" 2 "D" 1 "N" 0 "P" ;
VAL_ 309 ESPButton 1 "Active" 0 "Inactive" ;
VAL_ 384 LKASteeringCmdActive 1 "Active" 0 "Inactive" ;
VAL_ 880 ACCLeadCar 1 "Present" 0 "Not Present" ;
diff --git a/opendbc/honda_accord_lx15t_2018_can_generated.dbc b/opendbc/honda_accord_lx15t_2018_can_generated.dbc
index 6159efb0e8144f..25b4c15a356f11 100644
--- a/opendbc/honda_accord_lx15t_2018_can_generated.dbc
+++ b/opendbc/honda_accord_lx15t_2018_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _bosch_2018.dbc starts here"
+CM_ "Imported file _bosch_2018.dbc starts here";
VERSION ""
@@ -37,6 +37,12 @@ NS_ :
BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
@@ -45,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -52,17 +66,12 @@ BO_ 232 BRAKE_HOLD: 7 XXX
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
@@ -89,10 +98,11 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
@@ -104,6 +114,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 450 EPB_STATUS: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
@@ -118,15 +135,26 @@ BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
BO_ 495 ACC_CONTROL_ON: 8 XXX
SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
@@ -144,6 +172,82 @@ BO_ 545 XXX_16: 6 SCM
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
@@ -173,16 +277,16 @@ BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
@@ -200,8 +304,8 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
@@ -265,11 +369,26 @@ BO_ 891 STALK_STATUS_2: 8 XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-CM_ "honda_accord_lx15t_2018_can.dbc starts here"
+CM_ "honda_accord_lx15t_2018_can.dbc starts here";
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
BO_ 401 GEARBOX: 8 PCM
SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
SG_ BOH : 45|6@0+ (1,0) [0|63] "" XXX
diff --git a/opendbc/honda_accord_s2t_2018_can_generated.dbc b/opendbc/honda_accord_s2t_2018_can_generated.dbc
index 7b3e99bc846542..6407b49feeb79a 100644
--- a/opendbc/honda_accord_s2t_2018_can_generated.dbc
+++ b/opendbc/honda_accord_s2t_2018_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _bosch_2018.dbc starts here"
+CM_ "Imported file _bosch_2018.dbc starts here";
VERSION ""
@@ -37,6 +37,12 @@ NS_ :
BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
@@ -45,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -52,17 +66,12 @@ BO_ 232 BRAKE_HOLD: 7 XXX
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
@@ -89,10 +98,11 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
@@ -104,6 +114,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 450 EPB_STATUS: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
@@ -118,15 +135,26 @@ BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
BO_ 495 ACC_CONTROL_ON: 8 XXX
SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
@@ -144,6 +172,82 @@ BO_ 545 XXX_16: 6 SCM
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
@@ -173,16 +277,16 @@ BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
@@ -200,8 +304,8 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
@@ -265,11 +369,26 @@ BO_ 891 STALK_STATUS_2: 8 XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-CM_ "honda_accord_s2t_2018_can.dbc starts here"
+CM_ "honda_accord_s2t_2018_can.dbc starts here";
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
BO_ 419 GEARBOX: 8 PCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_accord_touring_2016_can.dbc b/opendbc/honda_accord_touring_2016_can.dbc
deleted file mode 100644
index e8f388de08692c..00000000000000
--- a/opendbc/honda_accord_touring_2016_can.dbc
+++ /dev/null
@@ -1,399 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: INTERCEPTOR EBCM NEO ADAS PCM EPS VSA SCM BDY XXX EPB
-
-
-BO_ 57 XXX_1: 3 XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|15] "" NEO
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 145 XXX_2: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 316 GAS_PEDAL: 8 PCM
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" NEO
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" NEO
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 344 POWERTRAIN_DATA: 8 PCM
- SG_ XMISSION_SPEED : 7|16@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ ZEROS_BOH : 23|16@0+ (1,0) [0|15000] "" NEO
- SG_ XMISSION_SPEED2 : 39|16@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 380 POWERTRAIN_DATA2: 8 PCM
- SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" NEO
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
- SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" NEO
- SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" NEO
- SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" NEO
- SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" NEO
- SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" NEO
- SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 398 XXX_3: 3 XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" XXX
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" NEO
- SG_ GEAR : 35|4@0+ (1,0) [0|15] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 420 VSA_STATUS: 8 VSA
- SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
- SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" NEO
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" NEO
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" NEO
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 426 XXX_4: 8 VSA
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" NEO
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" NEO
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 464 WHEEL_SPEEDS: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ WHEEL_SPEED_FR : 8|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ WHEEL_SPEED_RL : 25|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ WHEEL_SPEED_RR : 42|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 476 XXX_5: 4 XXX
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 487 XXX_6: 4 VSA
- SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" NEO
- SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" NEO
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 490 VEHICLE_DYNAMICS: 8 VSA
- SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 506 BRAKE_COMMAND: 8 ADAS
- SG_ COMPUTER_BRAKE : 7|10@0+ (0.003906248,0) [0|1] "" EBCM
- SG_ ZEROS_BOH : 13|5@0+ (1,0) [0|1] "" EBCM
- SG_ COMPUTER_BRAKE_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_BOH2 : 23|3@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_BOH3 : 19|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
- SG_ COMPUTER_BRAKE_REQUEST_2 : 16|1@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_0X80 : 31|8@0+ (1,0) [0|1] "" EBCM
- SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
- SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
- SG_ ZEROS_BOH6 : 44|1@0+ (1,0) [0|1] "" EBCM
- SG_ FCW : 43|1@0+ (1,0) [0|3] "" EBCM
- SG_ ZEROS_BOH3 : 42|2@0+ (1,0) [0|0] "" EBCM
- SG_ FCW2 : 40|1@0+ (1,0) [0|0] "" EBCM
- SG_ ZEROS_BOH4 : 55|8@0+ (1,0) [0|0] "" EBCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
-
-BO_ 507 XXX_7: 1 XXX
-
-BO_ 542 XXX_8: 7 XXX
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 545 XXX_9: 6 SCM
- SG_ ECON_ON : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" NEO
- SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" NEO
- SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" NEO
- SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" NEO
- SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" NEO
- SG_ LONG_COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 660 SCM_COMMANDS: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" NEO
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" NEO
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 661 XXX_10: 4 XXX
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 662 CRUISE_BUTTONS: 4 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" NEO
- SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 773 SEATBELT_STATUS: 7 BDY
- SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" NEO
- SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 777 XXX_11: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 780 ACC_HUD: 8 ADAS
- SG_ PCM_SPEED : 7|16@0+ (0.002763889,0) [0|100] "m/s" BDY
- SG_ PCM_GAS : 23|7@0+ (1,0) [0|127] "" BDY
- SG_ ZEROS_BOH : 16|1@0+ (1,0) [0|255] "" BDY
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
- SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
- SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
- SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
- SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
- SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
- SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 800 XXX_12: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 804 CRUISE: 8 PCM
- SG_ ENGINE_TEMPERATURE : 7|8@0+ (1,0) [0|255] "" NEO
- SG_ BOH : 15|8@0+ (1,0) [0|255] "" NEO
- SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" NEO
- SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" NEO
- SG_ BOH2 : 47|8@0- (1,0) [0|255] "" NEO
- SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 808 XXX_13: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 829 LKAS_HUD: 5 ADAS
- SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
- SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
- SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
- SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
- SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
- SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
- SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
- SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
- SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 871 XXX_14: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 882 XXX_15: 2 XXX
- SG_ COUNTER : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 11|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 884 XXX_16: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 891 XXX_17: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 892 CRUISE_PARAMS: 8 PCM
- SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 918 XXX_18: 7 XXX
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 923 XXX_19: 2 XXX
- SG_ COUNTER : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 11|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 927 ACC_HUD_2: 8 ADAS
- SG_ ZEROS_BOH : 7|17@0+ (1,0) [0|127] "" BDY
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|15] "" BDY
- SG_ ZEROS_BOH2 : 31|8@0+ (1,0) [0|127] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|15] "" BDY
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|15] "" BDY
- SG_ LEAD_SPEED : 39|9@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_STATE : 46|3@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_DISTANCE : 43|5@0+ (1,0) [0|31] "" BDY
- SG_ ZEROS_BOH3 : 54|7@0+ (1,0) [0|127] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 929 XXX_20: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 983 XXX_21: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 985 XXX_22: 3 XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" XXX
-
-BO_ 1024 XXX_23: 5 XXX
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1027 XXX_24: 5 XXX
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1029 DOORS_STATUS: 8 BDY
- SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" NEO
- SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" NEO
- SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" NEO
- SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
-
-BO_ 1036 XXX_25: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1039 XXX_26: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1057 XXX_27: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1064 XXX_28: 7 XXX
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1088 XXX_29: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1089 XXX_30: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1108 XXX_31: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1125 XXX_32: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1296 XXX_33: 3 XXX
- SG_ COUNTER : 21|2@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" XXX
-
-BO_ 1365 XXX_34: 5 XXX
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1424 XXX_35: 5 XXX
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1600 XXX_36: 5 XXX
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1601 XXX_37: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1633 XXX_38: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_TX_BU_ 506 : NEO,ADAS;
-BO_TX_BU_ 780 : NEO,ADAS;
-BO_TX_BU_ 829 : NEO,ADAS;
-BO_TX_BU_ 927 : NEO,ADAS;
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc b/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc
index 55f74cf9911028..0443f2d5c43486 100644
--- a/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc
+++ b/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _bosch_2018.dbc starts here"
+CM_ "Imported file _bosch_2018.dbc starts here";
VERSION ""
@@ -37,6 +37,12 @@ NS_ :
BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
@@ -45,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -52,17 +66,12 @@ BO_ 232 BRAKE_HOLD: 7 XXX
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
@@ -89,10 +98,11 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
@@ -104,6 +114,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 450 EPB_STATUS: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
@@ -118,15 +135,26 @@ BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
BO_ 495 ACC_CONTROL_ON: 8 XXX
SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
@@ -144,6 +172,82 @@ BO_ 545 XXX_16: 6 SCM
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
@@ -173,16 +277,16 @@ BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
@@ -200,8 +304,8 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
@@ -265,11 +369,26 @@ BO_ 891 STALK_STATUS_2: 8 XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-CM_ "honda_civic_hatchback_ex_2017_can.dbc starts here"
+CM_ "honda_civic_hatchback_ex_2017_can.dbc starts here";
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
BO_ 401 GEARBOX: 8 PCM
SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
SG_ BOH : 45|6@0+ (1,0) [0|63] "" XXX
@@ -286,6 +405,11 @@ BO_ 432 STANDSTILL: 7 VSA
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
+BO_ 506 LEGACY_BRAKE_COMMAND: 8 ADAS
+ SG_ CHIME : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
BO_ 892 CRUISE_PARAMS: 8 PCM
SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_civic_sedan_16_diesel_2019_can_generated.dbc b/opendbc/honda_civic_sedan_16_diesel_2019_can_generated.dbc
new file mode 100644
index 00000000000000..fecfc58865fef5
--- /dev/null
+++ b/opendbc/honda_civic_sedan_16_diesel_2019_can_generated.dbc
@@ -0,0 +1,444 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _bosch_2018.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 228 STEERING_CONTROL: 5 EON
+ SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
+ SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
+ SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
+ SG_ STEER_TORQUE : 7|16@0- (1,0) [-4096|4096] "" EPS
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 232 BRAKE_HOLD: 7 XXX
+ SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
+ SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
+ SG_ COMPUTER_BRAKE_REQUEST : 29|1@0+ (1,0) [0|0] "" XXX
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 330 STEERING_SENSORS: 8 EPS
+ SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 344 ENGINE_DATA: 8 PCM
+ SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 380 POWERTRAIN_DATA: 8 PCM
+ SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 399 STEER_STATUS: 7 EPS
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
+ SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
+
+BO_ 420 VSA_STATUS: 8 VSA
+ SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
+BO_ 450 EPB_STATUS: 8 EPB
+ SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
+ SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 464 WHEEL_SPEEDS: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 479 ACC_CONTROL: 8 EON
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
+ SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 495 ACC_CONTROL_ON: 8 XXX
+ SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ ZEROS_BOH : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ ZEROS_BOH2 : 47|16@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_FF : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_3 : 6|7@0+ (1,0) [0|4095] "" XXX
+ SG_ CONTROL_ON : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 545 XXX_16: 6 SCM
+ SG_ ECON_ON : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ DRIVE_MODE : 37|2@0+ (1,0) [0|3] "" XXX
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
+ SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
+ SG_ LONG_COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
+ BO_ 662 SCM_BUTTONS: 4 SCM
+ SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
+ SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 27|4@0+ (1,0) [0|15] "" EON
+
+BO_ 773 SEATBELT_STATUS: 7 BDY
+ SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 777 CAR_SPEED: 8 PCM
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 780 ACC_HUD: 8 ADAS
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
+ SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
+ SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
+ SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
+ SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
+ SG_ ZEROS_BOH : 7|24@0+ (0.002759506,0) [0|100] "m/s" BDY
+ SG_ FCM_OFF : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_TO_1 : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
+ SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
+ SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 804 CRUISE: 8 PCM
+ SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 806 SCM_FEEDBACK: 8 SCM
+ SG_ DRIVERS_DOOR_OPEN : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" EON
+ SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" EON
+ SG_ CMBS_STATES : 22|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 829 LKAS_HUD: 5 ADAS
+ SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
+ SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
+ SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
+ SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
+ SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
+ SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
+ SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
+ SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 862 CAMERA_MESSAGES: 8 CAM
+ SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
+ SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
+ SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ ZEROS_BOH_2 : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 884 STALK_STATUS: 8 XXX
+ SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
+ SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
+ SG_ WIPER_SWITCH : 53|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 891 STALK_STATUS_2: 8 XXX
+ SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
+ SG_ LOW_BEAMS : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ HIGH_BEAMS : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ PARK_LIGHTS : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
+VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
+
+CM_ "honda_civic_sedan_16_diesel_2019_can.dbc starts here";
+
+
+BO_ 316 GAS_PEDAL_2: 8 XXX
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 419 GEARBOX: 8 XXX
+ SG_ GEAR_SHIFTER : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ GEAR : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 432 STANDSTILL: 7 VSA
+ SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
+
+BO_ 506 LEGACY_BRAKE_COMMAND: 8 ADAS
+ SG_ CHIME : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 892 CRUISE_PARAMS: 8 PCM
+ SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|15] "" EON
+
+BO_ 927 RADAR_HUD: 8 RADAR
+ SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY
+ SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX
+ SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX
+ SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY
+ SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 1029 DOORS_STATUS: 8 BDY
+ SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
+ SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+VAL_ 419 GEAR_SHIFTER 2 "S" 32 "D" 16 "N" 8 "R" 4 "P" ;
+VAL_ 419 GEAR 26 "S" 20 "D" 19 "N" 18 "R" 17 "P" ;
+VAL_ 545 ECON_ON_2 0 "off" 3 "on" ;
+VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
+VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
+VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
+VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
+VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
+
+CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/honda_civic_touring_2016_can_generated.dbc b/opendbc/honda_civic_touring_2016_can_generated.dbc
index a613aa0676e9c9..0d666332578fbe 100644
--- a/opendbc/honda_civic_touring_2016_can_generated.dbc
+++ b/opendbc/honda_civic_touring_2016_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "honda_civic_touring_2016_can.dbc starts here"
+CM_ "honda_civic_touring_2016_can.dbc starts here";
@@ -267,16 +279,19 @@ BO_ 304 GAS_PEDAL_2: 8 PCM
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_clarity_hybrid_2018_can.dbc b/opendbc/honda_clarity_hybrid_2018_can.dbc
deleted file mode 100644
index 3d46f52cd5433a..00000000000000
--- a/opendbc/honda_clarity_hybrid_2018_can.dbc
+++ /dev/null
@@ -1,433 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: INTERCEPTOR EBCM NEO ADAS PCM EPS VSA SCM BDY XXX EPB
-
-
-BO_ 57 XXX_1: 3 XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 148 XXX_2: 8 XXX
- SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" NEO
- SG_ LONG_ACCEL : 24|9@0- (-0.02,0) [-20|20] "m/s2" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 228 STEERING_CONTROL: 5 ADAS
- SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
-
-BO_ 304 GAS_PEDAL2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" NEO
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" NEO
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 330 STEERING_SENSORS: 8 EPS
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" NEO
- SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" NEO
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" NEO
- SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 344 POWERTRAIN_DATA: 8 PCM
- SG_ XMISSION_SPEED : 7|16@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
- SG_ XMISSION_SPEED2 : 39|16@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
- SG_ TRIP_DISTANCE : 55|8@0+ (0.010588,0) [0|255] "km" NEO
-
-BO_ 380 POWERTRAIN_DATA2: 8 PCM
- SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" NEO
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
- SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" NEO
- SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" NEO
- SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" NEO
- SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" NEO
- SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" NEO
- SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" NEO
- SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" NEO
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" NEO
- SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" NEO
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 401 GEARBOX_1: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" NEO
- SG_ GEAR : 43|4@0+ (1,0) [0|15] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 420 VSA_STATUS: 8 VSA
- SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" NEO
- SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" NEO
- SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
- SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" NEO
-
-BO_ 427 XXX_3: 3 VSA
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|6] "" NEO
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 428 XXX_4: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" NEO
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" NEO
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" NEO
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 450 XXX_5: 8 EPB
- SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" NEO
- SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 464 WHEEL_SPEEDS: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ WHEEL_SPEED_FR : 8|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ WHEEL_SPEED_RL : 25|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ WHEEL_SPEED_RR : 42|15@0+ (0.002759506,0) [0|70] "m/s" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 476 XXX_7: 7 XXX
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 487 XXX_8: 4 VSA
- SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" NEO
- SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" NEO
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 490 VEHICLE_DYNAMICS: 8 VSA
- SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 493 XXX_9: 5 VSA
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 506 BRAKE_COMMAND: 8 ADAS
- SG_ COMPUTER_BRAKE : 55|10@0+ (0.003906248,0) [0|0] "" EBCM
- SG_ COMPUTER_BRAKE_REQUEST : 11|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_BOH2 : 23|3@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_BOH3 : 19|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_0X80 : 31|8@0+ (1,0) [0|1] "" EBCM
- SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
- SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
- SG_ ZEROS_BOH6 : 44|1@0+ (1,0) [0|1] "" EBCM
- SG_ FCW : 43|1@0+ (1,0) [0|3] "" EBCM
- SG_ ZEROS_BOH3 : 42|2@0+ (1,0) [0|0] "" EBCM
- SG_ FCW2 : 40|1@0+ (1,0) [0|0] "" EBCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EBCM
-
-BO_ 512 GAS_COMMAND: 3 NEO
- SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" INTERCEPTOR
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" INTERCEPTOR
-
-BO_ 513 GAS_SENSOR: 5 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" NEO
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" NEO
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 545 XXX_10: 5 XXX
- SG_ ECON_ON : 23|1@0+ (1,0) [0|1] "" NEO
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" NEO
- SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" NEO
- SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" NEO
- SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" NEO
- SG_ SET_TO_X55 : 47|8@0+ (1,0) [0|255] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|6] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 662 CRUISE_BUTTONS: 4 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" NEO
- SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 773 SEATBELT_STATUS: 7 BDY
- SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" NEO
- SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" NEO
- SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" NEO
- SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" NEO
- SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" NEO
- SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" NEO
- SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 777 XXX_11: 8 XXX
- SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" NEO
- SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 780 ACC_HUD: 8 ADAS
- SG_ PCM_SPEED : 7|16@0+ (0.002759506,0) [0|100] "m/s" BDY
- SG_ PCM_GAS : 23|7@0+ (1,0) [0|127] "" BDY
- SG_ ZEROS_BOH : 16|1@0+ (1,0) [0|255] "" BDY
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
- SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
- SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
- SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
- SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
- SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
- SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 795 XXX_12: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 800 XXX_13: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 804 CRUISE: 8 PCM
- SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" NEO
- SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" NEO
- SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" NEO
- SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" NEO
- SG_ BOH2 : 47|8@0- (1,0) [0|255] "" NEO
- SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 806 SCM_FEEDBACK: 8 SCM
- SG_ CMBS_BUTTON : 22|2@0+ (1,0) [0|3] "" NEO
- SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" NEO
- SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" NEO
- SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" NEO
- SG_ REVERSE_LIGHT : 18|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 808 XXX_14: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 829 LKAS_HUD_2: 5 ADAS
- SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
- SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
- SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
- SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
- SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
- SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
- SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
- SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
- SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 862 XXX_15: 8 ADAS
- SG_ UI_ALERTS : 7|56@0+ (1,0) [0|127] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 884 STALK_STATUS: 8 XXX
- SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" NEO
- SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" NEO
- SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" NEO
- SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 891 XXX_17: 8 XXX
- SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 892 CRUISE_PARAMS: 8 PCM
- SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 927 XXX_19: 8 ADAS
- SG_ ZEROS_BOH : 7|17@0+ (1,0) [0|127] "" BDY
- SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|15] "" BDY
- SG_ ZEROS_BOH2 : 31|8@0+ (1,0) [0|127] "" BDY
- SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|15] "" BDY
- SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|15] "" BDY
- SG_ LEAD_SPEED : 39|9@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_STATE : 46|3@0+ (1,0) [0|127] "" BDY
- SG_ LEAD_DISTANCE : 43|5@0+ (1,0) [0|31] "" BDY
- SG_ ZEROS_BOH3 : 54|7@0+ (1,0) [0|127] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 929 XXX_20: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 985 XXX_21: 3 XXX
- SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 1024 XXX_22: 5 XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 1027 XXX_23: 5 XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 1029 DOORS_STATUS: 8 BDY
- SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" NEO
- SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" NEO
- SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" NEO
- SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" NEO
- SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 1036 XXX_24: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 1039 XXX_25: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 1108 XXX_26: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 1302 XXX_27: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 1322 XXX_28: 5 XXX
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
-
-BO_ 1361 XXX_29: 5 XXX
-
-BO_ 1365 XXX_30: 5 XXX
-
-BO_ 1424 XXX_31: 5 XXX
-
-BO_ 1600 XXX_32: 5 XXX
-
-BO_ 1601 XXX_33: 8 XXX
-
-BO_ 1633 XXX_34: 8 XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
-
-BO_ 419 GEARBOX_2: 8 XXX
- SG_ GEAR : 29|6@0+ (1,0) [0|63] "" NEO
- SG_ GEAR_SHIFTER : 34|3@0+ (1,0) [0|7] "" NEO
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" NEO
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
-
-BO_TX_BU_ 228 : NEO,ADAS;
-BO_TX_BU_ 506 : NEO,ADAS;
-BO_TX_BU_ 780 : NEO,ADAS;
-BO_TX_BU_ 829 : NEO,ADAS;
-BO_TX_BU_ 862 : NEO,ADAS;
-BO_TX_BU_ 927 : NEO,ADAS;
-
-
-CM_ "CHFFR_METRIC 330 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
-CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
-CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
-CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
-CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
-CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
-CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
-CM_ SG_ 806 REVERSE_LIGHT "Might be reverse gear selected and not the lights";
-CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
-VAL_ 399 STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 450 EPB_STATE 3 "engaged" 2 "disengaging" 1 "engaging" 0 "disengaged" ;
-VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
-VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
-VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
-VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
-VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
-VAL_ 927 ACC_ALERTS 29 "esp_active_acc_canceled" 10 "b_pedal_applied" 9 "speed_too_low" 8 "speed_too_high" 7 "p_brake_applied" 6 "gear_no_d" 5 "seatbelt" 4 "too_steep_downhill" 3 "too_steep_uphill" 2 "too_close" 1 "no_vehicle_ahead" ;
diff --git a/opendbc/honda_crv_ex_2017_body_generated.dbc b/opendbc/honda_crv_ex_2017_body_generated.dbc
new file mode 100644
index 00000000000000..4d154e53f730b7
--- /dev/null
+++ b/opendbc/honda_crv_ex_2017_body_generated.dbc
@@ -0,0 +1,13 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+CM_ "honda_crv_ex_2017_body.dbc starts here";
+BO_ 318291879 BSM_STATUS_RIGHT: 8 XXX
+ SG_ BSM_ALERT : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ BSM_MODE : 6|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 318291615 BSM_STATUS_LEFT: 8 XXX
+ SG_ BSM_ALERT : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ BSM_MODE : 6|2@0+ (1,0) [0|3] "" XXX
+
+VAL_ 318291879 BSM_MODE 2 "blind_spot" 1 "cross_traffic" 0 "off";
+VAL_ 318291615 BSM_MODE 2 "blind_spot" 1 "cross_traffic" 0 "off";
diff --git a/opendbc/honda_crv_ex_2017_can_generated.dbc b/opendbc/honda_crv_ex_2017_can_generated.dbc
index 2a6449f524f0b3..2e6fbf8bf57dbf 100644
--- a/opendbc/honda_crv_ex_2017_can_generated.dbc
+++ b/opendbc/honda_crv_ex_2017_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _bosch_2018.dbc starts here"
+CM_ "Imported file _bosch_2018.dbc starts here";
VERSION ""
@@ -37,6 +37,12 @@ NS_ :
BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
@@ -45,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -52,17 +66,12 @@ BO_ 232 BRAKE_HOLD: 7 XXX
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
@@ -89,10 +98,11 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
@@ -104,6 +114,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 450 EPB_STATUS: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
@@ -118,15 +135,26 @@ BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
BO_ 495 ACC_CONTROL_ON: 8 XXX
SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
@@ -144,6 +172,82 @@ BO_ 545 XXX_16: 6 SCM
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
@@ -173,16 +277,16 @@ BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
@@ -200,8 +304,8 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
@@ -265,11 +369,26 @@ BO_ 891 STALK_STATUS_2: 8 XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-CM_ "honda_crv_ex_2017_can.dbc starts here"
+CM_ "honda_crv_ex_2017_can.dbc starts here";
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
BO_ 401 GEARBOX: 8 PCM
SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
SG_ BOH : 45|6@0+ (1,0) [0|63] "" XXX
diff --git a/opendbc/honda_crv_executive_2016_can_generated.dbc b/opendbc/honda_crv_executive_2016_can_generated.dbc
new file mode 100644
index 00000000000000..7a7334cd9c6cf1
--- /dev/null
+++ b/opendbc/honda_crv_executive_2016_can_generated.dbc
@@ -0,0 +1,319 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _comma.dbc starts here";
+BO_ 512 GAS_COMMAND: 6 EON
+ SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
+ SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
+ SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
+
+BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
+ SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" EON
+ SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" EON
+ SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
+
+VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+
+
+CM_ "Imported file _honda_2017.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BU_: EBCM ADAS PCM EPS VSA SCM BDY XXX EPB EON
+
+BO_ 344 ENGINE_DATA: 8 PCM
+ SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 380 POWERTRAIN_DATA: 8 PCM
+ SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" EON
+ SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" EON
+ SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" EON
+ SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" EON
+ SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 420 VSA_STATUS: 8 VSA
+ SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
+ SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
+BO_ 432 STANDSTILL: 7 VSA
+ SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
+ SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 464 WHEEL_SPEEDS: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 506 BRAKE_COMMAND: 8 ADAS
+ SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00 : 13|5@0+ (1,0) [0|1] "" EBCM
+ SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00_2 : 23|3@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00_3 : 19|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
+ SG_ COMPUTER_BRAKE_REQUEST : 16|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_1 : 31|1@0+ (1,0) [0|1] "" EBCM
+ SG_ AEB_REQ_1 : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_REQ_2 : 26|3@0+ (1,0) [0|7] "" XXX
+ SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
+ SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
+ SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
+ SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
+
+BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
+ SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 773 SEATBELT_STATUS: 7 BDY
+ SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 777 LOCK_STATUS: 8 XXX
+ SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" EON
+ SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 780 ACC_HUD: 8 ADAS
+ SG_ PCM_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" BDY
+ SG_ PCM_GAS : 23|8@0+ (1,0) [0|127] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
+ SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
+ SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
+ SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
+ SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
+ SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
+ SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
+
+BO_ 804 CRUISE: 8 PCM
+ SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" EON
+ SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
+ SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ BOH2 : 47|8@0- (1,0) [0|255] "" EON
+ SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 829 LKAS_HUD: 5 ADAS
+ SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
+ SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
+ SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
+ SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
+ SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
+ SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
+ SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
+ SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 892 CRUISE_PARAMS: 8 PCM
+ SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 1029 DOORS_STATUS: 8 BDY
+ SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
+ SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
+CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
+CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
+CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
+CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
+CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
+
+
+VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
+VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
+VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
+VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
+VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
+
+CM_ "honda_crv_executive_2016_can.dbc starts here";
+
+
+
+BO_ 342 STEERING_SENSORS: 6 EPS
+ SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
+
+BO_ 399 STEER_STATUS: 6 EPS
+ SG_ STEER_TORQUE_SENSOR : 7|12@0- (-1,0) [-2047.5|2047.5] "tbd" EON
+ SG_ STEER_TORQUE_MOTOR : 23|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_CONTROL_ACTIVE : 36|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_STATUS : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
+
+BO_ 419 GEARBOX: 8 PCM
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
+ SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
+
+BO_ 404 STEERING_CONTROL: 4 EON
+ SG_ STEER_TORQUE : 7|12@0- (1,0) [-768|768] "" EPS
+ SG_ SET_ME_X00 : 11|4@0+ (1,0) [0|15] "" EPS
+ SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
+ SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
+ SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EPS
+ SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EPS
+
+BO_ 422 SCM_BUTTONS: 8 SCM
+ SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
+ SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
+ SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
+ SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 487 BRAKE_PRESSURE: 4 VSA
+ SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
+ SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
+ SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
+
+BO_ 660 SCM_FEEDBACK: 8 SCM
+ SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
+ SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
+ SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 891 WIPERS: 8 XXX
+ SG_ WIPERS : 17|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
+VAL_ 419 GEAR_SHIFTER 32 "D" 8 "R" 4 "P" ;
+VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
+VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
+VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
+VAL_ 891 WIPERS 4 "High" 2 "Low" 0 "Off" ;
+
+CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/honda_crv_hybrid_2019_can_generated.dbc b/opendbc/honda_crv_hybrid_2019_can_generated.dbc
index 4fd8ae924a43ef..e29d032014ba55 100644
--- a/opendbc/honda_crv_hybrid_2019_can_generated.dbc
+++ b/opendbc/honda_crv_hybrid_2019_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _bosch_2018.dbc starts here"
+CM_ "Imported file _bosch_2018.dbc starts here";
VERSION ""
@@ -37,6 +37,12 @@ NS_ :
BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
@@ -45,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -52,17 +66,12 @@ BO_ 232 BRAKE_HOLD: 7 XXX
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
@@ -89,10 +98,11 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
@@ -104,6 +114,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 450 EPB_STATUS: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
@@ -118,15 +135,26 @@ BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
BO_ 495 ACC_CONTROL_ON: 8 XXX
SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
@@ -144,6 +172,82 @@ BO_ 545 XXX_16: 6 SCM
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
@@ -173,16 +277,16 @@ BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
@@ -200,8 +304,8 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
@@ -265,11 +369,26 @@ BO_ 891 STALK_STATUS_2: 8 XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-CM_ "honda_crv_hybrid_2019_can.dbc starts here"
+CM_ "honda_crv_hybrid_2019_can.dbc starts here";
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
BO_ 419 GEARBOX: 8 PCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_crv_touring_2016_can_generated.dbc b/opendbc/honda_crv_touring_2016_can_generated.dbc
index 94e20b13797532..a3d21d3b895970 100644
--- a/opendbc/honda_crv_touring_2016_can_generated.dbc
+++ b/opendbc/honda_crv_touring_2016_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "honda_crv_touring_2016_can.dbc starts here"
+CM_ "honda_crv_touring_2016_can.dbc starts here";
@@ -250,8 +262,8 @@ BO_ 342 STEERING_SENSORS: 6 EPS
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 6 EPS
- SG_ STEER_TORQUE_SENSOR : 7|12@0- (1,0) [-2047.5|2047.5] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|12@0- (-1,0) [-2047.5|2047.5] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_CONTROL_ACTIVE : 36|1@0+ (1,0) [0|1] "" EON
SG_ STEER_STATUS : 35|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_fit_ex_2018_can_generated.dbc b/opendbc/honda_fit_ex_2018_can_generated.dbc
index 4103fa29c6b67d..3f2e2a19d41205 100644
--- a/opendbc/honda_fit_ex_2018_can_generated.dbc
+++ b/opendbc/honda_fit_ex_2018_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "honda_fit_ex_2018_can.dbc starts here"
+CM_ "honda_fit_ex_2018_can.dbc starts here";
@@ -268,10 +280,11 @@ BO_ 342 STEERING_SENSORS: 6 EPS
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_hrv_touring_2019_can_generated.dbc b/opendbc/honda_hrv_touring_2019_can_generated.dbc
new file mode 100644
index 00000000000000..5aea74bc90af18
--- /dev/null
+++ b/opendbc/honda_hrv_touring_2019_can_generated.dbc
@@ -0,0 +1,341 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _comma.dbc starts here";
+BO_ 512 GAS_COMMAND: 6 EON
+ SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
+ SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
+ SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
+
+BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
+ SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" EON
+ SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" EON
+ SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
+
+VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+
+
+CM_ "Imported file _honda_2017.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BU_: EBCM ADAS PCM EPS VSA SCM BDY XXX EPB EON
+
+BO_ 344 ENGINE_DATA: 8 PCM
+ SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 380 POWERTRAIN_DATA: 8 PCM
+ SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" EON
+ SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" EON
+ SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" EON
+ SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" EON
+ SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 420 VSA_STATUS: 8 VSA
+ SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
+ SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
+BO_ 432 STANDSTILL: 7 VSA
+ SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
+ SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 464 WHEEL_SPEEDS: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 506 BRAKE_COMMAND: 8 ADAS
+ SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00 : 13|5@0+ (1,0) [0|1] "" EBCM
+ SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00_2 : 23|3@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00_3 : 19|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
+ SG_ COMPUTER_BRAKE_REQUEST : 16|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_1 : 31|1@0+ (1,0) [0|1] "" EBCM
+ SG_ AEB_REQ_1 : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_REQ_2 : 26|3@0+ (1,0) [0|7] "" XXX
+ SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
+ SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
+ SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
+ SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
+
+BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
+ SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 773 SEATBELT_STATUS: 7 BDY
+ SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 777 LOCK_STATUS: 8 XXX
+ SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" EON
+ SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 780 ACC_HUD: 8 ADAS
+ SG_ PCM_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" BDY
+ SG_ PCM_GAS : 23|8@0+ (1,0) [0|127] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
+ SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
+ SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
+ SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
+ SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
+ SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
+ SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
+
+BO_ 804 CRUISE: 8 PCM
+ SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" EON
+ SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
+ SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ BOH2 : 47|8@0- (1,0) [0|255] "" EON
+ SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 829 LKAS_HUD: 5 ADAS
+ SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
+ SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
+ SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
+ SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
+ SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
+ SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
+ SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
+ SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 892 CRUISE_PARAMS: 8 PCM
+ SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 1029 DOORS_STATUS: 8 BDY
+ SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
+ SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
+CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
+CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
+CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
+CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
+CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
+
+
+VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
+VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
+VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
+VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
+VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
+
+CM_ "honda_hrv_touring_2019_can.dbc starts here";
+
+
+
+BO_ 145 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" EON
+
+BO_ 228 STEERING_CONTROL: 5 ADAS
+ SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
+ SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
+ SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
+ SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+
+BO_ 316 GAS_PEDAL: 8 PCM
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+
+BO_ 342 STEERING_SENSORS: 6 EPS
+ SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
+
+BO_ 399 STEER_STATUS: 7 EPS
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
+ SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 401 GEARBOX: 8 PCM
+ SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
+ SG_ GEAR : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 422 SCM_BUTTONS: 8 SCM
+ SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
+ SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
+ SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
+ SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ DRIVERS_DOOR_OPEN : 63|1@0+ (1,0) [0|1] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 487 BRAKE_PRESSURE: 4 VSA
+ SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" EON
+ SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" EON
+ SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 29|2@0+ (1,0) [0|3] "" EON
+
+BO_ 660 SCM_FEEDBACK: 8 SCM
+ SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
+ SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
+ SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
+ SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
+ SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 884 STALK_STATUS: 8 XXX
+ SG_ AUTO_HEADLIGHTS : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ HIGH_BEAM_HOLD : 47|1@0+ (1,0) [0|1] "" EON
+ SG_ HIGH_BEAM_FLASH : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ HEADLIGHTS_ON : 54|1@0+ (1,0) [0|1] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
+CM_ SG_ 420 BRAKE_HOLD_RELATED "On when Brake Hold engaged";
+
+VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
+VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
+VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
+VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
+VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
+VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
+
+CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/honda_insight_ex_2019_can_generated.dbc b/opendbc/honda_insight_ex_2019_can_generated.dbc
index cbeff828b88502..7287af23dfbb82 100644
--- a/opendbc/honda_insight_ex_2019_can_generated.dbc
+++ b/opendbc/honda_insight_ex_2019_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _bosch_2018.dbc starts here"
+CM_ "Imported file _bosch_2018.dbc starts here";
VERSION ""
@@ -37,6 +37,12 @@ NS_ :
BU_: EBCM EON CAM RADAR PCM EPS VSA SCM BDY XXX EPB
+BO_ 148 KINEMATICS: 8 XXX
+ SG_ LAT_ACCEL : 7|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 25|10@0+ (-0.035,17.92) [-20|20] "m/s2" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
BO_ 228 STEERING_CONTROL: 5 EON
SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
@@ -45,6 +51,14 @@ BO_ 228 STEERING_CONTROL: 5 EON
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" EPS
+BO_ 229 BOSCH_SUPPLEMENTAL_1: 8 XXX
+ SG_ SET_ME_X04 : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 8|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X80 : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X10 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
BO_ 232 BRAKE_HOLD: 7 XXX
SG_ XMISSION_SPEED : 7|14@0- (1,0) [1|0] "" XXX
SG_ COMPUTER_BRAKE : 39|16@0+ (1,0) [0|0] "" XXX
@@ -52,17 +66,12 @@ BO_ 232 BRAKE_HOLD: 7 XXX
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" XXX
-BO_ 304 GAS_PEDAL_2: 8 PCM
- SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
BO_ 330 STEERING_SENSORS: 8 EPS
SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" EON
- SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" EON
+ SG_ STEER_SENSOR_STATUS_1 : 34|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_2 : 33|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_SENSOR_STATUS_3 : 32|1@0+ (1,0) [0|1] "" EON
SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
@@ -89,10 +98,11 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
@@ -104,6 +114,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 450 EPB_STATUS: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" EON
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" EON
@@ -118,15 +135,26 @@ BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
BO_ 479 ACC_CONTROL: 8 EON
- SG_ SET_TO_1 : 20|5@0+ (1,0) [0|1] "" PCM
+ SG_ SET_TO_0 : 20|5@0+ (1,0) [0|1] "" XXX
SG_ CONTROL_ON : 23|3@0+ (1,0) [0|5] "" XXX
- SG_ RELATED_TO_GAS : 7|7@0+ (1,0) [0|69] "" XXX
- SG_ GAS_COMMAND : 0|9@0+ (1,0) [0|1] "" PCM
- SG_ GAS_BRAKE : 31|14@0- (1,0) [0|1] "" XXX
- SG_ ZEROS_BOH : 33|18@0+ (1,0) [100|100] "" XXX
+ SG_ GAS_COMMAND : 7|16@0- (1,0) [0|0] "" XXX
+ SG_ ACCEL_COMMAND : 31|11@0- (0.01,0) [0|0] "m/s2" XXX
+ SG_ BRAKE_LIGHTS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_REQUEST : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_RELEASE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_STATUS : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_BRAKING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_PREPARE : 43|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LAT_ACCEL : 7|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ LONG_ACCEL : 23|16@0- (0.0015,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
BO_ 495 ACC_CONTROL_ON: 8 XXX
SG_ SET_TO_75 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ SET_TO_30 : 39|8@0+ (1,0) [0|255] "" XXX
@@ -144,6 +172,82 @@ BO_ 545 XXX_16: 6 SCM
SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" BDY
+BO_ 576 LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 577 LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 579 RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 580 RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 582 ADJACENT_LEFT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 583 ADJACENT_LEFT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 585 ADJACENT_RIGHT_LANE_LINE_1: 8 CAM
+ SG_ LINE_DISTANCE_VISIBLE : 39|9@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_PROBABILITY : 46|6@0+ (0.015625,0) [0|1] "" XXX
+ SG_ LINE_OFFSET : 23|12@0+ (0.004,-8.192) [0|1] "Meters" XXX
+ SG_ LINE_ANGLE : 7|12@0+ (0.0005,-1.024) [0|1] "" XXX
+ SG_ FRAME_INDEX : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
+BO_ 586 ADJACENT_RIGHT_LANE_LINE_2: 8 CAM
+ SG_ LINE_FAR_EDGE_POSITION : 55|8@0+ (1,-128) [0|1] "" XXX
+ SG_ LINE_SOLID : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_DASHED : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_CURVATURE : 23|12@0+ (0.00001,-0.02048) [0|1] "" XXX
+ SG_ LINE_PARAMETER : 39|12@0+ (1,0) [0|1] "" XXX
+ SG_ FRAME_INDEX : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|1] "" XXX
+
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
@@ -173,16 +277,16 @@ BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
BO_ 777 CAR_SPEED: 8 PCM
- SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CAR_SPEED : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ ROUGH_CAR_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+ SG_ CAR_SPEED : 7|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_3 : 39|16@0+ (0.01,0) [0|65535] "kph" XXX
+ SG_ ROUGH_CAR_SPEED_2 : 31|8@0+ (1,0) [0|255] "mph" XXX
SG_ LOCK_STATUS : 55|2@0+ (1,0) [0|255] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
BO_ 780 ACC_HUD: 8 ADAS
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "kph" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
@@ -200,8 +304,8 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_ON : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BOH_6 : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ IMPERIAL_UNIT : 55|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_TO_X1 : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_TO_X1 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" XXX
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
@@ -265,11 +369,26 @@ BO_ 891 STALK_STATUS_2: 8 XXX
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event";
+CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event";
+CM_ SG_ 479 AEB_PREPARE "set 1s before AEB";
+CM_ SG_ 576 LINE_DISTANCE_VISIBLE "Length of line visible, undecoded";
+CM_ SG_ 577 LINE_FAR_EDGE_POSITION "Appears to be a measure of line thickness, indicates location of the portion of the line furthest from the car, undecoded";
+CM_ SG_ 577 LINE_PARAMETER "Unclear if this is low quality line curvature rate or if this is something else, but it is correlated with line curvature, undecoded";
+CM_ SG_ 577 LINE_DASHED "1 = line is dashed";
+CM_ SG_ 577 LINE_SOLID "1 = line is solid";
VAL_ 399 STEER_STATUS 6 "tmp_fault" 5 "fault_1" 4 "no_torque_alert_2" 3 "low_speed_lockout" 2 "no_torque_alert_1" 0 "normal" ;
-CM_ "honda_insight_ex_2019_can.dbc starts here"
+CM_ "honda_insight_ex_2019_can.dbc starts here";
+BO_ 304 GAS_PEDAL_2: 8 PCM
+ SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" EON
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
BO_ 419 GEARBOX: 8 PCM
SG_ GEAR : 7|8@0+ (1,0) [0|255] "" EON
SG_ GEAR_SHIFTER : 29|6@0+ (1,0) [0|63] "" EON
diff --git a/opendbc/honda_odyssey_exl_2018_generated.dbc b/opendbc/honda_odyssey_exl_2018_generated.dbc
index 1bc6e96c175882..7c7526f08c7a67 100644
--- a/opendbc/honda_odyssey_exl_2018_generated.dbc
+++ b/opendbc/honda_odyssey_exl_2018_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "honda_odyssey_exl_2018.dbc starts here"
+CM_ "honda_odyssey_exl_2018.dbc starts here";
@@ -260,10 +272,11 @@ BO_ 342 STEERING_SENSORS: 6 EPS
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_odyssey_extreme_edition_2018_china_can.dbc b/opendbc/honda_odyssey_extreme_edition_2018_china_can.dbc
deleted file mode 100644
index 6bdcaab04b9dd6..00000000000000
--- a/opendbc/honda_odyssey_extreme_edition_2018_china_can.dbc
+++ /dev/null
@@ -1,299 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: EBCM ADAS PCM EPS VSA SCM BDY XXX EPB EON INTERCEPTOR
-
-
-BO_ 344 ENGINE_DATA: 8 PCM
- SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
- SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
- SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
- SG_ ZEROS : 23|16@0+ (1,0) [0|15000] "" EON
-
-BO_ 380 POWERTRAIN_DATA: 8 PCM
- SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
- SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
- SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
- SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" EON
- SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" EON
- SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" EON
- SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" EON
- SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
- SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 432 STANDSTILL: 7 VSA
- SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
- SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 464 WHEEL_SPEEDS: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 490 VEHICLE_DYNAMICS: 8 VSA
- SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 506 BRAKE_COMMAND: 8 ADAS
- SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM
- SG_ ZEROS_BOH : 13|5@0+ (1,0) [0|1] "" EBCM
- SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_BOH2 : 23|3@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_BOH3 : 19|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
- SG_ COMPUTER_BRAKE_REQUEST : 16|1@0+ (1,0) [0|1] "" EBCM
- SG_ SET_ME_0X80 : 31|8@0+ (1,0) [0|1] "" EBCM
- SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
- SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
- SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
- SG_ ZEROS_BOH6 : 44|1@0+ (1,0) [0|1] "" EBCM
- SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ ZEROS_BOH4 : 55|8@0+ (1,0) [0|0] "" EBCM
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
-
-BO_ 512 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" INTERCEPTOR
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" INTERCEPTOR
-
-BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" EON
- SG_ STATE : 39|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
-
-BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
- SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
- SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
- SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" EON
- SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 773 SEATBELT_STATUS: 7 BDY
- SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
- SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
- SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
- SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
-
-BO_ 777 LOCK_STATUS: 8 XXX
- SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" EON
- SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 780 ACC_HUD: 8 ADAS
- SG_ PCM_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" BDY
- SG_ PCM_GAS : 23|8@0+ (1,0) [0|127] "" BDY
- SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
- SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
- SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
- SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
- SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
- SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
- SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
- SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
- SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
- SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
-
-BO_ 804 CRUISE: 8 PCM
- SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" EON
- SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" EON
- SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
- SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" EON
- SG_ BOH2 : 47|8@0- (1,0) [0|255] "" EON
- SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-BO_ 829 LKAS_HUD: 5 ADAS
- SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
- SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
- SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
- SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
- SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
- SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
- SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
- SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH2 : 23|2@0+ (1,0) [0|4] "" BDY
- SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
- SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
- SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
- SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
- SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
- SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
- SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
- SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
-
-BO_ 892 CRUISE_PARAMS: 8 PCM
- SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
-
-BO_ 316 GAS_PEDAL: 8 PCM
- SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
-
-BO_ 342 STEERING_SENSORS: 6 EPS
- SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
- SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
-
-BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-2985|2985] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
- SG_ STEER_STATUS : 43|4@0+ (1,0) [0|15] "" EON
- SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
-
-BO_ 401 GEARBOX: 8 PCM
- SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
- SG_ GEAR : 35|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 404 STEERING_CONTROL: 4 EON
- SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
- SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
- SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EPS
- SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EPS
- SG_ STEER_TORQUE : 7|16@0- (-1,0) [-32767|32767] "" EPS
-
-BO_ 420 VSA_STATUS: 8 VSA
- SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
- SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
- SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 422 SCM_BUTTONS: 8 SCM
- SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
- SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
- SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
- SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
- SG_ DRIVERS_DOOR_OPEN : 63|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 450 EPB_STATUS: 8 XXX
- SG_ EPB_BRAKE_AND_PULL : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ EPB_STATE : 29|2@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 660 SCM_FEEDBACK: 8 SCM
- SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
- SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
- SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
-
-BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
- SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
- SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 1302 ODOMETER: 8 XXX
- SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
- SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
- SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
-
-
-
-
-CM_ "CHFFR_METRIC 342 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 380 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 804 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
-CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
-CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
-CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
-CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
-CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
-CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
-CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
-VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
-VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
-VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
-VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
-VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-VAL_ 399 STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal" ;
-VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
-VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
-VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
-VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
-VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
diff --git a/opendbc/honda_odyssey_extreme_edition_2018_china_can_generated.dbc b/opendbc/honda_odyssey_extreme_edition_2018_china_can_generated.dbc
new file mode 100644
index 00000000000000..b5422c0190da0c
--- /dev/null
+++ b/opendbc/honda_odyssey_extreme_edition_2018_china_can_generated.dbc
@@ -0,0 +1,331 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _comma.dbc starts here";
+BO_ 512 GAS_COMMAND: 6 EON
+ SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
+ SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
+ SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
+
+BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
+ SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-83.3) [0|1] "" EON
+ SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" EON
+ SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
+
+VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+
+
+CM_ "Imported file _honda_2017.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BU_: EBCM ADAS PCM EPS VSA SCM BDY XXX EPB EON
+
+BO_ 344 ENGINE_DATA: 8 PCM
+ SG_ XMISSION_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ XMISSION_SPEED2 : 39|16@0+ (0.01,0) [0|250] "kph" EON
+ SG_ ODOMETER : 55|8@0+ (10,0) [0|2550] "m" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 380 POWERTRAIN_DATA: 8 PCM
+ SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" EON
+ SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" EON
+ SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" EON
+ SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" EON
+ SG_ BRAKE_SWITCH : 32|1@0+ (1,0) [0|1] "rpm" EON
+ SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" EON
+ SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" EON
+ SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 420 VSA_STATUS: 8 VSA
+ SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
+ SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_HOLD_ENABLED : 45|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
+BO_ 432 STANDSTILL: 7 VSA
+ SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
+ SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 464 WHEEL_SPEEDS: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_FR : 8|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RL : 25|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ WHEEL_SPEED_RR : 42|15@0+ (0.01,0) [0|250] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 490 VEHICLE_DYNAMICS: 8 VSA
+ SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 506 BRAKE_COMMAND: 8 ADAS
+ SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00 : 13|5@0+ (1,0) [0|1] "" EBCM
+ SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00_2 : 23|3@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_X00_3 : 19|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
+ SG_ COMPUTER_BRAKE_REQUEST : 16|1@0+ (1,0) [0|1] "" EBCM
+ SG_ SET_ME_1 : 31|1@0+ (1,0) [0|1] "" EBCM
+ SG_ AEB_REQ_1 : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ AEB_REQ_2 : 26|3@0+ (1,0) [0|7] "" XXX
+ SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
+ SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
+ SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
+ SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
+ SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
+
+BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
+ SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" EON
+ SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" EON
+ SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ SET_TO_X55_2 : 47|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 773 SEATBELT_STATUS: 7 BDY
+ SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_UNLATCHED : 10|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_PASS_LATCHED : 11|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_UNLATCHED : 12|1@0+ (1,0) [0|1] "" EON
+ SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_OFF : 14|1@0+ (1,0) [0|1] "" EON
+ SG_ PASS_AIRBAG_ON : 15|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
+
+BO_ 777 LOCK_STATUS: 8 XXX
+ SG_ DOORS_UNLOCKED : 54|1@0+ (1,0) [0|1] "" EON
+ SG_ DOORS_LOCKED : 55|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 780 ACC_HUD: 8 ADAS
+ SG_ PCM_SPEED : 7|16@0+ (0.01,0) [0|250] "kph" BDY
+ SG_ PCM_GAS : 23|8@0+ (1,0) [0|127] "" BDY
+ SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
+ SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
+ SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
+ SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
+ SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
+ SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
+ SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
+ SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
+
+BO_ 804 CRUISE: 8 PCM
+ SG_ HUD_SPEED_KPH : 7|8@0+ (1,0) [0|255] "kph" EON
+ SG_ HUD_SPEED_MPH : 15|8@0+ (1,0) [0|255] "mph" EON
+ SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" EON
+ SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" EON
+ SG_ BOH2 : 47|8@0- (1,0) [0|255] "" EON
+ SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+BO_ 829 LKAS_HUD: 5 ADAS
+ SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
+ SG_ SET_ME_X41 : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
+ SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
+ SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
+ SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
+ SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
+ SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
+ SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
+ SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
+ SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
+ SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
+ SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
+ SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
+ SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
+ SG_ CHECKSUM : 35|4@0+ (1,0) [0|15] "" BDY
+
+BO_ 892 CRUISE_PARAMS: 8 PCM
+ SG_ CRUISE_SPEED_OFFSET : 31|8@0- (0.1,0) [-128|127] "kph" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+
+BO_ 1029 DOORS_STATUS: 8 BDY
+ SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" EON
+ SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" EON
+ SG_ TRUNK_OPEN : 41|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
+CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
+CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
+CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
+CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
+CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
+
+
+VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
+VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
+VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
+VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
+VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
+
+CM_ "honda_odyssey_extreme_edition_2018_china_can.dbc starts here";
+
+
+
+BO_ 316 GAS_PEDAL: 8 PCM
+ SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" EON
+
+BO_ 342 STEERING_SENSORS: 6 EPS
+ SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" EON
+ SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" EON
+
+BO_ 399 STEER_STATUS: 7 EPS
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-2985|2985] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
+ SG_ STEER_STATUS : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM : 51|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
+
+BO_ 401 GEARBOX: 8 PCM
+ SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" EON
+ SG_ GEAR : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 404 STEERING_CONTROL: 4 EON
+ SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
+ SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
+ SG_ COUNTER : 29|2@0+ (1,0) [0|15] "" EPS
+ SG_ CHECKSUM : 27|4@0+ (1,0) [0|3] "" EPS
+ SG_ STEER_TORQUE : 7|16@0- (-1,0) [-32767|32767] "" EPS
+
+BO_ 422 SCM_BUTTONS: 8 SCM
+ SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" EON
+ SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" EON
+ SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" EON
+ SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" EON
+ SG_ DRIVERS_DOOR_OPEN : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 450 EPB_STATUS: 8 XXX
+ SG_ EPB_BRAKE_AND_PULL : 6|1@0+ (1,0) [0|1] "" XXX
+ SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ EPB_STATE : 29|2@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 660 SCM_FEEDBACK: 8 SCM
+ SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" EON
+ SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" EON
+ SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+
+BO_ 862 HIGHBEAM_CONTROL: 8 ADAS
+ SG_ ZEROS_BOH : 7|50@0+ (1,0) [0|127] "" BDY
+ SG_ ZEROS_BOH_2 : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ HIGHBEAMS_ON : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ AUTO_HIGHBEAMS_ACTIVE : 53|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 1302 ODOMETER: 8 XXX
+ SG_ ODOMETER : 7|24@0+ (1,0) [0|16777215] "km" EON
+ SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
+
+CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
+VAL_ 399 STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal" ;
+VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
+VAL_ 401 GEAR 7 "L" 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
+VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
+VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
+VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
diff --git a/opendbc/honda_pilot_touring_2017_can_generated.dbc b/opendbc/honda_pilot_touring_2017_can_generated.dbc
index c19871b9e622d3..9cca24912c6db3 100644
--- a/opendbc/honda_pilot_touring_2017_can_generated.dbc
+++ b/opendbc/honda_pilot_touring_2017_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "honda_pilot_touring_2017_can.dbc starts here"
+CM_ "honda_pilot_touring_2017_can.dbc starts here";
@@ -268,10 +280,11 @@ BO_ 342 STEERING_SENSORS: 6 EPS
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/honda_ridgeline_black_edition_2017_can_generated.dbc b/opendbc/honda_ridgeline_black_edition_2017_can_generated.dbc
index 6d8186c19ddd0b..0c04d917940727 100644
--- a/opendbc/honda_ridgeline_black_edition_2017_can_generated.dbc
+++ b/opendbc/honda_ridgeline_black_edition_2017_can_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-83.3) [0|1] "" INTERCEPTOR
SG_ GAS_COMMAND2 : 23|16@0+ (0.126992032,-83.3) [0|1] "" INTERCEPTOR
@@ -19,7 +19,7 @@ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-CM_ "Imported file _honda_2017.dbc starts here"
+CM_ "Imported file _honda_2017.dbc starts here";
VERSION ""
@@ -78,6 +78,7 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON
+ SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" EON
SG_ BRAKE_HOLD_RELATED : 52|1@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_HOLD_ACTIVE : 46|1@0+ (1,0) [0|1] "" EON
@@ -85,6 +86,13 @@ BO_ 420 VSA_STATUS: 8 VSA
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON
+BO_ 427 STEER_MOTOR_TORQUE: 3 EPS
+ SG_ CONFIG_VALID : 7|1@0+ (1,0) [0|1] "" EON
+ SG_ MOTOR_TORQUE : 1|10@0+ (1,0) [0|256] "" EON
+ SG_ OUTPUT_DISABLED : 22|1@0+ (1,0) [0|1] "" EON
+ SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" EON
+ SG_ CHECKSUM : 19|4@0+ (1,0) [0|15] "" EON
+
BO_ 432 STANDSTILL: 7 VSA
SG_ CONTROLLED_STANDSTILL : 0|1@0+ (1,0) [0|1] "" EON
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" EON
@@ -123,7 +131,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ SET_ME_X00_4 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
- SG_ AEB : 41|2@0+ (1,0) [0|3] "" XXX
+ SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X00_5 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM
@@ -163,7 +171,7 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
- SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
+ SG_ FCM_OFF_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
@@ -173,10 +181,12 @@ BO_ 780 ACC_HUD: 8 ADAS
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
- SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
- SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01_2 : 55|1@0+ (1,0) [0|1] "" BDY
+ SG_ IMPERIAL_UNIT : 54|1@0+ (1,0) [0|1] "" BDY
+ SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
+ SG_ CHIME : 51|3@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X01 : 48|1@0+ (1,0) [0|1] "" BDY
+ SG_ ICONS : 63|2@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
@@ -226,6 +236,7 @@ BO_ 1029 DOORS_STATUS: 8 BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
+CM_ SG_ 506 AEB_REQ_1 "set for duration of suspected AEB event";
CM_ SG_ 773 PASS_AIRBAG_ON "Might just be indicator light";
CM_ SG_ 773 PASS_AIRBAG_OFF "Might just be indicator light";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
@@ -235,11 +246,12 @@ CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
+VAL_ 506 AEB_STATUS 3 "aeb_prepare" 2 "aeb_ready" 1 "aeb_braking" 0 "no_aeb" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
-CM_ "honda_ridgeline_black_edition_2017_can.dbc starts here"
+CM_ "honda_ridgeline_black_edition_2017_can.dbc starts here";
@@ -263,10 +275,11 @@ BO_ 342 STEERING_SENSORS: 6 EPS
SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" EON
BO_ 399 STEER_STATUS: 7 EPS
- SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" EON
- SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON
+ SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" EON
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" EON
+ SG_ STEER_CONFIG_INDEX : 43|4@0+ (1,0) [0|15] "" EON
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" EON
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" EON
diff --git a/opendbc/hyundai_2015_ccan.dbc b/opendbc/hyundai_2015_ccan.dbc
deleted file mode 100644
index addc0cac31fa08..00000000000000
--- a/opendbc/hyundai_2015_ccan.dbc
+++ /dev/null
@@ -1,1416 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: IAP ODS _4WD BCM HUD DATC MDPS AAF_Tester AEMC SMK _4WD EPB CUBIS MTS TMU EVP CGW TPMS LPI DI_BOX SPAS EMS LCA TCU IBOX FATC AFLS FPCM SCC AHLS AVM ABS SNV OPI PGS SAS AAF Dummy LDWS_LKAS LVR ESC PSB CLU ECS ACU REA
-
-BO_ 1532 ODS13: 5 ODS
- SG_ CR_Ods_ID : 0|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_Chksum_H : 8|8@1+ (1.0,0.0) [0.0|255.0] "" Dummy
- SG_ CR_Ods_Chksum_L : 16|8@1+ (1.0,0.0) [0.0|255.0] "" Dummy
- SG_ CR_Ods_RomID_H : 24|8@1+ (1.0,0.0) [0.0|255.0] "" Dummy
- SG_ CR_Ods_RomID_L : 32|8@1+ (1.0,0.0) [0.0|255.0] "" Dummy
-
-BO_ 1531 ODS12: 8 ODS
- SG_ CR_Ods_SerNum0 : 0|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum1 : 8|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum2 : 16|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum3 : 24|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum4 : 32|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum5 : 40|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum6 : 48|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
- SG_ CR_Ods_SerNum7 : 56|8@1+ (1.0,0.0) [0.0|255.0] "" ACU
-
-BO_ 1530 ODS11: 8 ODS
- SG_ CF_Ods_PrcCmd : 1|1@1+ (1.0,0.0) [0.0|1.0] "" Dummy
- SG_ CF_Ods_BtsFail : 3|1@1+ (1.0,0.0) [0.0|1.0] "" Dummy
- SG_ CF_Ods_AcuRcvSN : 4|1@1+ (1.0,0.0) [0.0|1.0] "" ACU
- SG_ CF_Ods_EolCal : 5|1@1+ (1.0,0.0) [0.0|1.0] "" ACU
- SG_ CF_Ods_PsFail : 6|1@1+ (1.0,0.0) [0.0|1.0] "" ACU
- SG_ CF_Ods_EcuFail : 7|1@1+ (1.0,0.0) [0.0|1.0] "" ACU
- SG_ CF_Ods_WgtStat : 8|1@1+ (1.0,0.0) [0.0|1.0] "" ACU
- SG_ CF_Ods_OccStat : 16|1@1+ (1.0,0.0) [0.0|1.0] "" ACU
- SG_ CR_Wcs_ErrStat : 32|8@1+ (1.0,0.0) [0.0|63.0] "" ACU
- SG_ CR_Wcs_ClassStat : 40|8@1+ (1.0,0.0) [0.0|4.0] "" ACU,BCM
-
-BO_ 1017 ECS12: 4 ECS
- SG_ Height_FL : 0|8@1+ (1.0,-128.0) [-128.0|127.0] "mm" AFLS
- SG_ Height_FR : 8|8@1+ (1.0,-128.0) [-128.0|127.0] "mm" AFLS
- SG_ Height_RL : 16|8@1+ (1.0,-128.0) [-128.0|127.0] "mm" AFLS
- SG_ Height_RR : 24|8@1+ (1.0,-128.0) [-128.0|127.0] "mm" AFLS
-
-BO_ 1268 SPAS12: 8 SPAS
- SG_ CF_Spas_HMI_Stat : 0|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ CF_Spas_Disp : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,EMS
- SG_ CF_Spas_FIL_Ind : 10|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_FIR_Ind : 13|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_FOL_Ind : 16|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_FOR_Ind : 19|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_VolDown : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_RIL_Ind : 24|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_RIR_Ind : 27|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_FLS_Alarm : 30|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_ROL_Ind : 32|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_ROR_Ind : 35|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_FCS_Alarm : 38|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_FI_Ind : 40|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_RI_Ind : 43|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU
- SG_ CF_Spas_FRS_Alarm : 46|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_FR_Alarm : 48|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_Spas_RR_Alarm : 50|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_Spas_BEEP_Alarm : 52|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
- SG_ CF_Spas_StatAlarm : 56|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Spas_RLS_Alarm : 57|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_RCS_Alarm : 59|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_RRS_Alarm : 61|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1265 CLU11: 4 CLU
- SG_ CF_Clu_CruiseSwState : 0|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,LDWS_LKAS,SCC
- SG_ CF_Clu_CruiseSwMain : 3|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,LDWS_LKAS,SCC
- SG_ CF_Clu_SldMainSW : 4|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Clu_ParityBit1 : 5|1@1+ (1.0,0.0) [0.0|1.0] "pulse count" EMS
- SG_ CF_Clu_VanzDecimal : 6|2@1+ (0.125,0.0) [0.0|0.375] "" EMS
- SG_ CF_Clu_Vanz : 8|9@1+ (0.5,0.0) [0.0|255.5] "km/h or MPH" BCM,CUBIS,EMS,IBOX,LDWS_LKAS,MDPS,SCC
- SG_ CF_Clu_SPEED_UNIT : 17|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CUBIS,EMS,IBOX,LDWS_LKAS,MDPS,SCC
- SG_ CF_Clu_DetentOut : 18|1@1+ (1.0,0.0) [0.0|1.0] "" AVM,BCM,LCA,PGS,SPAS
- SG_ CF_Clu_RheostatLevel : 19|5@1+ (1.0,0.0) [0.0|31.0] "" AVM,BCM,LCA,PGS,SPAS
- SG_ CF_Clu_CluInfo : 24|1@1+ (1.0,0.0) [0.0|1.0] "" BCM
- SG_ CF_Clu_AmpInfo : 25|1@1+ (1.0,0.0) [0.0|1.0] "" BCM
- SG_ CF_Clu_AliveCnt1 : 28|4@1+ (1.0,0.0) [0.0|15.0] "" AHLS,EMS,EPB,LDWS_LKAS,MDPS,SCC
-
-BO_ 1492 TMU_GW_PE_01: 8 CLU
- SG_ TMU_IVRActivity : 0|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
- SG_ TMU_PhoneActivity : 2|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
-
-BO_ 1491 HU_DATC_PE_00: 8 CLU
- SG_ HU_VRActivity : 0|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
- SG_ HU_PhoneActivity : 2|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
- SG_ BlowerNoiseControl : 4|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
-
-BO_ 1490 HU_DATC_E_02: 8 CLU
- SG_ HU_DATC_RearOnOffSet : 6|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
- SG_ HU_DATC_ADSOnOffSet : 8|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
-
-BO_ 1479 EMS21: 8 EMS
- SG_ SCR_LEVEL_WARN_LAMP : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ SCR_LEVEL_WARN : 1|3@1+ (1.0,0.0) [0.0|4.0] "" CLU
- SG_ SCR_SYS_ERROR_WARN : 4|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ SCR_SYSTEM_WARN_LAMP : 7|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ SCR_INDUCEMENT_EXIT_COND : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ SCR_UREA_LEVEL : 16|8@1+ (0.5,0.0) [0.0|100.0] "%" CLU
- SG_ SCR_NO_REMAINING_RESTARTS : 24|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ SCR_REMAINING_DISTANCE : 32|16@1+ (1.0,0.0) [0.0|25000.0] "km" CLU
-
-BO_ 1472 GW_Warning_PE: 8 BCM
- SG_ Audio_VolumeDown : 38|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Pas_Spkr_Flh_Alarm : 48|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Pas_Spkr_Fcnt_Alarm : 50|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Pas_Spkr_Frh_Alarm : 52|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Pas_Spkr_Rlh_Alarm : 56|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,PGS
- SG_ Pas_Spkr_Rcnt_Alarm : 58|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Pas_Spkr_Rrh_Alarm : 60|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,PGS
-
-BO_ 1984 CAL_SAS11: 2 ESC
- SG_ CCW : 0|4@1+ (1.0,0.0) [0.0|15.0] "" SAS
- SG_ SAS_CID : 4|11@1+ (1.0,0.0) [0.0|2047.0] "" SAS
-
-BO_ 1456 CLU12: 4 CLU
- SG_ CF_Clu_Odometer : 0|24@1+ (0.1,0.0) [0.0|1677721.4] "km" _4WD,AAF,BCM,CUBIS,EMS,EPB,IBOX,LDWS_LKAS,SCC,TPMS
-
-BO_ 688 SAS11: 5 MDPS
- SG_ SAS_Angle : 0|16@1- (0.1,0.0) [-3276.8|3276.7] "Deg" _4WD,ACU,AFLS,AVM,CLU,ECS,EMS,ESC,IBOX,LCA,LDWS_LKAS,PGS,PSB,SCC,SPAS,TCU,_4WD,ACU,AFLS,AVM,BCM,CLU,ECS,EMS,ESC,IBOX,LCA,LDWS_LKAS,PGS,PSB,SCC,SPAS,TCU
- SG_ SAS_Speed : 16|8@1+ (4.0,0.0) [0.0|1016.0] "" AFLS,ECS,ESC,IBOX,LDWS_LKAS,SCC,SPAS,TCU,AFLS,ECS,ESC,IBOX,LDWS_LKAS,SCC,SPAS,TCU
- SG_ SAS_Stat : 24|8@1+ (1.0,0.0) [0.0|255.0] "" ECS,ESC,IBOX,LDWS_LKAS,PSB,SCC,SPAS,TCU,ECS,ESC,IBOX,LDWS_LKAS,PSB,SCC,SPAS,TCU
- SG_ MsgCount : 32|4@1+ (1.0,0.0) [0.0|15.0] "" ECS,ESC,IBOX,LDWS_LKAS,PSB,SCC,SPAS,ECS,ESC,IBOX,LDWS_LKAS,PSB,SCC,SPAS
- SG_ CheckSum : 36|4@1+ (1.0,0.0) [0.0|15.0] "" ECS,EMS,ESC,IBOX,LDWS_LKAS,PSB,SCC,SPAS,ECS,EMS,ESC,IBOX,LDWS_LKAS,PSB,SCC,SPAS
-
-BO_ 1441 ACU12: 8 ACU
- SG_ CR_Acu_SN : 0|64@1+ (1.0,0.0) [0.0|0.0] "" ODS
-
-BO_ 1440 ACU11: 8 ACU
- SG_ CF_Ods_SNRcv : 1|1@1+ (1.0,0.0) [0.0|1.0] "" ODS
- SG_ CF_Ods_IDRcv : 2|1@1+ (1.0,0.0) [0.0|1.0] "" ODS
- SG_ CF_Ods_RZReq : 4|1@1+ (1.0,0.0) [0.0|1.0] "" ODS
- SG_ CF_Abg_DepInhEnt : 6|1@1+ (1.0,0.0) [0.0|1.0] "" ODS
- SG_ CF_Abg_DepEnt : 7|1@1+ (1.0,0.0) [0.0|1.0] "" ODS
- SG_ CF_PasBkl_FltStat : 28|1@1+ (1.0,0.0) [0.0|1.0] "" ODS,PSB
- SG_ CF_DriBkl_FltStat : 29|1@1+ (1.0,0.0) [0.0|1.0] "" ODS,PSB
- SG_ CF_PasBkl_Stat : 30|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,ODS,PSB,TMU
- SG_ CF_DriBkl_Stat : 31|1@1+ (1.0,0.0) [0.0|1.0] "" ODS,PSB
- SG_ CF_SWL_Ind : 32|2@1+ (1.0,0.0) [0.0|3.0] "" CUBIS,IBOX
- SG_ CF_Acu_FltStat : 34|2@1+ (1.0,0.0) [0.0|3.0] "" CUBIS,IBOX
- SG_ CF_Acu_ExtOfSab : 36|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,CUBIS,IBOX
- SG_ CF_Acu_Dtc : 40|16@1+ (1.0,0.0) [0.0|65535.0] "" CUBIS,IBOX
- SG_ CF_Acu_NumOfFlt : 56|8@1+ (1.0,0.0) [0.0|255.0] "" CUBIS,IBOX
-
-BO_ 1437 AHLS11: 8 AHLS
- SG_ CF_Ahls_WarnLamp : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Ahls_WarnMsg : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1434 PSB11: 2 PSB
- SG_ PSB_LH_FAIL : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ PSB_LH_TGL : 2|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ PSB_LH_ACT : 3|4@1+ (1.0,0.0) [0.0|4.0] "" Dummy
- SG_ PSB_RH_FAIL : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ PSB_RH_TGL : 10|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ PSB_RH_ACT : 11|4@1+ (1.0,0.0) [0.0|4.0] "" Dummy
-
-BO_ 916 TCS13: 8 ESC
- SG_ aBasis : 0|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,SCC
- SG_ BrakeLight : 11|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,SCC
- SG_ DCEnable : 12|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
- SG_ AliveCounterTCS : 13|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,SCC
- SG_ ACCReqLim : 22|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
- SG_ TQI_ACC : 24|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS
- SG_ ACCEL_REF_ACC : 32|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,SCC
- SG_ ACCEnable : 43|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
- SG_ DriverOverride : 45|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
- SG_ StandStill : 47|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
- SG_ CheckSum_TCS3 : 48|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,SCC
- SG_ ACC_EQUIP : 52|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
- SG_ PBRAKE_ACT : 53|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
- SG_ ACC_REQ : 54|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ DriverBraking : 55|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
- SG_ CF_VSM_Coded : 56|1@1+ (1.0,0.0) [0.0|1.0] "" SCC
- SG_ CF_VSM_Avail : 57|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,SCC
- SG_ CF_VSM_Handshake : 59|1@1+ (1.0,0.0) [0.0|1.0] "" SCC
- SG_ CF_DriBkeStat : 60|1@1+ (1.0,0.0) [0.0|1.0] "" SCC
- SG_ CF_VSM_ConfSwi : 61|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
- SG_ AEB_EQUIP : 63|1@1+ (1.0,0.0) [0.0|1.0] "" SCC
-
-BO_ 1427 TPMS11: 6 BCM
- SG_ TPMS_W_LAMP : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,CUBIS,HUD,IBOX,CLU,CUBIS,HUD,IBOX
- SG_ TREAD_W_LAMP : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,CUBIS,HUD,IBOX,CLU,CUBIS,HUD,IBOX
- SG_ POS_FL_W_LAMP : 4|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,CUBIS,HUD,IBOX
- SG_ POS_FR_W_LAMP : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,CUBIS,HUD,IBOX
- SG_ POS_RL_W_LAMP : 6|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,CUBIS,HUD,IBOX
- SG_ POS_RR_W_LAMP : 7|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,CUBIS,HUD,IBOX
- SG_ STATUS_TPMS : 8|3@1+ (1.0,0.0) [0.0|0.0] "" CLU
- SG_ UNIT : 11|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ PRESSURE_FL : 16|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ PRESSURE_FR : 24|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ PRESSURE_RL : 32|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ PRESSURE_RR : 40|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
-
-BO_ 915 TCS12: 4 ESC
- SG_ SA_COUNT : 0|16@1+ (2.0,-32768.0) [-32768.0|98302.0] "" _4WD,ACU,MDPS
- SG_ SA_Z_COUNT : 16|15@1+ (2.0,-32768.0) [-32768.0|32766.0] "" _4WD,ACU,MDPS
- SG_ SA_Z_FLAG : 31|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,MDPS
-
-BO_ 1170 EMS19: 8 EMS
- SG_ CF_Ems_BrkReq : 0|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX,TCU
- SG_ CF_Ems_DnShftReq : 1|4@1+ (1.0,0.0) [0.0|14.0] "" IBOX,TCU
- SG_ CF_Ems_RepModChk : 5|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX
- SG_ CF_Ems_AAFOpenReq : 7|1@1+ (1.0,0.0) [0.0|1.0] "" AAF,IBOX
- SG_ CF_Ems_DecelReq : 8|12@1+ (0.0010,-4.094) [-4.094|0.0] "m/s^2" ESC,IBOX,TCU
- SG_ CR_Ems_BstPre : 20|12@1+ (1.322,0.0) [0.0|4094.0] "hPa" CLU,IBOX
- SG_ CR_Ems_EngOilTemp : 32|8@1+ (0.75,-40.0) [0.0|254.0] "deg" CLU,IBOX
- SG_ DPF_LAMP_STAT : 40|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,IBOX
- SG_ BAT_LAMP_STAT : 42|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_ModeledAmbTemp : 48|8@1+ (0.5,-41.0) [-41.0|85.5] "deg" AAF,IBOX
- SG_ CF_Ems_OPSFail : 56|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_AliveCounterEMS9 : 58|2@1+ (1.0,0.0) [0.0|3.0] "" AAF,ABS,CUBIS,ECS,EPB,IBOX,MDPS,REA,SCC,SMK,TCU
- SG_ CF_Ems_ChecksumEMS9 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" AAF,ABS,CUBIS,ECS,EPB,IBOX,MDPS,REA,SCC,SMK,TCU
-
-BO_ 1425 AFLS11: 2 AFLS
- SG_ AFLS_STAT : 1|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Afls_TrfChgStat : 3|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Afls_LedHLStat : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 912 SPAS11: 7 SPAS
- SG_ CF_Spas_Stat : 0|4@1+ (1.0,0.0) [0.0|15.0] "" ESC,MDPS
- SG_ CF_Spas_TestMode : 4|2@1+ (1.0,0.0) [0.0|3.0] "" MDPS
- SG_ CR_Spas_StrAngCmd : 8|16@1- (0.1,0.0) [-3276.8|3276.7] "" MDPS
- SG_ CF_Spas_BeepAlarm : 24|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ CF_Spas_Mode_Seq : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Spas_AliveCnt : 32|8@1+ (1.0,0.0) [0.0|255.0] "" MDPS
- SG_ CF_Spas_Chksum : 40|8@1+ (1.0,0.0) [0.0|255.0] "" MDPS
- SG_ CF_Spas_PasVol : 48|3@1+ (1.0,0.0) [0.0|7.0] "" CGW,CLU
-
-BO_ 1168 EPB11: 7 EPB
- SG_ EPB_I_LAMP : 0|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU,CUBIS,ESC,IBOX
- SG_ EPB_F_LAMP : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,CUBIS,ESC,IBOX
- SG_ EPB_ALARM : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ EPB_CLU : 8|8@1+ (1.0,0.0) [0.0|255.0] "" CLU,ESC
- SG_ EPB_SWITCH : 16|2@1+ (1.0,0.0) [0.0|3.0] "" ESC,SCC
- SG_ EPB_RBL : 18|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,ESC
- SG_ EPB_STATUS : 19|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,EMS,ESC,SCC,TCU
- SG_ EPB_FRC_ERR : 22|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,ESC,SCC,TCU
- SG_ EPB_DBF_STAT : 24|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ ESP_ACK : 25|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ EPB_DBF_REQ : 26|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ EPB_FAIL : 29|3@1+ (1.0,0.0) [0.0|7.0] "" ESC,SCC
- SG_ EPB_FORCE : 32|12@1+ (1.0,-1000.0) [-1000.0|3000.0] "" ESC
- SG_ EPB_DBF_DECEL : 48|8@1+ (0.01,0.0) [0.0|2.54] "g" ESC
-
-BO_ 399 EMS_H12: 8 EMS
- SG_ R_TqAcnApvC : 0|8@1+ (0.2,0.0) [0.0|51.0] "Nm" DATC,IBOX
- SG_ R_PAcnC : 8|8@1+ (125.0,0.0) [0.0|31875.0] "hPa" DATC,IBOX
- SG_ TQI_B : 16|8@1+ (0.390625,0.0) [0.0|99.609375] "%" ABS,ESC,IBOX
- SG_ SLD_VS : 24|8@1+ (1.0,0.0) [0.0|255.0] "km/h" CLU,IBOX
- SG_ CF_CdaStat : 32|3@1+ (1.0,0.0) [0.0|7.0] "" AEMC,IBOX,TCU
- SG_ CF_Ems_IsgStat : 35|3@1+ (1.0,0.0) [0.0|7.0] "" ABS,BCM,CLU,DATC,EPB,ESC,IBOX,LDWS_LKAS,MDPS,SMK,TCU
- SG_ CF_Ems_OilChg : 38|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_EtcLimpMod : 39|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ R_NEngIdlTgC : 40|8@1+ (10.0,0.0) [0.0|2550.0] "rpm" DATC,IBOX,TCU
- SG_ CF_Ems_UpTarGr : 48|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_DownTarGr : 49|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_DesCurGr : 50|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,IBOX
- SG_ CF_Ems_SldAct : 54|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_SldPosAct : 55|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_HPresStat : 56|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,TCU
- SG_ CF_Ems_IsgBuz : 57|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_IdlStpFCO : 58|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_FCopen : 59|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Ems_ActEcoAct : 60|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX,TCU
- SG_ CF_Ems_EngRunNorm : 61|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,ESC,IBOX,TCU
- SG_ CF_Ems_IsgStat2 : 62|2@1+ (2.0,0.0) [0.0|3.0] "" CLU,IBOX,TCU
-
-BO_ 1419 LCA11: 8 LCA
- SG_ CF_Lca_Stat : 0|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
- SG_ CF_Rcta_Stat : 4|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
- SG_ CF_Lca_IndLeft : 8|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_Rcw_Stat : 10|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
- SG_ CF_RCW_Warning : 14|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_Lca_IndRight : 16|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_Lca_SndWan_Stat : 18|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_FR_SndWan : 20|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU
- SG_ CF_FL_SndWan : 21|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU
- SG_ CF_RR_SndWan : 22|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU
- SG_ CF_RL_SndWan : 23|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU
- SG_ CF_Lca_IndBriLeft : 24|8@1+ (1.0,0.0) [0.0|255.0] "" BCM,CLU
- SG_ CF_Lca_IndBriRight : 32|8@1+ (1.0,0.0) [0.0|255.0] "" BCM,CLU
- SG_ CF_RCTA_IndBriLeft : 40|8@1+ (1.0,0.0) [0.0|255.0] "" BCM,CLU
- SG_ CF_RCTA_IndBriRight : 48|8@1+ (1.0,0.0) [0.0|255.0] "" BCM,CLU
- SG_ CF_RCTA_IndLeft : 56|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_RCTA_IndRight : 58|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
- SG_ CF_SndWarnForClu : 60|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
-
-BO_ 906 ABS11: 8 ABS
- SG_ ABS_DEF : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,EMS,SPAS,TCU
- SG_ EBD_DEF : 1|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,SPAS,TCU
- SG_ ABS_ACT : 2|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,EPB,SPAS,TCU
- SG_ ABS_W_LAMP : 3|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,CUBIS,MTS,TMU
- SG_ EBD_W_LAMP : 4|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU
- SG_ ABS_DIAG : 5|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU
- SG_ ESS_STAT : 6|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,BCM,CLU,EMS
-
-BO_ 903 WHL_PUL11: 6 ABS
- SG_ WHL_PUL_FL : 0|8@1+ (0.5,0.0) [0.0|127.5] "pulse count" CUBIS,EPB,IBOX,SPAS,TMU,TPMS,CUBIS,EPB,IBOX,LDWS_LKAS,SPAS,TMU,TPMS
- SG_ WHL_PUL_FR : 8|8@1+ (0.5,0.0) [0.0|127.5] "pulse count" CUBIS,EPB,IBOX,SPAS,TMU,TPMS,CUBIS,EPB,IBOX,LDWS_LKAS,SPAS,TMU,TPMS
- SG_ WHL_PUL_RL : 16|8@1+ (0.5,0.0) [0.0|127.5] "pulse count" CUBIS,EPB,IBOX,SPAS,TMU,TPMS,CUBIS,EPB,IBOX,LDWS_LKAS,SPAS,TMU,TPMS
- SG_ WHL_PUL_RR : 24|8@1+ (0.5,0.0) [0.0|127.5] "pulse count" CUBIS,EPB,IBOX,SPAS,TMU,TPMS,CUBIS,EPB,IBOX,LDWS_LKAS,SPAS,TMU,TPMS
- SG_ WHL_DIR_FL : 32|2@1+ (1.0,0.0) [0.0|3.0] "" EPB,SPAS,TPMS,EPB,LCA,SPAS,TPMS
- SG_ WHL_DIR_FR : 34|2@1+ (1.0,0.0) [0.0|3.0] "" EPB,SPAS,TPMS,EPB,LCA,SPAS,TPMS
- SG_ WHL_DIR_RL : 36|2@1+ (1.0,0.0) [0.0|3.0] "" EPB,SPAS,TPMS,EPB,LCA,SPAS,TPMS
- SG_ WHL_DIR_RR : 38|2@1+ (1.0,0.0) [0.0|3.0] "" EPB,SPAS,TPMS,EPB,LCA,SPAS,TPMS
- SG_ WHL_PUL_Chksum : 40|8@1+ (1.0,0.0) [0.0|255.0] "" EPB,SPAS,TPMS,EPB,LCA,LDWS_LKAS,SPAS,TPMS
-
-BO_ 1415 TMU11: 8 IBOX
- SG_ CF_Tmu_VehSld : 0|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Tmu_VehImmo : 1|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Tmu_ReqRepCnd : 2|2@1+ (1.0,0.0) [0.0|3.0] "" EMS
- SG_ CF_Tmu_AirconCtr : 4|1@1+ (1.0,0.0) [0.0|1.0] "" DATC
- SG_ CF_Tmu_TempMd : 5|1@1+ (1.0,0.0) [0.0|1.0] "" DATC
- SG_ CF_Tmu_TempSet : 6|16@1+ (1.0,0.0) [0.0|20.0] "" DATC
- SG_ CF_Tmu_DefrostCtr : 22|1@1+ (1.0,0.0) [0.0|1.0] "" DATC,FATC
- SG_ CF_Tmu_AliveCnt1 : 56|4@1+ (1.0,0.0) [0.0|15.0] "" EMS
-
-BO_ 902 WHL_SPD11: 8 ABS
- SG_ WHL_SPD_FL : 0|14@1+ (0.03125,0.0) [0.0|511.96875] "km/h" _4WD,AFLS,AHLS,AVM,CLU,CUBIS,ECS,EMS,EPB,IBOX,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS,_4WD,ACU,AFLS,AHLS,AVM,CLU,ECS,EMS,EPB,IBOX,LCA,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS
- SG_ WHL_SPD_FR : 16|14@1+ (0.03125,0.0) [0.0|511.96875] "km/h" _4WD,ACU,AFLS,AHLS,AVM,CLU,CUBIS,ECS,EMS,EPB,IBOX,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS,_4WD,ACU,AFLS,AHLS,AVM,CLU,ECS,EMS,EPB,IBOX,LCA,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS
- SG_ WHL_SPD_RL : 32|14@1+ (0.03125,0.0) [0.0|511.96875] "km/h" _4WD,AFLS,AHLS,AVM,BCM,CLU,CUBIS,ECS,EMS,EPB,IBOX,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS,_4WD,ACU,AFLS,AHLS,AVM,BCM,CLU,ECS,EMS,EPB,IBOX,LCA,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS
- SG_ WHL_SPD_RR : 48|14@1+ (0.03125,0.0) [0.0|511.96875] "km/h" _4WD,AFLS,AHLS,AVM,CLU,CUBIS,ECS,EMS,EPB,IBOX,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS,_4WD,ACU,AFLS,AHLS,AVM,CLU,ECS,EMS,EPB,IBOX,LCA,LDWS_LKAS,PGS,PSB,SCC,SMK,SPAS,TCU,TPMS
- SG_ WHL_SPD_AliveCounter_LSB : 14|2@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
- SG_ WHL_SPD_AliveCounter_MSB : 30|2@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
- SG_ WHL_SPD_Checksum_LSB : 46|2@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
- SG_ WHL_SPD_Checksum_MSB : 62|2@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
-
-BO_ 1414 EVP11: 3 EVP
- SG_ CF_Evp_Stat : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
-
-BO_ 1412 AAF11: 8 AAF
- SG_ CF_Aaf_ActFlapStatus : 0|2@1+ (1.0,0.0) [0.0|3.0] "" AAF_Tester
- SG_ CF_Aaf_ModeStatus : 2|3@1+ (1.0,0.0) [0.0|7.0] "" AAF_Tester
- SG_ CF_Aaf_WrnLamp : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Aaf_ErrStatus : 6|10@1+ (1.0,0.0) [0.0|1023.0] "" AAF_Tester,EMS
- SG_ CF_Aaf_OpenRqSysAct : 16|8@1+ (1.0,0.0) [0.0|255.0] "" AAF_Tester
- SG_ CF_Aaf_PStatus : 24|8@1+ (1.0,0.0) [0.0|100.0] "%" AAF_Tester
- SG_ CF_Aaf_OpenRqSysSol : 32|8@1+ (1.0,0.0) [0.0|255.0] "" AAF_Tester
- SG_ CF_Aaf_SolFlapStatus : 40|2@1+ (1.0,0.0) [0.0|3.0] "" AAF_Tester
- SG_ CF_Aaf_MilOnReq : 42|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
-
-BO_ 900 EMS17: 8 EMS
- SG_ CF_Ems_PkpCurMSV : 0|8@1+ (1.0,0.0) [0.0|255.0] "" DI_BOX
- SG_ CF_Ems_HolCurMSV : 8|8@1+ (1.0,0.0) [0.0|255.0] "" DI_BOX
- SG_ CF_Ems_InjVBnkAct : 16|8@1+ (1.0,0.0) [0.0|255.0] "" DI_BOX
- SG_ CF_Ems_InjVActSet : 24|8@1+ (1.0,0.0) [0.0|255.0] "" DI_BOX
- SG_ CF_Ems_DiagFulHDEV : 32|1@1+ (1.0,0.0) [0.0|1.0] "" DI_BOX
- SG_ CF_Ems_SwiOffIC1 : 33|1@1+ (1.0,0.0) [0.0|1.0] "" DI_BOX
- SG_ CF_Ems_SwiOffIC2 : 34|1@1+ (1.0,0.0) [0.0|1.0] "" DI_BOX
- SG_ CF_Ems_DiagReqHDEV : 38|1@1+ (1.0,0.0) [0.0|1.0] "" DI_BOX
- SG_ CR_Ems_DutyCycMSV : 40|8@1+ (0.3921568627,0.0) [0.0|100.0] "%" DI_BOX
- SG_ CR_Ems_BatVolRly : 48|8@1+ (0.1,0.0) [0.0|25.5] "V" DI_BOX
-
-BO_ 387 REA11: 8 REA
- SG_ CF_EndBst_PwmDuH : 0|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_PwmDuL : 1|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_PwmFqOutRng : 2|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_HbriOverCur : 3|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_HbriOverTemp : 4|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_PosSnsKOR : 6|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_PosSnsOSOR : 7|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_EepFlt : 8|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_RomFlt : 9|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_RamFlt : 10|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_CanFlt : 11|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_AgH : 12|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_AgL : 13|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_EndBst_ORVol : 14|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CR_EndBst_ActPos : 16|16@1+ (0.117,0.0) [1.989|118.053] "" EMS
- SG_ CR_EndBst_DemPos : 32|16@1+ (0.117,0.0) [0.0|119.691] "" EMS
- SG_ CR_EndBst_HbriPwr : 48|16@1+ (0.045,0.0) [0.0|99.99] "%" EMS
-
-BO_ 1411 CUBIS11: 8 CUBIS
- SG_ CF_Cubis_HUDisp : 0|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
-
-BO_ 899 FATC11: 8 DATC
- SG_ CR_Fatc_TqAcnOut : 0|8@1+ (0.2,0.0) [0.0|50.8] "Nm" EMS,IBOX
- SG_ CF_Fatc_AcnRqSwi : 8|1@1+ (1.0,0.0) [0.0|1.0] "" AAF,EMS,IBOX
- SG_ CF_Fatc_AcnCltEnRq : 9|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Fatc_EcvFlt : 10|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Fatc_BlwrOn : 11|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_FATC_Iden : 12|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,IBOX
- SG_ CF_Fatc_BlwrMax : 14|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX
- SG_ CF_Fatc_EngStartReq : 15|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Fatc_IsgStopReq : 16|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Fatc_CtrInf : 17|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,IBOX
- SG_ CF_Fatc_MsgCnt : 20|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,IBOX
- SG_ CR_Fatc_OutTemp : 24|8@1+ (0.5,-40.0) [-40.0|60.0] "deg" BCM,CLU,EMS,IBOX,SPAS,TCU,TPMS
- SG_ CR_Fatc_OutTempSns : 32|8@1+ (0.5,-40.0) [-40.0|60.0] "deg" AAF,AHLS,CLU,EMS,IBOX,SPAS,TCU
- SG_ CF_Fatc_Compload : 40|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,IBOX
- SG_ CF_Fatc_ActiveEco : 43|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Fatc_AutoActivation : 44|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX
- SG_ CF_Fatc_DefSw : 45|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,IBOX
- SG_ CF_Fatc_PtcRlyStat : 46|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Fatc_ChkSum : 56|8@1+ (1.0,0.0) [0.0|255.0] "" EMS,IBOX,SPAS
-
-BO_ 129 EMS_DCT12: 8 EMS
- SG_ CR_Ems_SoakTimeExt : 0|6@1+ (5.0,0.0) [0.0|315.0] "Min" TCU
- SG_ BRAKE_ACT : 6|2@1+ (1.0,0.0) [0.0|3.0] "" TCU
- SG_ CF_Ems_EngOperStat : 8|8@1+ (1.0,0.0) [0.0|255.0] "" TCU
- SG_ CR_Ems_IndAirTemp : 16|8@1+ (0.75,-48.0) [-48.0|143.25] "deg" TCU
- SG_ CF_Ems_Alive2 : 56|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
- SG_ CF_Ems_ChkSum2 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
-
-BO_ 897 MDPS11: 8 MDPS
- SG_ CF_Mdps_WLmp : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,CUBIS,EMS,IBOX,SPAS
- SG_ CF_Mdps_Flex : 2|3@1+ (1.0,0.0) [0.0|3.0] "" CLU,LDWS_LKAS
- SG_ CF_Mdps_FlexDisp : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Mdps_Stat : 7|4@1+ (1.0,0.0) [0.0|15.0] "" SPAS
- SG_ CR_Mdps_DrvTq : 11|12@1+ (0.01,-20.48) [-20.48|20.46] "" SPAS
- SG_ CF_Mdps_ALTRequest : 23|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CR_Mdps_StrAng : 24|16@1- (0.1,0.0) [-3276.8|3276.7] "Deg" SPAS
- SG_ CF_Mdps_AliveCnt : 40|8@1+ (1.0,0.0) [0.0|255.0] "" LDWS_LKAS,SPAS
- SG_ CF_Mdps_Chksum : 48|8@1+ (1.0,0.0) [0.0|255.0] "" LDWS_LKAS,SPAS
- SG_ CF_Mdps_SPAS_FUNC : 57|1@1+ (1.0,0.0) [0.0|1.0] "flag" SPAS
- SG_ CF_Mdps_LKAS_FUNC : 58|1@1+ (1.0,0.0) [0.0|1.0] "flag" LDWS_LKAS
- SG_ CF_Mdps_CurrMode : 59|2@1+ (1.0,0.0) [0.0|3.0] "" LDWS_LKAS
- SG_ CF_Mdps_Type : 61|2@1+ (1.0,0.0) [0.0|2.0] "" LDWS_LKAS,SPAS
-
-BO_ 896 DI_BOX13: 8 DI_BOX
- SG_ CF_DiBox_HPreInjVConfStat : 0|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_HPreInjVStat1 : 8|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_HPreInjVStat2 : 16|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_HPreInjVPkp : 24|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_HPreInjVBpt : 32|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_ErrRegFrtMSV : 40|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_ErrRegSedMSV : 48|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_SPIErrSedMSV : 56|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_SPIErrFrtMSV : 57|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_IDErrSedMSV : 58|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_IDErrFrtMSV : 59|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_IniStatMSV : 60|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
-
-BO_ 640 EMS13: 8 EMS
- SG_ LV_FUEL_TYPE_ECU : 0|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU,LPI,SMK
- SG_ LV_BFS_CFIRM : 1|1@1+ (1.0,0.0) [0.0|1.0] "" LPI
- SG_ LV_CRASH : 2|1@1+ (1.0,0.0) [0.0|1.0] "" LPI
- SG_ LV_VB_OFF_ACT : 3|1@1+ (1.0,0.0) [0.0|1.0] "" LPI
- SG_ LV_GSL_MAP M : 4|1@1+ (1.0,0.0) [0.0|1.0] "" LPI
- SG_ LV_ENG_TURN : 5|1@1+ (1.0,0.0) [0.0|1.0] "" LPI
- SG_ ERR_FUEL : 8|8@1+ (1.0,0.0) [0.0|255.0] "" LPI
- SG_ EOS : 16|8@1+ (1.0,0.0) [0.0|255.0] "" LPI
- SG_ TCO : 24|8@1+ (0.75,-48.0) [-48.0|143.25] "deg" LPI
- SG_ N_32 : 32|8@1+ (32.0,0.0) [0.0|8160.0] "rpm" LPI
- SG_ MAF : 40|8@1+ (5.447,0.0) [0.0|1388.985] "mg/TDC" LPI
- SG_ TIA : 48|8@1+ (0.75,-48.0) [-48.0|143.25] "deg" LPI
- SG_ MAP m1 : 56|8@1+ (0.47058,0.0) [0.0|119.9979] "kPa" LPI
- SG_ AMP m0 : 56|8@1+ (21.22,0.0) [0.0|5411.1] "hPa" LPI
-
-BO_ 128 EMS_DCT11: 8 EMS
- SG_ PV_AV_CAN : 0|8@1+ (0.3906,0.0) [0.0|99.603] "%" TCU
- SG_ TQ_STND : 8|6@1+ (10.0,0.0) [0.0|630.0] "Nm" TCU
- SG_ F_N_ENG : 14|1@1+ (1.0,0.0) [0.0|1.0] "" TCU
- SG_ F_SUB_TQI : 15|1@1+ (1.0,0.0) [0.0|1.0] "" TCU
- SG_ N : 16|16@1+ (0.25,0.0) [0.0|16383.75] "rpm" TCU
- SG_ TQI_ACOR : 32|8@1+ (0.390625,0.0) [0.0|99.6094] "%" IBOX,TCU
- SG_ TQFR : 40|8@1+ (0.390625,0.0) [0.0|99.6094] "%" TCU
- SG_ TQI : 48|8@1+ (0.390625,0.0) [0.0|99.609375] "%" TCU
- SG_ CF_Ems_Alive : 56|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
- SG_ CF_Ems_ChkSum : 60|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
-
-BO_ 1407 HU_MON_PE_01: 8 CLU
- SG_ HU_Type : 0|8@1+ (1.0,0.0) [0.0|255.0] "" AVM,PGS
-
-BO_ 127 CGW5: 8 BCM
- SG_ C_StopLampLhOpenSts : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_StopLampRhOpenSts : 1|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_HMSLOpenSts : 2|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_HLampLowLhOpenSts : 3|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_HLampLowRhOpenSts : 4|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_HLampHighLhOpenSts : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_HLampHighRhOpenSts : 6|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_DRLLampLhOpenSts : 7|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_DRLLampRhOpenSts : 8|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_RearFOGLhOpenSts : 9|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_RearFOGRhOpenSts : 10|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_FrontFOGLhOpenSts : 11|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_FrontFOGRhOpenSts : 12|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_RearEXTTailLhOpenSts : 13|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_RearEXTTailRhOpenSts : 14|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_FrontEXTTailLhOpenSts : 15|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_FrontEXTTailRhOpenSts : 16|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_RearTSIGLhOpenSts : 17|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_RearTSIGRhOpenSts : 18|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_FrontTSIGLhOpenSts : 19|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_FrontTSIGRhOpenSts : 20|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_SBendingLhOpenSts : 21|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_SBendingRhOpenSts : 22|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_LicensePlateLhOpenSts : 23|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_LicensePlateRhOpenSts : 24|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
-
-BO_ 1151 ESP11: 6 ESC
- SG_ AVH_STAT : 0|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,EPB,TCU
- SG_ LDM_STAT : 2|1@1+ (1.0,0.0) [0.0|1.0] "" EPB,TCU
- SG_ REQ_EPB_ACT : 3|2@1+ (1.0,0.0) [0.0|3.0] "" EPB,TCU
- SG_ REQ_EPB_STAT : 5|1@1+ (1.0,0.0) [0.0|1.0] "" EPB
- SG_ ECD_ACT : 6|1@1+ (1.0,0.0) [0.0|1.0] "" EPB
- SG_ _4WD_LIM_REQ : 7|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS
- SG_ ROL_CNT_ESP : 8|8@1+ (1.0,0.0) [0.0|255.0] "" EPB,TCU
- SG_ _4WD_TQC_LIM : 16|16@1+ (1.0,0.0) [0.0|65535.0] "Nm" _4WD,EMS
- SG_ _4WD_CLU_LIM : 32|8@1+ (0.390625,0.0) [0.0|99.609375] "%" _4WD,EMS
- SG_ _4WD_OPEN : 40|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,EMS
- SG_ _4WD_LIM_MODE : 42|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD
-
-BO_ 1397 HU_AVM_E_00: 8 CLU
- SG_ HU_AVM_Cal_Cmd : 0|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_Cal_Method : 4|2@1+ (1.0,0.0) [0.0|3.0] "" AVM,PGS
- SG_ HU_AVM_Save_Controlpoint : 6|2@1+ (1.0,0.0) [0.0|3.0] "" AVM,PGS
- SG_ HU_AVM_PT_X : 8|12@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_RearViewPointOpt : 20|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_PT_Y : 24|12@1+ (1.0,0.0) [0.0|4095.0] "" AVM,PGS
- SG_ HU_AVM_FrontViewPointOpt : 36|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_SelectedMenu : 40|5@1+ (1.0,0.0) [0.0|31.0] "" AVM,PGS
- SG_ HU_AVM_CameraOff : 45|2@1+ (1.0,0.0) [0.0|3.0] "" AVM,PGS
- SG_ HU_AVM_Option : 48|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_CrossLineMove_Cmd : 52|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_RearView_Option : 56|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_FrontView_Option : 60|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
-
-BO_ 1395 HU_AVM_E_01: 8 CLU
- SG_ HU_PGSSelectedMenu : 0|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_PGSOption : 8|5@1+ (1.0,0.0) [0.0|31.0] "" AVM,PGS
- SG_ HU_AVM_ParkingAssistMenu : 56|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
- SG_ HU_AVM_ParkingAssistSB : 60|4@1+ (1.0,0.0) [0.0|15.0] "" AVM,PGS
-
-BO_ 1393 OPI11: 5 OPI
- SG_ CR_Opi_Spd_Rpm : 0|8@1+ (20.0,0.0) [0.0|3500.0] "rpm" TCU
- SG_ CF_Opi_Over_Temp : 8|1@1+ (1.0,0.0) [0.0|1.0] "" TCU
- SG_ CF_Opi_Over_Cur : 9|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,TCU
- SG_ CF_Opi_Over_Vol : 10|1@1+ (1.0,0.0) [0.0|1.0] "" TCU
- SG_ CF_Opi_Hall_Fail : 11|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,TCU
- SG_ CF_Opi_Flt : 12|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,TCU
- SG_ CF_Opi_Motor_Dir : 15|1@1+ (1.0,0.0) [0.0|1.0] "" TCU
- SG_ CF_Opi_Romver : 16|8@1+ (1.0,0.0) [0.0|255.0] "" TCU
- SG_ CF_Opi_PWM_Rate : 24|12@1+ (1.0,0.0) [0.0|100.0] "%" TCU
-
-BO_ 625 LPI11: 8 LPI
- SG_ FUP_LPG_MMV : 0|8@1+ (128.0,0.0) [0.0|32640.0] "hPa" EMS
- SG_ LV_FUEL_TYPE_BOX : 8|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ LV_BFS_IN_PROGRESS : 9|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ LV_GAS_OK : 10|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ LV_FUP_ENA_THD : 11|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU,EMS,SMK
- SG_ LPI_OBD : 12|4@1+ (1.0,0.0) [0.0|15.0] "" EMS
- SG_ ERR_GAS : 16|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ FAC_TI_GAS_COR : 24|16@1+ (3.05E-5,0.0) [0.0|1.9988175] "" EMS
- SG_ FTL_AFU : 40|8@1+ (0.392,0.0) [0.0|99.96] "%" EMS
- SG_ BFS_CYL : 48|8@1+ (1.0,0.0) [0.0|6.0] "Cyl Nr." EMS
- SG_ LV_PRE_CDN_LEAK : 56|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ LV_CONF_INJECTION_DELAY : 57|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ LV_LPG_SW_DRIVER_REQ : 58|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
-
-BO_ 356 VSM11: 4 ESC
- SG_ CR_Esc_StrTqReq : 0|12@1+ (0.01,-20.48) [-20.48|20.47] "Nm" MDPS
- SG_ CF_Esc_Act : 12|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS,MDPS
- SG_ CF_Esc_CtrMode : 13|3@1+ (1.0,0.0) [0.0|7.0] "" MDPS
- SG_ CF_Esc_Def : 16|1@1+ (1.0,0.0) [0.0|1.0] "" MDPS
- SG_ CF_Esc_AliveCnt : 17|4@1+ (1.0,0.0) [0.0|15.0] "" LDWS_LKAS,MDPS
- SG_ CF_Esc_Chksum : 24|8@1+ (1.0,0.0) [0.0|255.0] "" LDWS_LKAS,MDPS
-
-BO_ 1379 PGS_HU_PE_01: 8 PGS
- SG_ PGS_State : 0|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ PGS_ParkGuideState : 8|5@1+ (1.0,0.0) [0.0|31.0] "" CLU
- SG_ PGS_Option : 16|5@1+ (1.0,0.0) [0.0|31.0] "" CLU
- SG_ PGS_Version : 32|16@1+ (1.0,0.0) [0.0|65535.0] "" CLU
-
-BO_ 354 TCU_DCT13: 3 TCU
- SG_ Clutch_Driving_Tq : 0|10@1+ (1.0,-512.0) [0.0|0.0] "Nm" ESC
- SG_ Cluster_Engine_RPM : 10|13@1+ (0.9766,0.0) [0.0|0.0] "" CLU
- SG_ Cluster_Engine_RPM_Flag : 23|1@1+ (1.0,0.0) [0.0|0.0] "" CLU
-
-BO_ 1378 HUD11: 4 HUD
- SG_ CF_Hud_HeightStaus : 0|5@1+ (1.0,0.0) [0.0|31.0] "" CLU
- SG_ CF_Hud_PBackStatus : 6|2@1+ (1.0,0.0) [0.0|0.0] "" BCM,CLU
- SG_ CF_Hud_Brightness : 8|5@1+ (1.0,0.0) [0.0|31.0] "" CLU
-
-BO_ 608 EMS16: 8 EMS
- SG_ TQI_MIN : 0|8@1+ (0.390625,0.0) [0.0|99.609375] "%" ESC,IBOX,TCU
- SG_ TQI : 8|8@1+ (0.390625,0.0) [0.0|99.609375] "%" ESC,IBOX,TCU
- SG_ TQI_TARGET : 16|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EPB,ESC,IBOX,TCU
- SG_ GLOW_STAT : 24|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU,IBOX,SMK
- SG_ CRUISE_LAMP_M : 25|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX,TCU
- SG_ CRUISE_LAMP_S : 26|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX,TCU
- SG_ PRE_FUEL_CUT_IN : 27|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,TCU
- SG_ ENG_STAT : 28|3@1+ (1.0,0.0) [0.0|7.0] "" ABS,AHLS,AVM,BCM,CLU,EPB,ESC,EVP,FPCM,IBOX,LCA,LDWS_LKAS,MDPS,SCC,SMK,TCU
- SG_ SOAK_TIME_ERROR : 31|1@1+ (1.0,0.0) [0.0|1.0] "" DATC,EPB,IBOX,TCU
- SG_ SOAK_TIME : 32|8@1+ (1.0,0.0) [0.0|255.0] "Min" _4WD,DATC,EPB,IBOX,TCU
- SG_ TQI_MAX : 40|8@1+ (0.390625,0.0) [0.0|99.609375] "%" ESC,IBOX,TCU
- SG_ SPK_TIME_CUR : 48|8@1+ (0.375,-35.625) [-35.625|60.0] "" IBOX,TCU
- SG_ Checksum : 56|4@1+ (1.0,0.0) [0.0|15.0] "" ECS,IBOX,LDWS_LKAS,MDPS,SCC
- SG_ AliveCounter : 60|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX,LDWS_LKAS,MDPS,SCC
- SG_ CF_Ems_AclAct : 62|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX,SCC
-
-BO_ 1371 AVM_HU_PE_00: 8 AVM
- SG_ AVM_View : 0|5@1+ (1.0,0.0) [0.0|31.0] "" CLU
- SG_ AVM_ParkingAssist_BtnSts : 5|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ AVM_Display_Message : 8|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ AVM_Popup_Msg : 16|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_Ready : 20|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_ParkingAssist_Step : 24|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_FrontBtn_Type : 28|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_Option : 32|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_HU_FrontViewPointOpt : 36|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_HU_RearView_Option : 40|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_HU_FrontView_Option : 44|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ AVM_Version : 48|16@1+ (1.0,0.0) [0.0|65535.0] "" CLU
-
-BO_ 1370 HU_AVM_PE_00: 8 CLU
- SG_ HU_AVM_Status : 0|2@1+ (1.0,0.0) [0.0|3.0] "" AVM,PGS
-
-BO_ 1369 CGW4: 8 BCM
- SG_ CF_Gway_MemoryP1Cmd : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_MemoryP2Cmd : 1|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_PBackP1Cmd : 2|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_PBackP2Cmd : 3|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_StrgWhlHeatedState : 4|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_PBackStopCmd : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,HUD
- SG_ CF_Gway_StaticBendLhAct : 6|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_StaticBendRhAct : 7|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_DrvWdwStat : 8|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_RLWdwState : 9|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_RRWdwState : 10|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_AstWdwStat : 11|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_MemoryEnable : 12|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_PBACKStopCmd : 13|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_PBACKStop : 14|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,HUD
- SG_ CF_Gway_IMSBuzzer : 15|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_DrvSeatBeltInd : 36|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_AstSeatBeltInd : 38|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_RCSeatBeltInd : 40|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_RLSeatBeltInd : 42|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_RRSeatBeltInd : 44|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_RrWiperHighSw : 46|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_RrWiperLowSw : 47|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
-
-BO_ 1367 EngFrzFrm12: 8 EMS
- SG_ PID_06h : 0|8@1+ (0.78125,-100.0) [-100.0|99.22] "%" AAF,IBOX,TCU
- SG_ PID_07h : 8|8@1+ (0.78125,-100.0) [-100.0|99.22] "%" AAF,IBOX,TCU
- SG_ PID_08h : 16|8@1+ (0.78125,-100.0) [-100.0|99.22] "%" AAF,IBOX,TCU
- SG_ PID_09h : 24|8@1+ (0.78125,-100.0) [-100.0|99.22] "%" AAF,IBOX,TCU
- SG_ PID_0Bh : 32|8@1+ (1.0,0.0) [0.0|255.0] "kPa" AAF,IBOX,TCU
- SG_ PID_23h : 40|16@1+ (10.0,0.0) [0.0|655350.0] "kPa" AAF,IBOX,TCU
-
-BO_ 1366 EngFrzFrm11: 8 EMS
- SG_ PID_04h : 0|8@1+ (0.3921568627,0.0) [0.0|100.0] "%" AAF,TCU
- SG_ PID_05h : 8|8@1+ (1.0,-40.0) [-40.0|215.0] "deg" AAF,TCU
- SG_ PID_0Ch : 16|16@1+ (0.25,0.0) [0.0|16383.75] "rpm" AAF,TCU
- SG_ PID_0Dh : 32|8@1+ (1.0,0.0) [0.0|255.0] "km/h" AAF,TCU
- SG_ PID_11h : 40|8@1+ (0.3921568627,0.0) [0.0|100.0] "%" AAF,TCU
- SG_ PID_03h : 48|16@1+ (1.0,0.0) [0.0|65535.0] "" AAF,TCU
-
-BO_ 1365 FPCM11: 8 FPCM
- SG_ CR_Fpcm_LPActPre : 0|8@1+ (3.137254902,0.0) [0.0|800.0] "kPa" EMS
- SG_ CF_Fpcm_LPPumpOverCur : 8|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_PreSnrHi : 9|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_PreSnrDisc : 10|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_PreSnrShort : 11|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_LPPumpDiscShort : 12|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_LP_System_Error : 13|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_PreSnrSigErr : 14|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Fpcm_LPCtrCirFlt : 15|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
-
-BO_ 852 LVR11: 7 LVR
- SG_ CF_Lvr_GearInf : 0|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,TCU
- SG_ CF_Lvr_PRelStat : 4|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU,SMK,TCU
- SG_ CF_Lvr_BkeAct : 5|1@1+ (1.0,0.0) [0.0|1.0] "" TCU
- SG_ CF_Lvr_NFnStat : 6|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Lvr_PosInf : 8|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
- SG_ CF_Lvr_PosCpl : 12|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
- SG_ CF_Lvr_UlkButStat : 18|2@1+ (1.0,0.0) [0.0|3.0] "" TCU
- SG_ CF_Lvr_PNStat : 20|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Lvr_ShtLkStat : 24|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
- SG_ CF_Lvr_ShfErrInf : 28|20@1+ (1.0,0.0) [0.0|8191.0] "" CLU,TCU
- SG_ CF_Lvr_AC : 48|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
- SG_ CF_Lvr_CS : 52|4@1+ (1.0,0.0) [0.0|15.0] "" TCU
-
-BO_ 1363 CGW2: 8 BCM
- SG_ CF_Gway_GwayDiagState : 0|1@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_DDMDiagState : 1|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_SCMDiagState : 2|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_PSMDiagState : 3|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_SJBDiagState : 4|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_IPMDiagState : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_LDMFail : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,LDWS_LKAS,LDWS_LKAS
- SG_ CF_Gway_CLUSwGuiCtrl : 10|3@1+ (1.0,0.0) [0.0|63.0] "" CLU,Dummy
- SG_ CF_Gway_CLUSwGroup : 13|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_CLUSwMode : 14|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_CLUSwEnter : 15|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_AutoLightValue : 16|1@1+ (1.0,0.0) [0.0|1.0] "" LCA,LCA
- SG_ CF_Gway_BrakeFluidSw : 17|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_DrvSeatBeltInd : 18|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_AvTail : 20|1@1+ (1.0,0.0) [0.0|3.0] "" CLU,SNV,SNV
- SG_ CF_Gway_RearFogAct : 21|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_ExtTailAct : 22|1@1+ (1.0,0.0) [0.0|1.0] "" AVM,CLU,LCA,PGS,SPAS,AVM,LCA,PGS,SPAS
- SG_ CF_Gway_RRDrSw : 23|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_RLDrSw : 24|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_IntTailAct : 25|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_CountryCfg : 26|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,PGS,Dummy
- SG_ CF_Gway_WiperParkPosition : 32|1@1+ (1.0,0.0) [0.0|1.0] "" AFLS,EMS,LDWS_LKAS,AFLS,EMS,LDWS_LKAS
- SG_ CF_Gway_HLLowLHFail : 33|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS,SNV,LDWS_LKAS,SNV
- SG_ CF_Gway_HLLowRHFail : 34|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS,SNV,LDWS_LKAS,SNV
- SG_ CF_Gway_ESCLFailWarn : 35|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_ESCLNotLockedWarn : 36|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_ESCLNotUnlockWarn : 37|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_IDoutWarn : 38|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_ImmoLp : 40|1@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_BCMRKEID : 41|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,Dummy
- SG_ CF_Gway_VehicleNotPWarn : 44|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_DeactivationWarn : 45|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_KeyBATDischargeWarn : 46|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_SSBWarn : 47|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_SMKFobID : 48|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,Dummy
- SG_ CF_Gway_SMKRKECmd : 51|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,Dummy
- SG_ CF_Gway_AutoLightOption : 54|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_SJBDeliveryMode : 55|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_KeyoutLp : 56|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,Dummy
- SG_ CF_Gway_SMKDispWarn : 57|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,Dummy
- SG_ CF_Gway_WngBuz : 61|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,Dummy
-
-BO_ 339 TCS11: 8 ESC
- SG_ TCS_REQ : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,TCU
- SG_ MSR_C_REQ : 1|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,EPB,SCC,TCU
- SG_ TCS_PAS : 2|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,EMS,SCC,SPAS,TCU
- SG_ TCS_GSC : 3|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,TCU
- SG_ CF_Esc_LimoInfo : 4|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,SCC
- SG_ ABS_DIAG : 6|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,EMS,EPB
- SG_ ABS_DEF : 7|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,ECS,EMS,EPB,SCC,SPAS,TCU
- SG_ TCS_DEF : 8|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,SCC,SPAS,TCU
- SG_ TCS_CTL : 9|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,SCC,SPAS,TCU
- SG_ ABS_ACT : 10|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,ECS,EMS,EPB,LDWS_LKAS,SCC,SPAS,TCU
- SG_ EBD_DEF : 11|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,SPAS,TCU
- SG_ ESP_PAS : 12|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,CLU,EMS,EPB,LDWS_LKAS,SCC,TCU
- SG_ ESP_DEF : 13|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,ECS,EMS,EPB,LDWS_LKAS,SCC,TCU
- SG_ ESP_CTL : 14|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,ECS,EMS,EPB,LDWS_LKAS,SCC,SPAS,TCU
- SG_ TCS_MFRN : 15|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,EPB,TCU
- SG_ DBC_CTL : 16|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB
- SG_ DBC_PAS : 17|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB
- SG_ DBC_DEF : 18|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB
- SG_ HAC_CTL : 19|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,EMS,EPB,TCU
- SG_ HAC_PAS : 20|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,EMS,EPB,TCU
- SG_ HAC_DEF : 21|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,EMS,EPB,TCU
- SG_ ESS_STAT : 22|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,BCM,CLU,EMS,EPB
- SG_ TQI_TCS : 24|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS,EPB,TCU
- SG_ TQI_MSR : 32|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS,EPB,TCU
- SG_ TQI_SLW_TCS : 40|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS,EPB,TCU
- SG_ CF_Esc_BrkCtl : 48|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ BLA_CTL : 49|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CGW,CLU
- SG_ AliveCounter_TCS1 : 52|4@1+ (1.0,0.0) [0.0|14.0] "" EMS,EPB,LDWS_LKAS
- SG_ CheckSum_TCS1 : 56|8@1+ (1.0,0.0) [0.0|255.0] "" EMS,EPB,LDWS_LKAS
-
-BO_ 1362 SNV11: 4 SNV
- SG_ CF_SNV_DisplayControl : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,HUD
- SG_ CF_Snv_BeepWarning : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,HUD
- SG_ CF_Snv_WarningMessage : 4|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,HUD
- SG_ CF_Snv_DetectionEnable : 7|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CLU,HUD
- SG_ CF_Snv_PedestrianDetect : 8|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,HUD
- SG_ CF_Snv_IRLampControl : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,HUD
-
-BO_ 593 MDPS12: 8 MDPS
- SG_ CR_Mdps_StrColTq : 0|11@1+ (0.0078125,-8.0) [-8.0|7.9921875] "Nm" LDWS_LKAS
- SG_ CF_Mdps_Def : 11|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ CF_Mdps_ToiUnavail : 12|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
- SG_ CF_Mdps_ToiActive : 13|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
- SG_ CF_Mdps_ToiFlt : 14|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
- SG_ CF_Mdps_FailStat : 15|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
- SG_ CF_Mdps_MsgCount2 : 16|8@1+ (1.0,0.0) [0.0|255.0] "" ESC,LDWS_LKAS
- SG_ CF_Mdps_Chksum2 : 24|8@1+ (1.0,0.0) [0.0|255.0] "" ESC,LDWS_LKAS
- SG_ CF_Mdps_SErr : 37|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ CR_Mdps_StrTq : 40|12@1+ (0.01,-20.48) [-20.48|20.47] "Nm" ESC
- SG_ CR_Mdps_OutTq : 52|12@1+ (0.1,-204.8) [-204.8|204.7] "" ESC,LDWS_LKAS
-
-BO_ 1360 IAP11: 3 IAP
- SG_ CF_Iap_EcoPmodSwi : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Iap_EcoPmodAct : 1|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Iap_ReqWarn : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1356 TCU_DCT14: 8 TCU
- SG_ Vehicle_Stop_Time : 0|5@1+ (1.0,0.0) [0.0|0.0] "" CLU
- SG_ HILL_HOLD_WARNING : 5|1@1+ (1.0,0.0) [0.0|0.0] "" CLU
-
-BO_ 1353 BAT11: 8 EMS
- SG_ BAT_SNSR_I : 0|16@1+ (0.01,-327.0) [-327.0|328.0] "A" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SOC : 16|8@1+ (1.0,0.0) [0.0|100.0] "%" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SNSR_V : 24|14@1+ (0.0010,6.0) [6.0|18.0] "V" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SNSR_Temp : 38|9@1- (0.5,-40.0) [-40.0|125.0] "deg" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SNSR_State : 47|1@1+ (1.0,0.0) [0.0|1.0] "" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SOH : 48|7@1+ (1.0,0.0) [0.0|100.0] "%" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SNSR_Invalid : 55|1@1+ (1.0,0.0) [0.0|1.0] "" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SOF : 56|7@1+ (0.1,0.0) [0.0|12.0] "V" CGW,CUBIS,IBOX,TMU
- SG_ BAT_SNSR_Error : 63|1@1+ (1.0,0.0) [0.0|1.0] "" CGW,CUBIS,IBOX,TMU
-
-BO_ 1351 EMS15: 8 EMS
- SG_ ECGPOvrd : 0|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX,SCC
- SG_ QECACC : 1|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX
- SG_ ECFail : 2|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX
- SG_ SwitchOffCondExt : 3|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX
- SG_ BLECFail : 4|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX
- SG_ CF_Ems_IsaAct : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ FA_PV_CAN : 8|8@1+ (0.3906,0.0) [0.0|99.2] "%" IBOX,LDWS_LKAS,TCU
- SG_ IntAirTemp : 16|8@1+ (0.75,-48.0) [-48.0|143.25] "deg" _4WD,ECS,EPB,IBOX,TCU
- SG_ STATE_DC_OBD : 24|7@1+ (1.0,0.0) [0.0|127.0] "" IBOX,TCU
- SG_ INH_DC_OBD : 31|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,TCU
- SG_ CTR_IG_CYC_OBD : 32|16@1+ (1.0,0.0) [0.0|65535.0] "" ACU,IBOX,TCU
- SG_ CTR_CDN_OBD : 48|16@1+ (1.0,0.0) [0.0|65535.0] "" IBOX,TCU
-
-BO_ 1350 DI_BOX12: 8 DI_BOX
- SG_ CF_DiBox_FrtInjVDiagReg0 : 0|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_FrtInjVDiagReg1 : 8|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_FrtInjVDiagReg2 : 16|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_SedInjVDiagReg0 : 24|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_SedInjVDiagReg1 : 32|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CF_DiBox_SedInjVDiagReg2 : 40|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
- SG_ CR_DiBox_BatVol : 48|8@1+ (0.1,0.0) [0.0|25.5] "V" EMS
- SG_ CF_DiBox_SedInjVChg : 56|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_FrtInjVChg : 57|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_SedInjVErrSPI : 58|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_DiBox_FrtInjVErrSPI : 59|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
-
-BO_ 1349 EMS14: 8 EMS
- SG_ IMMO_LAMP_STAT : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ L_MIL : 1|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,CUBIS,IBOX
- SG_ IM_STAT : 2|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ AMP_CAN : 3|5@1+ (10.731613,458.98) [458.98|791.660003] "mmHg" CLU,IBOX,TCU,TPMS
- SG_ BAT_Alt_FR_Duty : 8|8@1+ (0.4,0.0) [0.0|100.0] "%" CGW,CUBIS,IBOX,TMU
- SG_ VB : 24|8@1+ (0.1015625,0.0) [0.0|25.8984375] "V" CLU,CUBIS,DATC,EPB,FPCM,IBOX
- SG_ EMS_VS : 32|12@1+ (0.0625,0.0) [0.0|255.875] "km/h" CLU
- SG_ TEMP_FUEL : 56|8@1+ (0.75,-48.0) [-48.0|143.25] "deg" FPCM
-
-BO_ 68 DATC11: 8 DATC
- SG_ CF_Datc_Type : 0|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ CF_Datc_VerMaj : 8|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ CF_Datc_VerMin : 16|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ CR_Datc_OutTempC : 24|8@1+ (0.5,-41.0) [-41.0|86.5] "deg" CLU,FPCM
- SG_ CR_Datc_OutTempF : 32|8@1+ (1.0,-42.0) [-42.0|213.0] "deg" CLU
- SG_ CF_Datc_IncarTemp : 40|8@1+ (0.5,-40.0) [-40.0|60.0] "deg" BCM,CLU
-
-BO_ 67 DATC13: 8 DATC
- SG_ CF_Datc_TempDispUnit : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,IBOX
- SG_ CF_Datc_ModDisp : 2|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ CF_Datc_IonClean : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_ChgReqDisp : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_IntakeDisp : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_AutoDisp : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_FrDefLed : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,IBOX
- SG_ CF_Datc_AutoDefogBlink : 16|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_ClmScanDisp : 18|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_AqsDisp : 20|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_AcDisp : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_OpSts : 25|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Mtc_MaxAcDisp : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_DualDisp : 30|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_PwrInf : 32|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ CF_Datc_RearManual : 38|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_RearAutoDisp : 40|2@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Datc_RearOffDisp : 42|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_RearClimateScnDisp : 44|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_RearChgReqDisp : 46|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_RearModDisp : 48|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ CF_Datc_RearBlwDisp : 52|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ CF_Datc_PSModDisp : 56|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ CF_Datc_FrontBlwDisp : 60|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,IBOX
-
-BO_ 66 DATC12: 8 DATC
- SG_ CR_Datc_DrTempDispC : 0|8@1+ (0.5,14.0) [15.0|32.0] "deg" CLU,IBOX
- SG_ CR_Datc_DrTempDispF : 8|8@1+ (1.0,56.0) [58.0|90.0] "¢µ" CLU,IBOX
- SG_ CR_Datc_PsTempDispC : 16|8@1+ (0.5,14.0) [15.0|32.0] "deg" CLU,IBOX
- SG_ CR_Datc_PsTempDispF : 24|8@1+ (1.0,56.0) [58.0|90.0] "¢µ" CLU,IBOX
- SG_ CR_Datc_RearDrTempDispC : 40|8@1+ (0.5,14.0) [15.0|32.0] "deg" CLU
- SG_ CR_Datc_RearDrTempDispF : 48|8@1+ (1.0,58.0) [58.0|90.0] "¢µ" CLU
- SG_ CF_Datc_CO2_Warning : 56|8@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1345 CGW1: 8 BCM
- SG_ CF_Gway_IGNSw : 0|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,ECS,EMS,EPB,ESC,IBOX,LVR,MDPS,SAS,SCC,ECS,EMS,EPB,ESC,IBOX,LVR,MDPS,SAS,SCC
- SG_ CF_Gway_RKECmd : 3|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ECS,EMS,IBOX,ECS,EMS,IBOX
- SG_ CF_Gway_DrvKeyLockSw : 6|1@1+ (1.0,0.0) [0.0|1.0] "" ECS,EMS,IBOX,ECS,EMS,IBOX
- SG_ CF_Gway_DrvKeyUnlockSw : 7|1@1+ (1.0,0.0) [0.0|1.0] "" ECS,EMS,IBOX,ECS,EMS,IBOX
- SG_ CF_Gway_DrvDrSw : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ECS,EMS,EPB,ESC,IBOX,SCC,TCU,ECS,EMS,EPB,ESC,IBOX,SCC,TCU
- SG_ CF_Gway_DrvSeatBeltSw : 10|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,EPB,ESC,IBOX,PSB,TCU,EMS,EPB,ESC,IBOX,PSB,TCU
- SG_ CF_Gway_TrunkTgSw : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ECS,EMS,EPB,ESC,IBOX,ECS,EMS,EPB,ESC,IBOX
- SG_ CF_Gway_AstSeatBeltSw : 14|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX,PSB,IBOX,PSB
- SG_ CF_Gway_SMKOption : 16|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX,EMS,IBOX,SMK
- SG_ CF_Gway_HoodSw : 17|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,EMS,EPB,ESC,IBOX,EMS,EPB,ESC,IBOX
- SG_ CF_Gway_TurnSigLh : 19|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,EMS,IBOX,LCA,LDWS_LKAS,SCC,EMS,IBOX,LCA,LDWS_LKAS,SCC
- SG_ CF_Gway_WiperIntT : 21|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,EMS,IBOX,LDWS_LKAS,EMS,ESC,IBOX,LDWS_LKAS
- SG_ CF_Gway_WiperIntSw : 24|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX,LDWS_LKAS,EMS,ESC,IBOX,LDWS_LKAS
- SG_ CF_Gway_WiperLowSw : 25|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX,LDWS_LKAS,EMS,ESC,IBOX,LDWS_LKAS
- SG_ CF_Gway_WiperHighSw : 26|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX,LDWS_LKAS,EMS,ESC,IBOX,LDWS_LKAS
- SG_ CF_Gway_WiperAutoSw : 27|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX,LDWS_LKAS,EMS,ESC,IBOX,LDWS_LKAS
- SG_ CF_Gway_RainSnsState : 28|3@1+ (1.0,0.0) [0.0|7.0] "" AFLS,EMS,IBOX,LDWS_LKAS,AFLS,EMS,ESC,IBOX,LDWS_LKAS
- SG_ CF_Gway_HeadLampLow : 31|1@1+ (1.0,0.0) [0.0|1.0] "" AFLS,CLU,EMS,IBOX,LDWS_LKAS,SNV,AFLS,EMS,IBOX,LDWS_LKAS,SNV
- SG_ CF_Gway_HeadLampHigh : 32|1@1+ (1.0,0.0) [0.0|1.0] "" AFLS,CLU,EMS,IBOX,LDWS_LKAS,AFLS,EMS,IBOX,LDWS_LKAS
- SG_ CF_Gway_HazardSw : 33|2@1+ (1.0,0.0) [0.0|3.0] "" ABS,EMS,ESC,IBOX,LCA,LDWS_LKAS,ABS,EMS,ESC,IBOX,LCA,LDWS_LKAS
- SG_ CF_Gway_AstDrSw : 35|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX,IBOX
- SG_ CF_Gway_DefoggerRly : 36|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX,EMS,IBOX
- SG_ CF_Gway_ALightStat : 37|1@1+ (1.0,0.0) [0.0|1.0] "" AFLS,IBOX,LDWS_LKAS,AFLS,IBOX,LDWS_LKAS
- SG_ CF_Gway_LightSwState : 38|2@1+ (1.0,0.0) [0.0|3.0] "" AFLS,IBOX,LDWS_LKAS,AFLS,IBOX,LDWS_LKAS
- SG_ CF_Gway_Frt_Fog_Act : 40|1@1+ (1.0,0.0) [0.0|1.0] "" AFLS,CLU,IBOX,LDWS_LKAS,AFLS,IBOX,LDWS_LKAS
- SG_ CF_Gway_TSigRHSw : 41|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,LDWS_LKAS,IBOX,LDWS_LKAS
- SG_ CF_Gway_TSigLHSw : 42|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,LDWS_LKAS,IBOX,LDWS_LKAS
- SG_ CF_Gway_DriveTypeOption : 43|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX,LDWS_LKAS,IBOX,LDWS_LKAS
- SG_ CF_Gway_StarterRlyState : 44|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX,EMS,IBOX,SMK
- SG_ CF_Gway_PassiveAccessLock : 45|2@1+ (1.0,0.0) [0.0|7.0] "" CLU,ECS,EMS,IBOX,ECS,EMS,IBOX,SMK
- SG_ CF_Gway_WiperMistSw : 47|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,IBOX,LDWS_LKAS
- SG_ CF_Gway_PassiveAccessUnlock : 48|2@1+ (1.0,0.0) [0.0|7.0] "" CLU,ECS,EMS,IBOX,ECS,EMS,IBOX,SMK
- SG_ CF_Gway_RrSunRoofOpenState : 50|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,DATC,IBOX
- SG_ CF_Gway_PassingSW : 51|1@1+ (1.0,0.0) [0.0|1.0] "" AFLS,IBOX,LDWS_LKAS,AFLS,IBOX,LDWS_LKAS
- SG_ CF_Gway_HBAControlMode : 52|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,LDWS_LKAS,IBOX,LDWS_LKAS
- SG_ CF_Gway_HLpHighSw : 53|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,LDWS_LKAS,IBOX,LDWS_LKAS
- SG_ CF_Gway_InhibitRMT : 54|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,EPB,ESC,IBOX,LCA,LDWS_LKAS,MDPS,PGS,SCC,SPAS,TPMS,EPB,ESC,IBOX,LCA,LDWS_LKAS,PGS,SCC,SPAS,TPMS
- SG_ CF_Gway_RainSnsOption : 56|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ C_SunRoofOpenState : 57|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,DATC,IBOX,DATC,IBOX
- SG_ CF_Gway_Ign1 : 58|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_Ign2 : 59|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Gway_ParkBrakeSw : 60|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,IBOX,SCC,ESC,IBOX,SCC
- SG_ CF_Gway_TurnSigRh : 62|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,EMS,IBOX,LCA,LDWS_LKAS,SCC,EMS,IBOX,LCA,LDWS_LKAS,SCC
-
-BO_ 64 DATC14: 8 DATC
- SG_ CF_Datc_AqsLevelOut : 0|4@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Datc_DiagMode : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CR_Datc_SelfDiagCode : 8|8@1+ (1.0,-1.0) [0.0|254.0] "" CLU
- SG_ DATC_SyncDisp : 16|4@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ DATC_OffDisp : 20|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ DATC_SmartVentDisp : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ DATC_SmartVentOnOffStatus : 24|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ DATC_AutoDefogSysOff_Disp : 26|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ DATC_ADSDisp : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 832 LKAS11: 8 LDWS_LKAS
- SG_ CF_Lkas_LdwsSysState : 2|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,IBOX,PSB
- SG_ CF_Lkas_SysWarning : 6|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
- SG_ CF_Lkas_LdwsLHWarning : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,PSB
- SG_ CF_Lkas_LdwsRHWarning : 12|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,PSB
- SG_ CF_Lkas_HbaLamp : 14|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Lkas_FcwBasReq : 15|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,ESC
- SG_ CR_Lkas_StrToqReq : 16|11@1+ (0.0078125,-8.0) [-8.0|8.0] "Nm" MDPS
- SG_ CF_Lkas_ActToi : 27|1@1+ (1.0,0.0) [0.0|1.0] "" MDPS
- SG_ CF_Lkas_ToiFlt : 28|1@1+ (1.0,0.0) [0.0|1.0] "" MDPS
- SG_ CF_Lkas_HbaSysState : 29|3@1+ (1.0,0.0) [0.0|7.0] "" BCM,CLU
- SG_ CF_Lkas_FcwOpt : 32|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Lkas_HbaOpt : 34|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,CGW
- SG_ CF_Lkas_MsgCount : 36|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,MDPS
- SG_ CF_Lkas_FcwSysState : 40|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Lkas_FcwCollisionWarning : 43|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Lkas_FusionState : 45|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
- SG_ CF_Lkas_Chksum : 48|8@1+ (1.0,0.0) [0.0|255.0] "" MDPS
- SG_ CF_Lkas_FcwOpt_USM : 56|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Lkas_LdwsOpt_USM : 59|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,MDPS
-
-BO_ 1342 LKAS12: 6 LDWS_LKAS
- SG_ CF_Lkas_TsrSlifOpt : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_LkasTsrStatus : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Lkas_TsrSpeed_Display_Clu : 16|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
- SG_ CF_LkasTsrSpeed_Display_Navi : 24|8@1+ (1.0,0.0) [0.0|255.0] "" BCM,CLU
- SG_ CF_Lkas_TsrAddinfo_Display : 32|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1338 TMU_GW_E_01: 8 CLU
- SG_ CF_Gway_TeleReqDrLock : 0|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Gway_TeleReqDrUnlock : 2|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Gway_TeleReqHazard : 4|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Gway_TeleReqHorn : 6|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Gway_TeleReqEngineOperate : 8|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
-
-BO_ 1078 PAS11: 4 BCM
- SG_ CF_Gway_PASDisplayFLH : 0|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,AVM
- SG_ CF_Gway_PASDisplayFRH : 3|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,AVM
- SG_ CF_Gway_PASRsound : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_PASDisplayFCTR : 8|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,AVM
- SG_ CF_Gway_PASDisplayRCTR : 11|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,PGS,AVM
- SG_ CF_Gway_PASFsound : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_PASDisplayRLH : 16|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,PGS,AVM
- SG_ CF_Gway_PASDisplayRRH : 19|3@1+ (1.0,0.0) [0.0|7.0] "" AVM,CLU,PGS,AVM
- SG_ CF_Gway_PASCheckSound : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_PASSystemOn : 24|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,Dummy
- SG_ CF_Gway_PASOption : 26|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_PASDistance : 28|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
-
-BO_ 48 EMS18: 6 EMS
- SG_ CF_Ems_DC1NumPerMSV : 0|8@1+ (1.0,0.0) [0.0|255.0] "" DI_BOX
- SG_ CF_Ems_DC2NumPerMSV : 8|16@1+ (1.0,0.0) [0.0|65535.0] "" DI_BOX
- SG_ CR_Ems_DutyCyc1MSV : 24|8@1+ (0.1953,0.0) [0.0|49.8] "%" DI_BOX
- SG_ CR_Ems_DutyCyc2MSV : 32|8@1+ (0.13725,0.0) [0.0|35.0] "%" DI_BOX
- SG_ CR_Ems_DutyCyc3MSV : 40|8@1+ (0.392,0.0) [0.0|100.0] "%" DI_BOX
-
-BO_ 1322 CLU15: 8 CLU
- SG_ CF_Clu_VehicleSpeed : 0|8@1+ (1.0,0.0) [0.0|255.0] "" BCM
- SG_ CF_Clu_InhibitP : 9|1@1+ (1.0,0.0) [0.0|1.0] "" BCM
- SG_ CF_Clu_InhibitR : 10|1@1+ (1.0,0.0) [0.0|1.0] "" BCM
- SG_ CF_Clu_InhibitN : 11|1@1+ (1.0,0.0) [0.0|1.0] "" BCM
- SG_ CF_Clu_InhibitD : 12|1@1+ (1.0,0.0) [0.0|1.0] "" BCM
- SG_ CF_Clu_HudInfoSet : 13|7@1+ (1.0,0.0) [0.0|127.0] "" HUD
- SG_ CF_Clu_HudFontColorSet : 20|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
- SG_ CF_Clu_HudBrightUpSW : 22|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
- SG_ CF_Clu_HudBrightDnSW : 24|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
- SG_ CF_Clu_HudHeightUpSW : 26|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
- SG_ CF_Clu_HudHeightDnSW : 28|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
- SG_ CF_Clu_HudSet : 30|1@1+ (1.0,0.0) [0.0|1.0] "" HUD
- SG_ CF_Clu_HudFontSizeSet : 31|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
- SG_ CF_Clu_LanguageInfo : 33|5@1+ (1.0,0.0) [0.0|31.0] "" BCM,PGS
- SG_ CF_Clu_ClusterSound : 38|1@1- (1.0,0.0) [0.0|0.0] "" BCM,CGW,FATC
-
-BO_ 1066 _4WD13: 6 _4WD
- SG_ _4WD_CURRENT : 0|8@1+ (0.390625,0.0) [-50.0|50.0] "A" TCU
- SG_ _4WD_POSITION : 8|16@1+ (0.015625,0.0) [-180.0|180.0] "Deg" TCU
- SG_ _4WD_CLU_THERM_STR : 24|8@1+ (1.0,0.0) [0.0|100.0] "%" TCU
- SG_ _4WD_STATUS : 32|8@1+ (1.0,0.0) [0.0|15.0] "" ESC,TCU
-
-BO_ 1065 _4WD12: 8 _4WD
- SG_ Ster_Pos : 0|16@1+ (1.0,-600.0) [-600.0|600.0] "Deg" ESC
- SG_ FRSS : 16|8@1+ (1.0,0.0) [0.0|254.0] "km/h" ESC
- SG_ FLSS : 24|8@1+ (1.0,0.0) [0.0|254.0] "km/h" ESC
- SG_ RRSS : 32|8@1+ (1.0,0.0) [0.0|254.0] "km/h" ESC
- SG_ RLSS : 40|8@1+ (1.0,0.0) [0.0|254.0] "km/h" ESC
- SG_ CLU_PRES : 48|16@1+ (0.0625,-50.0) [-50.0|50.0] "Bar" ESC
-
-BO_ 809 EMS12: 8 EMS
- SG_ CONF_TCU m1 : 0|6@1+ (1.0,0.0) [0.0|63.0] "" _4WD,ACU,BCM,CLU,DATC,EPB,ESC,IBOX,LCA,SMK
- SG_ CAN_VERS m0 : 0|6@1+ (1.0,0.0) [0.0|7.7] "" _4WD,ABS,ESC,IBOX
- SG_ TQ_STND m3 : 0|6@1+ (10.0,0.0) [0.0|630.0] "Nm" _4WD,DATC,ECS,EPB,ESC,FATC,IBOX
- SG_ OBD_FRF_ACK m2 : 0|6@1+ (1.0,0.0) [0.0|63.0] "" _4WD,ESC,IBOX
- SG_ MUL_CODE M : 6|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,ABS,ACU,BCM,CLU,DATC,ECS,EPB,ESC,IBOX,LCA,SMK,TCU
- SG_ TEMP_ENG : 8|8@1+ (0.75,-48.0) [-48.0|143.25] "deg" _4WD,BCM,CLU,DATC,EPB,ESC,IBOX,SMK,TCU
- SG_ MAF_FAC_ALTI_MMV : 16|8@1+ (0.00781,0.0) [0.0|1.99155] "" IBOX,TCU
- SG_ VB_OFF_ACT : 24|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,TCU
- SG_ ACK_ES : 25|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,IBOX
- SG_ CONF_MIL_FMY : 26|3@1+ (1.0,0.0) [0.0|7.0] "" ESC,IBOX,TCU
- SG_ OD_OFF_REQ : 29|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,TCU
- SG_ ACC_ACT : 30|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ABS,CLU,ESC,IAP,IBOX,SCC,TCU
- SG_ CLU_ACK : 31|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EPB,ESC,IBOX
- SG_ BRAKE_ACT : 32|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,ABS,ACU,AFLS,CLU,DATC,ECS,EPB,ESC,IBOX,LDWS_LKAS,TCU
- SG_ ENG_CHR : 34|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,ABS,ACU,CLU,DATC,EPB,ESC,FATC,IBOX,SCC,SMK,TCU
- SG_ GP_CTL : 38|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX
- SG_ TPS : 40|8@1+ (0.4694836,-15.0234742) [-15.0234742|104.6948357] "%" _4WD,ABS,ACU,CLU,DATC,ECS,EPB,ESC,IBOX,TCU
- SG_ PV_AV_CAN : 48|8@1+ (0.3906,0.0) [0.0|99.603] "%" _4WD,AAF,ABS,ACU,AFLS,CLU,DATC,EPB,ESC,IAP,IBOX,LDWS_LKAS,SCC,TCU
- SG_ ENG_VOL : 56|8@1+ (0.1,0.0) [0.0|25.5] "liter" _4WD,ABS,ACU,BCM,CLU,DATC,EPB,ESC,IBOX,LDWS_LKAS,SCC,SMK
-
-BO_ 1064 _4WD11: 8 _4WD
- SG_ _4WD_TYPE : 0|2@1+ (1.0,0.0) [0.0|3.0] "" ACU,ESC,TPMS
- SG_ _4WD_SUPPORT : 2|2@1+ (1.0,0.0) [0.0|3.0] "" ABS,ESC,TPMS
- SG_ _4WD_ERR : 8|8@1+ (1.0,0.0) [0.0|255.0] "" CLU,ESC
- SG_ CLU_DUTY : 16|8@1+ (1.0,0.0) [0.0|64.0] "%" ABS,ESC
- SG_ R_TIRE : 24|8@1+ (1.0,200.0) [200.0|455.0] "mm" ABS,ESC,TPMS
- SG_ _4WD_SW : 32|8@1+ (1.0,0.0) [0.0|9.9] "" ESC
- SG_ _2H_ACT : 40|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,ESC
- SG_ _4H_ACT : 41|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,CLU,ESC,TPMS
- SG_ LOW_ACT : 42|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,ESC,TCU,TPMS
- SG_ AUTO_ACT : 43|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,ESC,TPMS
- SG_ LOCK_ACT : 44|1@1+ (1.0,0.0) [0.0|1.0] "" ABS,CLU,ESC,TPMS
- SG_ _4WD_TQC_CUR : 48|16@1+ (1.0,0.0) [0.0|65535.0] "Nm" ABS,ESC
-
-BO_ 1319 HU_GW_E_01: 8 CLU
- SG_ C_ADrLNValueSet : 0|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ C_ADrUNValueSet : 4|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ C_TwUnNValueSet : 8|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_ABuzzerNValueSet : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_ArmWKeyNValueSet : 12|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_PSMNValueSet : 14|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_SCMNValueSet : 16|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_HLEscortNValueSet : 18|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_WELNValueSet : 20|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_TriTurnLNValueSet : 22|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_SNVWarnNValueSet : 24|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_LkasWarnNValueSet : 26|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
-
-BO_ 1318 HU_GW_E_00: 8 CLU
- SG_ C_ADrLURValueReq : 0|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_TwUnRValueReq : 2|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_AlarmRValueReq : 4|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_IMSRValueReq : 6|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_HLEscortRValueReq : 8|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_WELRValueReq : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_TriTurnLRValueReq : 12|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_SNVWarnRValueReq : 14|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ C_LkasWarnRValueReq : 16|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
-
-BO_ 1317 GW_HU_E_01: 8 BCM
- SG_ C_ADrLRValue : 0|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ C_ADrURValue : 4|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ C_TwUnRValue : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_ABuzzerRValue : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_ArmWKeyRValue : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_PSMRValue : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SCMRValue : 16|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_HLEscortRValue : 18|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_WELRValue : 20|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_TriTurnLRValue : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1316 GW_HU_E_00: 8 BCM
- SG_ C_ADrLUNValueConf : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_TwUnNValueConf : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_AlarmNValueConf : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_PSMNValueConf : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SCMNValueConf : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_HLEscortNValueConf : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_WELNValueConf : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_TriTurnLNValueConf : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1315 GW_SWRC_PE: 8 BCM
- SG_ C_ModeSW : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_MuteSW : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SeekDnSW : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SeekUpSW : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_BTPhoneCallSW : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_BTPhoneHangUpSW : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_DISCDownSW : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_DISCUpSW : 16|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SdsSW : 18|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_MTSSW : 20|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_VolDnSW : 22|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_VolUpSW : 24|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1314 GW_IPM_PE_1: 8 BCM
- SG_ C_AV_Tail : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_ParkingBrakeSW : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_RKECMD : 4|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ C_BAState : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_IGNSW : 12|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ C_CountryCfg : 16|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ C_TailLampActivity : 26|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ RearSW_RSELockOnOff : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SMKTeleCrankingState : 32|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_SMKTeleCrankingFailRes : 34|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1057 SCC12: 8 SCC
- SG_ CF_VSM_Prefill : 0|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ CF_VSM_DecCmdAct : 1|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ CF_VSM_HBACmd : 2|2@1+ (1.0,0.0) [0.0|3.0] "" ESC
- SG_ CF_VSM_Warn : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,IAP
- SG_ CF_VSM_Stat : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,PSB
- SG_ CF_VSM_BeltCmd : 8|3@1+ (1.0,0.0) [0.0|7.0] "" ESC,PSB
- SG_ ACCFailInfo : 11|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,CUBIS,ESC,IBOX
- SG_ ACCMode : 13|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,IBOX,TCU
- SG_ StopReq : 15|1@1+ (1.0,0.0) [0.0|1.0] "" EPB,ESC
- SG_ CR_VSM_DecCmd : 16|8@1+ (0.01,0.0) [0.0|2.55] "g" ESC
- SG_ aReqMax : 24|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,ESC,TCU
- SG_ TakeOverReq : 35|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,ESC,TCU
- SG_ PreFill : 36|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,TCU
- SG_ aReqMin : 37|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,ESC,TCU
- SG_ CF_VSM_ConfMode : 48|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ AEB_Failinfo : 50|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ AEB_Status : 52|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ AEB_CmdAct : 54|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ AEB_StopReq : 55|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,ESC
- SG_ CR_VSM_Alive : 56|4@1+ (1.0,0.0) [0.0|15.0] "" ESC,PSB
- SG_ CR_VSM_ChkSum : 60|4@1+ (1.0,0.0) [0.0|15.0] "" ESC,PSB
-
-BO_ 1313 GW_DDM_PE: 8 BCM
- SG_ C_DRVDoorStatus : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_ASTDoorStatus : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_RLDoorStatus : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_RRDoorStatus : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_TrunkStatus : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ C_OSMirrorStatus : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1056 SCC11: 8 SCC
- SG_ MainMode_ACC : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,ESC
- SG_ SCCInfoDisplay : 1|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ESC
- SG_ AliveCounterACC : 4|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,EMS,ESC,TCU
- SG_ VSetDis : 8|8@1+ (1.0,0.0) [0.0|255.0] "km/h or MPH" CLU,ESC,TCU
- SG_ ObjValid : 16|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,ESC,TCU
- SG_ DriverAlertDisplay : 17|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ TauGapSet : 19|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ESC,TCU
- SG_ ACC_ObjStatus : 22|2@1+ (1.0,0.0) [0.0|3.0] "" ABS,ESC
- SG_ ACC_ObjLatPos : 24|9@1+ (0.1,-20.0) [-20.0|31.1] "m" ABS,ESC
- SG_ ACC_ObjDist : 33|11@1+ (0.1,0.0) [0.0|204.7] "m" ABS,ESC
- SG_ ACC_ObjRelSpd : 44|12@1+ (0.1,-170.0) [-170.0|239.5] "m/s" ABS,ESC
- SG_ Navi_SCC_Curve_Status : 56|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Navi_SCC_Curve_Act : 58|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Navi_SCC_Camera_Act : 60|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Navi_SCC_Camera_Status : 62|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
-BO_ 1312 CGW3: 8 BCM
- SG_ CR_Photosensor_LH : 0|8@1+ (78.125,0.0) [0.0|20000.0] "" DATC,DATC
- SG_ CR_Photosensor_RH : 10|8@1+ (78.125,0.0) [0.0|20000.0] "" DATC,DATC
- SG_ CF_Hoodsw_memory : 22|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,EMS
- SG_ C_MirOutTempSns : 24|8@1+ (0.5,-40.5) [-40.0|60.0] "deg" AAF,CLU,DATC,EMS,SPAS,AAF,DATC,EMS,SPAS
-
-BO_ 544 ESP12: 8 ESC
- SG_ LAT_ACCEL : 0|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" _4WD,ECS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,TCU
- SG_ LAT_ACCEL_STAT : 11|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,IBOX,LDWS_LKAS,MDPS,PSB,SCC,TCU
- SG_ LAT_ACCEL_DIAG : 12|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,IBOX,LDWS_LKAS,MDPS,PSB,SCC,TCU
- SG_ LONG_ACCEL : 13|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" _4WD,ECS,EMS,EPB,IBOX,LCA,LDWS_LKAS,PSB,SCC,SPAS,TCU
- SG_ LONG_ACCEL_STAT : 24|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,IBOX,LDWS_LKAS,PSB,SCC,SPAS,TCU
- SG_ LONG_ACCEL_DIAG : 25|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,IBOX,LDWS_LKAS,PSB,SCC,SPAS,TCU
- SG_ CYL_PRES : 26|12@1+ (0.1,0.0) [0.0|409.5] "Bar" _4WD,ECS,EMS,EPB,IBOX,LDWS_LKAS,PSB,SCC,TCU
- SG_ CYL_PRES_STAT : 38|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ECS,EMS,EPB,IBOX,LDWS_LKAS,PSB,SCC,TCU
- SG_ CYL_PRESS_DIAG : 39|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ECS,EMS,EPB,IBOX,PSB,SCC,TCU
- SG_ YAW_RATE : 40|13@1+ (0.01,-40.95) [-40.95|40.96] "" _4WD,AFLS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,SPAS,TCU
- SG_ YAW_RATE_STAT : 53|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,AFLS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,SPAS,TCU
- SG_ YAW_RATE_DIAG : 54|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,AFLS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,SPAS,TCU
- SG_ ESP12_AliveCounter : 56|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
- SG_ ESP12_Checksum : 60|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
-
-BO_ 1307 CLU16: 8 CLU
- SG_ CF_Clu_TirePressUnitNValueSet : 0|3@1+ (1.0,0.0) [0.0|7.0] "" TPMS
- SG_ CF_Clu_SlifNValueSet : 3|2@1+ (1.0,0.0) [0.0|3.0] "" LDWS_LKAS
- SG_ CF_Clu_RearWiperNValueSet : 12|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
-
-BO_ 790 EMS11: 8 EMS
- SG_ SWI_IGK : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ABS,ACU,AHLS,CUBIS,DI_BOX,ECS,EPB,ESC,IBOX,LDWS_LKAS,MDPS,REA,SAS,SCC,TCU
- SG_ F_N_ENG : 1|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,AFLS,CLU,CUBIS,DATC,ECS,EPB,ESC,IBOX,MDPS,SCC,TCU
- SG_ ACK_TCS : 2|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,IBOX
- SG_ PUC_STAT : 3|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,DATC,IBOX,TCU
- SG_ TQ_COR_STAT : 4|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,ESC,IBOX,TCU
- SG_ RLY_AC : 6|1@1+ (1.0,0.0) [0.0|1.0] "" DATC,IBOX,TCU
- SG_ F_SUB_TQI : 7|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ECS,EPB,ESC,IBOX,TCU
- SG_ TQI_ACOR : 8|8@1+ (0.390625,0.0) [0.0|99.6094] "%" _4WD,EPB,ESC,IBOX,TCU
- SG_ N : 16|16@1+ (0.25,0.0) [0.0|16383.75] "rpm" _4WD,ACU,AFLS,CLU,CUBIS,DATC,ECS,EPB,ESC,FPCM,IBOX,MDPS,SCC,TCU
- SG_ TQI : 32|8@1+ (0.390625,0.0) [0.0|99.6094] "%" _4WD,ECS,EPB,ESC,IBOX,TCU
- SG_ TQFR : 40|8@1+ (0.390625,0.0) [0.0|99.6094] "%" _4WD,EPB,ESC,IBOX,TCU
- SG_ VS : 48|8@1+ (1.0,0.0) [0.0|254.0] "km/h" _4WD,AAF,ACU,AHLS,BCM,CLU,DATC,ECS,EPB,IBOX,LCA,LDWS_LKAS,LVR,MDPS,ODS,SCC,SMK,SPAS,TCU,TPMS
- SG_ RATIO_TQI_BAS_MAX_STND : 56|8@1+ (0.0078,0.0) [0.0|2.0] "" _4WD,IBOX,TCU
-
-BO_ 1301 CLU14: 8 CLU
- SG_ CF_Clu_ADrUNValueSet : 0|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_ADrLNValueSet : 3|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_EscortHLNValueSet : 6|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Clu_DoorLSNValueSet : 8|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_PSMNValueSet : 11|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_TTUnlockNValueSet : 14|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Clu_PTGMNValueSet : 16|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Clu_SCMNValueSet : 18|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Clu_WlightNValueSet : 20|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Clu_TempUnitNValueSet : 22|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,DATC
- SG_ CF_Clu_MoodLpNValueSet : 24|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_TrfChgSet : 27|2@1+ (1.0,0.0) [0.0|3.0] "" AFLS
- SG_ CF_Clu_OTTurnNValueSet : 29|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_LcaNValueSet : 32|2@1+ (1.0,0.0) [0.0|3.0] "" LCA
- SG_ CF_Clu_RctaNValueSet : 34|2@1+ (1.0,0.0) [0.0|3.0] "" LCA
- SG_ CF_Clu_RcwNValueSet : 36|2@1+ (1.0,0.0) [0.0|3.0] "" LCA
- SG_ CF_Clu_EscOffNValueSet : 38|3@1+ (1.0,0.0) [0.0|7.0] "" ESC
- SG_ CF_Clu_SccNaviCrvNValueSet : 41|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
- SG_ CF_Clu_SccNaviCamNValueSet : 43|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
- SG_ CF_Clu_SccAebNValueSet : 45|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
- SG_ CF_Clu_LkasModeNValueSet : 47|2@1+ (1.0,0.0) [0.0|3.0] "" LDWS_LKAS
- SG_ CF_Clu_FcwNValueSet : 51|2@1+ (1.0,0.0) [0.0|3.0] "" LDWS_LKAS
- SG_ CF_Clu_PasSpkrLvNValueSet : 53|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
- SG_ CF_Clu_SccDrvModeNValueSet : 56|3@1+ (1.0,0.0) [0.0|7.0] "" SCC
- SG_ CF_Clu_HAnBNValueSet : 59|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
- SG_ CF_Clu_HfreeTrunkTgNValueSet : 61|3@1+ (1.0,0.0) [0.0|7.0] "" BCM
-
-BO_ 275 TCU13: 8 TCU
- SG_ N_TGT_LUP : 0|8@1+ (10.0,500.0) [500.0|3040.0] "rpm" EMS,IBOX
- SG_ SLOPE_TCU : 8|6@1+ (0.5,-16.0) [-16.0|15.5] "%" CLU,CUBIS,EMS,IBOX
- SG_ CF_Tcu_InhCda : 14|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Tcu_IsgInhib : 15|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Tcu_BkeOnReq : 16|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,IBOX
- SG_ CF_Tcu_NCStat : 18|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,IBOX
- SG_ CF_Tcu_TarGr : 20|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,CLU,DATC,EMS,EPB,ESC,IBOX,SCC
- SG_ CF_Tcu_ShfPatt : 24|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,CUBIS,EMS,IBOX
- SG_ CF_Tcu_InhVis : 28|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Tcu_PRelReq : 29|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX,LVR
- SG_ CF_Tcu_ITPhase : 30|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Tcu_ActEcoRdy : 31|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Tcu_TqGrdLim : 32|8@1+ (10.0,0.0) [0.0|2540.0] "Nm/s" EMS,IBOX
- SG_ CR_Tcu_IsgTgtRPM : 40|8@1+ (20.0,0.0) [0.0|3500.0] "rpm" EMS,IBOX
- SG_ CF_Tcu_SptRdy : 48|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,IBOX
- SG_ CF_Tcu_SbwPInfo : 56|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ CF_Tcu_Alive3 : 58|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,IBOX
- SG_ CF_Tcu_ChkSum3 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,IBOX
-
-BO_ 274 TCU12: 8 TCU
- SG_ ETL_TCU : 0|8@1+ (2.0,0.0) [0.0|508.0] "Nm" EMS,IBOX
- SG_ CUR_GR : 8|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,ESC,IBOX,SCC,TPMS
- SG_ CF_Tcu_Alive : 12|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,ESC,IBOX,SCC
- SG_ CF_Tcu_ChkSum : 14|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,ESC,IBOX,SCC
- SG_ VS_TCU : 16|8@1+ (1.0,0.0) [0.0|254.0] "km/h" BCM,CLU,DATC,EMS,IBOX,LCA,LVR,PGS,SMK,SNV
- SG_ FUEL_CUT_TCU : 28|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ INH_FUEL_CUT : 29|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ IDLE_UP_TCU : 30|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ N_INC_TCU : 31|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,IBOX
- SG_ SPK_RTD_TCU : 32|8@1+ (0.375,-23.625) [-15.0|15.0] "" EMS,IBOX
- SG_ N_TC_RAW : 40|16@1+ (0.25,0.0) [0.0|16383.5] "rpm" EMS,IBOX
- SG_ VS_TCU_DECIMAL : 56|8@1+ (0.0078125,0.0) [0.0|0.9921875] "km/h" CLU,EMS,IBOX,LCA
-
-BO_ 273 TCU11: 8 TCU
- SG_ TQI_TCU_INC : 0|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS,ESC,IBOX
- SG_ G_SEL_DISP : 8|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,AFLS,AVM,BCM,CGW,CLU,CUBIS,ECS,EMS,EPB,ESC,IAP,IBOX,LCA,LDWS_LKAS,LVR,MDPS,PGS,SCC,SMK,SNV,SPAS,TPMS
- SG_ F_TCU : 12|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,ESC,IBOX
- SG_ TCU_TYPE : 14|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,EMS,ESC,IBOX
- SG_ TCU_OBD : 16|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,ESC,IBOX
- SG_ SWI_GS : 19|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,EMS,EPB,ESC,IBOX,SCC
- SG_ GEAR_TYPE : 20|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,CLU,EMS,ESC,IBOX,SCC
- SG_ TQI_TCU : 24|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS,ESC,IBOX
- SG_ TEMP_AT : 32|8@1+ (1.0,-40.0) [-40.0|214.0] "deg" AAF,CLU,CUBIS,EMS,ESC,IBOX
- SG_ N_TC : 40|16@1+ (0.25,0.0) [0.0|16383.5] "rpm" _4WD,EMS,EPB,ESC,IBOX
- SG_ SWI_CC : 56|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,CLU,EMS,ESC,IBOX
- SG_ CF_Tcu_Alive1 : 58|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,IBOX
- SG_ CF_Tcu_ChkSum1 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,IBOX
-
-BO_ 16 ACU13: 8 ACU
- SG_ CF_Acu_CshAct : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CUBIS,IBOX,ODS
-
-BO_ 1040 CGW_USM1: 8 BCM
- SG_ CF_Gway_ATTurnRValue : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_PTGMRValue : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_EscortHLRValue : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_TTUnlockRValue : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_ADrLRValue : 8|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_ADrURValue : 11|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_SCMRValue : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_WlightRValue : 16|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_PSMRValue : 18|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_OTTurnRValue : 21|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_DrLockSoundRValue : 24|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_HAnBRValue : 27|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_MoodLpRValue : 30|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_HfreeTrunkRValue : 32|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_AutoLightRValue : 35|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_Gway_RearWiperRValue : 38|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_Gway_PasSpkrLvRValue : 40|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
-
-BO_ 1292 CLU13: 8 CLU
- SG_ CF_Clu_LowfuelWarn : 0|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,FPCM,IBOX
- SG_ CF_Clu_RefDetMod : 2|1@1+ (1.0,0.0) [0.0|1.0] "" IBOX
- SG_ CF_Clu_AvgFCU : 3|2@1+ (1.0,0.0) [0.0|3.0] "" IBOX
- SG_ CF_Clu_AvsmCur : 5|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,SCC
- SG_ CF_Clu_AvgFCI : 6|10@1+ (0.1,0.0) [0.0|102.2] "" IBOX
- SG_ CF_Clu_DrivingModeSwi : 16|2@1+ (1.0,0.0) [0.0|3.0] "" DATC,ECS,EMS,ESC,IAP,MDPS,TCU
- SG_ CF_Clu_FuelDispLvl : 18|5@1+ (1.0,0.0) [0.0|31.0] "" CGW,IBOX
- SG_ CF_Clu_FlexSteerSW : 23|1@1+ (1.0,0.0) [0.0|1.0] "" MDPS
- SG_ CF_Clu_DTE : 24|10@1+ (1.0,0.0) [0.0|1023.0] "" DATC
- SG_ CF_Clu_TripUnit : 34|2@1+ (1.0,0.0) [0.0|3.0] "" DATC
- SG_ CF_Clu_SWL_Stat : 36|3@1+ (1.0,0.0) [0.0|7.0] "" ACU,EMS
- SG_ CF_Clu_ActiveEcoSW : 39|1@1+ (1.0,0.0) [0.0|1.0] "" DATC,EMS,TCU
- SG_ CF_Clu_EcoDriveInf : 40|3@1+ (1.0,0.0) [0.0|7.0] "" CUBIS,EMS,IAP,IBOX
- SG_ CF_Clu_IsaMainSW : 43|1@1+ (1.0,0.0) [0.0|1.0] "" EMS
- SG_ CF_Clu_LdwsLkasSW : 56|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
- SG_ CF_Clu_AltLStatus : 59|1@1+ (1.0,0.0) [0.0|1.0] "" BCM,DATC,EMS
- SG_ CF_Clu_AliveCnt2 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,LDWS_LKAS
-
-BO_ 1290 SCC13: 8 SCC
- SG_ SCCDrvModeRValue : 0|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ SCC_Equip : 3|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ AebDrvSetStatus : 4|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ESC
-
-BO_ 1287 TCS15: 4 ESC
- SG_ ABS_W_LAMP : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,CUBIS,IBOX
- SG_ TCS_OFF_LAMP : 1|2@1+ (1.0,0.0) [0.0|1.0] "" _4WD,ACU,CLU
- SG_ TCS_LAMP : 3|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,ACU,CLU,CUBIS,IBOX,SCC
- SG_ DBC_W_LAMP : 5|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU
- SG_ DBC_F_LAMP : 6|2@1+ (1.0,0.0) [0.0|3.0] "" _4WD,CLU
- SG_ ESC_Off_Step : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ AVH_CLU : 16|8@1+ (1.0,0.0) [0.0|255.0] "" CLU,EPB
- SG_ AVH_I_LAMP : 24|2@1+ (1.0,0.0) [0.0|3.0] "" EPB
- SG_ EBD_W_LAMP : 26|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU
- SG_ AVH_ALARM : 27|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ AVH_LAMP : 29|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,EPB,SPAS
-
-BO_ 1282 TCU14: 4 TCU
- SG_ CF_TCU_WarnMsg : 0|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ CF_TCU_WarnImg : 3|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_TCU_WarnSnd : 4|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ CF_Tcu_GSel_BlinkReq : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,LVR
- SG_ CF_Tcu_StRelStat : 12|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,ESC
- SG_ CF_Tcu_DriWarn1 : 13|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,EMS,ESC
- SG_ CF_Tcu_DriWarn2 : 16|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,EMS,ESC
-
-BO_ 1281 ECS11: 3 ECS
- SG_ ECS_W_LAMP : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,CUBIS,IBOX
- SG_ SYS_NA : 1|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ ECS_DEF : 2|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ ECS_DIAG : 3|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ L_CHG_NA : 4|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ Leveling_Off : 5|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ LC_overheat : 6|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ Lifting : 8|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ Lowering : 9|1@1+ (1.0,0.0) [0.0|1.0] "" CLU
- SG_ Damping_Mode : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ REQ_Damping : 12|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ REQ_Height : 14|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ REQ_level : 16|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
- SG_ ACT_Height : 20|4@1+ (1.0,0.0) [0.0|15.0] "" CLU
-
-BO_ 1024 CLU_CFG11: 2 CLU
- SG_ Vehicle_Type : 0|16@1+ (1.0,0.0) [0.0|65536.0] "" _4WD
-
-BO_ 1280 ACU14: 1 ACU
- SG_ CF_SWL_Ind : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_TTL_Ind : 2|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ CF_SBR_Ind : 4|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU
-
-BO_ 512 EMS20: 6 EMS
- SG_ FCO : 0|16@1+ (0.128,0.0) [0.0|8388.48] "ul" CLU,CUBIS,FPCM,IBOX
- SG_ CF_Ems_PumpTPres : 16|8@1+ (3.137254902,0.0) [0.0|800.0] "kPa" FPCM,IBOX
- SG_ Split_Stat : 32|1@1+ (1.0,0.0) [0.0|1.0] "" FPCM
diff --git a/opendbc/hyundai_2015_mcan.dbc b/opendbc/hyundai_2015_mcan.dbc
deleted file mode 100644
index 6bcd771e511205..00000000000000
--- a/opendbc/hyundai_2015_mcan.dbc
+++ /dev/null
@@ -1,1564 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: CLOCK HUD H_U DATC CCP KMA_TMU CUBIS TMU IPM RSE_R RRC CGW RSE_L AMP EDT SWRC IBOX CLU FHCU ASD MON AVM KBD
-
-
-BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX
- SG_ C_WHEEL_FL : 0|12@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_WHEEL_FR : 0|12@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_WHEEL_RL : 0|12@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_WHEEL_RR : 0|12@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 2046 TP_EDT_AMP: 8 EDT
- SG_ Byte0_TCP_7FE : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte1_Data_7FE : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte2_Data_7FE : 23|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte3_Data_7FE : 31|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte4_Data_7FE : 39|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte5_Data_7FE : 47|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte6_Data_7FE : 55|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte7_Data_7FE : 63|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 251 HU_TMU_E_02: 8 H_U
- SG_ HU_GPS_Year : 7|8@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ HU_GPS_Month : 15|8@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ HU_GPS_Day : 23|8@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ HU_GPS_Hour : 31|8@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ HU_GPS_Minute : 39|8@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ HU_GPS_Second : 47|8@0+ (1,0) [0|0] "" CUBIS,TMU
-
-BO_ 250 HU_TMU_E_01: 8 H_U
- SG_ HU_VoiceRecCom : 2|3@0+ (1,0) [0|0] "" TMU
- SG_ HU_LangChgCom : 5|3@0+ (1,0) [0|0] "" TMU
- SG_ HU_CallEndCmd : 9|2@0+ (1,0) [0|0] "" TMU
- SG_ HU_ServiceReqtID : 13|4@0+ (1,0) [0|0] "" TMU
- SG_ HU_MicReqCmd : 15|2@0+ (1,0) [0|0] "" TMU
- SG_ HU_SeviceAction : 18|3@0+ (1,0) [0|0] "" TMU
- SG_ HU_eCallStatus : 20|2@0+ (1,0) [0|0] "" TMU
-
-BO_ 1269 TP_CLU_ANDAUTO_HU: 8 CLU
- SG_ Byte0_TCP_4F5 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4F5 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4F5 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4F5 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4F5 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4F5 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4F5 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4F5 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1268 TP_HU_ANDAUTO_CLU: 8 H_U
- SG_ Byte0_TCP_4F4 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4F4 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4F4 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4F4 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4F4 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4F4 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4F4 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4F4 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1267 TP_CLU_CARPLAY_HU: 8 CLU
- SG_ Byte0_TCP_4F3 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4F3 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4F3 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4F3 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4F3 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4F3 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4F3 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4F3 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1266 TP_HU_CARPLAY_CLU: 8 H_U
- SG_ Byte0_TCP_4F2 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4F2 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4F2 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4F2 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4F2 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4F2 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4F2 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4F2 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1263 TP_CLU_IBOX_HU: 8 CLU
- SG_ Byte0_TCP_4EF : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4EF : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4EF : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4EF : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4EF : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4EF : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4EF : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4EF : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1262 TP_HU_IBOX_CLU: 8 H_U
- SG_ Byte0_TCP_4EE : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4EE : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4EE : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4EE : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4EE : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4EE : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4EE : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4EE : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1261 TP_CLU_DLNA_HU: 8 CLU
- SG_ Byte0_TCP_4ED : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4ED : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4ED : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4ED : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4ED : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4ED : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4ED : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4ED : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1260 TP_HU_DLNA_CLU: 8 H_U
- SG_ Byte0_TCP_4EC : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4EC : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4EC : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4EC : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4EC : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4EC : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4EC : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4EC : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 491 GW_DDM_PE: 8 CLU
- SG_ C_DRVDoorStatus : 1|2@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CUBIS,DATC,EDT,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ C_ASTDoorStatus : 3|2@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CUBIS,DATC,EDT,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ C_RLDoorStatus : 5|2@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CUBIS,DATC,EDT,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ C_RRDoorStatus : 7|2@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CUBIS,DATC,EDT,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ C_TrunkStatus : 9|2@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CUBIS,DATC,EDT,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ C_OSMirrorStatus : 11|2@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CUBIS,DATC,EDT,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
-
-BO_ 1259 TP_CLU_MP_HU: 8 CLU
- SG_ Byte0_TCP_4EB : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4EB : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4EB : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4EB : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4EB : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4EB : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4EB : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4EB : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1258 TP_HU_MP_CLU: 8 H_U
- SG_ Byte0_TCP_4EA : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4EA : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4EA : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4EA : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4EA : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4EA : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4EA : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4EA : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1257 TP_CLU_FM_HU: 8 CLU
- SG_ Byte0_TCP_4E9 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4E9 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4E9 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4E9 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4E9 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4E9 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4E9 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4E9 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1256 TP_HU_FM_CLU: 8 H_U
- SG_ Byte0_TCP_4E8 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4E8 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4E8 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4E8 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4E8 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4E8 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4E8 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4E8 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1255 TP_CLU_MLT_HU: 8 CLU
- SG_ Byte0_TCP_4E7 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4E7 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4E7 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4E7 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4E7 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4E7 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4E7 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4E7 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 487 HU_CLU_PE_13: 8 H_U
- SG_ Navi_DistToPoint1_F : 11|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint1_I : 7|12@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint1_U : 23|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint2_I : 19|12@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint2_F : 35|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint2_U : 39|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint3_F : 51|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint3_I : 47|12@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToPoint3_U : 63|4@0+ (1,0) [0|0] "" CLU,HUD
-
-BO_ 1254 TP_HU_MLT_CLU: 8 H_U
- SG_ Byte0_TCP_4E6 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4E6 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4E6 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4E6 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4E6 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4E6 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4E6 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4E6 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 486 HU_CLU_PE_12: 8 H_U
- SG_ Navi_DistToDest_I : 7|16@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToDest_F : 19|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_DistToDest_U : 23|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_EstimHour : 31|8@0+ (1,0) [0|254] "hh" CLU,HUD
- SG_ Navi_EstimMin : 37|6@0+ (1,0) [0|59] "mm" CLU,HUD
- SG_ Navi_EstimTimeType : 39|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_Compass : 45|6@0+ (7.5,-7.5) [0|352.5] "Degree" CLU,HUD
-
-BO_ 229 HU_SYS_E_00: 8 H_U
- SG_ SYS_SW_Ver_Req : 1|2@0+ (1,0) [0|0] "" AMP,CCP,CGW,CLOCK,CLU,HUD,IBOX,RRC,RSE_L
- SG_ SYS_CAN_Ver_Req : 3|2@0+ (1,0) [0|0] "" AMP,CCP,CGW,CLOCK,CLU,HUD,IBOX,RRC,RSE_L
- SG_ SYS_HW_Ver_Req : 5|2@0+ (1,0) [0|0] "" AMP,CCP,CGW,CLOCK,CLU,IBOX,RRC
- SG_ SYS_RBD_Req : 9|2@0+ (1,0) [0|0] "" AMP,IBOX
- SG_ SYS_MOSTErrorDiag_Req : 11|2@0+ (1,0) [0|0] "" AMP,IBOX
- SG_ SYS_Reset_Req : 17|2@0+ (1,0) [0|0] "" AMP,IBOX
-
-BO_ 1253 TP_CLU_VCDC_HU: 8 CLU
- SG_ Byte0_TCP_4E5 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4E5 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4E5 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4E5 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4E5 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4E5 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4E5 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4E5 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 485 HU_CLU_PE_11: 8 H_U
- SG_ Navi_FixedSpdTrap : 3|4@0+ (10,0) [10|110] "Km/h" CLU,HUD
- SG_ Navi_MobileSpdTrap : 7|4@0+ (10,0) [10|110] "Km/h" CLU,HUD
- SG_ Navi_OverSpdAlarm : 11|2@0+ (1,0) [0|0] "" CGW,CLU,HUD
- SG_ Navi_SpdRedlightTrap : 15|4@0+ (10,0) [10|110] "Km/h" CLU,HUD
- SG_ Navi_NonSpdTrap : 20|5@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_WarningZone : 27|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_MergeWarning : 33|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_CurveWarning : 39|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_BusSpdTrap : 43|4@0+ (10,0) [10|110] "Km/h" CLU,HUD
- SG_ Navi_SpdLimit_Type : 49|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_SpdLimit_Unit : 51|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_SpdInfo_Type : 55|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ Navi_SpdLimit : 63|8@0+ (1,0) [1|254] "" CLU,HUD
-
-BO_ 1252 TP_HU_VCDC_CLU: 8 H_U
- SG_ Byte0_TCP_4E4 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4E4 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4E4 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4E4 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4E4 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4E4 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4E4 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4E4 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1251 TP_CLU_JB_HU: 8 CLU
- SG_ Byte0_TCP_4E3 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4E3 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4E3 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4E3 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4E3 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4E3 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4E3 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4E3 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1250 TP_HU_JB_CLU: 8 H_U
- SG_ Byte0_TCP_4E2 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4E2 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4E2 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4E2 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4E2 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4E2 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4E2 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4E2 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1248 TP_TMU_HU: 8 TMU
- SG_ Byte0_TCP_4E0 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4E0 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4E0 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4E0 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4E0 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4E0 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4E0 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4E0 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 479 CLU_HU_PE_01: 8 CLU
- SG_ CLU_Type : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ CLU_Region : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ CLU_VersionMinor : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ CLU_VersionMajor : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ CLU_CurrentDispState : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ C_DRVDRSW : 41|2@0+ (1,0) [0|0] "" H_U
- SG_ CF_Clu_LowfuelWarning : 44|2@0+ (1,0) [0|0] "" H_U
- SG_ CLU_PowerInfo : 46|2@0+ (1,0) [0|0] "" H_U
- SG_ C_DrivingModeState : 50|3@0+ (1,0) [0|0] "" H_U
- SG_ Clu_RheostatLvl : 55|5@0+ (1,0) [0|0] "" H_U,MON,SWRC
- SG_ C_Clu_ActiveEcoSW : 57|2@0+ (1,0) [0|0] "" H_U
- SG_ C_Detent : 59|2@0+ (1,0) [0|0] "" CCP,CLOCK,H_U,KBD,MON,RRC,RSE_L,RSE_R
- SG_ C_DrivingModeOn : 61|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 2015 TP_EDT_All_Req: 8 EDT
- SG_ Byte0_TCP_7DF : 7|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte1_Data_7DF : 15|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte2_Data_7DF : 23|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte3_Data_7DF : 31|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte4_Data_7DF : 39|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte5_Data_7DF : 47|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte6_Data_7DF : 55|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
- SG_ Byte7_Data_7DF : 63|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,FHCU,HUD,H_U,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
-
-BO_ 474 CLU_HU_PE_02: 8 CLU
- SG_ CF_Clu_AvgFCU : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ CF_Clu_AvgFCL : 9|10@0+ (1,0) [0|0] "" H_U
- SG_ CF_Clu_TermAvgSync : 25|2@0+ (1,0) [0|0] "" H_U
- SG_ CF_Clu_EcoDriveInf : 36|3@0+ (1,0) [0|0] "" H_U
- SG_ CR_Clu_TermAvgFCI : 33|10@0+ (1,0) [0|0] "" H_U
- SG_ CF_CLU_EcoScore : 55|16@0+ (1,0) [0|0] "" H_U
-
-BO_ 1495 CLU_HU_P_05: 8 CLU
- SG_ Clu_TripUnit : 9|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ Clu_DTEWarn : 11|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ Clu_DTE : 7|12@0+ (1,0) [0|1500] "km" H_U,IBOX
- SG_ Clu_AFC : 23|10@0+ (0.1,0) [0|99.9] "" H_U,IBOX
- SG_ Clu_IFC : 29|10@0+ (0.1,0) [0|99.9] "" H_U,IBOX
- SG_ Clu_Odometer : 47|24@0+ (1,0) [0|999999] "" H_U,IBOX
-
-BO_ 1494 CLU_HU_P_01: 8 CLU
- SG_ CF_TripUnit : 13|2@0+ (1,0) [0|0] "" H_U
- SG_ CF_DTE : 7|10@0+ (1,0) [0|0] "" H_U
-
-BO_ 214 AMP_HU_E_SYS: 8 AMP
- SG_ AMP_SWVerMajor : 7|8@0+ (1,0) [0|254] "" H_U,IBOX
- SG_ AMP_SWVerMinor : 15|8@0+ (1,0) [0|254] "" H_U,IBOX
- SG_ AMP_CANVerMajor : 23|8@0+ (1,0) [0|254] "" H_U,IBOX
- SG_ AMP_CANVerMinor : 31|8@0+ (1,0) [0|254] "" H_U,IBOX
- SG_ AMP_RBDResult : 34|3@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MOSTErrorDiagResult : 38|3@0+ (1,0) [0|0] "" H_U
- SG_ AMP_HWVerMajor : 55|8@0+ (1,0) [0|254] "" H_U,IBOX
- SG_ AMP_HWVerMinor : 63|8@0+ (1,0) [0|254] "" H_U,IBOX
-
-BO_ 1492 CLU_HU_P_04: 8 CLU
- SG_ MM_CR_Fatc_AcnComCst_W : 7|10@0+ (10,0) [0|8000] "W" H_U
- SG_ MM_CR_Ldc_PwrMon_W : 12|8@0+ (10,0) [0|2550] "W" H_U
- SG_ MM_CR_Fatc_PTCPwrCon_W : 17|10@0+ (10,0) [0|10000] "W" H_U
- SG_ MM_CR_BmsChgExp_T_Fast : 39|16@0+ (1,0) [0|0] "minute" H_U
- SG_ MM_CR_BmsChgExp_T_Slow : 55|16@0+ (1,0) [0|0] "minute" H_U
-
-BO_ 1491 CLU_HU_P_03: 8 CLU
- SG_ MM_CF_Vcu_EvMod : 3|4@0+ (1,0) [0|0] "" H_U
- SG_ MM_CF_Vcu_GarSelDisp : 7|4@0+ (999,0) [0|0] "" H_U
- SG_ MM_CF_Vcu_ThiBatTir : 8|1@0+ (1,0) [0|0] "" H_U
- SG_ CR_Mcu_MotEstTqPc : 23|10@0+ (0.2,-100) [-100|99.8] "%" H_U
- SG_ CR_Mcu_MotActRotSpd_rpm : 39|16@0+ (1,-32768) [-32768|32767] "rpm" H_U
-
-BO_ 1490 CLU_HU_P_02: 8 CLU
- SG_ MM_CR_Vcu_EcoSco : 3|4@0+ (1,0) [0|0] "" H_U
- SG_ MM_CF_Vcu_PgmRun5 : 5|2@0+ (1,0) [0|0] "" H_U
- SG_ MM_CR_Clu_Odometer_kph : 15|24@0+ (0.1,0) [0|0] "km" H_U
-
-BO_ 1489 DATC_P_B_01: 8 CLU
- SG_ C_InhibitR_DATC : 51|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_InhibitP_DATC : 50|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_InhibitN_DATC : 49|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_InhibitD_DATC : 48|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 465 CLU_HU_PE_03: 8 CLU
- SG_ CF_Clu_EVDTEDisp : 0|9@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ CF_Clu_GasDTEDisp : 17|10@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ MM_CR_Clu_TotalDTEDisp : 34|11@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ CF_Clu_TripUnit : 49|2@0+ (1,0) [0|0] "" H_U,IBOX
-
-BO_ 1232 TP_HU_TMU: 8 H_U
- SG_ Byte0_TCP_4D0 : 7|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte1_Data_4D0 : 15|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte2_Data_4D0 : 23|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte3_Data_4D0 : 31|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte4_Data_4D0 : 39|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte5_Data_4D0 : 47|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte6_Data_4D0 : 55|8@0+ (1,0) [0|0] "" TMU
- SG_ Byte7_Data_4D0 : 63|8@0+ (1,0) [0|0] "" TMU
-
-BO_ 1488 CLU_HU_P_00: 8 CLU
- SG_ MM_CR_Mcu_VehSpd_Kph : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ MM_CR_Mcu_VehSpdDec_Kph : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ MM_CR_Bms_Soc_Pc : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ MM_CR_Vcu_TqMotClu_Pc : 31|8@0+ (1,-127) [0|0] "" H_U
- SG_ MM_CR_Bms_DrvEnaDist : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ MM_CR_Clu_Soc_Seg : 44|5@0+ (1,0) [0|0] "" H_U,IBOX
-
-BO_ 208 CLU_HU_E_SYS: 8 CLU
- SG_ CLU_SWVerMajor : 7|8@0+ (1,0) [0|254] "" H_U
- SG_ CLU_SWVerMinor : 15|8@0+ (1,0) [0|254] "" H_U
- SG_ CLU_CANVerMajor : 23|8@0+ (1,0) [0|254] "" H_U
- SG_ CLU_CANVerMinor : 31|8@0+ (1,0) [0|254] "" H_U
- SG_ CLU_HWVerMajor : 55|8@0+ (1,0) [0|254] "" H_U
- SG_ CLU_HWVerMinor : 63|8@0+ (1,0) [0|254] "" H_U
-
-BO_ 448 HU_DATC_PE_00: 8 H_U
- SG_ DATC_AqsLevelChg : 3|4@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ RSELockOnOff : 7|2@0+ (1,0) [0|0] "" CGW,DATC,IPM,RRC
- SG_ DATC_AqsMode : 9|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_Graphreset_Info : 17|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_VRActivity : 33|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_PhoneActivity : 35|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ BlowerNoiseControl : 37|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
-
-BO_ 1211 TP_HU_TBT_CLU: 8 H_U
- SG_ Byte0_TCP_4BB : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4BB : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4BB : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4BB : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4BB : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4BB : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4BB : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4BB : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1207 TP_HU_DAB_CLU: 8 H_U
- SG_ Byte0_TCP_4B7 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4B7 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4B7 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4B7 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4B7 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4B7 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4B7 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4B7 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1206 TP_HU_XM_CLU: 8 H_U
- SG_ Byte0_TCP_4B6 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4B6 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4B6 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4B6 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4B6 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4B6 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4B6 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4B6 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1204 TP_HU_DMB_CLU: 8 H_U
- SG_ Byte0_TCP_4B4 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_4B4 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_4B4 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_4B4 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_4B4 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_4B4 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_4B4 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_4B4 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 432 TMU_GW_PE_01: 8 TMU
- SG_ C_DATCOnOffReq : 1|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,H_U,IPM
- SG_ C_DATCTempUnit : 3|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,H_U,IPM
- SG_ C_DATCTempSet : 15|8@0+ (1,0) [0|0] "" CGW,CLU,DATC,H_U,IPM
- SG_ TMU_IVRActivity : 33|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,H_U,IPM
- SG_ TMU_PhoneActivity : 35|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,H_U,IPM
-
-BO_ 1195 TP_CLU_TBT_HU: 8 CLU
- SG_ Byte0_TCP_4AB : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4AB : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4AB : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4AB : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4AB : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4AB : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4AB : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4AB : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1191 TP_CLU_DAB_HU: 8 CLU
- SG_ Byte0_TCP_4A7 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4A7 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4A7 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4A7 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4A7 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4A7 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4A7 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4A7 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1190 TP_CLU_XM_HU: 8 CLU
- SG_ Byte0_TCP_4A6 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4A6 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4A6 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4A6 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4A6 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4A6 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4A6 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4A6 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1188 TP_CLU_DMB_HU: 8 CLU
- SG_ Byte0_TCP_4A4 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_4A4 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_4A4 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_4A4 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_4A4 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_4A4 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_4A4 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_4A4 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1179 TP_HU_NAVI_CLU: 8 H_U
- SG_ Byte0_TCP_49B : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_49B : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_49B : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_49B : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_49B : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_49B : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_49B : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_49B : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1178 TP_CLU_Ipod_HU: 8 CLU
- SG_ Byte0_TCP_49A : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_49A : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_49A : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_49A : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_49A : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_49A : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_49A : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_49A : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 410 HU_CLU_PE_08: 8 H_U
- SG_ VCDC_SelDiscNo : 11|4@0+ (1,0) [0|0] "" CLU
- SG_ VCDC_TrackChapterNo : 7|10@0+ (1,0) [0|0] "" CLU
- SG_ VCDC_PlayTime : 23|24@0+ (1,0) [0|0] "" CLU
- SG_ MLT_PlayTime : 47|24@0+ (1,0) [0|0] "" CLU
-
-BO_ 1176 TP_CLU_DVD_HU: 8 CLU
- SG_ Byte0_TCP_498 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_498 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_498 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_498 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_498 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_498 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_498 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_498 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1175 TP_CLU_USB_HU: 8 CLU
- SG_ Byte0_TCP_497 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_497 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_497 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_497 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_497 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_497 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_497 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_497 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 407 HU_CLU_PE_05: 8 H_U
- SG_ HU_LanguageInfo : 7|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ HU_MuteStatus : 9|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ HU_VolumeStatus : 15|6@0+ (1,0) [0|0] "" CLU,HUD
- SG_ HU_NaviDisp : 17|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ HU_NaviStatus : 19|2@0+ (1,0) [0|0] "" CGW,CLU,HUD,IPM
- SG_ HU_DistanceUnit : 21|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ HU_Navigation_On_Off : 23|2@0+ (1,0) [0|0] "" AVM,CGW,CLU,DATC,HUD,IPM
-
-BO_ 1942 TP_AMP_HU_DiagRes: 8 AMP
- SG_ Byte0_TCP_796 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_796 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_796 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_796 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_796 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_796 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_796 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_796 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 406 HU_CLU_PE_04: 8 H_U
- SG_ C_SDARS_ChannelNo : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ C_NaviRouteGuidance : 11|2@0+ (1,0) [0|0] "" CLU
- SG_ HD_SPS_ChannelNo : 15|4@0+ (1,0) [0|0] "" CLU
- SG_ C_SDARS_PresetNo : 19|4@0+ (1,0) [0|0] "" CLU
- SG_ DAB_ServiceFollowing : 21|2@0+ (1,0) [0|0] "" CLU
- SG_ SXM_ChannelNo : 25|10@0+ (1,0) [0|999] "" AMP,CLU,HUD
-
-BO_ 1941 TP_HU_AMP_DiagReq: 8 H_U
- SG_ Byte0_TCP_795 : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte1_Data_795 : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte2_Data_795 : 23|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte3_Data_795 : 31|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte4_Data_795 : 39|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte5_Data_795 : 47|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte6_Data_795 : 55|8@0+ (1,0) [0|0] "" AMP
- SG_ Byte7_Data_795 : 63|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 1173 TP_CLU_CD_HU: 8 CLU
- SG_ Byte0_TCP_495 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_495 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_495 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_495 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_495 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_495 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_495 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_495 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 405 HU_CLU_PE_03: 8 H_U
- SG_ HU_IntegPresetNum : 7|8@0+ (1,0) [0|0] "" AMP,CLU,HUD
- SG_ Radio_Area : 10|8@0+ (1,0) [0|0] "" CLU
- SG_ DMB_PresetNo : 29|5@0+ (1,0) [0|0] "" CLU
- SG_ RADIO_PresetNo : 18|5@0+ (1,0) [0|0] "" CLU
- SG_ HU_Opstate_DIS2 : 38|7@0+ (1,0) [0|0] "" AMP,CLU,HUD
-
-BO_ 1168 TP_HU_USB_CLU: 8 H_U
- SG_ Byte0_TCP_490 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_490 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_490 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_490 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_490 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_490 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_490 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_490 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1936 TP_HU_All_Req: 8 H_U
- SG_ Byte0_TCP_790 : 7|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte1_Data_790 : 15|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte2_Data_790 : 23|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte3_Data_790 : 31|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte4_Data_790 : 39|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte5_Data_790 : 47|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte6_Data_790 : 55|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
- SG_ Byte7_Data_790 : 63|8@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CGW,CLOCK,CLU,CUBIS,DATC,EDT,FHCU,HUD,IBOX,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,SWRC,TMU
-
-BO_ 1167 TP_HU_Ipod_CLU: 8 H_U
- SG_ Byte0_TCP_48F : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_48F : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_48F : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_48F : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_48F : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_48F : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_48F : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_48F : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1166 TP_HU_DVD_CLU: 8 H_U
- SG_ Byte0_TCP_48E : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_48E : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_48E : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_48E : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_48E : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_48E : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_48E : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_48E : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1165 TP_HU_CD_CLU: 8 H_U
- SG_ Byte0_TCP_48D : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_48D : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_48D : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_48D : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_48D : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_48D : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_48D : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_48D : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 1164 TP_CLU_NAVI_HU: 8 CLU
- SG_ Byte0_TCP_48C : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_48C : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_48C : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_48C : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_48C : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_48C : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_48C : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_48C : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 139 AMP_HU_E_12: 8 AMP
- SG_ AMP_Beep2VolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep2FrequencyState : 15|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep2OutputMaskState : 31|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep2DOnState : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep2DOffState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep2NOfCycleState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 138 AMP_HU_E_11: 8 AMP
- SG_ AMP_Beep1VolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep1FrequencyState : 15|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep1OutputMaskState : 31|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep1DOnState : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep1DOffState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep1NOfCycleState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 137 AMP_HU_E_10: 8 AMP
- SG_ AMP_MTSOutputMaskSupport : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MTSMuteMaskSupport : 5|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_HFOutputMaskSupport : 9|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_HFMuteMaskSupport : 13|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_NaviOutputMaskSupport : 17|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_NaviMuteMaskSupport : 21|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 1928 TP_HU_PhyRes: 8 H_U
- SG_ Byte0_TCP_788 : 7|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte1_Data_788 : 15|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte2_Data_788 : 23|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte3_Data_788 : 31|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte4_Data_788 : 39|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte5_Data_788 : 47|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte6_Data_788 : 55|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte7_Data_788 : 63|8@0+ (1,0) [0|0] "" EDT
-
-BO_ 136 AMP_HU_E_09: 8 AMP
- SG_ AMP_MaxBeep2VolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep2Freq_State : 15|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep2OutputMaskSup : 33|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep2DOnState : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep2DOffState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep2NOfCycleState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 135 AMP_HU_E_08: 8 AMP
- SG_ AMP_MaxBeep1VolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep1Freq_State : 15|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_Beep1OutputMaskSup : 33|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep1DOnState : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep1DOffState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBeep1NOfCycleState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 134 AMP_HU_E_07: 8 AMP
- SG_ ASD_SetValue : 2|3@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ ASD_Version : 15|8@0+ (1,0) [0|0] "" H_U,IBOX
-
-BO_ 1157 TP_HU_CLU_HF: 8 H_U
- SG_ Byte0_TCP_485 : 7|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte1_Data_485 : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte2_Data_485 : 23|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte3_Data_485 : 31|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte4_Data_485 : 39|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte5_Data_485 : 47|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte6_Data_485 : 55|8@0+ (1,0) [0|0] "" CLU
- SG_ Byte7_Data_485 : 63|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 133 AMP_HU_E_06: 8 AMP
- SG_ AMP_MaxVolumeStep : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBalanceStep : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxFadeStep : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxBassStep : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxMidStep : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxTrebleStep : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_ASDMajorVer : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_ASDMinorVer : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 389 AMP_HU_PE_05: 8 AMP
- SG_ AMP_EngOrderC2Setting : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_EngOrderC4Setting : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_EngOrderC6Setting : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_APSBand0Setting : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_APSBand1Setting : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_APSBand2Setting : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_APSBand3Setting : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_APSBand4Setting : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 132 AMP_HU_E_05: 8 AMP
- SG_ AMP_HFVolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_HFAudioCutState : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_HFOutputMaskState : 23|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_HFMuteMaskState : 39|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxHFVolumeState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxHFAudioCutState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 388 AMP_HU_PE_04: 8 AMP
- SG_ AMP_PESSModeState : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_PESSDesignSetting : 4|3@0+ (1,0) [0|0] "" H_U
- SG_ AMP_PESSAPSSetting : 7|3@0+ (1,0) [0|0] "" H_U
- SG_ AMP_PESSVolumeSetting : 15|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 1156 TP_CLU_HF_HU: 8 CLU
- SG_ Byte0_TCP_484 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_484 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_484 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_484 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_484 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_484 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_484 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_484 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 131 AMP_HU_E_04: 8 AMP
- SG_ AMP_MTSVolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MTSAudioCutState : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MTSOutputMaskState : 23|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MTSMuteMaskState : 39|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxMTSVolumeState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxMTSAudioCutState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 387 AMP_HU_PE_03: 8 AMP
- SG_ AMP_MainVolumeSetting : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_BalanceSetting : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_FadeSetting : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_BassSetting : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MidSetting : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_TrebleSetting : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_VehicleSpeedamp : 55|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 130 AMP_HU_E_03: 8 AMP
- SG_ AMP_NaviVolumeState : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_NaviAudioCutState : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_NaviOutputMaskState : 23|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_NaviMuteMaskState : 39|16@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxNaviVolumeState : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MaxNaviAudioCutState : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 129 AMP_HU_E_02: 8 AMP
- SG_ AMP_DriveState : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_ConvertibleTopState : 5|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 385 AMP_HU_PE_02: 8 AMP
- SG_ AMP_MuteState : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_RearSpMuteState : 3|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SurroundModeState : 9|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_EQState : 13|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SPDIFMuteSt : 17|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_BeatsModeState : 21|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_DefaultBeep1St : 25|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_DefaultBeep2St : 29|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_AudioSource : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_VIPModeState : 41|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_QLSModeState : 43|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 128 AMP_HU_E_01: 8 AMP
- SG_ AMP_CurrentVehicleID : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SPDIFModeState : 11|4@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MajorVer : 23|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ AMP_MinorVer : 31|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ AMP_UpdateStartResp : 33|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_UpdateEndResp : 41|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_TuningMajorVer : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_TuningMinorVer : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 384 AMP_HU_PE_01: 8 AMP
- SG_ AMP_HFModeState : 1|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ HU_InitInfo : 3|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_ASDModeState : 6|3@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_NaviModeState : 9|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_SPDIFInfo : 12|3@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_MTSModeState : 17|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_VSCModeState : 25|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_SDVCStepState : 29|3@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_Beep1ModeState : 33|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_Beep2ModeState : 41|2@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_DistrInfoState : 55|8@0+ (1,0) [0|0] "" CLU,H_U
- SG_ AMP_INFORM_TO_IPM : 57|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,H_U,IPM
- SG_ AMP_SignalDoctorState : 59|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_AutoVolumeState : 61|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 1408 AMP_HU_P_01: 8 AMP
- SG_ AMP_SupportMute : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportHFMode : 3|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportCfgBeep1 : 5|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportCfgBeep2 : 7|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportSpeedAdjust : 9|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportSurroundMode : 11|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportNaviMode : 13|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportMTSMode : 15|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportTopState : 17|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportBothLHDandRHD : 19|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportEQState : 21|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportVehicleID : 23|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportAudioSource : 25|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportSPDIFModeState : 27|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportRearSpMute : 29|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportVEQMode : 31|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_MakerID : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportASDMode : 41|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportBeatsMode : 43|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportVIPMode : 45|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportQLS : 47|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportSignalDoctor : 49|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportAutoVolume : 51|2@0+ (1,0) [0|0] "" H_U
- SG_ AMP_SupportPESSMode : 53|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 1920 TP_HU_PhyReq: 8 EDT
- SG_ Byte0_TCP_780 : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte1_Data_780 : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte2_Data_780 : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte3_Data_780 : 31|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte4_Data_780 : 39|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte5_Data_780 : 47|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte6_Data_780 : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ Byte7_Data_780 : 63|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 371 HU_TMU_PE_01: 8 H_U
- SG_ HU_AliveStatus : 1|2@0+ (1,0) [0|0] "" CLU,CGW,TMU
- SG_ HU_DeviceType : 5|4@0+ (1,0) [0|0] "" TMU
- SG_ HU_DistanceUnit : 7|2@0+ (1,0) [0|0] "" TMU
- SG_ HU_AudAllocStatus : 9|2@0+ (1,0) [0|0] "" TMU
- SG_ HU_PowerStatus : 12|3@0+ (1,0) [0|0] "" TMU
- SG_ HU_BTCallStatus : 15|3@0+ (1,0) [0|0] "" TMU
- SG_ HU_VoiceRecStatus : 17|2@0+ (1,0) [0|0] "" TMU
- SG_ HU_LangStatus : 20|3@0+ (1,0) [0|0] "" TMU
-
-BO_ 369 HU_Car_PE_01: 8 H_U
- SG_ HU_VehiclePwr : 3|4@0+ (1,0) [0|0] "" AMP,ASD,AVM,CCP,CLOCK,CLU,CUBIS,DATC,FHCU,IPM,KBD,KMA_TMU,MON,RRC,RSE_L,RSE_R,TMU
-
-BO_ 1392 HU_TMU_P_01: 8 H_U
- SG_ HU_GPS_Signal : 7|64@0+ (1,0) [0|0] "" TMU
-
-BO_ 112 HU_AMP_E_09: 8 H_U
- SG_ AMP_Beep1VolumeStep : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep1Frequency : 15|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep1Ch_OutputMask : 31|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep1DurationOn : 47|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep1DurationOff : 55|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep1NumberOfCycles : 63|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 1390 GW_CLU_P: 8 CLU
- SG_ C_VehicleSpeed : 7|8@0+ (1,0) [0|254] "" H_U,IBOX
- SG_ C_Odometer : 15|24@0+ (1,0) [0|999999] "" H_U,IBOX
-
-BO_ 363 GW_IPM_PE_2: 8 CLU
- SG_ C_DRVUnlockState : 1|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_ASTUnlockState : 3|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_RLUnlockstate : 5|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_RRUnlockState : 7|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_VehicleInfoTMU : 9|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_Engine_Status : 11|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_TMULockFeedBack : 23|2@0+ (1,0) [0|0] "" CUBIS,TMU
-
-BO_ 362 GW_IPM_PE_1: 8 CLU
- SG_ C_AV_Tail : 1|2@0+ (1,0) [0|0] "" AMP,CCP,CLOCK,CLU,HUD,H_U,IBOX,RRC,RSE_L
- SG_ C_ParkingBrakeSW : 3|2@0+ (1,0) [0|0] "" H_U
- SG_ C_RKECMD : 7|4@0+ (1,0) [0|0] "" H_U
- SG_ C_BAState : 9|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_IGNSW : 14|3@0+ (1,0) [0|0] "" AMP,AVM,CUBIS,EDT,H_U,MON,RRC,SWRC
- SG_ C_CountryCfg : 18|3@0+ (1,0) [0|0] "" AVM,H_U
- SG_ C_AltL : 25|2@0+ (1,0) [0|0] "" H_U
- SG_ C_TailLampActivity : 27|2@0+ (1,0) [0|0] "" AMP,CCP,CLOCK,HUD,H_U,IBOX,RRC,RSE_L,SWRC
- SG_ RearSW_RSELockOnOff : 29|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_TMULockFeedBack : 31|2@0+ (1,0) [0|0] "" CUBIS,TMU
- SG_ C_SMKTeleCrankingState : 33|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_SMKTeleCrankingFailRes : 35|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_RKECMD_GEN2 : 39|3@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_Acu_CshAct : 41|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_IntTailAct : 43|2@0+ (1,0) [0|0] "" AMP,CCP,CLOCK,CLU,HUD,H_U,IBOX,RRC,RSE_L
- SG_ C_PassiveAccessUnlock : 47|3@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ Lca_IndLeft : 49|2@0+ (1,0) [0|0] "" H_U
- SG_ FL_SndWarn : 51|2@0+ (1,0) [0|0] "" AMP
- SG_ FR_SndWarn : 53|2@0+ (1,0) [0|0] "" AMP
- SG_ Lca_IndRight : 55|2@0+ (1,0) [0|0] "" H_U
- SG_ RCTA_IndLeft : 57|2@0+ (1,0) [0|0] "" H_U
- SG_ RL_SndWarn : 59|2@0+ (1,0) [0|0] "" AMP
- SG_ RR_SndWarn : 61|2@0+ (1,0) [0|0] "" AMP
- SG_ RCTA_IndRight : 63|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 361 GW_CHASSIS_PE_1: 8 CLU
- SG_ C_Inhibit_State : 3|4@0+ (1,0) [0|0] "" AVM,H_U
- SG_ C_P_BrakeStatus : 5|2@0+ (1,0) [0|0] "" AVM,H_U
- SG_ C_Clu_AltLStatus : 7|2@0+ (1,0) [0|0] "" AVM,H_U
-
-BO_ 359 GW_WARNING_PE_01: 8 CLU
- SG_ Spas_BEEP_Alarm : 3|4@0+ (1,0) [0|0] "" AMP
- SG_ Spas_Audio_VolumeDown : 5|2@0+ (1,0) [0|0] "" AMP
- SG_ Spas_Spkr_Flh_Alarm : 9|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Spas_Spkr_Fcnt_Alarm : 11|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Spas_Spkr_Frh_Alarm : 13|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Spas_Spkr_Rlh_Alarm : 17|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Spas_Spkr_Rcnt_Alarm : 19|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Spas_Spkr_Rrh_Alarm : 21|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Lkas_SysStatus : 27|4@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Lkas_LH_Warning : 29|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Lkas_RH_Warning : 31|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Spas_Spkr_Level : 35|3@0+ (1,0) [0|0] "" AMP
- SG_ Lkas_Audio_VolumeDown : 37|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Audio_VolumeDown : 39|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_BEEP_Alarm : 43|4@0+ (1,0) [0|0] "" AMP
- SG_ Pas_Audio_VolumeDown : 45|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_Spkr_Level : 32|3@0+ (1,0) [0|0] "" AMP
- SG_ Pas_Spkr_Flh_Alarm : 49|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_Spkr_Fcnt_Alarm : 51|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_Spkr_Frh_Alarm : 53|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_Spkr_Rlh_Alarm : 57|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_Spkr_Rcnt_Alarm : 59|2@0+ (1,0) [0|0] "" AMP,H_U
- SG_ Pas_Spkr_Rrh_Alarm : 61|2@0+ (1,0) [0|0] "" AMP,H_U
-
-BO_ 1376 HU_TMU_P_02: 8 H_U
- SG_ HU_GPS_Signal2 : 7|8@0+ (2,0) [0|0] "Degree" TMU
- SG_ HU_GPS_Signal3 : 9|2@0+ (1,0) [0|0] "" TMU
- SG_ HU_GPS_Signal4 : 12|3@0+ (1,0) [0|0] "" TMU
-
-BO_ 93 DATC_HU_E_SYS: 8 CLU
- SG_ DATC_SWVerMajor : 7|8@0+ (1,0) [0|254] "" H_U
- SG_ DATC_SWVerMinor : 15|8@0+ (1,0) [0|254] "" H_U
- SG_ DATC_CANVerMajor : 23|8@0+ (1,0) [0|254] "" H_U
- SG_ DATC_CANVerMinor : 31|8@0+ (1,0) [0|254] "" H_U
-
-BO_ 344 GW_CLU_PE: 8 CLU
- SG_ C_InhibitP : 1|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_InhibitR : 3|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_InhibitN : 5|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_InhibitD : 7|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_P_BrakeStatus : 9|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_Clu_AltLStatus : 11|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ CF_Clu_LowfuelWarning : 13|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ C_InhibitRMT : 15|2@0+ (1,0) [0|0] "" H_U
- SG_ CF_SMKRKECmd : 18|3@0+ (1,0) [0|0] "" H_U
-
-BO_ 87 HU_E_02: 8 H_U
- SG_ NaviValidity : 1|2@0+ (1,0) [0|0] "" CGW,CLU
-
-BO_ 343 GW_WARNING_PE_02: 8 CLU
- SG_ CF_Lkas_TsrSlifOpt : 1|2@0+ (1,0) [0|3] "" H_U
- SG_ CF_Lkas_TsrStatus : 3|2@0+ (1,0) [0|3] "" H_U
- SG_ CF_Lkas_TsrAddinfo_Disp : 7|2@0+ (1,0) [0|3] "" H_U
- SG_ CF_Lkas_TsrSpeed_Display : 15|8@0+ (1,0) [0|255] "" H_U
-
-BO_ 75 HU_AMP_E_12: 8 H_U
- SG_ AMP_EngOrderC2GainSet : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_EngOrderC4GainSet : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_EngOrderC6GainSet : 23|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_APSBand0GainSet : 31|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_APSBand1GainSet : 39|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_APSBand2GainSet : 47|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_APSBand3GainSet : 55|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_APSBand4GainSet : 63|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 74 HU_AMP_E_11: 8 H_U
- SG_ AMP_PESSMode : 1|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_PESSDesignSet : 4|3@0+ (1,0) [0|0] "" AMP
- SG_ AMP_PESSAPSSet : 7|3@0+ (1,0) [0|0] "" AMP
- SG_ AMP_PESSVolumeSet : 15|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 1864 TP_AMP_EDT: 8 AMP
- SG_ Byte0_TCP_748 : 7|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte1_Data_748 : 15|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte2_Data_748 : 23|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte3_Data_748 : 31|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte4_Data_748 : 39|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte5_Data_748 : 47|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte6_Data_748 : 55|8@0+ (1,0) [0|0] "" EDT
- SG_ Byte7_Data_748 : 63|8@0+ (1,0) [0|0] "" EDT
-
-BO_ 327 TMU_HU_PE_03: 8 TMU
- SG_ TMU_TbT_TurnIcon : 7|8@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_CountDownBar : 11|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_Distance_Unit : 13|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_DestDistance_Unit : 15|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_DistanceLo : 27|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_DistanceHi : 23|12@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_DestDistanceLo : 43|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_DestDistanceHi : 39|12@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_ExpectRemainHour : 55|8@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TbT_ExpectRemainMin : 61|6@0+ (1,0) [0|0] "" H_U
-
-BO_ 326 TMU_HU_PE_02: 8 TMU
- SG_ TMU_CallStatus : 3|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_CallType : 6|3@0+ (1,0) [0|0] "" H_U
- SG_ TMU_CDMA_Streng : 11|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_PacketStatus : 13|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TalkTimeHour : 20|5@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TalkTimeMinute : 29|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TalkTimeSecond : 37|6@0+ (1,0) [0|0] "" H_U
-
-BO_ 325 TMU_HU_PE_01: 8 TMU
- SG_ TMU_AliveStatus : 2|3@0+ (1,0) [0|0] "" H_U
- SG_ TMU_AudioStatus : 4|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_UpdateStatus : 7|3@0+ (1,0) [0|0] "" H_U
- SG_ TMU_LangStatus : 10|3@0+ (1,0) [0|0] "" H_U
- SG_ TMU_VoiceRecStatus : 12|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_MicStatus : 14|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_ServCommuStatus : 19|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_PowerStatus : 21|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_EngineStatus : 23|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_DownProgress : 31|8@0+ (1,0) [0|0] "" H_U
-
-BO_ 69 TMU_HU_E_04: 8 TMU
- SG_ TMU_eCall : 1|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 67 TMU_GW_E_01: 8 TMU
- SG_ C_ReqDrLock : 1|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ C_ReqDrUnlock : 3|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ C_ReqHazard : 5|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ C_ReqHorn : 7|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ C_ReqEngineOperate : 9|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
-
-BO_ 66 TMU_HU_E_03: 8 TMU
- SG_ CDMA_SelfDiag : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ CDMA_Antena_SelfDiag : 3|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 1345 TMU_HU_P_02: 8 TMU
- SG_ TMU_SupVoiceTextService : 1|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_SupEcoCoachService : 3|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_SupSongTagService : 5|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_SupContentService : 7|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_MajorVersion : 15|8@0+ (1,0) [0|0] "" H_U
- SG_ TMU_MinorVersion : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ TMU_DistributeInfo : 27|4@0+ (1,0) [0|0] "" H_U
-
-BO_ 65 TMU_HU_E_02: 8 TMU
- SG_ TMU_BarLevel1 : 7|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel2 : 1|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel4 : 21|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel3 : 11|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel5 : 31|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel6 : 25|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel8 : 45|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel7 : 35|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel9 : 55|6@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BarLevel10 : 63|6@0+ (1,0) [0|0] "" H_U
-
-BO_ 1344 TMU_HU_P_01: 8 TMU
- SG_ TMU_Arrow : 3|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_ReFill_Info : 5|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_AverageMPG : 1|10@0+ (1,0) [0|0] "" H_U
- SG_ TMU_TotalMPG : 23|10@0+ (1,0) [0|0] "" H_U
- SG_ TMU_RewardStar : 37|14@0+ (1,0) [0|0] "" H_U
-
-BO_ 64 TMU_HU_E_01: 8 TMU
- SG_ TMU_DisMode : 3|4@0+ (1,0) [0|0] "" H_U
- SG_ TMU_AudSrcType : 7|4@0+ (1,0) [0|0] "" CLU,DATC,H_U
- SG_ TMU_AudReqCmd : 9|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_LangCmd : 12|3@0+ (1,0) [0|0] "" H_U
- SG_ TMU_ServReq : 15|3@0+ (1,0) [0|0] "" H_U
- SG_ TMU_ErrorEvent : 23|8@0+ (1,0) [0|0] "" H_U
- SG_ TMU_BeepCmd : 25|2@0+ (1,0) [0|0] "" H_U
- SG_ TMU_eCall : 28|3@0+ (1,0) [0|0] "" H_U
-
-BO_ 62 HU_Navi_E_00: 8 H_U
- SG_ Navi_SLIF_SpdUnit : 1|2@0+ (1,0) [0|0] "" CGW,CLU,HUD
- SG_ Navi_SLIF_Frwinfo : 4|3@0+ (1,0) [0|0] "" CGW,CLU,HUD
- SG_ Navi_SLIF_LinkClass : 7|3@0+ (1,0) [0|0] "" CGW,CLU,HUD
- SG_ Navi_SLIF_SpdLimit : 15|8@0+ (1,0) [1|254] "" CGW,CLU,HUD
- SG_ Navi_SLIFMapSource : 29|4@0+ (1,0) [0|8] "" CGW,CLU,HUD
- SG_ Navi_SLIF_CountryCode : 23|10@0+ (1,0) [0|0] "" CGW,CLU,HUD
-
-BO_ 52 HU_DATC_E_02: 8 H_U
- SG_ HU_DATC_DrTempUpDn : 1|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_PsTempUpDn : 3|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_RlTempUpDn : 5|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_RrTempUpDn : 7|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_MainBlower : 11|4@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_SubBlower : 15|4@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_RearBlower : 19|4@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATCRearPsModeSet : 23|4@0+ (1,0) [0|0] "" CGW,CLU
- SG_ HU_DATC_FrontModeSet : 27|4@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_RearModeSet : 31|4@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_AutoSet : 33|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_OffReq : 35|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_IntakeSet : 37|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_RearOnOffSet : 39|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_AcSet : 41|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_AqsSet : 43|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_FrontDefog : 45|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_RearDefog : 47|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_ZoneControl : 49|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ HU_DATC_CO2Set : 51|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ DATC_SmartVentOnOffSet : 53|2@0+ (1,0) [0|0] "" CGW,CLU,DATC,IPM
- SG_ DATC_ADSOnOffSet : 55|2@0+ (1,0) [0|0] "" CGW,CLU
- SG_ HU_DATC_RearAutoDisp : 57|2@0+ (1,0) [0|0] "" CGW,CLU
- SG_ HU_DATC_RearOffDisp : 59|2@0+ (1,0) [0|0] "" CGW,CLU
-
-BO_ 308 DATC_PE_05: 8 CLU
- SG_ DATC_PwrInfo : 3|4@0+ (1,0) [0|0] "" AMP,AVM,CUBIS,H_U,MON
- SG_ DATC_AltL : 5|2@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_CarInfo : 7|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_ParkingBrake : 9|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_LowFuelWarn : 11|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_Rear_Off_Disp : 13|2@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_Rear_AutoDisp : 15|2@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_Rear_BlowerDisp : 19|4@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_DrSeatWarmerDisp : 22|3@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_SyncDisp : 27|4@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_RearDispCtrl : 31|4@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_RearDrModeDisp : 35|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_PsSeatWarmerDisp : 38|3@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_DrVentSeatDisp : 42|3@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_PSVentSeatDisp : 46|3@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_RrDefLed : 49|2@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_SmartVentOnOffStatus : 51|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_ADSOnOffStatus : 53|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_AcDisp_OSD : 55|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_PsModeDisp_OSD : 59|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_ModeDisp_OSD : 63|4@0+ (1,0) [0|0] "" H_U
-
-BO_ 307 DATC_PE_04: 8 CLU
- SG_ DATC_DiagMode : 1|2@0+ (1,0) [0|0] "" H_U,IBOX,MON
- SG_ DATC_Rear_ChangeReqDisp : 3|2@0+ (1,0) [0|0] "" H_U,IBOX,MON
- SG_ DATC_Rear_ClimateScnDisp : 5|2@0+ (1,0) [0|0] "" H_U,IBOX,MON
- SG_ DATC_CO2OnOffStatus : 7|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_SelfDiagDisp : 15|8@0+ (1,0) [0|0] "" H_U,IBOX,MON
- SG_ DATC_RearBlwDisp_OSD : 19|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_AqsLevelOut : 23|4@0+ (1,0) [0|0] "" H_U,IBOX,MON
- SG_ DATC_RearModeDisp : 27|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_RearPsModeDisp : 31|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_FrontBlwDisp_Ps : 35|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_AutoDisp_Ps : 39|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_RearModeDisp_OSD : 43|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_RearPSModeDisp_OSD : 47|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_FrontBlwDisp_OSD : 51|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_FrontBlwDispPs_OSD : 55|4@0+ (1,0) [0|0] "" H_U
- SG_ DATC_Variant : 63|8@0+ (1,0) [0|0] "" H_U,IBOX,MON
-
-BO_ 306 DATC_PE_03: 8 CLU
- SG_ DATC_ModeDisp : 3|4@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_TempUnit : 5|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_AutoDisp : 9|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_IntakeDisp : 11|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_ChangeReqDisp : 13|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_AcDisp : 17|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_AqsDisp : 19|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_ClimateScnDisp : 21|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_DualDisp : 25|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_OffDisp : 27|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_OpSts : 30|3@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_RearManual : 33|2@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_FrDefLed : 37|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_SmartVentDisp : 39|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_AutoDefogBlink : 41|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_ADSDisp : 43|2@0+ (1,0) [0|0] "" H_U
- SG_ DATC_IonClean : 45|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_CO2Warning : 47|2@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_SubBlowerDisp : 51|4@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_BeepReq : 55|4@0+ (1,0) [0|0] "" H_U,KBD,MON
- SG_ DATC_MainBlowerDisp : 59|4@0+ (1,0) [0|0] "" H_U,IBOX
- SG_ DATC_PsModeDisp : 63|4@0+ (1,0) [0|0] "" H_U,IBOX
-
-BO_ 1329 DATC_P_02: 8 CLU
- SG_ DATC_AmbientTemp_C : 7|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_AmbientTemp_F : 23|8@0+ (1,0) [0|0] "" H_U,MON
-
-BO_ 305 DATC_PE_02: 8 CLU
- SG_ DATC_DrTempDispC : 7|8@0+ (0.5,14) [15|32] "C" H_U,IBOX,MON
- SG_ DATC_Rear_DrTempDispC : 15|8@0+ (0.5,14) [15|32] "C" H_U,IBOX,MON
- SG_ DATC_DrTempDispF : 23|8@0+ (1,56) [58|90] "F" H_U,IBOX,MON
- SG_ DATC_Rear_DrTempDispF : 31|8@0+ (1,56) [58|90] "F" H_U,IBOX,MON
- SG_ DATC_PsTempDispC : 39|8@0+ (0.5,14) [15|32] "C" H_U,IBOX,MON
- SG_ Datc_RearPsTempDispC : 47|8@0+ (0.5,14) [15|32] "C" H_U,IBOX,MON
- SG_ DATC_PsTempDispF : 55|8@0+ (1,56) [58|90] "F" H_U,IBOX,MON
- SG_ DATC_RearPsTempDispF : 63|8@0+ (1,56) [58|90] "F" H_U,IBOX,MON
-
-BO_ 304 DATC_PE_01: 8 CLU
- SG_ DATC_Type : 7|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_VerMMMajor : 15|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_VerMMMinor : 23|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_VerBDFMajor : 31|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_VerBDMinor : 39|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_VerCSMajor : 47|8@0+ (1,0) [0|0] "" H_U,MON
- SG_ DATC_VerCSMinor : 55|8@0+ (1,0) [0|0] "" H_U,MON
-
-BO_ 291 HU_CLU_PE_07: 8 H_U
- SG_ NV_DS_Curve : 3|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_Merge : 7|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_RailCross : 9|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_FallingRocks : 11|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_SchoolZone : 13|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_AccidentBlack : 15|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_SpeedBump : 17|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_RoadKill : 19|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_Downhill : 21|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_DS_Fog : 23|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_Display_TG : 31|2@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_Charge : 39|16@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_Charge_Unit : 55|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ TBT_BarGraph100Level : 63|8@0+ (1,0) [0|100] "%" CLU,HUD
-
-BO_ 290 HU_CLU_PE_06: 8 H_U
- SG_ NV_SD_SpdLimit2 : 3|4@0+ (10,0) [0|0] "km/h" CLU
- SG_ NV_SD_SpdLimit1 : 7|4@0+ (10,0) [0|0] "km/h" CLU
- SG_ NV_SD_EtcCam : 11|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_SpdLimit3 : 15|4@0+ (10,0) [0|0] "km/h" CLU
- SG_ NV_SD_SignCam : 17|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_SignOverCam : 19|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_MobileCam : 21|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_FixedCam : 23|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_OverLoadCam : 25|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_ParkCam : 27|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_CutInCam : 29|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_BusOnlyCam : 31|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_ShoulderCam : 35|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_TrafficCam : 37|2@0+ (1,0) [0|0] "" CLU
- SG_ NV_SD_PlateRcgCam : 39|2@0+ (1,0) [0|0] "" CLU
-
-BO_ 286 HU_CLU_PE_10: 8 H_U
- SG_ Navi_TBTInfo : 63|8@0+ (1,0) [0|0] "" CGW,CLU
-
-BO_ 29 CLU_HU_E_00: 8 CLU
- SG_ SYS_CLUVer : 7|16@0+ (1,0) [0|0] "" CUBIS,H_U
- SG_ CLU_ClockInfoReq : 17|2@0+ (1,0) [0|0] "" H_U
- SG_ CLU_DateInfoReq : 19|2@0+ (1,0) [0|0] "" H_U
-
-BO_ 27 AMP_HU_E_00: 8 AMP
- SG_ SYS_AMPVer : 7|16@0+ (1,0) [0|0] "" H_U
-
-BO_ 23 HU_IPM_E_00: 8 H_U
- SG_ C_ADrLNValueSet : 2|3@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ADrUNValueSet : 5|3@0+ (1,0) [0|0] "" DATC,IPM
- SG_ SYS_Ver_Req : 7|2@0+ (1,0) [0|0] "" AMP,AVM,CLU,CUBIS,DATC,IPM
- SG_ C_IMSRValueReq : 9|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_PSMNValueSet : 11|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_SCMNValueSet : 13|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ADrLURValueReq : 15|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ABuzzerNValueSet : 17|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_AlarmRValueReq : 19|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ArmWKeyNValueSet : 21|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_TwUnRValueReq : 23|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_TwUnNValueSet : 25|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_AutoMRFoldRValueReq : 27|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_AutoMRFoldNValueSet : 29|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ADrLRValueReq : 31|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ArmWKeyRValueReq : 33|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ABuzzerRValueReq : 35|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_ADrURValueReq : 37|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_PSMRValueReq : 39|2@0+ (1,0) [0|0] "" DATC,IPM
- SG_ C_SCMRValueReq : 47|2@0+ (1,0) [0|0] "" DATC,IPM
-
-BO_ 277 HU_CLU_PE_02: 8 H_U
- SG_ TBT_Display_Type : 7|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ TBT_Side_Street : 15|16@0+ (1,0) [0|0] "" CLU,HUD
- SG_ TBT_Direction : 31|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ TBT_Distance_Turn_Point : 39|16@0+ (1,0) [0|0] "m" CLU,HUD
- SG_ TBT_Combined_Side_Street : 51|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ TBT_Scale : 55|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ TBT_DistancetoTurnPoint : 59|4@0+ (1,0) [0|0] "times" CLU,HUD
- SG_ TBT_Bar_Graph_Level : 63|4@0+ (10,0) [0|100] "" CLU,HUD
-
-BO_ 276 HU_CLU_PE_01: 8 H_U
- SG_ HU_OpState : 6|7@0+ (1,0) [0|0] "" AMP,CLU
- SG_ HU_Navi_On_Off : 7|1@0+ (1,0) [0|0] "" CLU,HUD
- SG_ HU_Preset_Number : 12|5@0+ (1,1) [1|30] "" AMP,CLU
- SG_ HU_Tuner_Area : 15|3@0+ (1,0) [0|0] "" AMP,CLU
- SG_ HU_Track_Number : 23|16@0+ (1,0) [0|0] "" CLU
- SG_ HU_Play_time_Sec : 39|6@0+ (1,0) [0|0] "" CLU
- SG_ HU_Play_time_Min : 33|7@0+ (1,0) [0|0] "" CLU
- SG_ HU_Play_time_Hour : 42|6@0+ (1,0) [0|0] "" CLU
- SG_ HU_Disc_select_No : 59|4@0+ (1,0) [0|0] "" CLU
- SG_ HU_Frequency : 52|9@0+ (1,0) [0|0] "" AMP,CLU
-
-BO_ 17 HU_AMP_E_10: 8 H_U
- SG_ AMP_Beep2VolumeStep : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep2Frequency : 15|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep2Ch_OutputMask : 31|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep2DurationOn : 47|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep2DurationOff : 55|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep2NumberOfCycles : 63|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 15 HU_AMP_E_08: 8 H_U
- SG_ AMP_MainVolumeSet : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_BalanceSet : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_FadeSet : 23|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_BassSet : 31|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_MidSet : 39|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_TrebleSet : 47|8@0+ (1,0) [0|0] "" AMP
-
-BO_ 14 HU_AMP_E_07: 8 H_U
- SG_ AMP_HFVolumeStep : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_HFMainAudioCut : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_HFChannelOutputMask : 23|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_HFChannelMuteMask : 39|16@0+ (1,0) [0|0] "" AMP
-
-BO_ 13 HU_AMP_E_06: 8 H_U
- SG_ AMP_MTSVolumeStep : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_MTSMainAudioCut : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_MTSChannelOutputMask : 23|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_MTSChannelMuteMask : 39|16@0+ (1,0) [0|0] "" AMP
-
-BO_ 12 HU_AMP_E_05: 8 H_U
- SG_ AMP_NaviVolumeStep : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_NaviMainAudioCut : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_NaviChannelOutputMask : 23|16@0+ (1,0) [0|0] "" AMP
- SG_ AMP_NaviChannelMuteMask : 39|16@0+ (1,0) [0|0] "" AMP
-
-BO_ 11 HU_AMP_E_04: 8 H_U
- SG_ AMP_Drive : 1|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_ConvertibleTop : 5|2@0+ (1,0) [0|0] "" AMP
-
-BO_ 10 HU_AMP_E_03: 8 H_U
- SG_ AMP_CrtVehicleID : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_SPDIFMode : 11|4@0+ (1,0) [0|0] "" AMP
- SG_ AMP_VersionReq : 17|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_UpdateStart : 25|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_UpdateEnd : 33|2@0+ (1,0) [0|0] "" AMP
-
-BO_ 9 HU_AMP_E_02: 8 H_U
- SG_ AMP_Mute : 1|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_RearSpMute : 3|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_SurroundMode : 5|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_VEQMode : 7|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_AudioMode : 15|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_EQ : 17|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Reset : 19|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_SPDIFMute : 21|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_DefaultBeep1 : 25|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_DefaultBeep2 : 29|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_BeatsMode : 33|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_VIPMode : 35|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_QLSMode : 37|2@0+ (1,0) [0|0] "" AMP
-
-BO_ 1288 HU_CLU_P_02: 8 H_U
- SG_ NV_TIME_TYPE : 3|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_Hour : 15|8@0+ (1,0) [0|0] "" CLU
- SG_ NV_Min : 23|8@0+ (1,0) [0|0] "" CLU
-
-BO_ 8 HU_AMP_E_01: 8 H_U
- SG_ AMP_HFMode : 1|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_NaviMode : 3|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_MTSMode : 5|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_VSCMode : 7|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep1Mode : 9|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_Beep2Mode : 11|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_SDVCStep : 14|3@0+ (1,0) [0|0] "" AMP
- SG_ AMP_ASDMode : 18|3@0+ (1,0) [0|0] "" AMP
- SG_ AMP_SignalDoctor : 20|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_AutoVolume : 22|2@0+ (1,0) [0|0] "" AMP
-
-BO_ 1287 HU_CLU_P_01: 8 H_U
- SG_ NV_DistToTurn_F1 : 3|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_DistToTurn_Unit : 7|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_DistToTurn_F3 : 11|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_DistToTurn_F2 : 15|4@0+ (1,0) [0|0] "" CLU
- SG_ NV_DistToTurn_I1 : 23|16@0+ (1,0) [0|0] "" CLU
- SG_ NV_DistToTurn_I2 : 39|16@0+ (1,0) [0|0] "" CLU
- SG_ NV_DistToTurn_I3 : 55|16@0+ (1,0) [0|0] "" CLU
-
-BO_ 1286 HU_CLU_P_00: 8 H_U
- SG_ NV_EstDist_F : 3|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_EstDist_Unit : 7|4@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_EstHour : 15|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_EstMin : 23|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_Azimuth : 31|8@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_EstDist_I : 39|16@0+ (1,0) [0|0] "" CLU,HUD
- SG_ NV_EstimTimeType : 49|2@0+ (1,0) [0|0] "" CGW,CLU,HUD
- SG_ NV_EstimTimeFormat : 51|2@0+ (1,0) [0|0] "" CGW,CLU,HUD
-
-BO_ 1284 HU_AMP_P_01: 8 H_U
- SG_ HU_VehicleSpeed : 7|8@0+ (1,0) [0|0] "" AMP
- SG_ AMP_SetMaxMainVolStep : 9|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_LKASWarningOn : 21|2@0+ (1,0) [0|0] "" AMP
- SG_ AMP_BSDWarningOn : 23|2@0+ (1,0) [0|0] "" AMP
-
-BO_ 256 HU_MON_PE_01: 8 H_U
- SG_ HU_Type : 7|8@0+ (1,0) [0|0] "" AMP,CGW,CLU,HUD,KMA_TMU
- SG_ HU_VerMajor : 15|8@0+ (1,0) [0|0] "" AMP,CLU,KMA_TMU,MON
- SG_ HU_VerMinor : 23|8@0+ (1,0) [0|0] "" AMP,CLU,KMA_TMU,MON
- SG_ HU_DistributeInfo : 31|8@0+ (1,0) [0|0] "" AMP,CGW,CLU,KMA_TMU,MON,RRC
- SG_ HU_SubVerMajor : 39|8@0+ (1,0) [0|0] "" AMP,MON
- SG_ HU_SubVerMinor : 47|8@0+ (1,0) [0|0] "" AMP,MON
- SG_ HU_SDARSVersion : 55|8@0+ (1,0) [0|0] "" AMP,MON
- SG_ HU_AdasSupport : 58|3@0+ (1,0) [0|0] "" CGW,CLU
-
-BO_ 1092 NM_CLOCK: 8 CLOCK
- SG_ Destination_CLOCK : 7|8@0+ (1,0) [0|0] "" HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_CLOCK : 13|2@0+ (1,0) [0|0] "" HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_CLOCK : 10|3@0+ (1,0) [0|0] "" HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1108 NM_HUD: 8 HUD
- SG_ Destination_HUD : 7|8@0+ (1,0) [0|0] "" CLOCK,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_HUD : 13|2@0+ (1,0) [0|0] "" CLOCK,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_HUD : 10|3@0+ (1,0) [0|0] "" CLOCK,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1088 NM_H_U: 8 H_U
- SG_ Destination_H_U : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_H_U : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_H_U : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1091 NM_DATC: 8 DATC
- SG_ Destination_DATC : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_DATC : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_DATC : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1105 NM_CCP: 8 CCP
- SG_ Destination_CCP : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_CCP : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_CCP : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1100 NM_KMA_TMU: 8 KMA_TMU
- SG_ Destination_KMA_TMU : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_KMA_TMU : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_KMA_TMU : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1098 NM_CUBIS: 8 CUBIS
- SG_ Destination_CUBIS : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_CUBIS : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_CUBIS : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1099 NM_TMU: 8 TMU
- SG_ Destination_TMU : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_TMU : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_TMU : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1095 NM_IPM: 8 IPM
- SG_ Destination_IPM : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_IPM : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_IPM : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1107 NM_RSE_R: 8 RSE_R
- SG_ Destination_RSE_R : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_RSE_R : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_RSE_R : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1093 NM_RRC: 8 RRC
- SG_ Destination_RRC : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_RRC : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_RRC : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1109 NM_CGW: 8 CGW
- SG_ Destination_CGW : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_CGW : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_CGW : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1106 NM_RSE_L: 8 RSE_L
- SG_ Destination_RSE_L : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_RSE_L : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_RSE_L : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1096 NM_AMP: 8 AMP
- SG_ Destination_AMP : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_AMP : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_AMP : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1103 NM_EDT: 8 EDT
- SG_ Destination_EDT : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_EDT : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_EDT : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1110 NM_SWRC: 8 SWRC
- SG_ Destination_SWRC : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_SWRC : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_SWRC : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,IBOX,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1102 NM_IBOX: 8 IBOX
- SG_ Destination_IBOX : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_IBOX : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,CLU,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_IBOX : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,CLU,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1101 NM_CLU: 8 CLU
- SG_ Destination_CLU : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,FHCU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_CLU : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,FHCU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_CLU : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,FHCU,ASD,MON,AVM,KBD
-
-BO_ 1097 NM_FHCU: 8 FHCU
- SG_ Destination_FHCU : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,ASD,MON,AVM,KBD
- SG_ NMSleepFlag_FHCU : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,ASD,MON,AVM,KBD
- SG_ NMCommandCode_FHCU : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,ASD,MON,AVM,KBD
-
-BO_ 1094 NM_ASD: 8 ASD
- SG_ Destination_ASD : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,MON,AVM,KBD
- SG_ NMSleepFlag_ASD : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,MON,AVM,KBD
- SG_ NMCommandCode_ASD : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,MON,AVM,KBD
-
-BO_ 1089 NM_MON: 8 MON
- SG_ Destination_MON : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,AVM,KBD
- SG_ NMSleepFlag_MON : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,AVM,KBD
- SG_ NMCommandCode_MON : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,AVM,KBD
-
-BO_ 1104 NM_AVM: 8 AVM
- SG_ Destination_AVM : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,KBD
- SG_ NMSleepFlag_AVM : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,KBD
- SG_ NMCommandCode_AVM : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,KBD
-
-BO_ 1090 NM_KBD: 8 KBD
- SG_ Destination_KBD : 7|8@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM
- SG_ NMSleepFlag_KBD : 13|2@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM
- SG_ NMCommandCode_KBD : 10|3@0+ (1,0) [0|0] "" CLOCK,HUD,H_U,DATC,CCP,KMA_TMU,CUBIS,TMU,IPM,RSE_R,RRC,CGW,RSE_L,AMP,EDT,SWRC,IBOX,CLU,FHCU,ASD,MON,AVM
-
diff --git a/opendbc/hyundai_i30_2014.dbc b/opendbc/hyundai_i30_2014.dbc
deleted file mode 100644
index 3524f9b21a893c..00000000000000
--- a/opendbc/hyundai_i30_2014.dbc
+++ /dev/null
@@ -1,549 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 128 EMS_DCT1: 8 XXX
- SG_ PV_AV_CAN : 0|8@1+ (0.3906,0) [0|99.603] "%" XXX
- SG_ TQ_STND : 8|6@1+ (10,0) [0|630] "Nm" XXX
- SG_ F_N_ENG : 14|1@1+ (1,0) [0|1] "" XXX
- SG_ F_SUB_TQI : 15|1@1+ (1,0) [0|1] "" XXX
- SG_ N : 16|16@1+ (0.25,0) [0|16383.8] "rpm" XXX
- SG_ TQI_ACOR : 32|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQFR : 40|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQI : 48|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ CF_Ems_Alive : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Ems_ChkSum : 60|4@1+ (1,0) [0|15] "" XXX
-
-
-BO_ 129 EMS_DCT2: 8 XXX
- SG_ CR_Ems_SoakTimeExt : 0|6@1+ (5,0) [0|315] "Min" XXX
- SG_ BRAKE_ACT : 6|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Ems_EngOperStat : 8|8@1+ (1,0) [0|255] "" XXX
- SG_ CR_Ems_IndAirTemp : 16|8@1+ (0.75,-48) [-48|143.25] "" XXX
- SG_ CF_Ems_Alive2 : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Ems_ChkSum2 : 60|4@1+ (1,0) [0|15] "" XXX
-
-
-BO_ 160 EngFrzFrm1: 8 XXX
- SG_ PID_04h : 0|8@1+ (0.392157,0) [0|100] "%" XXX
- SG_ PID_05h : 8|8@1+ (1,-40) [-40|215] "" XXX
- SG_ PID_0Ch : 16|16@1+ (0.25,0) [0|16383.8] "rpm" XXX
- SG_ PID_0Dh : 32|8@1+ (1,0) [0|255] "km/h" XXX
- SG_ PID_11h : 40|8@1+ (0.392157,0) [0|100] "%" XXX
- SG_ PID_03h : 48|16@1+ (1,0) [0|65535] "" XXX
-
-
-BO_ 161 EngFrzFrm2: 8 XXX
- SG_ PID_06h : 0|8@1+ (0.78125,-100) [-100|99.22] "%" XXX
- SG_ PID_07h : 8|8@1+ (0.78125,-100) [-100|99.22] "%" XXX
- SG_ PID_08h : 16|8@1+ (0.78125,-100) [-100|99.22] "%" XXX
- SG_ PID_09h : 24|8@1+ (0.78125,-100) [-100|99.22] "%" XXX
- SG_ PID_0Bh : 32|8@1+ (1,0) [0|255] "kPa" XXX
- SG_ PID_23h : 40|16@1+ (10,0) [0|655350] "kPa" XXX
-
-
-BO_ 304 YRS1: 8 XXX
- SG_ CR_Yrs_Yr : 0|16@1+ (0.005,-163.84) [-163.84|163.83] "" XXX
- SG_ CF_Yrs_SnsStat1 : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Yrs_YrStat : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ CR_Yrs_LatAc : 32|16@1+ (0.000127465,-4.17677) [-4.17677|4.17652] "g" XXX
- SG_ CR_Yrs_MsgCnt1 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Yrs_LatAcStat1 : 52|4@1+ (1,0) [0|15] "" XXX
- SG_ CR_Yrs_Crc1 : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 305 YRS3: 8 XXX
- SG_ CR_Yrs_YawAcc : 0|16@1+ (0.125,-4096) [-4096|4095.75] "" XXX
- SG_ CF_Yrs_YawAccStat : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ CR_Yrs_Ax : 32|16@1+ (0.000127465,-4.17677) [-4.17677|4.17652] "g" XXX
- SG_ CR_Yrs_MsgCnt3 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Yrs_AxStat : 52|4@1+ (1,0) [0|15] "" XXX
- SG_ CR_Yrs_Crc3 : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 320 YRS2: 8 XXX
- SG_ CF_Yrs_McuStat : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ CF_Yrs_SnsStat2 : 8|8@1+ (1,0) [0|255] "" XXX
- SG_ CF_Yrs_ExtSysStat : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ CR_Yrs_Diag : 40|8@1+ (1,0) [0|255] "" XXX
- SG_ CR_Yrs_MsgCnt2 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Yrs_Type : 52|4@1+ (1,0) [0|15] "" XXX
- SG_ CR_Yrs_Crc2 : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 339 TCS1: 8 XXX
- SG_ TCS_REQ : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ MSR_C_REQ : 1|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_PAS : 2|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_GSC : 3|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Esc_LimoInfo : 4|2@1+ (1,0) [0|3] "" XXX
- SG_ ABS_DIAG : 6|1@1+ (1,0) [0|1] "" XXX
- SG_ ABS_DEF : 7|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_DEF : 8|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_CTL : 9|1@1+ (1,0) [0|1] "" XXX
- SG_ ABS_ACT : 10|1@1+ (1,0) [0|1] "" XXX
- SG_ EBD_DEF : 11|1@1+ (1,0) [0|1] "" XXX
- SG_ ESP_PAS : 12|1@1+ (1,0) [0|1] "" XXX
- SG_ ESP_DEF : 13|1@1+ (1,0) [0|1] "" XXX
- SG_ ESP_CTL : 14|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_MFRN : 15|1@1+ (1,0) [0|1] "" XXX
- SG_ DBC_CTL : 16|1@1+ (1,0) [0|1] "" XXX
- SG_ DBC_PAS : 17|1@1+ (1,0) [0|1] "" XXX
- SG_ DBC_DEF : 18|1@1+ (1,0) [0|1] "" XXX
- SG_ HAC_CTL : 19|1@1+ (1,0) [0|1] "" XXX
- SG_ HAC_PAS : 20|1@1+ (1,0) [0|1] "" XXX
- SG_ HAC_DEF : 21|1@1+ (1,0) [0|1] "" XXX
- SG_ ESS_STAT : 22|2@1+ (1,0) [0|3] "" XXX
- SG_ TQI_TCS : 24|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQI_MSR : 32|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQI_SLW_TCS : 40|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ CF_Esc_BrkCtl : 48|1@1+ (1,0) [0|1] "" XXX
- SG_ ESC_OFF_STEP : 49|2@1+ (1,0) [0|3] "" XXX
- SG_ _4WD_Status : 51|1@1+ (1,0) [0|1] "" XXX
- SG_ AliveCounter_TCS1 : 52|4@1+ (1,0) [0|1] "" XXX
- SG_ CheckSum_TCS1 : 56|8@1+ (1,0) [0|1] "" XXX
-
-
-BO_ 356 VSM1: 8 XXX
- SG_ CR_Esc_StrTqReq : 0|12@1+ (0.01,-20.48) [-20.48|20.47] "Nm" XXX
- SG_ CF_Esc_Act : 12|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Esc_CtrMode : 13|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Esc_Def : 16|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Esc_AliveCnt : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Esc_Chksum : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 357 VSM2: 8 XXX
- SG_ CR_Mdps_StrTq : 0|12@1+ (0.01,-20.48) [-20.48|20.47] "Nm" XXX
- SG_ CR_Mdps_OutTq : 12|12@1+ (0.1,-204.8) [-204.8|204.7] "" XXX
- SG_ CF_Mdps_Def : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Mdps_SErr : 25|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Mdps_AliveCnt : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Mdps_Chksum : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 399 EMS_H2: 8 XXX
- SG_ R_TqAcnApvC : 0|8@1+ (0.2,0) [0|51] "Nm" XXX
- SG_ R_PAcnC : 8|8@1+ (125,0) [0|31875] "hPa" XXX
- SG_ TQI_B : 16|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ SLD_VS : 24|8@1+ (1,0) [0|255] "km/h" XXX
- SG_ CF_CdaStat : 32|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Ems_IsgStat : 35|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Ems_OilChg : 38|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_EtcLimpMod : 39|1@1+ (1,0) [0|1] "" XXX
- SG_ R_NEngIdlTgC : 40|8@1+ (10,0) [0|2550] "rpm" XXX
- SG_ CF_Ems_UpTarGr : 48|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_DownTarGr : 49|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_DesCurGr : 50|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Ems_SldAct : 54|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_SldPosAct : 55|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_HPresStat : 56|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_IsgBuz : 57|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_IdlStpFCO : 58|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_FCopen : 59|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_ActEcoAct : 60|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_EngRunNorm : 61|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_IsgStat2 : 62|2@1+ (2,0) [0|3] "" XXX
-
-
-BO_ 497 TCS5: 8 XXX
- SG_ ABS_W_LAMP : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ EBD_W_LAMP : 1|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_OFF_LAMP : 2|1@1+ (1,0) [0|1] "" XXX
- SG_ TCS_LAMP : 3|2@1+ (1,0) [0|3] "" XXX
- SG_ DBC_W_LAMP : 5|1@1+ (1,0) [0|1] "" XXX
- SG_ DBC_F_LAMP : 6|2@1+ (1,0) [0|3] "" XXX
- SG_ ODOMETER_LEFT : 8|4@1+ (1,0) [0|15] "m" XXX
- SG_ ODOMETER_RIGHT : 12|4@1+ (1,0) [0|15] "m" XXX
- SG_ WHEEL_FL : 16|12@1+ (0.125,0) [0|511.875] "km/h" XXX
- SG_ WHEEL_FR : 28|12@1+ (0.125,0) [0|511.875] "km/h" XXX
- SG_ WHEEL_RL : 40|12@1+ (0.125,0) [0|511.875] "km/h" XXX
- SG_ WHEEL_RR : 52|12@1+ (0.125,0) [0|511.875] "km/h" XXX
-
-
-BO_ 544 ESP2: 8 XXX
- SG_ LAT_ACCEL : 0|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" XXX
- SG_ ESP2_AliveCounter_LSB : 11|3@1+ (1,0) [0|7] "" XXX
- SG_ LAT_ACCEL_STAT : 14|1@1+ (1,0) [0|1] "" XXX
- SG_ LAT_ACCEL_DIAG : 15|1@1+ (1,0) [0|1] "" XXX
- SG_ LONG_ACCEL : 16|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" XXX
- SG_ ESP2_AliveCounter_MSB : 27|1@1+ (1,0) [0|1] "" XXX
- SG_ ESP2_Checksum_LSB : 28|2@1+ (1,0) [0|3] "" XXX
- SG_ LONG_ACCEL_STAT : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ LONG_ACCEL_DIAG : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ CYL_PRES : 32|12@1+ (0.1,0) [0|409.5] "Bar" XXX
- SG_ ESP12_Checksum_MSB : 44|2@1+ (1,0) [0|3] "" XXX
- SG_ CYL_PRES_STAT : 46|1@1+ (1,0) [0|1] "" XXX
- SG_ CYL_PRESS_DIAG : 47|1@1+ (1,0) [0|1] "" XXX
- SG_ YAW_RATE : 48|13@1+ (0.01,-40.95) [-40.95|40.96] "" XXX
- SG_ CYL_PRES_FLAG : 61|1@1+ (1,0) [0|1] "" XXX
- SG_ YAW_RATE_STAT : 62|1@1+ (1,0) [0|1] "" XXX
- SG_ YAW_RATE_DIAG : 63|1@1+ (1,0) [0|1] "" XXX
-
-
-BO_ 608 EMS6: 8 XXX
- SG_ TQI_MIN : 0|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQI : 8|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQI_TARGET : 16|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ GLOW_STAT : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ CRUISE_LAMP_M : 25|1@1+ (1,0) [0|1] "" XXX
- SG_ CRUISE_LAMP_S : 26|1@1+ (1,0) [0|1] "" XXX
- SG_ PRE_FUEL_CUT_IN : 27|1@1+ (1,0) [0|1] "" XXX
- SG_ ENG_STAT : 28|3@1+ (1,0) [0|7] "" XXX
- SG_ SOAK_TIME_ERROR : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ SOAK_TIME : 32|8@1+ (1,0) [0|255] "Min" XXX
- SG_ TQI_MAX : 40|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ SPK_TIME_CUR : 48|8@1+ (0.375,-35.625) [-35.625|60] "" XXX
- SG_ Checksum : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ AliveCounter : 60|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Ems_AclAct : 62|2@1+ (1,0) [0|3] "" XXX
-
-
-BO_ 672 EMS5: 8 XXX
- SG_ ECGPOvrd : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ QECACC : 1|1@1+ (1,0) [0|1] "" XXX
- SG_ ECFail : 2|1@1+ (1,0) [0|1] "" XXX
- SG_ SwitchOffCondExt : 3|1@1+ (1,0) [0|1] "" XXX
- SG_ BLECFail : 4|1@1+ (1,0) [0|1] "" XXX
- SG_ AliveCounter : 5|2@1+ (1,0) [0|3] "" XXX
- SG_ Byte0Parity : 7|1@1+ (1,0) [0|1] "" XXX
- SG_ FA_PV_CAN : 8|8@1+ (0.3906,0) [0|99.2] "%" XXX
- SG_ IntAirTemp : 16|8@1+ (0.75,-48) [-48|143.25] "" XXX
- SG_ STATE_DC_OBD : 24|7@1+ (1,0) [0|127] "" XXX
- SG_ INH_DC_OBD : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ CTR_IG_CYC_OBD : 32|16@1+ (1,0) [0|65535] "" XXX
- SG_ CTR_CDN_OBD : 48|16@1+ (1,0) [0|65535] "" XXX
-
-
-BO_ 688 SAS1: 8 XXX
- SG_ SAS_Angle : 0|16@1+ (0.1,0) [-3276.8|3276.7] "Deg" XXX
- SG_ SAS_Speed : 16|8@1+ (4,0) [0|1016] "" XXX
- SG_ SAS_Stat : 24|8@1+ (1,0) [0|255] "" XXX
- SG_ MsgCount : 32|4@1+ (1,0) [0|15] "" XXX
- SG_ CheckSum : 36|4@1+ (1,0) [0|15] "" XXX
-
-
-BO_ 790 EMS1: 8 XXX
- SG_ SWI_IGK : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ F_N_ENG : 1|1@1+ (1,0) [0|1] "" XXX
- SG_ ACK_TCS : 2|1@1+ (1,0) [0|1] "" XXX
- SG_ PUC_STAT : 3|1@1+ (1,0) [0|1] "" XXX
- SG_ TQ_COR_STAT : 4|2@1+ (1,0) [0|3] "" XXX
- SG_ RLY_AC : 6|1@1+ (1,0) [0|1] "" XXX
- SG_ F_SUB_TQI : 7|1@1+ (1,0) [0|1] "" XXX
- SG_ TQI_ACOR : 8|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ N : 16|16@1+ (0.25,0) [0|16383.8] "rpm" XXX
- SG_ TQI : 32|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ TQFR : 40|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ VS : 48|8@1+ (1,0) [0|254] "km/h" XXX
- SG_ RATIO_TQI_BAS_MAX_STND : 56|8@1+ (0.0078,0) [0|2] "" XXX
-
-
-BO_ 809 EMS2: 8 XXX
- SG_ TQ_STND : 0|6@1+ (10,0) [0|630] "Nm" XXX
- SG_ CAN_VERS : 0|6@1+ (1,0) [0|7.7] "" XXX
- SG_ CONF_TCU : 0|6@1+ (1,0) [0|63] "" XXX
- SG_ OBD_FRF_ACK : 0|6@1+ (1,0) [0|63] "" XXX
- SG_ MUL_CODE : 6|2@1+ (1,0) [0|3] "" XXX
- SG_ TEMP_ENG : 8|8@1+ (0.75,-48) [-48|143.25] "" XXX
- SG_ MAF_FAC_ALTI_MMV : 16|8@1+ (0.00781,0) [0|1.99155] "" XXX
- SG_ VB_OFF_ACT : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ ACK_ES : 25|1@1+ (1,0) [0|1] "" XXX
- SG_ CONF_MIL_FMY : 26|3@1+ (1,0) [0|7] "" XXX
- SG_ OD_OFF_REQ : 29|1@1+ (1,0) [0|1] "" XXX
- SG_ ACC_ACT : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ CLU_ACK : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ BRAKE_ACT : 32|2@1+ (1,0) [0|3] "" XXX
- SG_ ENG_CHR : 34|4@1+ (1,0) [0|15] "" XXX
- SG_ GP_CTL : 38|2@1+ (1,0) [0|3] "" XXX
- SG_ TPS : 40|8@1+ (0.469484,-15.0235) [-15.0235|104.695] "%" XXX
- SG_ PV_AV_CAN : 48|8@1+ (0.3906,0) [0|99.603] "%" XXX
- SG_ ENG_VOL : 56|8@1+ (0.1,0) [0|25.5] "liter" XXX
-
-
-BO_ 848 FATC: 8 XXX
- SG_ CR_Fatc_TqAcnOut : 0|8@1+ (0.2,0) [0|50.8] "Nm" XXX
- SG_ CF_Fatc_AcnRqSwi : 8|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_AcnCltEnRq : 9|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_EcvFlt : 10|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_BlwrOn : 11|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_FATC_Iden : 12|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Fatc_BlwrMax : 14|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_EngStartReq : 15|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_IsgStopReq : 16|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_CtrInf : 17|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Fatc_MsgCnt : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ CR_Fatc_OutTemp : 24|8@1+ (0.5,-40) [-40|60] "" XXX
- SG_ CR_Fatc_OutTempSns : 32|8@1+ (0.5,-40) [-40|60] "" XXX
- SG_ CF_Fatc_Compload : 40|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Fatc_ActiveEco : 43|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_AutoActivation : 44|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_DefSw : 45|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_PtcRlyStat : 46|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Fatc_ChkSum : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 880 TCU3: 8 XXX
- SG_ N_TGT_LUP : 0|8@1+ (10,500) [500|3040] "rpm" XXX
- SG_ SLOPE_TCU : 8|6@1+ (0.5,-16) [-16|15.5] "%" XXX
- SG_ CF_Tcu_InhCda : 14|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_IsgInhib : 15|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_BkeOnReq : 16|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_NCStat : 18|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_TarGr : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Tcu_ShfPatt : 24|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Tcu_InhVis : 28|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_PRelReq : 29|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_ITPhase : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_ActEcoRdy : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_TqGrdLim : 32|8@1+ (10,0) [0|2540] "Nm/s" XXX
- SG_ CR_Tcu_IsgTgtRPM : 40|8@1+ (20,0) [0|3500] "rpm" XXX
- SG_ TQI_TCU_INC : 48|8@1+ (0.390625,0) [0|99.6094] "%" XXX
- SG_ CF_Tcu_SbwPInfo : 56|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_SptRdy : 57|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_Alive3 : 58|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_ChkSum3 : 60|4@1+ (1,0) [0|15] "" XXX
-
-
-BO_ 898 EMS9: 8 XXX
- SG_ CF_Ems_BrkReq : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_DnShftReq : 1|4@1+ (1,0) [0|14] "" XXX
- SG_ CF_Ems_RepModChk : 5|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Ems_AAFOpenReq : 7|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_DecelReq : 8|12@1+ (0.001,-4.094) [-4.094|0] "m/s^2" XXX
- SG_ CR_Ems_BstPre : 20|12@1+ (1.322,0) [0|4094] "hPa" XXX
- SG_ CR_Ems_EngOilTemp : 32|8@1+ (0.75,-40) [0|254] "" XXX
- SG_ CF_Ems_PumpTPres : 40|8@1+ (3.13725,0) [0|800] "kPa" XXX
- SG_ CF_Ems_ModeledAmbTemp : 48|8@1+ (0.5,-41) [-40|60] "" XXX
- SG_ CF_Ems_OPSFail : 56|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_ECTTRQLIM : 57|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_AliveCounterEMS9 : 58|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Ems_ChecksumEMS9 : 60|4@1+ (1,0) [0|15] "" XXX
-
-
-BO_ 1075 EPB1: 8 XXX
- SG_ EPB_I_LAMP : 0|4@1+ (1,0) [0|15] "" XXX
- SG_ EPB_F_LAMP : 4|2@1+ (1,0) [0|3] "" XXX
- SG_ EPB_ALARM : 6|2@1+ (1,0) [0|3] "" XXX
- SG_ EPB_CLU : 8|8@1+ (1,0) [0|255] "" XXX
- SG_ EPB_SWITCH : 16|2@1+ (1,0) [0|3] "" XXX
- SG_ EPB_RBL : 18|1@1+ (1,0) [0|1] "" XXX
- SG_ EPB_STATUS : 19|3@1+ (1,0) [0|7] "" XXX
- SG_ EPB_FRC_ERR : 22|2@1+ (1,0) [0|3] "" XXX
- SG_ EPB_DBF_STAT : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ ESP_ACK : 25|1@1+ (1,0) [0|1] "" XXX
- SG_ EPB_DBF_REQ : 26|1@1+ (1,0) [0|1] "" XXX
- SG_ EPB_FAIL : 29|3@1+ (1,0) [0|7] "" XXX
- SG_ EPB_FORCE : 32|12@1+ (1,-1000) [-1000|3000] "" XXX
- SG_ EPB_DBF_DECEL : 48|8@1+ (0.01,0) [0|2.54] "g" XXX
-
-
-BO_ 1087 TCU1: 8 XXX
- SG_ ETL_TCU : 0|8@1+ (2,0) [0|508] "Nm" XXX
- SG_ CUR_GR : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Tcu_Alive : 12|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_ChkSum : 14|2@1+ (1,0) [0|3] "" XXX
- SG_ VS_TCU : 16|8@1+ (1,0) [0|254] "km/h" XXX
- SG_ FAN_CTRL_TCU : 24|2@1+ (1,0) [0|3] "" XXX
- SG_ BRAKE_ACT_TCU : 26|2@1+ (1,0) [0|3] "" XXX
- SG_ FUEL_CUT_TCU : 28|1@1+ (1,0) [0|1] "" XXX
- SG_ INH_FUEL_CUT : 29|1@1+ (1,0) [0|1] "" XXX
- SG_ IDLE_UP_TCU : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ N_INC_TCU : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ SPK_RTD_TCU : 32|8@1+ (0.375,-23.625) [-15|15] "" XXX
- SG_ N_TC_RAW : 40|16@1+ (0.25,0) [0|16383.5] "rpm" XXX
- SG_ VS_TCU_DECIMAL : 56|8@1+ (0.0078125,0) [0|0.992188] "km/h" XXX
-
-
-BO_ 1088 TCU2: 8 XXX
- SG_ ETL_TCU : 0|8@1+ (2,0) [0|508] "Nm" XXX
- SG_ CUR_GR : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Tcu_Alive : 12|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_ChkSum : 14|2@1+ (1,0) [0|3] "" XXX
- SG_ VS_TCU : 16|8@1+ (1,0) [0|254] "km/h" XXX
- SG_ FAN_CTRL_TCU : 24|2@1+ (1,0) [0|3] "" XXX
- SG_ BRAKE_ACT_TCU : 26|2@1+ (1,0) [0|3] "" XXX
- SG_ FUEL_CUT_TCU : 28|1@1+ (1,0) [0|1] "" XXX
- SG_ INH_FUEL_CUT : 29|1@1+ (1,0) [0|1] "" XXX
- SG_ IDLE_UP_TCU : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ N_INC_TCU : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ SPK_RTD_TCU : 32|8@1+ (0.375,-23.625) [-15|15] "" XXX
- SG_ N_TC_RAW : 40|16@1+ (0.25,0) [0|16383.5] "rpm" XXX
- SG_ VS_TCU_DECIMAL : 56|8@1+ (0.0078125,0) [0|0.992188] "km/h" XXX
-
-
-BO_ 1200 WHL_SPD: 8 XXX
- SG_ WHL_SPD_FL : 0|14@1+ (0.03125,0) [0|511.969] "km/h" XXX
- SG_ WHL_SPD_FR : 16|14@1+ (0.03125,0) [0|511.969] "km/h" XXX
- SG_ WHL_SPD_RL : 32|14@1+ (0.03125,0) [0|511.969] "km/h" XXX
- SG_ WHL_SPD_RR : 48|14@1+ (0.03125,0) [0|511.969] "km/h" XXX
-
-
-BO_ 1201 WHL_PUL: 8 XXX
- SG_ WHL_PUL_FL : 0|8@1+ (0.5,0) [0|127.5] "pulse count" XXX
- SG_ WHL_PUL_FR : 8|8@1+ (0.5,0) [0|127.5] "pulse count" XXX
- SG_ WHL_PUL_RL : 16|8@1+ (0.5,0) [0|127.5] "pulse count" XXX
- SG_ WHL_PUL_RR : 24|8@1+ (0.5,0) [0|127.5] "pulse count" XXX
- SG_ WHL_DIR_FL : 32|2@1+ (1,0) [0|3] "" XXX
- SG_ WHL_DIR_FR : 34|2@1+ (1,0) [0|3] "" XXX
- SG_ WHL_DIR_RL : 36|2@1+ (1,0) [0|3] "" XXX
- SG_ WHL_DIR_RR : 38|2@1+ (1,0) [0|3] "" XXX
- SG_ WHL_PUL_Chksum : 56|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 1264 CLU1: 8 XXX
- SG_ CF_Clu_CruiseSwState : 0|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Blr_MaxStat : 3|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_SldMainSW : 4|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_ParityBit1 : 5|1@1+ (1,0) [0|1] "pulse count" XXX
- SG_ CF_Clu_SPEED_UNIT : 6|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_ParkBrakeSw : 7|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_Vanz : 8|9@1+ (0.5,0) [0|255.5] "km/h or MPH" XXX
- SG_ CF_Clu_AliveCounter : 17|7@1+ (1,0) [0|127] "" XXX
- SG_ CF_Clu_CruiseSwMain : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_VanzDecimal : 25|2@1+ (1,0) [0|0.375] "" XXX
- SG_ VEHICLE_INFO : 27|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_StrRlyState : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_SMKOption : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ R_TqAcnOutC : 32|8@1+ (1,0) [0|51] "Nm" XXX
- SG_ CF_Clu_Odometer : 40|24@1+ (0.1,0) [0|1.67772e+006] "km" XXX
-
-
-BO_ 1265 CLU3: 8 XXX
- SG_ CF_Clu_AcnRqSwi : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_AcnCltEnRq : 1|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_RefDetMod : 2|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_DefoggerRly : 5|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_LowfuelWarn : 16|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_SportsModeSwi : 18|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_ALightStat : 20|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_FrtFog : 21|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_DetentOut : 22|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HeadLampTail : 23|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_TrailerMode : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_DTE : 25|10@1+ (1,0) [0|1023] "" XXX
- SG_ CF_Clu_TripUnit : 35|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_IsaMainSW : 37|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_FlexSteerSW : 40|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_AvsmCur : 41|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HudSpeedset : 42|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HudTbtSet : 43|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HudSccSet : 44|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HudLdwsSet : 45|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HudDisSet : 46|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HudFontSizeSet : 47|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_HudFontColorSet : 49|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_HudBrightSet : 51|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_HudHeightSet : 53|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_CluInfo : 55|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_RheostatLevel : 56|5@1+ (1,0) [0|31] "" XXX
- SG_ CF_Clu_DrivinglampStat : 61|3@1+ (1,0) [0|7] "" XXX
-
-
-BO_ 1349 EMS4: 8 XXX
- SG_ IMMO_LAMP_STAT : 0|1@1+ (1,0) [0|1] "" XXX
- SG_ L_MIL : 1|1@1+ (1,0) [0|1] "" XXX
- SG_ IM_STAT : 2|1@1+ (1,0) [0|1] "" XXX
- SG_ AMP_CAN : 3|5@1+ (10.7316,458.98) [458.98|791.66] "mmHg" XXX
- SG_ FCO : 8|16@1+ (0.128,0) [0|8388.48] "ul" XXX
- SG_ VB : 24|8@1+ (0.101563,0) [0|25.8984] "V" XXX
- SG_ TEMP_FUEL : 48|8@1+ (0.75,-48) [-48|143.25] "" XXX
- SG_ Split_Stat : 56|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Ems_IsaAct : 57|1@1+ (1,0) [0|1] "" XXX
-
-
-BO_ 1435 TCU4: 8 XXX
- SG_ CF_TCU_WarnMsg : 0|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_TCU_WarnImg : 3|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_TCU_WarnSnd : 4|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_EolStat : 5|1@1+ (1,0) [0|1] "" XXX
- SG_ CR_Tcu_GearSelDisp2 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Tcu_StRelStat : 12|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_DriWarn1 : 13|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Tcu_DriWarn2 : 16|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_DrivingModeReq : 18|4@1+ (1,0) [0|0] "" XXX
- SG_ CF_Tcu_DrivingModeDisp : 22|4@1+ (1,0) [0|0] "" XXX
- SG_ CF_Tcu_SiCluster : 26|5@1+ (1,0) [0|0] "" XXX
- SG_ CF_Tcu_DSmode_Inf : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Tcu_Alive4 : 58|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Tcu_ChkSum4 : 60|4@1+ (1,0) [0|15] "" XXX
-
-
-BO_ 1508 MDPS1: 8 XXX
- SG_ CF_Mdps_WLmp : 1|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Mdps_ALTRequest : 5|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Mdps_Flex : 8|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Mdps_FlexDisp : 11|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Mdps_CurrMode : 12|2@1+ (1,0) [0|3] "" XXX
-
-
-BO_ 1680 CLU2: 8 XXX
- SG_ CF_Clu_IGNSw : 0|3@1+ (1,0) [0|7] "" XXX
- SG_ RKE_CMD : 3|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_DrvDrSw : 6|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_DrvKeyLockSw : 8|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_DrvKeyUnlockSw : 9|1@1+ (1,0) [0|1] "" XXX
- SG_ PIC_Lock : 10|3@1+ (1,0) [0|7] "" XXX
- SG_ PIC_Unlock : 13|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_DrvSeatBeltSw : 16|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_TrunkTgSw : 18|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_AstSeatBeltSw : 20|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_HoodSw : 22|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_TurnSigLh : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_TurnSigRh : 25|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_LdwsLkasSW : 26|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_WiperIntT : 27|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_WiperIntSW : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_WiperLow : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_WiperHigh : 32|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_WiperAuto : 33|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_RainSnsStat : 34|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_HeadLampLow : 37|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HeadLampHigh : 38|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_AltLStatus : 39|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_EcoDriveInf : 40|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_SwiGearR : 43|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_SWL_Stat : 45|3@1+ (1,0) [0|7] "" XXX
- SG_ CF_Clu_ActiveEcoSW : 48|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_HazardSW : 49|1@1+ (1,0) [0|1] "" XXX
- SG_ CF_Clu_AliveCnt2 : 50|4@1+ (1,0) [0|15] "" XXX
- SG_ CF_Clu_AstDrSw : 54|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_LkasDispMode : 56|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_AutoLightLevel : 58|2@1+ (1,0) [0|3] "" XXX
- SG_ CF_Clu_SunRoofOpenState : 60|1@1+ (1,0) [0|1] "" XXX
-
-
diff --git a/opendbc/hyundai_kia_generic.dbc b/opendbc/hyundai_kia_generic.dbc
index bb1c06e09c2796..13ee8f3a1a0211 100644
--- a/opendbc/hyundai_kia_generic.dbc
+++ b/opendbc/hyundai_kia_generic.dbc
@@ -191,8 +191,12 @@ BO_ 916 TCS13: 8 ESC
SG_ BrakeLight : 11|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,SCC
SG_ DCEnable : 12|1@1+ (1.0,0.0) [0.0|1.0] "" EMS,SCC
SG_ AliveCounterTCS : 13|3@1+ (1.0,0.0) [0.0|7.0] "" EMS,SCC
- SG_ ACCReqLim : 22|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
- SG_ TQI_ACC : 24|8@1+ (0.390625,0.0) [0.0|99.609375] "%" EMS
+ SG_ Pre_TCS_CTL : 16|1@1+ (1.0,0.0) [0.0|1.0] "" Vector__XXX
+ SG_ EBA_ACK : 17|1@1+ (1.0,0.0) [0.0|1.0] "" Vector__XXX
+ SG_ FCA_ACK : 18|1@1+ (1.0,0.0) [0.0|1.0] "" Vector__XXX
+ SG_ DF_BF_STAT : 19|2@1+ (1.0,0.0) [0.0|3.0] "" BCW
+ SG_ SCCReqLim : 21|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
+ SG_ TQI_SCC : 23|9@1+ (0.390625,0.0) [0.0|199.609375] "%" Vector__XXX
SG_ ACCEL_REF_ACC : 32|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,SCC
SG_ ACCEnable : 43|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
SG_ DriverOverride : 45|2@1+ (1.0,0.0) [0.0|3.0] "" EMS,SCC
@@ -448,6 +452,7 @@ BO_ 897 MDPS11: 8 MDPS
SG_ CF_Mdps_LKAS_FUNC : 58|1@1+ (1.0,0.0) [0.0|1.0] "flag" LDWS_LKAS
SG_ CF_Mdps_CurrMode : 59|2@1+ (1.0,0.0) [0.0|3.0] "" LDWS_LKAS
SG_ CF_Mdps_Type : 61|2@1+ (1.0,0.0) [0.0|2.0] "" LDWS_LKAS,SPAS
+ SG_ CF_MDPS_VSM_FUNC : 56|1@0+ (1.0,0.0) [0.0|1.0] "" XXX
BO_ 896 DI_BOX13: 8 DI_BOX
SG_ CF_DiBox_HPreInjVConfStat : 0|8@1+ (1.0,0.0) [0.0|255.0] "" EMS
@@ -792,7 +797,7 @@ BO_ 1362 SNV11: 4 SNV
SG_ CF_Snv_IRLampControl : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,HUD
BO_ 593 MDPS12: 8 MDPS
- SG_ CR_Mdps_StrColTq : 0|11@1+ (0.0078125,-8.0) [-8.0|7.9921875] "Nm" LDWS_LKAS
+ SG_ CR_Mdps_StrColTq : 0|11@1+ (1.0,-1024.0) [-1024.0|1024.0] "" LDWS_LKAS
SG_ CF_Mdps_Def : 11|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
SG_ CF_Mdps_ToiUnavail : 12|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
SG_ CF_Mdps_ToiActive : 13|1@1+ (1.0,0.0) [0.0|1.0] "" LDWS_LKAS
@@ -961,7 +966,7 @@ BO_ 64 DATC14: 8 DATC
SG_ DATC_ADSDisp : 28|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
BO_ 832 LKAS11: 8 LDWS_LKAS
- SG_ CF_Lkas_Bca_R : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,IBOX,PSB
+ SG_ CF_Lkas_LdwsActivemode : 0|2@1+ (1,0) [0|3] "" CLU,IBOX,PSB
SG_ CF_Lkas_LdwsSysState : 2|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,IBOX,PSB
SG_ CF_Lkas_SysWarning : 6|4@1+ (1.0,0.0) [0.0|15.0] "" BCM,CLU
SG_ CF_Lkas_LdwsLHWarning : 10|2@1+ (1.0,0.0) [0.0|3.0] "" BCM,CLU,PSB
@@ -978,11 +983,11 @@ BO_ 832 LKAS11: 8 LDWS_LKAS
SG_ CF_Lkas_FcwSysState : 40|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
SG_ CF_Lkas_FcwCollisionWarning : 43|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
SG_ CF_Lkas_FusionState : 45|2@1+ (1.0,0.0) [0.0|3.0] "" SCC
+ SG_ CF_Lkas_Unknown1 : 47|1@1+ (1.0,0.0) [0.0|1.0] "" XXX
SG_ CF_Lkas_Chksum : 48|8@1+ (1.0,0.0) [0.0|255.0] "" MDPS
SG_ CF_Lkas_FcwOpt_USM : 56|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
SG_ CF_Lkas_LdwsOpt_USM : 59|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,MDPS
- SG_ CF_Lkas_Unknown1 : 47|1@1+ (1,0) [0|3] "" XXX
- SG_ CF_Lkas_Unknown2 : 63|2@0+ (1,0) [0|3] "" XXX
+ SG_ CF_Lkas_Unknown2 : 62|2@1+ (1.0,0.0) [0.0|1.0] "" XXX
BO_ 1342 LKAS12: 6 LDWS_LKAS
SG_ CF_Lkas_TsrSlifOpt : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
@@ -990,6 +995,8 @@ BO_ 1342 LKAS12: 6 LDWS_LKAS
SG_ CF_Lkas_TsrSpeed_Display_Clu : 16|8@1+ (1.0,0.0) [0.0|255.0] "" CLU
SG_ CF_LkasTsrSpeed_Display_Navi : 24|8@1+ (1.0,0.0) [0.0|255.0] "" BCM,CLU
SG_ CF_Lkas_TsrAddinfo_Display : 32|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
+ SG_ CF_LkasDawStatus : 40|3@1+ (1,0) [0|7] "" CLU
+ SG_ CF_Lkas_Daw_USM : 39|3@1+ (1,0) [0|7] "" CLU
BO_ 1338 TMU_GW_E_01: 8 CLU
SG_ CF_Gway_TeleReqDrLock : 0|2@1+ (1.0,0.0) [0.0|3.0] "" BCM
@@ -1035,6 +1042,7 @@ BO_ 1322 CLU15: 8 CLU
SG_ CF_Clu_HudFontSizeSet : 31|2@1+ (1.0,0.0) [0.0|3.0] "" HUD
SG_ CF_Clu_LanguageInfo : 33|5@1+ (1.0,0.0) [0.0|31.0] "" BCM,PGS
SG_ CF_Clu_ClusterSound : 38|1@1- (1.0,0.0) [0.0|0.0] "" BCM,CGW,FATC
+ SG_ CF_Clu_VehicleSpeed2 : 48|8@1+ (1,0) [0|255] "" XXX
BO_ 1066 _4WD13: 6 _4WD
SG_ _4WD_CURRENT : 0|8@1+ (0.390625,0.0) [-50.0|50.0] "A" TCU
@@ -1159,27 +1167,27 @@ BO_ 1314 GW_IPM_PE_1: 8 BCM
SG_ C_SMKTeleCrankingFailRes : 34|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
BO_ 1057 SCC12: 8 SCC
- SG_ CF_VSM_Prefill : 0|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ CF_VSM_DecCmdAct : 1|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ CF_VSM_HBACmd : 2|2@1+ (1.0,0.0) [0.0|3.0] "" ESC
- SG_ CF_VSM_Warn : 4|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,IAP
- SG_ CF_VSM_Stat : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,PSB
- SG_ CF_VSM_BeltCmd : 8|3@1+ (1.0,0.0) [0.0|7.0] "" ESC,PSB
- SG_ ACCFailInfo : 11|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,CUBIS,ESC,IBOX
- SG_ ACCMode : 13|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC,IBOX,TCU
- SG_ StopReq : 15|1@1+ (1.0,0.0) [0.0|1.0] "" EPB,ESC
- SG_ CR_VSM_DecCmd : 16|8@1+ (0.01,0.0) [0.0|2.55] "g" ESC
- SG_ aReqMax : 24|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,ESC,TCU
- SG_ TakeOverReq : 35|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,ESC,TCU
- SG_ PreFill : 36|1@1+ (1.0,0.0) [0.0|1.0] "" ESC,TCU
- SG_ aReqMin : 37|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" EMS,ESC,TCU
- SG_ CF_VSM_ConfMode : 48|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ AEB_Failinfo : 50|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ AEB_Status : 52|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ AEB_CmdAct : 54|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ AEB_StopReq : 55|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,ESC
- SG_ CR_VSM_Alive : 56|4@1+ (1.0,0.0) [0.0|15.0] "" ESC,PSB
- SG_ CR_VSM_ChkSum : 60|4@1+ (1.0,0.0) [0.0|15.0] "" ESC,PSB
+ SG_ CF_VSM_Prefill : 0|1@1+ (1,0) [0|1] "" ESC
+ SG_ CF_VSM_DecCmdAct : 1|1@1+ (1,0) [0|1] "" ESC
+ SG_ CF_VSM_HBACmd : 2|2@1+ (1,0) [0|3] "" ESC
+ SG_ CF_VSM_Warn : 4|2@1+ (1,0) [0|3] "" CLU,ESC,IAP
+ SG_ CF_VSM_Stat : 6|2@1+ (1,0) [0|3] "" CLU,ESC,PSB
+ SG_ CF_VSM_BeltCmd : 8|3@1+ (1,0) [0|7] "" ESC,PSB
+ SG_ ACCFailInfo : 11|2@1+ (1,0) [0|3] "" CLU,CUBIS,ESC,IBOX
+ SG_ ACCMode : 13|2@1+ (1,0) [0|3] "" CLU,ESC,IBOX,TCU
+ SG_ StopReq : 15|1@1+ (1,0) [0|1] "" EPB,ESC
+ SG_ CR_VSM_DecCmd : 16|8@1+ (0.01,0) [0|2.55] "g" ESC
+ SG_ TakeOverReq : 35|1@1+ (1,0) [0|1] "" CLU,ESC,TCU
+ SG_ PreFill : 36|1@1+ (1,0) [0|1] "" ESC,TCU
+ SG_ CF_VSM_ConfMode : 48|2@1+ (1,0) [0|3] "" CLU,ESC
+ SG_ AEB_Failinfo : 50|2@1+ (1,0) [0|3] "" CLU,ESC
+ SG_ AEB_Status : 52|2@1+ (1,0) [0|3] "" CLU,ESC
+ SG_ AEB_CmdAct : 54|1@1+ (1,0) [0|1] "" ESC
+ SG_ AEB_StopReq : 55|1@1+ (1,0) [0|1] "" CLU,ESC
+ SG_ CR_VSM_Alive : 56|4@1+ (1,0) [0|15] "" ESC,PSB
+ SG_ CR_VSM_ChkSum : 60|4@1+ (1,0) [0|15] "" ESC,PSB
+ SG_ aReqValue : 37|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" Vector__XXX
+ SG_ aReqRaw : 24|11@1+ (0.01,-10.23) [-10.23|10.24] "m/s^2" Vector__XXX
BO_ 1313 GW_DDM_PE: 8 BCM
SG_ C_DRVDoorStatus : 0|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
@@ -1188,23 +1196,23 @@ BO_ 1313 GW_DDM_PE: 8 BCM
SG_ C_RRDoorStatus : 6|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
SG_ C_TrunkStatus : 8|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
SG_ C_OSMirrorStatus : 10|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
-
+
BO_ 1056 SCC11: 8 SCC
- SG_ MainMode_ACC : 0|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,EMS,ESC
- SG_ SCCInfoDisplay : 1|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ESC
- SG_ AliveCounterACC : 4|4@1+ (1.0,0.0) [0.0|15.0] "" CLU,EMS,ESC,TCU
- SG_ VSetDis : 8|8@1+ (1.0,0.0) [0.0|255.0] "km/h or MPH" CLU,ESC,TCU
- SG_ ObjValid : 16|1@1+ (1.0,0.0) [0.0|1.0] "" CLU,ESC,TCU
- SG_ DriverAlertDisplay : 17|2@1+ (1.0,0.0) [0.0|3.0] "" CLU,ESC
- SG_ TauGapSet : 19|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ESC,TCU
- SG_ ACC_ObjStatus : 22|2@1+ (1.0,0.0) [0.0|3.0] "" ABS,ESC
- SG_ ACC_ObjLatPos : 24|9@1+ (0.1,-20.0) [-20.0|31.1] "m" ABS,ESC
- SG_ ACC_ObjDist : 33|11@1+ (0.1,0.0) [0.0|204.7] "m" ABS,ESC
- SG_ ACC_ObjRelSpd : 44|12@1+ (0.1,-170.0) [-170.0|239.5] "m/s" ABS,ESC
- SG_ Navi_SCC_Curve_Status : 56|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Navi_SCC_Curve_Act : 58|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Navi_SCC_Camera_Act : 60|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
- SG_ Navi_SCC_Camera_Status : 62|2@1+ (1.0,0.0) [0.0|3.0] "" CLU
+ SG_ MainMode_ACC : 0|1@1+ (1,0) [0|1] "" CLU,EMS,ESC
+ SG_ SCCInfoDisplay : 1|3@1+ (1,0) [0|7] "" CLU,ESC
+ SG_ AliveCounterACC : 4|4@1+ (1,0) [0|15] "" CLU,EMS,ESC,TCU
+ SG_ VSetDis : 8|8@1+ (1,0) [0|255] "km/h or MPH" CLU,ESC,TCU
+ SG_ ObjValid : 16|1@1+ (1,0) [0|1] "" CLU,ESC,TCU
+ SG_ DriverAlertDisplay : 17|2@1+ (1,0) [0|3] "" CLU,ESC
+ SG_ TauGapSet : 19|3@1+ (1,0) [0|7] "" CLU,ESC,TCU
+ SG_ Navi_SCC_Curve_Status : 56|2@1+ (1,0) [0|3] "" CLU
+ SG_ Navi_SCC_Curve_Act : 58|2@1+ (1,0) [0|3] "" CLU
+ SG_ Navi_SCC_Camera_Act : 60|2@1+ (1,0) [0|3] "" CLU
+ SG_ Navi_SCC_Camera_Status : 62|2@1+ (1,0) [0|3] "" CLU
+ SG_ ACC_ObjStatus : 22|2@1+ (1,0) [0|3] "" ABS,ESC
+ SG_ ACC_ObjLatPos : 24|9@1+ (0.1,-20) [-20|31.1] "m" ABS,ESC
+ SG_ ACC_ObjRelSpd : 44|12@1+ (0.1,-170) [-170|239.5] "m/s" ABS,ESC
+ SG_ ACC_ObjDist : 33|11@1+ (0.1,0) [0|204.7] "m" ABS,ESC
BO_ 1312 CGW3: 8 BCM
SG_ CR_Photosensor_LH : 0|8@1+ (78.125,0.0) [0.0|20000.0] "" DATC,DATC
@@ -1225,8 +1233,8 @@ BO_ 544 ESP12: 8 ESC
SG_ YAW_RATE : 40|13@1+ (0.01,-40.95) [-40.95|40.96] "" _4WD,AFLS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,SPAS,TCU
SG_ YAW_RATE_STAT : 53|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,AFLS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,SPAS,TCU
SG_ YAW_RATE_DIAG : 54|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,AFLS,IBOX,LCA,LDWS_LKAS,MDPS,PSB,SCC,SPAS,TCU
- SG_ ESP12_AliveCounter : 56|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
- SG_ ESP12_Checksum : 60|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
+ SG_ ESP12_Checksum : 56|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
+ SG_ ESP12_AliveCounter : 60|4@1+ (1.0,0.0) [0.0|15.0] "" _4WD,EMS,LPI,TCU,TMU
BO_ 1307 CLU16: 8 CLU
SG_ CF_Clu_TirePressUnitNValueSet : 0|3@1+ (1.0,0.0) [0.0|7.0] "" TPMS
@@ -1367,9 +1375,10 @@ BO_ 1292 CLU13: 8 CLU
SG_ CF_Clu_AliveCnt2 : 60|4@1+ (1.0,0.0) [0.0|15.0] "" EMS,LDWS_LKAS
BO_ 1290 SCC13: 8 SCC
- SG_ SCCDrvModeRValue : 0|3@1+ (1.0,0.0) [0.0|7.0] "" CLU
- SG_ SCC_Equip : 3|1@1+ (1.0,0.0) [0.0|1.0] "" ESC
- SG_ AebDrvSetStatus : 4|3@1+ (1.0,0.0) [0.0|7.0] "" CLU,ESC
+ SG_ SCCDrvModeRValue : 0|3@1+ (1,0) [0|7] "" CLU
+ SG_ SCC_Equip : 3|1@1+ (1,0) [0|1] "" ESC
+ SG_ AebDrvSetStatus : 4|3@1+ (1,0) [0|7] "" CLU,ESC
+ SG_ Lead_Veh_Dep_Alert_USM : 13|2@0+ (1,0) [0|3] "" XXX
BO_ 1287 TCS15: 4 ESC
SG_ ABS_W_LAMP : 0|1@1+ (1.0,0.0) [0.0|1.0] "" _4WD,CLU,CUBIS,IBOX
@@ -1421,3 +1430,206 @@ BO_ 512 EMS20: 6 EMS
SG_ FCO : 0|16@1+ (0.128,0.0) [0.0|8388.48] "ul" CLU,CUBIS,FPCM,IBOX
SG_ CF_Ems_PumpTPres : 16|8@1+ (3.137254902,0.0) [0.0|800.0] "kPa" FPCM,IBOX
SG_ Split_Stat : 32|1@1+ (1.0,0.0) [0.0|1.0] "" FPCM
+
+BO_ 909 FCA11: 8 FCA
+ SG_ CF_VSM_Prefill : 0|1@1+ (1,0) [0|1] "" ESC
+ SG_ CF_VSM_HBACmd : 1|2@1+ (1,0) [0|3] "" ESC
+ SG_ CF_VSM_Warn : 3|2@1+ (1,0) [0|3] "" ACU,CLU,ESC
+ SG_ CF_VSM_BeltCmd : 5|3@1+ (1,0) [0|7] "" ESC
+ SG_ CR_VSM_DecCmd : 8|8@1+ (0.01,0) [0|2.55] "g" ESC
+ SG_ FCA_Status : 18|2@1+ (1,0) [0|3] "" ACU,CLU,ESC
+ SG_ FCA_CmdAct : 20|1@1+ (1,0) [0|1] "" ESC
+ SG_ FCA_StopReq : 21|1@1+ (1,0) [0|1] "" CLU,ESC
+ SG_ FCA_DrvSetStatus : 22|3@1+ (1,0) [0|7] "" CLU,ESC
+ SG_ CF_VSM_DecCmdAct : 31|1@1+ (1,0) [0|1] "" ESC
+ SG_ FCA_Failinfo : 32|3@1+ (1,0) [0|7] "" ACU,CLU,ESC
+ SG_ FCA_RelativeVelocity : 39|9@1+ (0.1,-25.5) [-25.5|25.5] "m/s" iBAU
+ SG_ FCA_TimetoCollision : 48|8@1+ (10,0) [0|2540] "ms" iBAU
+ SG_ CR_FCA_Alive : 56|4@1+ (1,0) [0|15] "" ESC
+ SG_ CR_FCA_ChkSum : 60|4@1+ (1,0) [0|15] "" ESC
+ SG_ Supplemental_Counter : 35|4@1+ (1,0) [0|15] "" XXX
+ SG_ PAINT1_Status : 16|2@1+ (1,0) [0|1] "" XXX
+
+BO_ 1156 HDA11_MFC: 8 XXX
+ SG_ Counter : 5|4@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_1 : 1|2@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 16|2@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_5 : 18|14@1+ (1,0) [0|63] "" XXX
+ SG_ NEW_SIGNAL_6 : 33|2@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 34|14@1+ (1,0) [0|16383] "" XXX
+ SG_ NEW_SIGNAL_8 : 49|2@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_9 : 50|14@1- (1,-4095) [0|16383] "" XXX
+
+BO_ 1155 FCA12: 8 FCA
+ SG_ FCA_USM : 0|3@1+ (1,0) [0|7] "" CGW,CLU,ESC
+ SG_ FCA_DrvSetState : 3|3@1+ (1,0) [0|7] "" CGW
+
+BO_ 1186 FRT_RADAR11: 2 FCA
+ SG_ CF_FCA_Equip_Front_Radar : 0|3@1+ (1,0) [0|7] "" LDWS_LKAS,LDW_LKA,ESC
+
+BO_ 905 SCC14: 8 SCC
+ SG_ ComfortBandUpper : 0|6@1+ (0.0986,-4.14) [0|1.26] "m/s^2" ESC
+ SG_ ComfortBandLower : 6|6@1+ (0.0986,-4.14) [0|1.26] "m/s^2" ESC
+ SG_ JerkUpperLimit : 12|7@1+ (1,0) [0|12.7] "m/s^3" ESC
+ SG_ JerkLowerLimit : 19|7@1+ (0.1,0) [0|12.7] "m/s^3" ESC
+ SG_ ACCMode : 32|3@1+ (1,0) [0|7] "" CLU,HUD,LDWS_LKAS,ESC
+ SG_ ObjGap : 56|8@1+ (1,0) [0|255] "" CLU,HUD,ESC
+
+BO_ 1157 LFAHDA_MFC: 4 XXX
+ SG_ HDA_USM : 0|2@1+ (1,0) [0|3] "" XXX
+ SG_ ACTIVE2 : 4|2@0+ (1,0) [0|3] "" XXX
+ SG_ LFA_SysWarning : 16|2@1+ (1,0) [0|3] "" XXX
+ SG_ ACTIVE : 25|1@1+ (1,0) [0|3] "" XXX
+ SG_ LFA_USM : 28|2@1+ (1,0) [0|3] "" XXX
+
+BO_ 913 BCM_PO_11: 8 Vector__XXX
+ SG_ BCM_Door_Dri_Status : 5|1@0+ (1,0) [0|1] "" PT_ESC_ABS
+ SG_ BCM_Shift_R_MT_SW_Status : 39|2@0+ (1,0) [0|3] "" PT_ESC_ABS
+
+BO_ 1426 LABEL11: 8 XXX
+ SG_ CC_React : 34|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 910 WHL_SPD12_FS: 5 iBAU
+ SG_ CRC : 0|8@1+ (1,0) [0|0] "" Vector__XXX
+ SG_ WHL_SPD12_AliveCounter : 8|4@1+ (1,0) [0|15] "" Vector__XXX
+ SG_ WHL_SPD_FL : 12|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
+ SG_ WHL_SPD_FR : 26|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
+
+BO_ 911 WHL_SPD13_FS: 5 iBAU
+ SG_ CRC : 0|8@1+ (1,0) [0|0] "" Vector__XXX
+ SG_ WHL_SPD13_AliveCounter : 8|4@1+ (1,0) [0|15] "" Vector__XXX
+ SG_ WHL_SPD_RL : 12|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
+ SG_ WHL_SPD_RR : 26|14@1+ (0.03125,0) [0|511.96875] "km/h" Vector__XXX
+
+BO_ 865 ADAS_PRK_11: 8 ADAS_PRK
+ SG_ CF_PCA_BrkReq : 24|1@1+ (1,0) [0|0] "" Vector__XXX
+ SG_ CF_PCA_DclTrgtVal : 28|4@1+ (0.04,0) [0|0] "g" Vector__XXX
+ SG_ PCA_ALIVE_CNT : 40|4@1+ (1,0) [0|0] "" Vector__XXX
+ SG_ PCA_CHECK_SUM : 48|8@1+ (1,0) [0|0] "" Vector__XXX
+
+BO_ 882 ELECT_GEAR: 8 XXX
+ SG_ Elect_Gear_Shifter : 16|4@1+ (1,0) [0|7] "" CLU
+
+BO_ 881 E_EMS11: 8 XXX
+ SG_ Brake_Pedal_Pos : 0|8@1+ (1,0) [0|127] "" XXX
+ SG_ IG_Reactive_Stat : 8|3@1+ (1,0) [0|3] "" XXX
+ SG_ Gear_Change : 12|1@0+ (1,0) [0|31] "" XXX
+ SG_ Cruise_Limit_Status : 13|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Limit_Target : 23|8@1+ (1,0) [0|15] "" XXX
+ SG_ Accel_Pedal_Pos : 31|8@1+ (1,0) [0|7] "" XXX
+
+BO_ 1355 EV_PC6: 8 CGW
+ SG_ CF_Vcu_SbwWarnMsg : 16|3@1+ (1,0) [0|7] "" Vector__XXX
+
+BO_ 1430 EV_PC2: 8 CGW
+ SG_ CR_Ldc_ActVol_LS_V : 32|8@1+ (0.1,0) [0|0] "V" Vector__XXX
+
+BO_ 1535 EV_PC10: 8 CGW
+ SG_ CF_Vcu_EpbRequest : 37|1@1+ (1,0) [0|0] "" Vector__XXX
+
+BO_ 908 RSPA11: 8 RSPA
+ SG_ CF_RSPA_State : 0|4@1+ (1,0) [0|15] "" XXX
+ SG_ CF_RSPA_Act : 4|2@1+ (1,0) [0|3] "" XXX
+ SG_ CF_RSPA_DecCmd : 6|2@1+ (1,0) [0|3] "" XXX
+ SG_ CF_RSPA_Trgt_Spd : 8|10@1+ (0.01,0) [0|10.23] "km/h" XXX
+ SG_ CF_RSPA_StopReq : 18|1@1+ (1,0) [0|2] "" XXX
+ SG_ CR_RSPA_EPB_Req : 22|2@1+ (1,0) [0|3] "" XXX
+ SG_ CF_RSPA_ACC_ACT : 50|1@1+ (1,0) [0|2] "" XXX
+ SG_ CF_RSPA_AliveCounter : 52|4@1+ (1,0) [0|15] "" XXX
+ SG_ CF_RSPA_CRC : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 914 S_MDPS11: 8 XXX
+ SG_ CF_Mdps_Stat : 0|4@1+ (1,0) [0|15] "" XXX
+ SG_ CR_Mdps_DrvTq : 8|12@1+ (1,0) [0|15] "" XXX
+ SG_ CR_Mdps_StrAng : 24|16@1- (1,0) [0|65535] "" XXX
+ SG_ CF_Mdps_AliveCnt : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ CF_Mdps_Chksum : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 357 S_MDPS12: 8 XXX
+ SG_ NEW_SIGNAL_1 : 0|12@1+ (1,0) [0|4095] "" XXX
+ SG_ NEW_SIGNAL_2 : 12|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Counter : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ Checksum : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 352 AHB1: 8 iBAU
+ SG_ CF_Ahb_SLmp : 0|2@1+ (1,0) [0|3] "" CLU
+ SG_ CF_Ahb_Def : 2|2@1+ (1,0) [0|3] "" CGW
+ SG_ CF_Ahb_Act : 4|2@1+ (1,0) [0|3] "" Vector__XXX
+ SG_ CF_Ahb_Diag : 6|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ CF_Ahb_WLmp : 7|1@1+ (1,0) [0|1] "" CLU
+ SG_ CR_Ahb_StDep_mm : 8|16@1- (0.1,0) [-3276.8|3276.7] "mm" Vector__XXX
+ SG_ CF_Ahb_SnsFail : 24|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ CF_Ahb_PedalCalStat : 25|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ CF_Ahb_Bzzr : 26|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ CF_Ahb_ChkSum : 56|8@1+ (1,0) [0|255] "" Vector__XXX
+
+BO_ 1191 4a7MFC: 8 XXX
+ SG_ PAINT1 : 0|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1162 BCA11: 8 BCW
+ SG_ CF_BCA_State : 16|3@1+ (1,0) [0|7] "" CLU,iBAU
+ SG_ CF_BCA_Warning : 19|2@1+ (1,0) [0|3] "" CLU,iBAU
+ SG_ AliveCounter : 21|4@1+ (1,0) [0|15] "" CLU,iBAU
+ SG_ RCCA_Brake_Command : 29|1@1+ (1,0) [0|1] "" iBAU
+ SG_ Check_Sum : 56|8@1+ (1,0) [0|16] "" iBAU
+
+BO_ 1136 P_STS: 6 CGW
+ SG_ HCU1_STS : 6|2@1+ (1,0) [0|3] "" BCW,EPB,FCA,MDPS,SCC,iBAU
+ SG_ HCU5_STS : 8|2@1+ (1,0) [0|3] "" EPB,FCA,MDPS,iBAU
+
+BO_ 304 YRS11: 8 ACU
+ SG_ CR_Yrs_Yr : 0|16@1+ (0.005,-163.84) [-163.84|163.83] "deg/s" CGW,iBAU
+ SG_ CR_Yrs_LatAc : 16|16@1+ (0.000127465,-4.17677312) [-4.17677312|4.17651819] "g" iBAU
+ SG_ CF_Yrs_YrStat : 32|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CF_Yrs_LatAcStat : 36|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CF_Yrs_MCUStat : 40|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CR_Yrs_MsgCnt1 : 48|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CR_Yrs_Crc1 : 56|8@1+ (1,0) [0|255] "" iBAU
+
+BO_ 320 YRS12: 8 ACU
+ SG_ CF_Yrs_LongAcStat : 16|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CF_IMU_ResetStat : 20|4@1+ (1,0) [0|15] "" iBAU
+ SG_ YRS_Temp : 24|8@1+ (1,-68) [-68|187] "" iBAU
+ SG_ YRS_TempStat : 32|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CF_Yrs_Type : 36|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CR_Yrs_MsgCnt2 : 48|4@1+ (1,0) [0|15] "" iBAU
+ SG_ CR_Yrs_Crc2 : 56|8@1+ (1,0) [0|255] "" iBAU
+ SG_ CR_Yrs_LongAc : 0|16@1+ (0.000127465,-4.17677312) [-4.17677312|4.17651819] "g" CGW,iBAU
+
+BO_ 1173 YRS13: 8 ACU
+ SG_ YRS_SeralNo : 16|48@1+ (1,0) [0|281474976710655] "" iBAU
+
+BO_ 870 366_EMS: 8 EMS
+ SG_ N : 7|16@0+ (1,0.25) [0|16383.75] "rpm" XXX
+ SG_ EMS_Related : 23|16@0+ (1,0) [0|65535] "" XXX
+ SG_ TQFR : 39|8@0+ (0.390625,0) [0|99.6094] "%" XXX
+ SG_ VS : 40|8@1+ (1,0) [0|255] "km/h" MDPS
+ SG_ SWI_IGK : 48|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 854 356: 8 XXX
+ SG_ PAINT1 : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ PAINT2 : 34|2@0+ (1,0) [0|1] "" XXX
+ SG_ PAINT3 : 36|2@0+ (1,0) [0|3] "" XXX
+ SG_ PAINT4 : 38|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1042 ICM_412h: 8 ICM
+ SG_ T_Outside_input : 0|9@0+ (0.01,0) [0|5] "V" Vector__XXX
+ SG_ WarningSoundOutput_1Group : 5|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ WarningSoundOutput_2Group : 6|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ WarningSoundOutput_3Group : 7|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ TRIP_A_DT_Display_clock : 22|7@0+ (1,0) [0|99] "clock" Vector__XXX
+ SG_ TRIP_A_DT_Display_minute : 29|6@0+ (1,0) [0|59] "minute" Vector__XXX
+ SG_ TRIP_B_DT_Display_clock : 38|7@0+ (1,0) [0|99] "clock" Vector__XXX
+ SG_ TRIP_B_DT_Display_minute : 45|6@0+ (1,0) [0|59] "minute" Vector__XXX
+ SG_ PopupMessageOutput_1Level : 48|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_2Level : 49|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_3Level : 50|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_4Level : 51|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_5Level : 52|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_6Level : 53|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_7Level : 54|1@0+ (1,0) [0|1] "" Vector__XXX
+ SG_ PopupMessageOutput_8Level : 55|1@0+ (1,0) [0|1] "" Vector__XXX
+
+VAL_ 909 CF_VSM_Warn 2 "FCW" 3 "AEB";
diff --git a/opendbc/lexus_ct200h_2018_pt_generated.dbc b/opendbc/lexus_ct200h_2018_pt_generated.dbc
index 6e41a0218aa878..54c812780a77ee 100644
--- a/opendbc/lexus_ct200h_2018_pt_generated.dbc
+++ b/opendbc/lexus_ct200h_2018_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,23 +367,23 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "lexus_ct200h_2018_pt.dbc starts here"
+CM_ "lexus_ct200h_2018_pt.dbc starts here";
BO_ 548 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_PRESSURE : 43|12@0+ (1,0) [0|4047] "" XXX
+ SG_ BRAKE_PRESSED : 5|1@0+ (1,0) [0|1] "" XXX
BO_ 581 GAS_PEDAL: 5 XXX
SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
+ SG_ STEER_TORQUE_EPS : 47|16@0- (1,0) [-20000|20000] "" XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
@@ -381,4 +404,4 @@ VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
VAL_ 956 SPORT_ON 0 "off" 1 "on";
-VAL_ 956 ECON_ON 0 "off" 1 "on";
\ No newline at end of file
+VAL_ 956 ECON_ON 0 "off" 1 "on";
diff --git a/opendbc/lexus_gs300h_2017_pt_generated.dbc b/opendbc/lexus_gs300h_2017_pt_generated.dbc
deleted file mode 100644
index d6de0949376924..00000000000000
--- a/opendbc/lexus_gs300h_2017_pt_generated.dbc
+++ /dev/null
@@ -1,385 +0,0 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
-
-
-CM_ "Imported file _comma.dbc starts here"
-BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
-
- BO_ 512 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.159375,-151.111) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
-
- BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.159375,-75.555) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.159375,-151.111) [0|1] "" EON
- SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
-
- VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-
-
-CM_ "Imported file _toyota_2017.dbc starts here"
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX DSU HCU EPS IPAS CGW
-
-BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
- SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
-
-BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
- SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
- SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
- SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
-
-BO_ 166 BRAKE: 8 XXX
- SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 170 WHEEL_SPEEDS: 8 XXX
- SG_ WHEEL_SPEED_FR : 7|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_FL : 23|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_RR : 39|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_RL : 55|16@0+ (0.01,-67.67) [0|250] "kph" XXX
-
-BO_ 180 SPEED: 8 XXX
- SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
-
-BO_ 353 DSU_SPEED: 8 XXX
- SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
-
-BO_ 466 PCM_CRUISE: 8 XXX
- SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ STANDSTILL_ON : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
- SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CANCEL_REQ : 49|1@1+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 467 PCM_CRUISE_2: 8 XXX
- SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 552 ACCELEROMETER: 8 XXX
- SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
- SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
-
-BO_ 560 BRAKE_MODULE2: 7 XXX
- SG_ BRAKE_PRESSED : 26|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 614 STEERING_IPAS: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 643 PRE_COLLISION: 7 DSU
- SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ FORCE : 23|16@0- (2,0) [0|255] "N" XXX
- SG_ SET_ME_X002 : 33|8@0+ (1,0) [0|3] "" XXX
- SG_ BRAKE_STATUS : 39|3@0+ (1,0) [0|255] "" XXX
- SG_ STATE : 36|3@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X003 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ PRECOLLISION_ACTIVE : 41|1@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 740 STEERING_LKA: 5 XXX
- SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
- SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 742 LEAD_INFO: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
- SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
- SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
-
-BO_ 835 ACC_CONTROL: 8 DSU
- SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
- SG_ SET_ME_X01 : 23|2@0+ (1,0) [0|3] "" HCU
- SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
- SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
- SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 836 PRE_COLLISION_2: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 869 DSU_CRUISE : 7 DSU
- SG_ RES_BTN : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ SET_BTN : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CANCEL_BTN : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ MAIN_ON : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ SET_SPEED : 15|8@0+ (1,0) [0|0] "km/h" XXX
- SG_ CRUISE_REQUEST : 31|8@0+ (100,-12800) [0|0] "N" XXX
- SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|0] "m" XXX
-
-BO_ 921 PCM_CRUISE_SM: 8 XXX
- SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ DISTANCE_LINES : 14|2@0+ (1,0) [0|3] "" XXX
- SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 951 ESP_CONTROL: 8 ESP
- SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1041 ACC_HUD: 8 DSU
- SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X10 : 39|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X80 : 55|8@0+ (1,0) [0|1] "" XXX
-
-BO_ 1042 LKAS_HUD: 8 XXX
- SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X01 : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X01_2 : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ REPEATED_BEEPS : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X0C : 23|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X2C : 47|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
-
-BO_ 1408 VIN_PART_1: 8 CGW
- SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1409 VIN_PART_2: 8 CGW
- SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1410 VIN_PART_3: 8 CGW
- SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1553 UI_SEETING: 8 XXX
- SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1556 STEERING_LEVERS: 8 XXX
- SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1568 SEATS_DOORS: 8 XXX
- SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1570 LIGHT_STALK: 8 SCM
- SG_ AUTO_HIGH_BEAM : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1161 RSA1: 8 FCM
- SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "kph" XXX
- SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1162 RSA2: 8 FCM
- SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" XXX
- SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" XXX
- SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" XXX
- SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1163 RSA3: 8 FCM
- SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" XXX
- SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" XXX
- SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
- SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
-
-CM_ SG_ 36 ACCEL_Y "unit is tbd";
-CM_ SG_ 36 YAW_RATE "verify";
-CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
-CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
-CM_ SG_ 37 STEER_RATE "factor is tbd";
-CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
-CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
-CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
-CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
-CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
-CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
-CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
-CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
-CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
-CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
-CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
-CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
-CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
-CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
-CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
-CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
-CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1163 TSREQPD "always 1";
-CM_ SG_ 1163 TSRMSW "always 1";
-CM_ SG_ 1163 OTSGNNTM "always 3";
-CM_ SG_ 1163 NTLVLSPD "always 3";
-CM_ SG_ 1163 OVSPNTM "always 3";
-CM_ SG_ 1163 OVSPVALL "-5 at start then 2 after 2 seconds";
-CM_ SG_ 1163 OVSPVALM "-5 at start then 5 after 2 seconds";
-CM_ SG_ 1163 OVSPVALH "-5 at start then 10 after 2 seconds";
-CM_ SG_ 1163 TSRSPU "always 1";
-
-VAL_ 466 CRUISE_STATE 8 "active" 7 "standstill" 1 "off";
-VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok";
-VAL_ 614 STATE 3 "enabled" 1 "disabled";
-VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
-VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
-VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
-VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
-VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
-VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
-VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
-VAL_ 1553 UNITS 1 "km" 2 "miles";
-VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
-VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
-VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
-VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
-VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 129 "no entry";
-VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
-
-
-CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-
-CM_ "lexus_gs300h_2017_pt.dbc starts here"
-
-
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 1009 PCM_CRUISE_3: 8 XXX
- SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
- SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|15] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/lexus_is_2018_pt_generated.dbc b/opendbc/lexus_is_2018_pt_generated.dbc
index 10a0096f0b78dd..24aa111363f60d 100644
--- a/opendbc/lexus_is_2018_pt_generated.dbc
+++ b/opendbc/lexus_is_2018_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
+
-CM_ "Imported file _toyota_2017.dbc starts here"
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "lexus_is_2018_pt.dbc starts here"
+CM_ "lexus_is_2018_pt.dbc starts here";
@@ -353,15 +376,19 @@ BO_ 550 BRAKE_MODULE: 8 XXX
SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
+BO_ 581 GAS_PEDAL_ALT: 5 XXX
+ SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
+
BO_ 705 GAS_PEDAL: 8 XXX
SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.66,0) [-20000|20000] "" XXX
+ SG_ STEER_TORQUE_EPS : 47|16@0- (0.77,0) [-20000|20000] "" XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
@@ -377,6 +404,9 @@ BO_ 1009 PCM_CRUISE_ALT: 8 XXX
SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX
SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
+BO_ 1599 LIGHT_STALK_ISH: 8 SCM
+ SG_ AUTO_HIGH_BEAM : 19|1@0+ (1,0) [0|1] "" XXX
+
CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
diff --git a/opendbc/lexus_is_hybrid_2017_pt_generated.dbc b/opendbc/lexus_is_hybrid_2017_pt_generated.dbc
deleted file mode 100644
index 4444ec852d55a2..00000000000000
--- a/opendbc/lexus_is_hybrid_2017_pt_generated.dbc
+++ /dev/null
@@ -1,388 +0,0 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
-
-
-CM_ "Imported file _comma.dbc starts here"
-BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
-
- BO_ 512 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.159375,-151.111) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
-
- BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.159375,-75.555) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.159375,-151.111) [0|1] "" EON
- SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
- SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
-
- VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
-
-
-CM_ "Imported file _toyota_2017.dbc starts here"
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX DSU HCU EPS IPAS CGW
-
-BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
- SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
-
-BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
- SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
- SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
- SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
-
-BO_ 166 BRAKE: 8 XXX
- SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 170 WHEEL_SPEEDS: 8 XXX
- SG_ WHEEL_SPEED_FR : 7|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_FL : 23|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_RR : 39|16@0+ (0.01,-67.67) [0|250] "kph" XXX
- SG_ WHEEL_SPEED_RL : 55|16@0+ (0.01,-67.67) [0|250] "kph" XXX
-
-BO_ 180 SPEED: 8 XXX
- SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
-
-BO_ 353 DSU_SPEED: 8 XXX
- SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
-
-BO_ 466 PCM_CRUISE: 8 XXX
- SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ STANDSTILL_ON : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
- SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CANCEL_REQ : 49|1@1+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 467 PCM_CRUISE_2: 8 XXX
- SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 552 ACCELEROMETER: 8 XXX
- SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
- SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
-
-BO_ 560 BRAKE_MODULE2: 7 XXX
- SG_ BRAKE_PRESSED : 26|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 614 STEERING_IPAS: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 643 PRE_COLLISION: 7 DSU
- SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ FORCE : 23|16@0- (2,0) [0|255] "N" XXX
- SG_ SET_ME_X002 : 33|8@0+ (1,0) [0|3] "" XXX
- SG_ BRAKE_STATUS : 39|3@0+ (1,0) [0|255] "" XXX
- SG_ STATE : 36|3@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X003 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ PRECOLLISION_ACTIVE : 41|1@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 740 STEERING_LKA: 5 XXX
- SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
- SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 742 LEAD_INFO: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
- SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
- SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
-
-BO_ 835 ACC_CONTROL: 8 DSU
- SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
- SG_ SET_ME_X01 : 23|2@0+ (1,0) [0|3] "" HCU
- SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
- SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
- SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 836 PRE_COLLISION_2: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 869 DSU_CRUISE : 7 DSU
- SG_ RES_BTN : 3|1@0+ (1,0) [0|0] "" XXX
- SG_ SET_BTN : 2|1@0+ (1,0) [0|0] "" XXX
- SG_ CANCEL_BTN : 1|1@0+ (1,0) [0|0] "" XXX
- SG_ MAIN_ON : 0|1@0+ (1,0) [0|0] "" XXX
- SG_ SET_SPEED : 15|8@0+ (1,0) [0|0] "km/h" XXX
- SG_ CRUISE_REQUEST : 31|8@0+ (100,-12800) [0|0] "N" XXX
- SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|0] "m" XXX
-
-BO_ 921 PCM_CRUISE_SM: 8 XXX
- SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ DISTANCE_LINES : 14|2@0+ (1,0) [0|3] "" XXX
- SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 951 ESP_CONTROL: 8 ESP
- SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1041 ACC_HUD: 8 DSU
- SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X10 : 39|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X80 : 55|8@0+ (1,0) [0|1] "" XXX
-
-BO_ 1042 LKAS_HUD: 8 XXX
- SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X01 : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_X01_2 : 11|2@0+ (1,0) [0|3] "" XXX
- SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ REPEATED_BEEPS : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X0C : 23|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X2C : 47|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
-
-BO_ 1408 VIN_PART_1: 8 CGW
- SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1409 VIN_PART_2: 8 CGW
- SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1410 VIN_PART_3: 8 CGW
- SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-
-BO_ 1553 UI_SEETING: 8 XXX
- SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1556 STEERING_LEVERS: 8 XXX
- SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1568 SEATS_DOORS: 8 XXX
- SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1570 LIGHT_STALK: 8 SCM
- SG_ AUTO_HIGH_BEAM : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1161 RSA1: 8 FCM
- SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "kph" XXX
- SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" XXX
- SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1162 RSA2: 8 FCM
- SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" XXX
- SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" XXX
- SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" XXX
- SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" XXX
- SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" XXX
- SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" XXX
- SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" XXX
- SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" XXX
- SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" XXX
- SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" XXX
- SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" XXX
-
-BO_ 1163 RSA3: 8 FCM
- SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" XXX
- SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" XXX
- SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" XXX
- SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" XXX
- SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" XXX
- SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" XXX
- SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" XXX
- SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
- SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
-
-CM_ SG_ 36 ACCEL_Y "unit is tbd";
-CM_ SG_ 36 YAW_RATE "verify";
-CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
-CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
-CM_ SG_ 37 STEER_RATE "factor is tbd";
-CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
-CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
-CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
-CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
-CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
-CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
-CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
-CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
-CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
-CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
-CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
-CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
-CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
-CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
-CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
-CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
-CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1163 TSREQPD "always 1";
-CM_ SG_ 1163 TSRMSW "always 1";
-CM_ SG_ 1163 OTSGNNTM "always 3";
-CM_ SG_ 1163 NTLVLSPD "always 3";
-CM_ SG_ 1163 OVSPNTM "always 3";
-CM_ SG_ 1163 OVSPVALL "-5 at start then 2 after 2 seconds";
-CM_ SG_ 1163 OVSPVALM "-5 at start then 5 after 2 seconds";
-CM_ SG_ 1163 OVSPVALH "-5 at start then 10 after 2 seconds";
-CM_ SG_ 1163 TSRSPU "always 1";
-
-VAL_ 466 CRUISE_STATE 8 "active" 7 "standstill" 1 "off";
-VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok";
-VAL_ 614 STATE 3 "enabled" 1 "disabled";
-VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
-VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
-VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
-VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
-VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
-VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
-VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
-VAL_ 1553 UNITS 1 "km" 2 "miles";
-VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
-VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
-VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
-VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
-VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 129 "no entry";
-VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
-
-
-CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-
-CM_ "lexus_is_hybrid_2017_pt.dbc starts here"
-
-
-
-BO_ 581 GAS_PEDAL: 5 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.66,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
- SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 956 GEAR_PACKET: 8 XXX
- SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
-
-BO_ 1009 PCM_CRUISE_ISH: 8 XXX
- SG_ MAIN_ON : 13|1@0+ (1,0) [0|3] "" XXX
- SG_ CRUISE_STATE : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "mph" XXX
-
-BO_ 1599 LIGHT_STALK_ISH: 8 SCM
- SG_ AUTO_HIGH_BEAM : 19|1@0+ (1,0) [0|1] "" XXX
-
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
-CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
-VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
-VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
-VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
diff --git a/opendbc/lexus_nx300_2018_pt_generated.dbc b/opendbc/lexus_nx300_2018_pt_generated.dbc
new file mode 100644
index 00000000000000..824d301d00431c
--- /dev/null
+++ b/opendbc/lexus_nx300_2018_pt_generated.dbc
@@ -0,0 +1,409 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _comma.dbc starts here";
+BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
+ SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
+ SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+
+ BO_ 512 GAS_COMMAND: 6 EON
+ SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
+ SG_ GAS_COMMAND2 : 23|16@0+ (0.159375,-151.111) [0|1] "" INTERCEPTOR
+ SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
+
+ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
+ SG_ INTERCEPTOR_GAS : 7|16@0+ (0.159375,-75.555) [0|1] "" EON
+ SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.159375,-151.111) [0|1] "" EON
+ SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
+
+ VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
+
+
+CM_ "Imported file _toyota_2017.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX DSU HCU EPS IPAS CGW
+
+BO_ 36 KINEMATICS: 8 XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
+ SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
+
+BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
+ SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
+ SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
+ SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
+
+BO_ 166 BRAKE: 8 XXX
+ SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 170 WHEEL_SPEEDS: 8 XXX
+ SG_ WHEEL_SPEED_FR : 7|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+ SG_ WHEEL_SPEED_FL : 23|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+ SG_ WHEEL_SPEED_RR : 39|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+ SG_ WHEEL_SPEED_RL : 55|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+
+BO_ 180 SPEED: 8 XXX
+ SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 353 DSU_SPEED: 7 XXX
+ SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
+BO_ 466 PCM_CRUISE: 8 XXX
+ SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_ON : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
+ SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
+ SG_ CANCEL_REQ : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 467 PCM_CRUISE_2: 8 XXX
+ SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
+ SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 552 ACCELEROMETER: 8 XXX
+ SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
+ SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
+
+BO_ 560 BRAKE_MODULE2: 7 XXX
+ SG_ BRAKE_PRESSED : 26|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 614 STEERING_IPAS: 8 IPAS
+ SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
+ SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 643 PRE_COLLISION: 7 DSU
+ SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ FORCE : 23|16@0- (2,0) [0|255] "N" XXX
+ SG_ SET_ME_X002 : 33|8@0+ (1,0) [0|3] "" XXX
+ SG_ BRAKE_STATUS : 39|3@0+ (1,0) [0|255] "" XXX
+ SG_ STATE : 36|3@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X003 : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ PRECOLLISION_ACTIVE : 41|1@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 55|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 740 STEERING_LKA: 5 XXX
+ SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
+ SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
+ SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 742 LEAD_INFO: 8 DSU
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
+ SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
+ SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
+
+BO_ 835 ACC_CONTROL: 8 DSU
+ SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
+ SG_ SET_ME_X01 : 23|2@0+ (1,0) [0|3] "" HCU
+ SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
+ SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
+ SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
+
+BO_ 836 PRE_COLLISION_2: 8 DSU
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 869 DSU_CRUISE : 7 DSU
+ SG_ RES_BTN : 3|1@0+ (1,0) [0|0] "" XXX
+ SG_ SET_BTN : 2|1@0+ (1,0) [0|0] "" XXX
+ SG_ CANCEL_BTN : 1|1@0+ (1,0) [0|0] "" XXX
+ SG_ MAIN_ON : 0|1@0+ (1,0) [0|0] "" XXX
+ SG_ SET_SPEED : 15|8@0+ (1,0) [0|0] "km/h" XXX
+ SG_ CRUISE_REQUEST : 31|8@0+ (100,-12800) [0|0] "N" XXX
+ SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|0] "m" XXX
+
+BO_ 921 PCM_CRUISE_SM: 8 XXX
+ SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
+ SG_ DISTANCE_LINES : 14|2@0+ (1,0) [0|3] "" XXX
+ SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 951 ESP_CONTROL: 8 ESP
+ SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1041 ACC_HUD: 8 DSU
+ SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X10 : 39|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X80 : 55|8@0+ (1,0) [0|1] "" XXX
+
+BO_ 1042 LKAS_HUD: 8 XXX
+ SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
+ SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
+ SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X01 : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X01_2 : 11|2@0+ (1,0) [0|3] "" XXX
+ SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
+ SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ REPEATED_BEEPS : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X0C : 23|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X2C : 47|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
+BO_ 1408 VIN_PART_1: 8 CGW
+ SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 1409 VIN_PART_2: 8 CGW
+ SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 1410 VIN_PART_3: 8 CGW
+ SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 1553 UI_SETTING: 8 XXX
+ SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 1556 STEERING_LEVERS: 8 XXX
+ SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 1568 SEATS_DOORS: 8 XXX
+ SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1570 LIGHT_STALK: 8 SCM
+ SG_ AUTO_HIGH_BEAM : 37|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1161 RSA1: 8 FCM
+ SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" XXX
+ SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "kph" XXX
+ SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" XXX
+ SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" XXX
+ SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" XXX
+ SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" XXX
+ SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" XXX
+ SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" XXX
+ SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" XXX
+
+BO_ 1162 RSA2: 8 FCM
+ SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" XXX
+ SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" XXX
+ SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" XXX
+ SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" XXX
+ SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" XXX
+ SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" XXX
+ SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" XXX
+ SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" XXX
+ SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" XXX
+ SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" XXX
+
+BO_ 1163 RSA3: 8 FCM
+ SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" XXX
+ SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" XXX
+ SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" XXX
+ SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" XXX
+ SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" XXX
+ SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" XXX
+ SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" XXX
+ SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
+ SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
+
+CM_ SG_ 36 ACCEL_Y "unit is tbd";
+CM_ SG_ 36 YAW_RATE "verify";
+CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
+CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
+CM_ SG_ 37 STEER_RATE "factor is tbd";
+CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
+CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
+CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
+CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
+CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
+CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
+CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
+CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
+CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
+CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
+CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
+CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
+CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
+CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
+CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
+CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
+CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
+CM_ SG_ 1163 TSREQPD "always 1";
+CM_ SG_ 1163 TSRMSW "always 1";
+CM_ SG_ 1163 OTSGNNTM "always 3";
+CM_ SG_ 1163 NTLVLSPD "always 3";
+CM_ SG_ 1163 OVSPNTM "always 3";
+CM_ SG_ 1163 OVSPVALL "-5 at start then 2 after 2 seconds";
+CM_ SG_ 1163 OVSPVALM "-5 at start then 5 after 2 seconds";
+CM_ SG_ 1163 OVSPVALH "-5 at start then 10 after 2 seconds";
+CM_ SG_ 1163 TSRSPU "always 1";
+
+VAL_ 466 CRUISE_STATE 8 "active" 7 "standstill" 1 "off";
+VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok";
+VAL_ 614 STATE 3 "enabled" 1 "disabled";
+VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
+VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
+VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
+VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
+VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
+VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
+VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
+VAL_ 1553 UNITS 1 "km" 2 "miles";
+VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
+VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
+VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
+VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
+VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 129 "no entry";
+VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
+
+
+CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
+
+CM_ "lexus_nx300_2018_pt.dbc starts here";
+
+
+
+BO_ 550 BRAKE_MODULE: 8 XXX
+ SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
+ SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
+ SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 705 GAS_PEDAL: 8 XXX
+ SG_ GAS_RELEASED : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
+
+BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
+ SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
+ SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
+ SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
+
+BO_ 610 EPS_STATUS: 5 EPS
+ SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
+ SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
+ SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 956 GEAR_PACKET: 8 XXX
+ SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
+ SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
+CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
+CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
+CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
+VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
+VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
+VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
+VAL_ 956 SPORT_ON 0 "off" 1 "on";
+VAL_ 956 ECON_ON 0 "off" 1 "on";
diff --git a/opendbc/lexus_nx300h_2018_pt_generated.dbc b/opendbc/lexus_nx300h_2018_pt_generated.dbc
new file mode 100644
index 00000000000000..94e6818c81448e
--- /dev/null
+++ b/opendbc/lexus_nx300h_2018_pt_generated.dbc
@@ -0,0 +1,408 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _comma.dbc starts here";
+BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
+ SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
+ SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+
+ BO_ 512 GAS_COMMAND: 6 EON
+ SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
+ SG_ GAS_COMMAND2 : 23|16@0+ (0.159375,-151.111) [0|1] "" INTERCEPTOR
+ SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" INTERCEPTOR
+
+ BO_ 513 GAS_SENSOR: 6 INTERCEPTOR
+ SG_ INTERCEPTOR_GAS : 7|16@0+ (0.159375,-75.555) [0|1] "" EON
+ SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.159375,-151.111) [0|1] "" EON
+ SG_ STATE : 39|4@0+ (1,0) [0|15] "" EON
+ SG_ COUNTER_PEDAL : 35|4@0+ (1,0) [0|15] "" EON
+ SG_ CHECKSUM_PEDAL : 47|8@0+ (1,0) [0|255] "" EON
+
+ VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
+
+
+CM_ "Imported file _toyota_2017.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX DSU HCU EPS IPAS CGW
+
+BO_ 36 KINEMATICS: 8 XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
+ SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
+
+BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
+ SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
+ SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
+ SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
+
+BO_ 166 BRAKE: 8 XXX
+ SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 170 WHEEL_SPEEDS: 8 XXX
+ SG_ WHEEL_SPEED_FR : 7|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+ SG_ WHEEL_SPEED_FL : 23|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+ SG_ WHEEL_SPEED_RR : 39|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+ SG_ WHEEL_SPEED_RL : 55|16@0+ (0.01,-67.67) [0|250] "kph" XXX
+
+BO_ 180 SPEED: 8 XXX
+ SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 353 DSU_SPEED: 7 XXX
+ SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
+BO_ 466 PCM_CRUISE: 8 XXX
+ SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL_ON : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
+ SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
+ SG_ CANCEL_REQ : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 467 PCM_CRUISE_2: 8 XXX
+ SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
+ SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 552 ACCELEROMETER: 8 XXX
+ SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
+ SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
+
+BO_ 560 BRAKE_MODULE2: 7 XXX
+ SG_ BRAKE_PRESSED : 26|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 614 STEERING_IPAS: 8 IPAS
+ SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
+ SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 643 PRE_COLLISION: 7 DSU
+ SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ FORCE : 23|16@0- (2,0) [0|255] "N" XXX
+ SG_ SET_ME_X002 : 33|8@0+ (1,0) [0|3] "" XXX
+ SG_ BRAKE_STATUS : 39|3@0+ (1,0) [0|255] "" XXX
+ SG_ STATE : 36|3@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X003 : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ PRECOLLISION_ACTIVE : 41|1@0+ (1,0) [0|255] "" XXX
+ SG_ CHECKSUM : 55|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 740 STEERING_LKA: 5 XXX
+ SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
+ SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
+ SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 742 LEAD_INFO: 8 DSU
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
+ SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
+ SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
+
+BO_ 835 ACC_CONTROL: 8 DSU
+ SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
+ SG_ SET_ME_X01 : 23|2@0+ (1,0) [0|3] "" HCU
+ SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
+ SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
+ SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
+
+BO_ 836 PRE_COLLISION_2: 8 DSU
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 869 DSU_CRUISE : 7 DSU
+ SG_ RES_BTN : 3|1@0+ (1,0) [0|0] "" XXX
+ SG_ SET_BTN : 2|1@0+ (1,0) [0|0] "" XXX
+ SG_ CANCEL_BTN : 1|1@0+ (1,0) [0|0] "" XXX
+ SG_ MAIN_ON : 0|1@0+ (1,0) [0|0] "" XXX
+ SG_ SET_SPEED : 15|8@0+ (1,0) [0|0] "km/h" XXX
+ SG_ CRUISE_REQUEST : 31|8@0+ (100,-12800) [0|0] "N" XXX
+ SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|0] "m" XXX
+
+BO_ 921 PCM_CRUISE_SM: 8 XXX
+ SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
+ SG_ DISTANCE_LINES : 14|2@0+ (1,0) [0|3] "" XXX
+ SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 951 ESP_CONTROL: 8 ESP
+ SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1041 ACC_HUD: 8 DSU
+ SG_ FCW : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X20 : 15|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X10 : 39|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X80 : 55|8@0+ (1,0) [0|1] "" XXX
+
+BO_ 1042 LKAS_HUD: 8 XXX
+ SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
+ SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
+ SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X01 : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_X01_2 : 11|2@0+ (1,0) [0|3] "" XXX
+ SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
+ SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ REPEATED_BEEPS : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X0C : 23|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X2C : 47|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
+BO_ 1408 VIN_PART_1: 8 CGW
+ SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 1409 VIN_PART_2: 8 CGW
+ SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" XXX
+ SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 1410 VIN_PART_3: 8 CGW
+ SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
+
+BO_ 1553 UI_SETTING: 8 XXX
+ SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 1556 STEERING_LEVERS: 8 XXX
+ SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 1568 SEATS_DOORS: 8 XXX
+ SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1570 LIGHT_STALK: 8 SCM
+ SG_ AUTO_HIGH_BEAM : 37|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1161 RSA1: 8 FCM
+ SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" XXX
+ SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "kph" XXX
+ SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" XXX
+ SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" XXX
+ SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" XXX
+ SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" XXX
+ SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" XXX
+ SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" XXX
+ SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" XXX
+
+BO_ 1162 RSA2: 8 FCM
+ SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" XXX
+ SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" XXX
+ SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" XXX
+ SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" XXX
+ SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" XXX
+ SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" XXX
+ SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" XXX
+ SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" XXX
+ SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" XXX
+ SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" XXX
+ SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" XXX
+
+BO_ 1163 RSA3: 8 FCM
+ SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" XXX
+ SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" XXX
+ SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" XXX
+ SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" XXX
+ SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" XXX
+ SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" XXX
+ SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" XXX
+ SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" XXX
+ SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" XXX
+
+CM_ SG_ 36 ACCEL_Y "unit is tbd";
+CM_ SG_ 36 YAW_RATE "verify";
+CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
+CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
+CM_ SG_ 37 STEER_RATE "factor is tbd";
+CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
+CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
+CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
+CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
+CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
+CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
+CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
+CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
+CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
+CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
+CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
+CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
+CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
+CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
+CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
+CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
+CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
+CM_ SG_ 1163 TSREQPD "always 1";
+CM_ SG_ 1163 TSRMSW "always 1";
+CM_ SG_ 1163 OTSGNNTM "always 3";
+CM_ SG_ 1163 NTLVLSPD "always 3";
+CM_ SG_ 1163 OVSPNTM "always 3";
+CM_ SG_ 1163 OVSPVALL "-5 at start then 2 after 2 seconds";
+CM_ SG_ 1163 OVSPVALM "-5 at start then 5 after 2 seconds";
+CM_ SG_ 1163 OVSPVALH "-5 at start then 10 after 2 seconds";
+CM_ SG_ 1163 TSRSPU "always 1";
+
+VAL_ 466 CRUISE_STATE 8 "active" 7 "standstill" 1 "off";
+VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok";
+VAL_ 614 STATE 3 "enabled" 1 "disabled";
+VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left";
+VAL_ 643 STATE 0 "normal" 1 "adaptive_cruise_control" 3 "emergency_braking";
+VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
+VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none";
+VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none";
+VAL_ 1042 RIGHT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
+VAL_ 1042 LEFT_LINE 3 "orange" 2 "faded" 1 "solid" 0 "none";
+VAL_ 1553 UNITS 1 "km" 2 "miles";
+VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left";
+VAL_ 1161 TSGN1 1 "speed sign" 0 "none";
+VAL_ 1161 TSGN2 1 "speed sign" 0 "none";
+VAL_ 1161 SPLSGN2 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
+VAL_ 1162 TSGN3 0 "none" 1 "speed sign" 2 "0 unlimited" 7 "unlimited" 16 "highway" 17 "no highway" 18 "motorway" 19 "no motorway" 20 "in city" 21 "outside city" 22 "pedestrian area" 23 "no pedestrian area" 65 "no overtaking left" 66 "no overtaking right" 67 "overtaking allowed again" 129 "no entry";
+VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
+
+
+CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
+
+CM_ "lexus_nx300h_2018_pt.dbc starts here";
+
+
+
+BO_ 550 BRAKE_MODULE: 8 XXX
+ SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
+ SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
+ SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 581 GAS_PEDAL: 5 XXX
+ SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
+
+BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
+ SG_ STEER_TORQUE_EPS : 47|16@0- (0.73,0) [-20000|20000] "" XXX
+ SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
+ SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
+
+BO_ 610 EPS_STATUS: 5 EPS
+ SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
+ SG_ LKA_STATE : 31|7@0+ (1,0) [0|127] "" XXX
+ SG_ TYPE : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 956 GEAR_PACKET: 8 XXX
+ SG_ SPORT_ON : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ GEAR : 13|6@0+ (1,0) [0|63] "" XXX
+ SG_ ECON_ON : 40|1@0+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
+CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
+CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
+CM_ SG_ 610 TYPE "seems 1 on Corolla, 0 on all others";
+VAL_ 610 IPAS_STATE 5 "override" 3 "enabled" 1 "disabled";
+VAL_ 610 LKA_STATE 25 "temporary_fault" 9 "temporary_fault2" 5 "active" 1 "standby";
+VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
+VAL_ 956 SPORT_ON 0 "off" 1 "on";
+VAL_ 956 ECON_ON 0 "off" 1 "on";
diff --git a/opendbc/lexus_rx_350_2016_pt_generated.dbc b/opendbc/lexus_rx_350_2016_pt_generated.dbc
index b132c86dd3326a..58c21c5952da5e 100644
--- a/opendbc/lexus_rx_350_2016_pt_generated.dbc
+++ b/opendbc/lexus_rx_350_2016_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "lexus_rx_350_2016_pt.dbc starts here"
+CM_ "lexus_rx_350_2016_pt.dbc starts here";
@@ -358,6 +381,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/lexus_rx_hybrid_2017_pt_generated.dbc b/opendbc/lexus_rx_hybrid_2017_pt_generated.dbc
index e11ee65b61a8de..e8a358f460d079 100644
--- a/opendbc/lexus_rx_hybrid_2017_pt_generated.dbc
+++ b/opendbc/lexus_rx_hybrid_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "lexus_rx_hybrid_2017_pt.dbc starts here"
+CM_ "lexus_rx_hybrid_2017_pt.dbc starts here";
@@ -361,6 +384,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/mazda_2017.dbc b/opendbc/mazda_2017.dbc
new file mode 100644
index 00000000000000..e763f153cfb449
--- /dev/null
+++ b/opendbc/mazda_2017.dbc
@@ -0,0 +1,776 @@
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX
+
+
+BO_ 117 STEER_RELATED: 8 XXX
+ SG_ CTR : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 48|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_2 : 49|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_5 : 50|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 54|4@0+ (1,0) [0|31] "" XXX
+ SG_ NEW_SIGNAL_3 : 55|1@0+ (1,0) [0|63] "" XXX
+ SG_ STEER_ANGLE_2 : 39|16@0+ (0.1,-1800) [0|131071] "" XXX
+ SG_ STEER_TORQUE : 19|12@0+ (1,-2000) [0|255] "" XXX
+
+BO_ 118 RPM_RELATED: 8 XXX
+ SG_ CTR : 7|8@0+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_2 : 19|12@0+ (1,0) [0|4095] "" XXX
+
+BO_ 514 ENGINE_DATA: 8 XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|127] "" XXX
+ SG_ RPM : 7|16@0+ (0.25,0) [0|8500] "rpm" XXX
+ SG_ SPEED : 23|16@0+ (0.01,0) [0|32767] "kph" XXX
+ SG_ PEDAL_GAS : 39|12@0+ (1,0) [0|255] "%" XXX
+
+BO_ 357 PEDALS: 8 XXX
+ SG_ NEW_SIGNAL_6 : 31|4@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 8|3@1+ (1,0) [0|7] "" XXX
+ SG_ ACC_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACC_OFF : 2|1@1+ (1,0) [0|15] "" XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
+ SG_ STANDSTILL : 26|1@0+ (1,0) [0|16777215] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|3] "" XXX
+ SG_ BRAKE_ON : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ NO_BRAKE : 6|1@0+ (1,0) [0|7] "" XXX
+ SG_ BRAKE_ON_2 : 7|1@1+ (1,0) [0|255] "" XXX
+ SG_ NO_BRAKE_2 : 15|1@0+ (1,0) [0|7] "" XXX
+ SG_ GEAR : 48|5@1+ (1,0) [0|255] "" XXX
+
+BO_ 533 WHEEL_SPEEDS: 8 XXX
+ SG_ FL : 7|16@0+ (0.01,-100) [0|16383] "kph" XXX
+ SG_ FR : 23|16@0+ (0.01,-100) [0|65535] "kph" XXX
+ SG_ RL : 39|16@0+ (0.01,-100) [0|15] "kph" XXX
+ SG_ RR : 55|16@0+ (0.01,-100) [0|65535] "kph" XXX
+
+BO_ 134 STEER2: 8 XXX
+ SG_ CTR : 22|4@0+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_4 : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ CTR_2 : 28|3@1+ (1,0) [0|7] "" XXX
+ SG_ STEER_ANGLE_ROUGH : 26|11@0+ (1,-1000) [0|15] "" XXX
+ SG_ NEW_SIGNAL_5 : 18|3@0+ (1,0) [0|1] "" XXX
+ SG_ STEER_ANGLE : 7|16@0+ (0.1,-1600) [-500|500] "deg" XXX
+ SG_ NEW_SIGNAL_1 : 63|2@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|7] "" XXX
+
+BO_ 576 STEER_TORQUE: 8 XXX
+ SG_ NEW_SIGNAL_1 : 23|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ SENSOR1 : 39|8@0+ (1,-128) [0|127] "" XXX
+ SG_ STEER_TORQUE_MOTOR : 46|15@0- (0.1,0) [-3000|3000] "tbd" XXX
+ SG_ NEW_SIGNAL_2 : 62|4@0+ (1,0) [0|31] "" XXX
+ SG_ NEW_SIGNAL_4 : 15|8@0+ (1,0) [0|127] "" XXX
+ SG_ STEER_TORQUE_SENSOR : 7|8@0+ (1,-127) [-85|85] "" XXX
+
+BO_ 577 STEER_RATE: 8 XXX
+ SG_ STEER_ANGLE_RATE : 23|16@0+ (0.25,-8192) [0|1] "deg/s" XXX
+ SG_ CTR : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ LKAS_REQUEST : 3|12@0+ (1,-2048) [0|15] "" XXX
+ SG_ LKAS_EFFECTIVE : 39|12@0+ (1,-2048) [0|255] "" XXX
+ SG_ HANDS_OFF_5_SECONDS : 51|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_BLOCK : 50|1@1+ (1,0) [0|3] "" XXX
+ SG_ LKAS_TRACK_STATE : 52|1@0+ (1,0) [0|3] "" XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 582 CAM_LANEMAYBE: 8 XXX
+ SG_ NEW_SIGNAL_4 : 40|8@1+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_1 : 31|16@0- (1,0) [0|65535] "" XXX
+ SG_ NEW_SIGNAL_2 : 55|16@0+ (1,0) [0|65535] "" XXX
+ SG_ CTR : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|16@0+ (1,0) [0|65535] "" XXX
+
+BO_ 541 CAM_EMPTY: 8 XXX
+
+BO_ 605 CAM_PEDESTRIAN: 8 XXX
+ SG_ CTR : 17|4@0+ (1,0) [0|255] "" XXX
+ SG_ AEB_NOT_ENGAGED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ PED_WARNING : 9|1@0+ (1,0) [0|255] "" XXX
+ SG_ PED_BRAKE : 3|3@0+ (1,0) [0|7] "" XXX
+ SG_ RST_CTR : 23|6@0+ (1,0) [0|63] "" XXX
+ SG_ S1 : 29|4@0+ (1,0) [0|31] "" XXX
+ SG_ BRAKE_WARNING : 25|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 578 CAM_LANETRACK: 8 XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ZERO : 53|6@0+ (1,0) [0|63] "" XXX
+ SG_ CTR : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ LINE2 : 9|10@0+ (1,-686) [0|255] "" XXX
+ SG_ LANE_CURVE : 31|8@0+ (1,-127) [0|255] "" XXX
+ SG_ SIG1 : 39|8@0+ (1,-128) [0|255] "" XXX
+ SG_ SIG2 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ SIG3 : 55|2@0+ (1,0) [0|3] "" XXX
+ SG_ LINE1 : 3|10@0+ (1,-686) [0|1] "" XXX
+
+BO_ 579 CAM_LKAS: 8 XXX
+ SG_ CTR : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ ERR_BIT_1 : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
+ SG_ LINE_NOT_VISIBLE : 19|1@0+ (1,0) [0|1] "" XXX
+ SG_ BIT_1 : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ LDW : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_REQUEST : 3|12@0+ (1,-2048) [0|2048] "" XXX
+ SG_ ERR_BIT_2 : 30|1@0+ (1,0) [0|1] "" XXX
+ SG_ ANGLE_ENABLED : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ STEERING_ANGLE : 33|12@0+ (1,-2048) [-2048|2047] "" XXX
+
+BO_ 580 CAM_DISTANCE: 8 XXX
+ SG_ S1 : 0|8@1+ (1,0) [0|127] "" XXX
+ SG_ S2 : 15|8@0+ (1,0) [0|1] "" XXX
+ SG_ S3 : 16|8@1+ (1,0) [0|3] "" XXX
+ SG_ S4 : 24|8@1+ (1,0) [0|31] "" XXX
+ SG_ S5 : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ DISTANCE : 47|8@0+ (1,0) [0|65535] "" XXX
+ SG_ S6 : 55|16@0+ (1,0) [0|255] "" XXX
+
+BO_ 581 CAM_IDK3: 8 XXX
+ SG_ S1 : 0|8@1+ (1,0) [0|15] "" XXX
+ SG_ S2 : 8|6@1+ (1,0) [0|255] "" XXX
+ SG_ S3 : 15|2@0+ (1,0) [0|3] "" XXX
+ SG_ S4 : 16|8@1+ (1,0) [0|15] "" XXX
+ SG_ S5 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ S6 : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ S7 : 40|8@1+ (1,0) [0|3] "" XXX
+ SG_ S8 : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ S9 : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 863 CAM_TRAFFIC_SIGNS: 8 XXX
+ SG_ STOP_SIGN : 31|4@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 55|1@0+ (1,0) [0|127] "" XXX
+ SG_ FORWARD_COLLISION : 40|8@1+ (1,0) [0|7] "" XXX
+ SG_ SPEED_SIGN : 4|7@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_2 : 52|5@0+ (1,0) [0|31] "" XXX
+ SG_ NEW_SIGNAL_4 : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_1 : 13|2@0+ (1,0) [0|3] "" XXX
+ SG_ SPEED_SIGN_CAM : 32|1@0+ (1,0) [0|32767] "" XXX
+
+BO_ 1157 CAM_SETTINGS: 8 XXX
+ SG_ NEW_SIGNAL_2 : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ SBS_WARNING_DISTANCE : 25|2@0+ (1,0) [0|127] "" XXX
+ SG_ SBS_SCBC : 28|2@0+ (1,0) [0|7] "" XXX
+ SG_ LKAS_ASSIT_TIMING : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_SENSETIVITY : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ ILKAS_NTERVENTION_ON2 : 17|1@0+ (1,0) [0|255] "" XXX
+ SG_ LANEE_DEPARTURE_ALERT : 16|2@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_INERVENTION_ON1 : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_1 : 12|1@0+ (1,0) [0|7] "" XXX
+ SG_ WARNING : 11|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1160 CAM_Empty3: 8 XXX
+ SG_ NEW_SIGNAL_1 : 47|24@0+ (1,0) [0|16777215] "" XXX
+
+BO_ 1088 CAM_LANEINFO: 8 XXX
+ SG_ BIT3 : 62|1@0+ (1,0) [0|3] "" XXX
+ SG_ HANDS_ON_STEER_WARN_2 : 59|1@0+ (1,0) [0|1] "" XXX
+ SG_ HANDS_ON_STEER_WARN : 56|1@0+ (1,0) [0|3] "" XXX
+ SG_ S1_HBEAM : 54|1@0+ (1,0) [0|31] "" XXX
+ SG_ S1 : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ HANDS_WARN_3_BITS : 51|3@0+ (1,0) [0|7] "" XXX
+ SG_ ERR_BIT : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ NO_ERR_BIT : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ BIT2 : 13|1@0+ (1,0) [0|15] "" XXX
+ SG_ LANE_LINES : 10|3@0+ (1,0) [0|3] "" XXX
+ SG_ BIT1 : 6|1@0+ (1,0) [0|65535] "" XXX
+ SG_ LINE_NOT_VISIBLE : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ LINE_VISIBLE : 0|1@0+ (1,0) [0|3] "" XXX
+ SG_ LDW_WARN_RL : 58|1@0+ (1,0) [0|1] "" XXX
+ SG_ LDW_WARN_LL : 57|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1479 NEW_MSG_470: 8 XXX
+
+BO_ 1456 NEW_MSG_300: 8 XXX
+
+BO_ 1446 NEW_MSG_a600: 8 XXX
+
+BO_ 1416 MSG_18: 8 XXX
+
+BO_ 1086 DOORS: 8 XXX
+ SG_ LEFTGATE : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 53|1@0+ (1,0) [0|255] "" XXX
+ SG_ KEYFOB_HORN : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ KEYFOB_LOCK : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ KEYFOB_UNLOCK : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ CTR1 : 8|4@1+ (1,0) [0|3] "" XXX
+ SG_ CTR2 : 16|4@1+ (1,0) [0|15] "" XXX
+ SG_ BR : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ BL : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ FR : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ FL : 37|1@0+ (1,0) [0|255] "" XXX
+ SG_ DOORS_UNLOCKED : 30|1@0+ (1,0) [0|255] "" XXX
+
+BO_ 977 TWO_STATES: 8 XXX
+ SG_ NEW_SIGNAL_1 : 50|1@1+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_2 : 56|4@1+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_3 : 28|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 24|4@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_5 : 39|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_6 : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 47|8@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_8 : 51|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1085 MSG_12: 8 XXX
+ SG_ NEW_SIGNAL_3 : 36|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 16|8@1+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_2 : 48|8@1+ (1,0) [0|65535] "" XXX
+ SG_ NEW_SIGNAL_4 : 31|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 24|1@0+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_6 : 40|3@1+ (1,0) [0|7] "" XXX
+
+BO_ 159 MSG_11: 8 XXX
+ SG_ NEW_SIGNAL_1 : 50|4@1+ (1,0) [0|15] "" XXX
+ SG_ INCREASEING : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 1278 NEW_MSG_3: 8 XXX
+ SG_ NEW_SIGNAL_2 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ MILAGE_MAYBE : 7|16@0+ (1,0) [0|255] "" XXX
+
+BO_ 1277 NEW_MSG_10: 8 XXX
+ SG_ NEW_SIGNAL_3 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ counter : 7|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 1275 2017_5: 8 XXX
+ SG_ counter : 4|5@0+ (1,0) [0|255] "" XXX
+
+BO_ 1274 NEW_MSG_12: 8 XXX
+ SG_ NEW_SIGNAL_1 : 24|4@1+ (1,0) [0|15] "" XXX
+ SG_ CTR : 55|4@0+ (1,0) [0|63] "" XXX
+ SG_ NEW_SIGNAL_2 : 35|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 32|3@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_4 : 48|4@1+ (1,0) [0|7] "" XXX
+
+BO_ 1180 last_byte_roughRPM: 8 XXX
+ SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 1078 HVAC: 8 XXX
+ SG_ NEW_SIGNAL_1 : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_2 : 8|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|1@0+ (1,0) [0|65535] "" XXX
+ SG_ NEW_SIGNAL_4 : 56|5@0+ (1,0) [0|255] "" XXX
+
+BO_ 1056 CHECK_AND_TEMP: 8 XXX
+ SG_ NEW_SIGNAL_1 : 29|6@0+ (1,0) [0|255] "" XXX
+ SG_ counter_or_GEAR : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ STANDSTILL : 32|1@0+ (1,0) [0|255] "" XXX
+ SG_ COOLANT_TEMP : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ LOW_ENGINE_OIL_PRESSURE : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECK_FUEL_CAP : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHARGING_SYSTEM_MALFUNCTION : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ OUTDOOR_TEMP : 63|8@0+ (0.25,-63) [0|255] "cel" XXX
+
+BO_ 1045 TRACTION: 8 XXX
+ SG_ NEW_SIGNAL_2 : 20|1@0+ (1,0) [0|3] "" XXX
+ SG_ CTR2 : 19|4@0+ (1,0) [0|31] "" XXX
+ SG_ CTR3 : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ IS_MOVING : 12|1@0+ (1,0) [0|3] "" XXX
+ SG_ CTR1 : 53|6@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 54|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_WARNING : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ ABS_MALFUNCTION : 1|2@0+ (1,0) [0|3] "" XXX
+ SG_ DSC_OFF : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ TCS_DCS_MALFUNCTION : 6|2@0+ (1,0) [0|3] "" XXX
+ SG_ LOUD_BEEP : 28|1@0+ (1,0) [0|1] "" XXX
+ SG_ TPMS_WARNING_DOUBLE_BLINK : 31|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1034 MSG_07: 8 XXX
+ SG_ NEW_SIGNAL_1 : 6|3@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_2 : 0|4@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|4@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_4 : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_8 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_9 : 31|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 870 NEW_MSG_16: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 55|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 867 NEW_MSG_17: 8 XXX
+ SG_ NEW_SIGNAL_1 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 130 STEER: 8 XXX
+ SG_ NEW_SIGNAL_5 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 47|4@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 23|16@0+ (0.05,-1600) [500|-500] "deg" XXX
+ SG_ CHKSUM_MAYBE : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 120 BRAKE: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ BRAKE_PRESSURE : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 304 GEAR_RELATED: 8 XXX
+ SG_ NEW_SIGNAL_1 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 865 NEW_MSG_5: 8 XXX
+ SG_ SPEED_INVERSE : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 47|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ IS_MOVING : 43|3@0+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_2 : 46|1@0+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_4 : 44|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_8 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_10 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 15|3@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 56|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 836 NEW_MSG_19: 8 XXX
+ SG_ CTR : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ CTR2 : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 832 SEATBELT: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ PASSENGER_SEATBELT : 26|1@1+ (1,0) [0|7] "" XXX
+ SG_ CTR1 : 15|4@0+ (1,0) [0|15] "" XXX
+ SG_ CTR2 : 23|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 8|4@1+ (1,0) [0|3] "" XXX
+ SG_ DRIVER_SEATBELT : 27|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 866 NEW_MSG_21: 8 XXX
+ SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|131071] "" XXX
+ SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 27|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 158 MSG_05: 8 XXX
+ SG_ NEW_SIGNAL_1 : 23|8@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 157 CRZ_BTNS: 8 XXX
+ SG_ BIT1 : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ BIT2 : 18|1@0+ (1,0) [0|1] "" XXX
+ SG_ BIT3 : 20|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_P_INV : 21|1@0+ (1,0) [0|1] "" XXX
+ SG_ CAN_OFF_INV : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ CAN_OFF : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_M_INV : 22|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_M : 5|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_P : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ RES_INV : 19|1@0+ (1,0) [0|1] "" XXX
+ SG_ RES : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ DISTANCE_LESS : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ DISTANCE_LESS_INV : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ DISTANCE_MORE : 6|1@0+ (1,0) [0|1] "" XXX
+ SG_ DISTANCE_MORE_INV : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ MODE_Y : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ MODE_X : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ MODE_Y_INV : 30|1@0+ (1,0) [0|1] "" XXX
+ SG_ MODE_X_INV : 31|1@0+ (1,0) [0|1] "" XXX
+ SG_ CTR : 29|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 154 BLINK_INFO: 8 XXX
+ SG_ LEFT_BLINK : 18|1@1+ (1,0) [0|3] "" XXX
+ SG_ RIGHT_BLINK : 19|1@0+ (1,0) [0|255] "" XXX
+ SG_ REAR_WIPER_ON : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ WIPER_LO : 33|1@1+ (1,0) [0|31] "" XXX
+ SG_ WIPER_HI : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ LOW_BEAMS : 5|2@0+ (1,0) [0|3] "" XXX
+ SG_ HIGH_BEAMS : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ LBEAM1 : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ LBEAM2 : 50|1@0+ (1,0) [0|1] "" XXX
+ SG_ LBEAM3 : 60|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 145 TURN_SWITCH: 8 XXX
+ SG_ HAZARD : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ TURN_RIGHT_SWITCH : 12|1@0+ (1,0) [0|3] "" XXX
+ SG_ TURN_LEFT_SWITCH : 13|1@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 27|4@0+ (1,0) [0|255] "" XXX
+ SG_ CHKSUM : 39|8@0+ (1,0) [0|15] "" XXX
+
+BO_ 80 MSG_04: 8 XXX
+ SG_ NEW_SIGNAL_1 : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIGNAL : 24|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 978 MSG_03: 8 XXX
+ SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_8 : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 1|2@0+ (1,0) [0|255] "" XXX
+
+BO_ 607 NEW_MSG_25: 8 XXX
+
+BO_ 1115 MSG_02: 8 XXX
+ SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 47|16@0+ (1,0) [0|65535] "" XXX
+ SG_ NEW_SIGNAL_3 : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 2|3@0+ (1,0) [0|255] "" XXX
+
+BO_ 1067 NEW_MSG_27: 8 XXX
+ SG_ NEW_SIGNAL_2 : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_1 : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_5 : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_6 : 11|1@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_7 : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_8 : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_9 : 8|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 358 NEW_MSG_28: 8 XXX
+
+BO_ 608 NEW_MSG_29: 8 XXX
+ SG_ NEW_SIGNAL_1 : 8|5@1+ (1,0) [0|7] "" XXX
+
+BO_ 606 SPEED_TBD: 8 XXX
+ SG_ SPEED_TBD : 7|12@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 23|12@0- (1,0) [0|65535] "" XXX
+
+BO_ 552 GEAR: 8 XXX
+ SG_ NEW_SIGNAL_3 : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_5 : 26|3@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 31|5@0+ (1,0) [0|31] "" XXX
+ SG_ NEW_SIGNAL_7 : 39|1@0+ (1,0) [0|255] "" XXX
+ SG_ MORE_GEAR : 7|4@0+ (1,0) [0|15] "" XXX
+ SG_ GEAR : 2|3@0+ (1,0) [0|7] "" XXX
+ SG_ GEAR_BOX : 36|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 543 CRZ_EVENTS: 8 XXX
+ SG_ NEW_SIGNAL_3 : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_1 : 55|4@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_5 : 47|4@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_6 : 6|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_8 : 0|1@0+ (1,0) [0|31] "" XXX
+ SG_ NEW_SIGNAL_9 : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_10 : 2|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_12 : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_13 : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_18 : 12|1@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_19 : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_20 : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_21 : 23|1@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_24 : 31|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL_PRESSED : 32|1@0+ (1,0) [0|255] "" XXX
+ SG_ CRZ_STARTED : 18|1@0+ (1,0) [0|1] "" XXX
+ SG_ PLUS_ONE_CRZ : 17|1@0+ (1,0) [0|255] "" XXX
+ SG_ PLUS_ONE_CRZ_2 : 19|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_MAYBE : 22|1@0+ (1,0) [0|1] "" XXX
+ SG_ NONACC_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_ACTIVE_CAR_MOVING : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ NONACC_RELATED : 11|1@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ CAS_CMD_MAYBE : 30|7@0- (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 43|4@0+ (1,0) [0|255] "" XXX
+
+BO_ 542 NEW_MSG_33: 8 XXX
+ SG_ CTR : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ CTR2 : 56|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 868 NEW_MSG_34: 8 XXX
+ SG_ CTR : 59|4@0+ (1,0) [0|255] "" XXX
+
+BO_ 869 NEW_MSG_35: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 39|16@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 55|2@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 50|4@1+ (1,0) [0|15] "" XXX
+ SG_ CTR : 59|4@0+ (1,0) [0|255] "" XXX
+
+BO_ 1114 NEW_MSG_4: 8 XXX
+
+BO_ 535 CURVE_CTRS: 8 XXX
+ SG_ CTR_A_1 : 4|3@0+ (1,0) [0|31] "" XXX
+ SG_ CTR_A_2 : 7|3@0+ (1,0) [0|255] "" XXX
+ SG_ CTR_B_1 : 12|3@0+ (1,0) [0|7] "" XXX
+ SG_ CTR_B_2 : 15|3@0+ (1,0) [0|7] "" XXX
+ SG_ CTR_C_1 : 20|3@0+ (1,0) [0|7] "" XXX
+ SG_ CTR_C_2 : 23|3@0+ (1,0) [0|255] "" XXX
+ SG_ CTR_D_2 : 31|3@0+ (1,0) [0|7] "" XXX
+ SG_ CTR_D_1 : 28|3@0+ (1,0) [0|7] "" XXX
+ SG_ SPEED : 39|16@0+ (0.01,0) [0|7] "kph" XXX
+ SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ CHK_MAYBE : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_2 : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_6 : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_8 : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ SEATBELT_MAYBE : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ NO_SEATBELT_MAYBE : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 9|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 540 CRZ_CTRL: 8 XXX
+ SG_ NEW_SIGNAL_3 : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 8|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_6 : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 18|3@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_9 : 31|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_10 : 30|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACC_GAS_MAYBE : 23|1@0+ (1,0) [0|31] "" XXX
+ SG_ ACC_GAS_MAYBE2 : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ CRZ_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ HANDS_OFF_STEERING : 48|1@0+ (1,0) [0|1] "" XXX
+ SG_ HANDS_ON_STEER_WARN : 59|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_2 : 45|3@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_8 : 0|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 539 CRZ_INFO: 8 XXX
+ SG_ NEW_SIGNAL_1 : 17|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_5 : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_7 : 47|1@0+ (1,0) [0|255] "" XXX
+ SG_ CTR1 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 37|1@0+ (1,0) [0|255] "" XXX
+ SG_ ACC_ACTIVE : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACCEL_CMD : 31|10@0- (1,0) [0|1] "" XXX
+ SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 121 EPB: 8 XXX
+ SG_ NEW_SIGNAL_1 : 4|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 25|2@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_8 : 41|2@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_9 : 47|1@0+ (1,0) [0|63] "" XXX
+ SG_ NEW_SIGNAL_10 : 46|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_11 : 45|1@0+ (1,0) [0|1] "" XXX
+ SG_ EPB_ACTIVE : 29|1@0+ (1,0) [0|15] "" XXX
+
+BO_ 1070 2017_1: 8 XXX
+
+BO_ 1183 2017_2: 8 XXX
+
+BO_ 1243 2017_3: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|64@0+ (1,0) [0|18446744073709552000] "" XXX
+
+BO_ 1269 MSG_2017_4: 8 XXX
+ SG_ NEW_SIGNAL_1 : 55|16@0+ (1,0) [0|18446744073709552000] "" XXX
+
+BO_ 1178 2017_6: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|64@0+ (1,0) [0|18446744073709552000] "" XXX
+
+BO_ 1179 2017_7: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|64@0+ (1,0) [0|18446744073709552000] "" XXX
+
+BO_ 1435 2017_8: 8 XXX
+
+BO_ 253 GAS: 8 XXX
+ SG_ NEW_SIGNAL_1 : 16|1@0+ (1,0) [0|65535] "" XXX
+ SG_ CTR : 23|4@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_2 : 41|1@0+ (1,0) [0|255] "" XXX
+ SG_ CRZ_NOT_ACTIVE : 61|1@0+ (1,0) [0|255] "" XXX
+ SG_ GAS_CMD : 55|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 359 MORE_GAS: 8 XXX
+ SG_ NEW_SIGNAL_1 : 15|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ CTR : 31|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 36|5@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 38|1@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_5 : 37|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_6 : 47|4@0+ (1,0) [0|255] "" XXX
+
+BO_ 512 NEW_MSG_30: 8 XXX
+ SG_ NEW_SIGNAL_1 : 6|7@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 23|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 22|7@0+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_6 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_7 : 39|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_8 : 38|7@0+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_9 : 40|4@1+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_10 : 47|4@0+ (1,0) [0|15] "" XXX
+ SG_ CTR : 51|3@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_11 : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 515 MSG_01: 8 XXX
+ SG_ CTR : 39|4@0+ (1,0) [0|65535] "" XXX
+ SG_ CHKSUM : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ START1 : 6|1@0+ (1,0) [0|1] "" XXX
+ SG_ START2 : 28|5@0+ (1,0) [0|255] "" XXX
+
+BO_ 529 NEW_MSG_36: 8 XXX
+ SG_ NEW_SIGNAL_1 : 22|5@0+ (1,0) [0|65535] "" XXX
+ SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_3 : 32|4@1+ (1,0) [0|3] "" XXX
+ SG_ CTR : 39|4@0+ (1,0) [0|255] "" XXX
+ SG_ CTR_2 : 47|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 40|4@1+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_5 : 53|1@0+ (1,0) [0|255] "" XXX
+
+BO_ 1242 NEW_MSG_37: 8 XXX
+
+BO_ 1266 MSG_09: 8 XXX
+ SG_ NEW_SIGNAL_1 : 20|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 19|4@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 31|1@0+ (1,0) [0|255] "" XXX
+
+BO_ 976 MSG_15: 8 XXX
+ SG_ NEW_SIGNAL_1 : 55|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 61|6@0+ (1,0) [0|1] "" XXX
+
+BO_ 155 MSG_14: 8 XXX
+
+BO_ 1267 MSG_10: 8 XXX
+ SG_ NEW_SIGNAL_1 : 40|1@0+ (1,0) [0|16777215] "" XXX
+ SG_ NEW_SIGNAL_2 : 42|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 305 NEW_MSG_6: 8 XXX
+ SG_ NEW_SIGNAL_1 : 8|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 10|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1238 TEMPERATURE: 8 XXX
+ SG_ TEMPERATURE_MAYBE : 47|8@0+ (1,0) [0|4294967295] "" XXX
+
+BO_ 1087 NEW_MSG_1: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 1143 BSM: 8 XXX
+ SG_ BSM_OFF : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BS_3 : 37|1@0+ (1,0) [0|1] "" XXX
+ SG_ STANDSTILL : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BS1 : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BS3 : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BS4 : 39|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BS_SIDE : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ IS_MOVING : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BS_BEHIND : 46|2@1+ (1,0) [0|16777215] "" XXX
+ SG_ RIGHT_BS1 : 14|1@0+ (1,0) [0|63] "" XXX
+ SG_ RIGHT_BS_DISTANCE : 35|3@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_1 : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ REAR_CT_ALERT : 23|5@0+ (1,0) [0|63] "" XXX
+
+BO_ 1361 KEY_POSITION: 8 XXX
+
+BO_ 1283 KEY_POSITION2: 8 XXX
+
+BO_ 628 MSG_06: 8 XXX
+
+BO_ 1154 MSG_08: 8 XXX
+
+BO_ 1139 MSG_13: 8 XXX
+
+BO_ 1270 MSG_16: 8 XXX
+
+BO_ 1272 MSG_17: 8 XXX
+
+BO_ 1425 MSG_19: 8 XXX
+
+BO_ 70 MOB1: 8 XXX
+ SG_ NEW_SIGNAL_1 : 1|3@1+ (1,0) [0|15] "" XXX
+ SG_ NEW_SIGNAL_2 : 14|6@0+ (1,0) [0|127] "" XXX
+ SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 30|6@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 38|6@0+ (1,0) [0|7] "" XXX
+
+BO_ 64 MOB2: 8 XXX
+ SG_ NEW_SIGNAL_1 : 7|2@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_2 : 10|3@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_3 : 16|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_4 : 24|1@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_5 : 35|4@0+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_6 : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_7 : 13|3@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_8 : 15|2@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_9 : 19|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_10 : 31|6@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_11 : 37|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1171 MOB3: 8 XXX
+
+BO_ 1248 MOB4: 8 XXX
+
+
+
+
+CM_ SG_ 357 GEAR "13P, 26R, 13N, 24D";
+CM_ SG_ 605 PED_BRAKE "3: no brake, 4: brake";
+CM_ SG_ 605 BRAKE_WARNING "Flashing brake warning and audible alert for potential forward collision";
+CM_ SG_ 579 STEERING_ANGLE "steering angle aligns with 0.022 factor and -45.06 offset";
+CM_ SG_ 863 SPEED_SIGN "speed limit in MPH";
+CM_ SG_ 863 SPEED_SIGN_CAM "1: The speed limit is recognized by the camera. 0: speed limit is map based or is not available";
+CM_ SG_ 1157 SBS_WARNING_DISTANCE "1 far, 2 mid, 3 near";
+CM_ SG_ 1157 SBS_SCBC "1 off, 2 on";
+CM_ SG_ 1157 LKAS_ASSIT_TIMING "1 at, 0 before";
+CM_ SG_ 1157 LKAS_SENSETIVITY "0 low, 1 high";
+CM_ SG_ 1157 LANEE_DEPARTURE_ALERT "1 off, 2 on";
+CM_ SG_ 1157 WARNING "1 Rare, 0 often";
+CM_ SG_ 1088 LANE_LINES "0 LKAS disabled, 1 no lines, 2 two lines, 3 left line, 4 right line";
+CM_ SG_ 1045 ABS_MALFUNCTION "off: 0, solid: 1, slow blink: 2, fast blink: 3";
+CM_ SG_ 157 CAN_OFF "Disengage Cruise if enabled, if already disabled TURN it OFF ";
+CM_ SG_ 552 MORE_GEAR "";
+CM_ SG_ 552 GEAR "0 Shifting, 1 P, 2 R, 3 N, 4 D";
+CM_ SG_ 552 GEAR_BOX "0 P, 14 R, 1 though 6 D for speeds, 15 Shift";
+CM_ SG_ 540 HANDS_ON_STEER_WARN "0 no warning, b warning";
+CM_ SG_ 1143 REAR_CT_ALERT "Rear Cross Traffic Alert";
+VAL_ 552 GEAR 1 "P" 2 "R" 3 "N" 4 "D";
diff --git a/opendbc/mazda_cx5_gt_2017.dbc b/opendbc/mazda_cx5_gt_2017.dbc
deleted file mode 100644
index 3926e2dfb7a456..00000000000000
--- a/opendbc/mazda_cx5_gt_2017.dbc
+++ /dev/null
@@ -1,694 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 117 STEER_RELATED: 8 XXX
- SG_ CTR : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 48|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_2 : 49|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 55|1@0+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_4 : 54|4@0+ (1,0) [0|31] "" XXX
- SG_ NEW_SIGNAL_5 : 50|1@0+ (1,0) [0|1] "" XXX
- SG_ STEER_TORQUE : 19|12@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE_2 : 39|16@0+ (1,0) [0|131071] "" XXX
-
-BO_ 118 RPM_RELATED: 8 XXX
- SG_ CTR : 7|8@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_2 : 19|12@0+ (1,0) [0|4095] "" XXX
-
-BO_ 514 ENGINE_DATA: 8 XXX
- SG_ RPM : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ CHKSUM : 56|8@1+ (1,0) [0|127] "" XXX
- SG_ SPEED : 23|16@0+ (0.01,0) [0|32767] "KPH" XXX
- SG_ PEDAL_GAS : 39|12@0+ (1,0) [0|255] "" XXX
-
-BO_ 357 PEDALS: 8 XXX
- SG_ NEW_SIGNAL_6 : 31|4@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 8|3@1+ (1,0) [0|7] "" XXX
- SG_ ACC_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_OFF : 2|1@1+ (1,0) [0|15] "" XXX
- SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
- SG_ STANDSTILL : 26|1@0+ (1,0) [0|16777215] "" XXX
- SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|3] "" XXX
- SG_ GEAR : 48|5@1+ (1,0) [0|255] "" XXX
- SG_ BRAKE_ON : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ NO_BRAKE : 6|1@0+ (1,0) [0|7] "" XXX
- SG_ BRAKE_ON_2 : 7|1@1+ (1,0) [0|255] "" XXX
- SG_ NO_BRAKE_2 : 15|1@0+ (1,0) [0|7] "" XXX
-
-BO_ 533 WHEEL_SPEEDS: 8 XXX
- SG_ FL : 7|16@0+ (0.01,-100) [0|16383] "" XXX
- SG_ RL : 39|16@0+ (0.01,-100) [0|15] "" XXX
- SG_ RR : 55|16@0+ (0.01,-100) [0|65535] "" XXX
- SG_ FR : 23|16@0+ (0.01,-100) [0|65535] "" XXX
-
-BO_ 134 STEER2: 8 XXX
- SG_ NEW_SIGNAL_2 : 48|3@1+ (1,0) [0|7] "" XXX
- SG_ CTR : 22|4@0+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_4 : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_5 : 18|3@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 24|3@1+ (1,0) [0|7] "" XXX
- SG_ CTR_2 : 28|3@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_1 : 63|2@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 7|16@0+ (0.1,-1600) [-500|500] "deg" XXX
- SG_ STEER_ANGLE_ROUGH : 39|8@0- (1,0) [0|15] "" XXX
-
-BO_ 576 STEER_TORQUE: 8 XXX
- SG_ NEW_SIGNAL_2 : 39|8@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_1 : 20|4@1+ (1,0) [0|255] "" XXX
- SG_ STEER_TORQUE_SENSOR : 7|16@0+ (0.5,-15000) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 47|1@0+ (1,0) [0|1] "" XXX
- SG_ STEER_TORQUE_MOTOR : 46|20@0- (0.01,0) [-3000|3000] "deg/s" XXX
-
-BO_ 577 STEER_RATE: 8 XXX
- SG_ STEER_ANGLE_RATE : 23|16@0+ (0.25,-8192) [0|1] "deg/s" XXX
- SG_ CTR : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ LKAS_REQUEST : 3|12@0+ (1,-2048) [0|15] "" XXX
- SG_ LKAS_EFFECTIVE : 39|12@0+ (1,-2048) [0|255] "" XXX
- SG_ HANDS_OFF_5_SECONDS : 51|1@0+ (1,0) [0|1] "" XXX
- SG_ LKAS_BLOCK : 50|1@1+ (1,0) [0|3] "" XXX
- SG_ LKAS_TRACK_STATE : 52|1@0+ (1,0) [0|3] "" XXX
- SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 582 CAM_LANEMAYBE: 8 XXX
- SG_ NEW_SIGNAL_4 : 40|8@1+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_1 : 31|16@0- (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_2 : 55|16@0+ (1,0) [0|65535] "" XXX
- SG_ CTR : 7|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 541 CAM_EMPTY: 8 XXX
-
-BO_ 605 CAM_PEDESTRIAN: 8 XXX
- SG_ CTR : 17|4@0+ (1,0) [0|255] "" XXX
- SG_ AEB_NOT_ENGAGED : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ PED_WARNING : 9|1@0+ (1,0) [0|255] "" XXX
- SG_ PED_BRAKE : 3|3@0+ (1,0) [0|7] "" XXX
- SG_ RST_CTR : 23|6@0+ (1,0) [0|63] "" XXX
- SG_ S1 : 29|4@0+ (1,0) [0|31] "" XXX
-
-BO_ 578 CAM_LANETRACK: 8 XXX
- SG_ CHKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ ZERO : 53|6@0+ (1,0) [0|63] "" XXX
- SG_ CTR : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ LINE2 : 9|10@0+ (1,-686) [0|255] "" XXX
- SG_ LANE_CURVE : 31|8@0+ (1,-127) [0|255] "" XXX
- SG_ SIG1 : 39|8@0+ (1,-128) [0|255] "" XXX
- SG_ SIG2 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SIG3 : 55|2@0+ (1,0) [0|3] "" XXX
- SG_ LINE1 : 3|10@0+ (1,-686) [0|1] "" XXX
-
-BO_ 579 CAM_LKAS: 8 XXX
- SG_ LKAS_REQUEST : 3|12@0+ (1,-2048) [0|2048] "" XXX
- SG_ CTR : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ERR_BIT_1 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
- SG_ LINE_NOT_VISIBLE : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ BIT_1 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ BIT_2 : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ ERR_BIT_2 : 30|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 580 CAM_DISTANCE: 8 XXX
- SG_ S1 : 0|8@1+ (1,0) [0|127] "" XXX
- SG_ S2 : 15|8@0+ (1,0) [0|1] "" XXX
- SG_ S3 : 16|8@1+ (1,0) [0|3] "" XXX
- SG_ S4 : 24|8@1+ (1,0) [0|31] "" XXX
- SG_ S5 : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ DISTANCE : 47|8@0+ (1,0) [0|65535] "" XXX
- SG_ S6 : 55|16@0+ (1,0) [0|255] "" XXX
-
-BO_ 581 CAM_IDK3: 8 XXX
- SG_ S1 : 0|8@1+ (1,0) [0|15] "" XXX
- SG_ S2 : 8|6@1+ (1,0) [0|255] "" XXX
- SG_ S3 : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ S4 : 16|8@1+ (1,0) [0|15] "" XXX
- SG_ S5 : 24|8@1+ (1,0) [0|255] "" XXX
- SG_ S6 : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ S7 : 40|8@1+ (1,0) [0|3] "" XXX
- SG_ S8 : 48|8@1+ (1,0) [0|255] "" XXX
- SG_ S9 : 56|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 863 CAM_STATUS: 8 XXX
- SG_ NEW_SIGNAL_1 : 32|1@0+ (1,0) [0|32767] "" XXX
- SG_ NEW_SIGNAL_5 : 4|2@0+ (1,0) [0|32767] "" XXX
- SG_ NEW_SIGNAL_4 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ STOP_SIGN : 31|4@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 55|1@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_6 : 0|3@1+ (1,0) [0|7] "" XXX
- SG_ FORWARD_COLLISION : 40|8@1+ (1,0) [0|7] "" XXX
-
-BO_ 1157 CAM_Empty2: 8 XXX
-
-BO_ 1160 CAM_Empty3: 8 XXX
- SG_ NEW_SIGNAL_1 : 47|24@0+ (1,0) [0|16777215] "" XXX
-
-BO_ 1088 CAM_LANEINFO: 8 XXX
- SG_ BIT3 : 62|1@0+ (1,0) [0|3] "" XXX
- SG_ HANDS_ON_STEER_WARN_2 : 59|1@0+ (1,0) [0|1] "" XXX
- SG_ HANDS_ON_STEER_WARN : 56|1@0+ (1,0) [0|3] "" XXX
- SG_ S1_NOT : 54|1@0+ (1,0) [0|31] "" XXX
- SG_ S1 : 52|1@0+ (1,0) [0|1] "" XXX
- SG_ HANDS_WARN_3_BITS : 51|3@0+ (1,0) [0|7] "" XXX
- SG_ ERR_BIT : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ NO_ERR_BIT : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ BIT2 : 13|1@0+ (1,0) [0|15] "" XXX
- SG_ LANE_LINES : 10|3@0+ (1,0) [0|3] "" XXX
- SG_ BIT1 : 6|1@0+ (1,0) [0|65535] "" XXX
- SG_ LINE_NOT_VISIBLE : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ LINE_VISIBLE : 0|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 1479 NEW_MSG_470: 8 XXX
-
-BO_ 1456 NEW_MSG_300: 8 XXX
-
-BO_ 1446 NEW_MSG_a600: 8 XXX
-
-BO_ 1416 MSG_18: 8 XXX
-
-BO_ 1086 DOORS: 8 XXX
- SG_ DOOR_OPEN : 30|1@0+ (1,0) [0|255] "" XXX
- SG_ LEFTGATE : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 53|1@0+ (1,0) [0|255] "" XXX
- SG_ KEYFOB_HORN : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ KEYFOB_LOCK : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ KEYFOB_UNLOCK : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CTR1 : 8|4@1+ (1,0) [0|3] "" XXX
- SG_ CTR2 : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ BR : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ BL : 35|1@0+ (1,0) [0|1] "" XXX
- SG_ FR : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ FL : 37|1@0+ (1,0) [0|255] "" XXX
-
-BO_ 977 TWO_STATES: 8 XXX
- SG_ NEW_SIGNAL_1 : 50|1@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_2 : 56|4@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_3 : 28|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 24|4@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_5 : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_6 : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 47|8@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_8 : 51|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1085 MSG_12: 8 XXX
- SG_ NEW_SIGNAL_3 : 36|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 16|8@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2 : 48|8@1+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_4 : 31|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 24|1@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_6 : 40|3@1+ (1,0) [0|7] "" XXX
-
-BO_ 159 MSG_11: 8 XXX
- SG_ NEW_SIGNAL_1 : 50|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1278 NEW_MSG_3: 8 XXX
- SG_ NEW_SIGNAL_2 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ MILAGE_MAYBE : 7|16@0+ (1,0) [0|255] "" XXX
-
-BO_ 1277 NEW_MSG_10: 8 XXX
- SG_ NEW_SIGNAL_3 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ counter : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1275 MSG_2017_5: 8 XXX
- SG_ counter : 4|5@0+ (1,0) [0|255] "" XXX
-
-BO_ 1274 NEW_MSG_12: 8 XXX
- SG_ NEW_SIGNAL_1 : 24|4@1+ (1,0) [0|15] "" XXX
- SG_ CTR : 55|4@0+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_2 : 35|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 32|3@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 48|4@1+ (1,0) [0|7] "" XXX
-
-BO_ 1180 last_byte_roughRPM: 8 XXX
- SG_ NEW_SIGNAL_1 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1078 HVAC: 8 XXX
- SG_ NEW_SIGNAL_1 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_2 : 8|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 23|1@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_4 : 56|5@0+ (1,0) [0|255] "" XXX
-
-BO_ 1056 NEW_MSG_13: 8 XXX
- SG_ BIG_COUNTER_MAYBE : 55|16@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 29|6@0+ (1,0) [0|255] "" XXX
- SG_ counter_or_GEAR : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ INCREASING : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ STANDSTILL : 32|1@0+ (1,0) [0|255] "" XXX
-
-BO_ 1045 MOVING: 8 XXX
- SG_ NEW_SIGNAL_2 : 20|1@0+ (1,0) [0|3] "" XXX
- SG_ CTR2 : 19|4@0+ (1,0) [0|31] "" XXX
- SG_ CTR3 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ IS_MOVING : 12|1@0+ (1,0) [0|3] "" XXX
- SG_ CTR1 : 53|6@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE : 55|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1034 MSG_07: 8 XXX
- SG_ NEW_SIGNAL_1 : 6|3@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_2 : 0|4@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_3 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_4 : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_9 : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 870 NEW_MSG_16: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 867 NEW_MSG_17: 8 XXX
- SG_ NEW_SIGNAL_1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 130 STEER: 8 XXX
- SG_ NEW_SIGNAL_5 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR_2 : 35|4@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 23|16@0+ (0.05,-1600) [500|-500] "deg" XXX
-
-BO_ 120 NEW_MSG_18: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 304 GEAR_RELATED: 8 XXX
- SG_ NEW_SIGNAL_1 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 865 NEW_MSG_5: 8 XXX
- SG_ SPEED_INVERSE : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 47|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ IS_MOVING : 43|3@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_2 : 46|1@0+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_4 : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_10 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 15|3@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 56|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 836 NEW_MSG_19: 8 XXX
- SG_ CTR : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CTR2 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 832 SEATBELT: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ PASSENGER_SEATBELT : 26|1@1+ (1,0) [0|7] "" XXX
- SG_ CTR1 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ CTR2 : 23|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 8|4@1+ (1,0) [0|3] "" XXX
- SG_ DRIVER_SEATBELT : 27|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 866 NEW_MSG_21: 8 XXX
- SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|131071] "" XXX
- SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 27|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 59|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 158 MSG_05: 8 XXX
- SG_ NEW_SIGNAL_1 : 23|8@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 157 CRZ_BTNS: 8 XXX
- SG_ SET_P_INV : 21|1@0+ (1,0) [0|3] "" XXX
- SG_ CAN_OFF_INV : 17|1@1+ (1,0) [0|3] "" XXX
- SG_ CAN_OFF : 0|1@1+ (1,0) [0|3] "" XXX
- SG_ SET_M_INV : 22|1@0+ (1,0) [0|255] "" XXX
- SG_ SET_M : 5|1@0+ (1,0) [0|3] "" XXX
- SG_ SET_P : 4|1@0+ (1,0) [0|3] "" XXX
- SG_ RES_INV : 19|1@1+ (1,0) [0|3] "" XXX
- SG_ RES : 2|1@1+ (1,0) [0|3] "" XXX
- SG_ DISTANCE_LESS : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ DISTANCE_LESS_INV : 8|1@0+ (1,0) [0|31] "" XXX
- SG_ DISTANCE_MORE : 6|1@0+ (1,0) [0|3] "" XXX
- SG_ DISTANCE_MORE_INV : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ MODE_Y : 13|1@1+ (1,0) [0|3] "" XXX
- SG_ MODE_X : 14|1@0+ (1,0) [0|255] "" XXX
- SG_ MODE_Y_INV : 30|1@0+ (1,0) [0|3] "" XXX
- SG_ MODE_X_INV : 31|1@0+ (1,0) [0|3] "" XXX
- SG_ CTR : 29|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 154 BLINK_INFO: 8 XXX
- SG_ LEFT_BLINK : 18|1@1+ (1,0) [0|3] "" XXX
- SG_ RIGHT_BLINK : 19|1@0+ (1,0) [0|255] "" XXX
- SG_ REAR_WIPER_ON : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ WIPER_LO : 33|1@1+ (1,0) [0|31] "" XXX
- SG_ WIPER_HI : 34|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 145 TURN_SWITCH: 8 XXX
- SG_ NEW_SIGNAL_1 : 37|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_2 : 36|1@0+ (1,0) [0|3] "" XXX
- SG_ TURN : 38|1@0+ (1,0) [0|3] "" XXX
- SG_ TURN_LEFT_SWITCH : 13|1@0+ (1,0) [0|255] "" XXX
- SG_ TURN_RIGHT_SWITCH : 12|1@1+ (1,0) [0|3] "" XXX
- SG_ HAZARD : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ CTR : 27|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 80 MSG_04: 8 XXX
- SG_ NEW_SIGNAL_1 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ SIGNAL : 24|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 978 MSG_03: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 23|8@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_4 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 607 NEW_MSG_25: 8 XXX
-
-BO_ 1115 MSG_02: 8 XXX
- SG_ NEW_SIGNAL_2 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 47|16@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_3 : 63|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_4 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 2|3@0+ (1,0) [0|255] "" XXX
-
-BO_ 1067 NEW_MSG_27: 8 XXX
- SG_ NEW_SIGNAL_2 : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_4 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_1 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_5 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_6 : 11|1@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_7 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_8 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_9 : 8|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 358 NEW_MSG_28: 8 XXX
-
-BO_ 608 NEW_MSG_29: 8 XXX
- SG_ NEW_SIGNAL_1 : 8|5@1+ (1,0) [0|7] "" XXX
-
-BO_ 606 SPEED_TBD: 8 XXX
- SG_ SPEED_TBD : 7|12@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 23|12@0- (1,0) [0|65535] "" XXX
-
-BO_ 552 GEAR: 8 XXX
- SG_ NEW_SIGNAL_2 : 8|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_4 : 18|3@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 26|3@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 31|5@0+ (1,0) [0|31] "" XXX
- SG_ NEW_SIGNAL_7 : 39|1@0+ (1,0) [0|255] "" XXX
- SG_ GEAR : 35|4@0+ (1,0) [0|15] "" XXX
- SG_ MORE_GEAR : 7|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 543 CRZ_EVENTS: 8 XXX
- SG_ NEW_SIGNAL_3 : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ CHKSUM : 63|8@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_5 : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_6 : 6|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 0|1@0+ (1,0) [0|31] "" XXX
- SG_ NEW_SIGNAL_9 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_10 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_12 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_13 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_18 : 12|1@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_19 : 14|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_20 : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_21 : 23|1@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_24 : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_PEDAL_PRESSED : 32|1@0+ (1,0) [0|255] "" XXX
- SG_ CRZ_STARTED : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ PLUS_ONE_CRZ : 17|1@0+ (1,0) [0|255] "" XXX
- SG_ PLUS_ONE_CRZ_2 : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ GAS_MAYBE : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ NONACC_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_ACTIVE_CAR_MOVING : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ NONACC_RELATED : 11|1@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ CAS_CMD_MAYBE : 30|7@0- (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 43|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 542 NEW_MSG_33: 8 XXX
- SG_ CTR : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ CTR2 : 56|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 868 NEW_MSG_34: 8 XXX
- SG_ CTR : 59|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 869 NEW_MSG_35: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 39|16@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 55|2@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 50|4@1+ (1,0) [0|15] "" XXX
- SG_ CTR : 59|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 1114 NEW_MSG_4: 8 XXX
-
-BO_ 535 CURVE_CTRS: 8 XXX
- SG_ CTR_A_1 : 4|3@0+ (1,0) [0|31] "" XXX
- SG_ CTR_A_2 : 7|3@0+ (1,0) [0|255] "" XXX
- SG_ CTR_B_1 : 12|3@0+ (1,0) [0|7] "" XXX
- SG_ CTR_B_2 : 15|3@0+ (1,0) [0|7] "" XXX
- SG_ CTR_C_1 : 20|3@0+ (1,0) [0|7] "" XXX
- SG_ CTR_C_2 : 23|3@0+ (1,0) [0|255] "" XXX
- SG_ CTR_D_2 : 31|3@0+ (1,0) [0|7] "" XXX
- SG_ CTR_D_1 : 28|3@0+ (1,0) [0|7] "" XXX
- SG_ CURVE : 39|16@0+ (1,0) [0|7] "" XXX
- SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHK_MAYBE : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_2 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_6 : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_8 : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ SEATBELT_MAYBE : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ NO_SEATBELT_MAYBE : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_4 : 9|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 540 CRZ_CTRL: 8 XXX
- SG_ NEW_SIGNAL_3 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_4 : 8|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_6 : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 18|3@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_9 : 31|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_10 : 30|1@0+ (1,0) [0|1] "" XXX
- SG_ ACC_GAS_MAYBE : 23|1@0+ (1,0) [0|31] "" XXX
- SG_ ACC_GAS_MAYBE2 : 29|1@0+ (1,0) [0|1] "" XXX
- SG_ CRZ_ACTIVE : 3|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 539 CRZ_INFO: 8 XXX
- SG_ NEW_SIGNAL_1 : 17|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_5 : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_7 : 47|1@0+ (1,0) [0|255] "" XXX
- SG_ CTR1 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR2 : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 37|1@0+ (1,0) [0|255] "" XXX
- SG_ ACC_ACTIVE : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCEL_CMD : 31|10@0- (1,0) [0|1] "" XXX
-
-BO_ 121 EPB: 8 XXX
- SG_ NEW_SIGNAL_1 : 4|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 25|2@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 41|2@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_9 : 47|1@0+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_10 : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_11 : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ EPB_ACTIVE : 29|1@0+ (1,0) [0|15] "" XXX
-
-BO_ 1070 MSG_2017_1: 8 XXX
-
-BO_ 1183 MSG_2017_2: 8 XXX
-
-BO_ 1243 MSG_2017_3: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|64@0+ (1,0) [0|18446744073709552000] "" XXX
-
-BO_ 1269 MSG_2017_4: 8 XXX
- SG_ NEW_SIGNAL_1 : 55|16@0+ (1,0) [0|18446744073709552000] "" XXX
-
-BO_ 1178 MSG_2017_6: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|64@0+ (1,0) [0|18446744073709552000] "" XXX
-
-BO_ 1179 MSG_2017_7: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|64@0+ (1,0) [0|18446744073709552000] "" XXX
-
-BO_ 1435 MSG_2017_8: 8 XXX
-
-BO_ 253 NEW_MSG_7: 8 XXX
- SG_ NEW_SIGNAL_1 : 16|1@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_2 : 41|1@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 61|1@0+ (1,0) [0|255] "" XXX
-
-BO_ 359 NEW_MSG_11: 8 XXX
- SG_ NEW_SIGNAL_1 : 15|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ CTR : 31|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 36|5@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 38|1@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_5 : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_6 : 47|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 512 NEW_MSG_30: 8 XXX
- SG_ NEW_SIGNAL_1 : 6|7@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 23|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 22|7@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_6 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_8 : 38|7@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_9 : 40|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_10 : 47|4@0+ (1,0) [0|15] "" XXX
- SG_ CTR : 51|3@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_11 : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 515 MSG_01: 8 XXX
- SG_ CTR : 39|8@0+ (1,0) [0|65535] "" XXX
- SG_ CTR_2 : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 529 NEW_MSG_36: 8 XXX
- SG_ NEW_SIGNAL_1 : 22|5@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 32|4@1+ (1,0) [0|3] "" XXX
- SG_ CTR : 39|4@0+ (1,0) [0|255] "" XXX
- SG_ CTR_2 : 47|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 40|4@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_5 : 53|1@0+ (1,0) [0|255] "" XXX
-
-BO_ 1242 NEW_MSG_37: 8 XXX
-
-BO_ 1266 MSG_09: 8 XXX
- SG_ NEW_SIGNAL_1 : 20|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 19|4@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 31|1@0+ (1,0) [0|255] "" XXX
-
-BO_ 976 MSG_15: 8 XXX
- SG_ NEW_SIGNAL_1 : 55|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 61|6@0+ (1,0) [0|1] "" XXX
-
-BO_ 155 MSG_14: 8 XXX
-
-BO_ 1267 MSG_10: 8 XXX
- SG_ NEW_SIGNAL_1 : 40|1@0+ (1,0) [0|16777215] "" XXX
- SG_ NEW_SIGNAL_2 : 42|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 305 NEW_MSG_6: 8 XXX
- SG_ NEW_SIGNAL_1 : 8|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 10|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1238 TEMPERATURE: 8 XXX
- SG_ TEMPERATURE_MAYBE : 47|8@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 1087 NEW_MSG_1: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1143 BSM: 8 XXX
- SG_ BSM_OFF : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ RIGHT_BS_3 : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ STANDSTILL : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ LEFT_BS1 : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ LEFT_BS3 : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ RIGHT_BS4 : 39|1@0+ (1,0) [0|1] "" XXX
- SG_ LEFT_BS_SIDE : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ IS_MOVING : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ LEFT_BS_BEHIND : 46|2@1+ (1,0) [0|16777215] "" XXX
- SG_ RIGHT_BS1 : 14|1@0+ (1,0) [0|63] "" XXX
- SG_ RIGHT_BS_DISTANCE : 35|3@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_1 : 32|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1361 KEY_POSITION: 8 XXX
-
-BO_ 1283 KEY_POSITION2: 8 XXX
-
-BO_ 628 MSG_06: 8 XXX
-
-BO_ 1154 MSG_08: 8 XXX
-
-BO_ 1139 MSG_13: 8 XXX
-
-BO_ 1270 MSG_16: 8 XXX
-
-BO_ 1272 MSG_17: 8 XXX
-
-BO_ 1425 MSG_19: 8 XXX
-
-
-
-
-CM_ SG_ 605 PED_BRAKE "3: no brake, 4: brake";
-CM_ SG_ 1088 LANE_LINES "0 LKAS disabled, 1 no lines, 2 two lines, 3 left line, 4 right line";
-CM_ SG_ 157 CAN_OFF "Disengage Cruise if enabled, if already disabled TURN it OFF ";
-CM_ SG_ 552 GEAR "0 P/N, 12 R, 2 D M1, 4 M2, 14 Shift";
-CM_ SG_ 552 MORE_GEAR "";
diff --git a/opendbc/mercedes_benz_e350_2010.dbc b/opendbc/mercedes_benz_e350_2010.dbc
deleted file mode 100644
index da6ae4c15ee66b..00000000000000
--- a/opendbc/mercedes_benz_e350_2010.dbc
+++ /dev/null
@@ -1,176 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 3 STEER_SENSOR: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_RATE : 19|12@0- (0.5,0) [0|255] "" XXX
- SG_ STEER_DIRECTION : 4|1@0+ (1,2) [0|1] "" XXX
- SG_ STEER_ANGLE : 3|12@0- (-0.5,0) [-500|500] "degrees" XXX
-
-BO_ 5 BRAKE_MODULE: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_HOLD : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_POSITION : 17|10@0+ (1,0) [0|65535] "" XXX
- SG_ DRIVER_BRAKE : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ COMPUTER_BRAKE : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ BRAKE_PRESSED : 0|1@1+ (1,0) [0|1] "" XXX
-
-BO_ 69 DRIVER_CONTROLS: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ STEERING_WHEEL_BUTTONS : 32|16@1+ (1,0) [0|255] "4 directional, 2 volume control & 2 phone buttons" XXX
- SG_ LEFT_BLINKER : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ RIGHT_BLINKER : 17|1@0+ (1,0) [0|1] "" XXX
- SG_ HIGHBEAM_TOGGLE : 18|1@0+ (1,0) [0|1] "" XXX
- SG_ HIGHBEAM_MOMENTARY : 19|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_CANCEL : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_RESUME : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_ACCEL_HIGH : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_DECEL_HIGH : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_ACCEL_LOW : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_DECEL_LOW : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_XFF : 15|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 513 WHEEL_ENCODERS: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ WHEEL_ENCODER_2 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ WHEEL_ENCODER_3 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ WHEEL_ENCODER_4 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 56|8@1+ (1,0) [0|255] "" XXX
- SG_ WHEEL_ENCODER_1 : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 261 GAS_PEDAL: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ ENGINE_RPM : 4|5@0+ (1,0) [0|255] "" XXX
- SG_ GAS_PEDAL : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ COMBINED_GAS : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 643 DOOR_SENSORS: 8 XXX
- SG_ BRAKE_PRESSED : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FR : 3|1@1+ (1,0) [0|3] "" XXX
- SG_ DOOR_OPEN_RL : 5|1@0+ (1,0) [0|3] "" XXX
- SG_ DOOR_OPEN_RR : 7|1@0+ (1,0) [0|3] "" XXX
- SG_ DOOR_OPEN_FL : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_FL : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_FR : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_RL : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_RR : 6|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 885 SEATBELT_SENSORS: 8 XXX
- SG_ SEATBELT_DRIVER_LATCHED : 16|1@0+ (1,0) [0|1] "" XXX
- SG_ SEATBELT_PASSENGER_LATCHED : 18|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 257 CRUISE_CONTROL: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 6|1@0+ (1,0) [0|255] "" XXX
- SG_ CRUISE_DISABLED : 23|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X002 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X003 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_1 : 5|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_ACCELERATING : 22|1@0+ (1,0) [0|1] "" XXX
- SG_ LONGITUDINAL_ACCEL_REQUEST : 15|8@0- (1,0) [0|127] "" XXX
-
-BO_ 260 CRUISE_CONTROL2: 8 XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_XFF : 31|8@0+ (1,0) [0|65535] "" XXX
- SG_ SET_ME_X02 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_XFF2 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 7|4@0+ (1,0) [0|255] "" XXX
-
-BO_ 14 STEER_TORQUE: 8 XXX
- SG_ STEER_TORQUE : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ COUNTER : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 888 CRUISE_CONTROL3: 8 XXX
- SG_ NEW_SIGNAL_2 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_1 : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_5 : 32|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_DISABLED : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_ENABLED : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ SET_ME_X003 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X004 : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X002 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ CRUISE_SET_SPEED : 15|8@0+ (1,0) [0|63] "mph" XXX
- SG_ CRUISE_SPEED_CHANGE : 55|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 307 POWER_SEATS: 8 XXX
- SG_ DRIVER_FORWARD : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ DRIVER_BACK : 1|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 109 GEAR_LEVER: 8 XXX
- SG_ PARK_BUTTON : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ NEUTRAL_UP : 9|1@0+ (1,0) [0|1] "" XXX
- SG_ NEUTRAL_DOWN : 10|1@0+ (1,0) [0|1] "" XXX
- SG_ DRIVE : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ REVERSE : 8|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 23|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 115 GEAR_PACKET: 8 XXX
- SG_ GEAR : 0|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 581 IGNITION: 8 XXX
-
-BO_ 515 WHEEL_SPEEDS: 8 XXX
- SG_ WHEEL_MOVING_FR : 22|1@1+ (1,0) [0|15] "" XXX
- SG_ WHEEL_MOVING_RL : 38|1@0+ (1,0) [0|1] "" XXX
- SG_ WHEEL_MOVING_FL : 6|1@0+ (1,0) [0|1] "" XXX
- SG_ WHEEL_MOVING_RR : 54|1@0+ (1,0) [0|1] "" XXX
- SG_ WHEEL_SPEED_FL : 2|11@0+ (0.0375,0) [0|255] "mph" XXX
- SG_ WHEEL_SPEED_FR : 18|11@0+ (0.0375,0) [0|255] "mph" XXX
- SG_ WHEEL_SPEED_RL : 34|11@0+ (0.0375,0) [0|255] "mph" XXX
- SG_ WHEEL_SPEED_RR : 50|11@0+ (0.0375,0) [0|255] "mph" XXX
-
-
-
-
-CM_ SG_ 3 STEER_DIRECTION "0 = left, 1 = right";
-CM_ SG_ 5 BRAKE_POSITION "computer and driver";
-CM_ SG_ 5 BRAKE_PRESSED "computer and driver";
-CM_ SG_ 261 GAS_PEDAL "user gas input";
-CM_ SG_ 261 COMBINED_GAS "computer and driver gas";
-CM_ SG_ 257 CRUISE_ACCELERATING "";
\ No newline at end of file
diff --git a/opendbc/nissan_2017.dbc b/opendbc/nissan_2017.dbc
deleted file mode 100644
index 1d03b7ab5f72d9..00000000000000
--- a/opendbc/nissan_2017.dbc
+++ /dev/null
@@ -1,184 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 644 Speed_1: 8 XXX
- SG_ Speed_FR : 7|16@0+ (0.0118,0) [0|65535] "" XXX
- SG_ Speed_FL : 23|16@0+ (0.0118,0) [0|65535] "" XXX
- SG_ Speed_Vehicle : 39|16@0+ (0.0245,0) [0|65535] "" XXX
-
-BO_ 645 WheelspeedRear: 8 XXX
- SG_ RR : 7|16@0+ (0.00555,0) [0|65535] "KPH" XXX
- SG_ RL : 23|16@0+ (0.00555,0) [0|65535] "KPH" XXX
-
-BO_ 768 STEER_TORQUE: 8 XXX
- SG_ STEERING_TOURQUE : 0|7@1+ (1,0) [0|127] "" XXX
-
-BO_ 459 Maybe_RegenBraking: 8 XXX
-
-BO_ 372 Maybe_Gear_Selector: 8 XXX
- SG_ Counter : 32|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 374 Maybe_Motor_RPM_or_Speed: 8 XXX
- SG_ Counter : 48|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 460 Maybe_Brake_Related: 8 XXX
-
-BO_ 2 SteeringWheel: 8 XXX
- SG_ Steering_RateChange : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ Always_07 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ Steering_Angle : 0|16@1- (-0.1,0) [0|65535] "" XXX
-
-BO_ 384 Maybe_PowerInfo: 8 XXX
- SG_ Unknown_Timer_PowerInfo : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ EnginePower : 27|12@0- (1,0) [0|1] "" XXX
- SG_ RequestedAccel : 23|12@0- (1,0) [0|4294967295] "" XXX
-
-BO_ 1107 Lights: 8 XXX
- SG_ RIGHT_BLINKER : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ LEFT_BLINKER : 11|1@0+ (1,0) [0|1] "" XXX
- SG_ _HEADLIGHTS : 5|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 666 WheelspeedFront: 8 XXX
- SG_ _FL_WHEELSPEED : 39|16@0+ (0.01014,0) [0|65535] "" XXX
- SG_ FR : 7|16@0+ (0.00555,0) [0|65535] "KPH" XXX
- SG_ FL : 23|16@0+ (0.00555,0) [0|65535] "KPH" XXX
-
-BO_ 398 NEW_MSG_2: 8 XXX
-
-BO_ 389 NEW_MSG_3: 8 XXX
- SG_ NEW_SIGNAL_1 : 15|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 22|6@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 55|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 63|8@0+ (1,0) [0|127] "" XXX
- SG_ COUNTER : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 30|8@0- (1,0) [0|255] "" XXX
-
-BO_ 397 NEW_MSG_4: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|32767] "" XXX
- SG_ NEW_SIGNAL_3 : 39|16@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_4 : 55|16@0+ (1,0) [0|31] "" XXX
-
-BO_ 658 NEW_MSG_5: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|255] "" XXX
-
-BO_ 855 NEW_MSG_6: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 773 NEW_MSG_7: 8 XXX
- SG_ NEW_SIGNAL_1 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 851 SPEED_RELATED: 8 XXX
- SG_ SPEED_RELATED : 7|16@0+ (0.01014,0) [0|65535] "" XXX
-
-BO_ 386 Accelerator: 8 XXX
- SG_ Accelerator : 38|7@0+ (1,0) [0|127] "" XXX
-
-BO_ 347 ACCELSOMETHING: 8 XXX
- SG_ PowerMaybe : 9|10@0+ (1,0) [0|1023] "" XXX
- SG_ ACCELERATOR2 : 6|11@0+ (1,-800) [0|65535] "" XXX
-
-BO_ 346 ANOTHER_ACCEL: 8 XXX
- SG_ ANOTHERACCEL : 23|10@0+ (1,0) [0|1023] "" XXX
- SG_ Reverse_ACCEL : 25|10@0+ (1,0) [0|1023] "" XXX
-
-BO_ 348 FULLRANGEACCEL: 8 XXX
- SG_ AccelFullRange : 47|10@0+ (1,0) [0|1023] "" XXX
- SG_ Accel : 26|11@0+ (1,0) [0|2047] "" XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 566 ANOTHERFULLRANGEACCEL: 8 XXX
- SG_ ANOTHERFULLRANGEACCEL : 43|8@0+ (1,0) [0|1023] "" XXX
- SG_ RPMORTORQUE : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 523 Yetyetanotheraccel: 8 XXX
- SG_ ANOTHERREVERSEACCEL : 37|10@0+ (1,0) [0|1023] "" XXX
- SG_ yetyetanotheraccel : 31|10@0+ (1,0) [0|255] "" XXX
-
-BO_ 779 ANOTHERRRFULLRANGEACCEL: 8 XXX
- SG_ ANOTHERRRFULLRANGEACCEL : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1108 Doors: 8 XXX
- SG_ DOOR_CLOSED_RR : 40|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 41|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_RL : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RL : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_FL : 44|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_CLOSED_FR : 46|1@0+ (1,0) [0|3] "" XXX
- SG_ DOOR_OPEN_FR : 47|1@0+ (1,0) [0|3] "" XXX
- SG_ BOOT_OPEN : 55|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 403 LKAS_OLD: 8 XXX
- SG_ Checksum : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ Angle_2 : 32|13@0+ (1,-4000) [0|63] "" XXX
- SG_ Counter : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ Angle_1 : 10|13@0+ (0.12,-480) [0|65535] "" XXX
- SG_ Steering_Torque : 7|13@0+ (-1,4000) [0|65535] "" XXX
- SG_ Torque_Command : 29|13@0+ (1,-4000) [0|255] "" XXX
-
-BO_ 412 NEW_MSG_9: 8 XXX
- SG_ NEW_SIGNAL_1 : 7|16@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_3 : 23|16@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_2 : 39|8@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 361 LKAS: 8 XXX
- SG_ NEW_SIGNAL_4 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_X80 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ LKA_Active : 52|1@0+ (1,0) [0|15] "" XXX
- SG_ CRC : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ Counter : 51|4@0+ (1,0) [0|15] "" XXX
- SG_ Des_Angle : 7|18@0+ (-0.01,1310) [0|255] "" XXX
-
-BO_ 438 ProPilot: 8 XXX
- SG_ NEW_SIGNAL_2 : 11|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 27|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 63|8@0+ (1,0) [0|7] "" XXX
- SG_ Counter : 55|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_6 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_3 : 32|2@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 7|12@0- (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 23|12@0- (-1,0) [0|255] "" XXX
- SG_ CRUISE_ON : 36|1@0+ (1,0) [0|255] "" XXX
- SG_ CRUISE_ACTIVATED : 38|1@0+ (1,0) [0|3] "" XXX
- SG_ STEER_STATUS : 51|1@1+ (1,0) [0|3] "" XXX
-
diff --git a/opendbc/nissan_leaf_2018.dbc b/opendbc/nissan_leaf_2018.dbc
new file mode 100644
index 00000000000000..5172e01c8e5aca
--- /dev/null
+++ b/opendbc/nissan_leaf_2018.dbc
@@ -0,0 +1,211 @@
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX
+
+
+BO_ 2 STEER_ANGLE_SENSOR: 5 XXX
+ SG_ STEER_ANGLE_RATE : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X07 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 0|16@1- (-0.1,0) [0|65535] "" XXX
+ SG_ COUNTER : 32|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 42 SEATBELT: 8 XXX
+ SG_ SEATBELT_DRIVER_LATCHED : 27|1@1+ (1,0) [0|3] "" XXX
+ SG_ SEATBELT_DRIVER_UNLATCHED : 26|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown2 : 31|4@0+ (1,0) [0|15] "" XXX
+ SG_ unknown3 : 24|2@1+ (1,0) [0|3] "" XXX
+ SG_ unknown1 : 7|24@0+ (1,0) [0|16777215] "" XXX
+ SG_ unknown4 : 39|16@0+ (1,0) [0|65535] "" XXX
+
+BO_ 361 LKAS: 8 XXX
+ SG_ MAX_TORQUE : 39|8@0+ (0.01,0) [0|255] "Nm" XXX
+ SG_ SET_0x80 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
+ SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 389 STEER_TORQUE_SENSOR: 8 XXX
+ SG_ LKAS_ACTIVE : 37|1@0+ (1,0) [0|3] "" XXX
+ SG_ STEER_TORQUE_LKAS : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 23|18@0+ (-0.01,1310) [0|262143] "" XXX
+ SG_ STEER_TORQUE_DRIVER : 7|12@0+ (-0.01,20.47) [0|4095] "Nm" XXX
+ SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|127] "" XXX
+
+BO_ 460 BRAKE_PEDAL: 8 XXX
+ SG_ BRAKE_PEDAL : 7|8@0+ (1,0) [0|256] "" XXX
+
+BO_ 569 CRUISE_THROTTLE: 8 XXX
+ SG_ GAS_PEDAL_INVERTED : 15|8@0+ (1,0) [0|255] "" XXX
+ SG_ GAS_PEDAL : 7|8@0+ (1,0) [0|255] "" XXX
+ SG_ CRUISE_AVAILABLE : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ unsure1 : 23|6@0+ (1,0) [0|63] "" XXX
+ SG_ unsure2 : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ unsure3 : 31|2@0+ (1,0) [0|3] "" XXX
+ SG_ NO_BUTTON_PRESSED : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ RES_BUTTON : 28|1@0+ (1,0) [0|1] "" XXX
+ SG_ SET_BUTTON : 27|1@0+ (1,0) [0|1] "" XXX
+ SG_ FOLLOW_DISTANCE_BUTTON : 26|1@0+ (1,0) [0|1] "" XXX
+ SG_ CANCEL_BUTTON : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_BUTTON : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ unsure4 : 39|6@0+ (1,0) [0|63] "" XXX
+ SG_ COUNTER : 32|2@1+ (1,0) [0|3] "" XXX
+ SG_ unsure5 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ unsure6 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ unsure7 : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 640 CANCEL_MSG: 8 XXX
+ SG_ CANCEL_SEATBELT : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_1 : 7|6@0+ (1,0) [0|63] "" XXX
+ SG_ NEW_SIGNAL_2 : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 15|56@0+ (1,0) [0|72057594037927940] "" XXX
+
+BO_ 644 WHEEL_SPEEDS_FRONT: 8 XXX
+ SG_ WHEEL_SPEED_FR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
+ SG_ WHEEL_SPEED_FL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
+
+BO_ 645 WHEEL_SPEEDS_REAR: 8 XXX
+ SG_ WHEEL_SPEED_RR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
+ SG_ WHEEL_SPEED_RL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
+
+BO_ 689 PROPILOT_HUD: 8 XXX
+ SG_ LARGE_WARNING_FLASHING : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_ERROR_FLASHING1 : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_ERROR_FLASHING2 : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_LANE_YELLOW_FLASH : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_LANE_YELLOW_FLASH : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEAD_CAR : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEAD_CAR_ERROR : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_ERROR : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_ERROR_FLASHING : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_LANE_GREEN : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_LANE_GREEN : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_ERROR_FLASHING3 : 27|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_ERROR_FLASHING : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ SAFETY_SHIELD_ACTIVE : 44|1@0+ (1,0) [0|1] "" XXX
+ SG_ LARGE_STEERING_WHEEL_ICON : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ RIGHT_LANE_GREEN_FLASH : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_LANE_GREEN_FLASH : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ FOLLOW_DISTANCE : 3|2@0+ (1,0) [0|3] "" XXX
+ SG_ AUDIBLE_TONE : 47|3@0+ (1,0) [0|8] "" XXX
+ SG_ SPEED_SET_ICON : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ SMALL_STEERING_WHEEL_ICON : 42|3@0+ (1,0) [0|7] "" XXX
+ SG_ SET_SPEED : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ unknown02 : 1|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown05 : 5|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown08 : 8|7@0+ (1,0) [0|63] "" XXX
+ SG_ unknown26 : 26|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown28 : 28|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown31 : 31|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown43 : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown55 : 55|8@0+ (1,0) [0|63] "" XXX
+ SG_ unknown59 : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 783 CRUISE_STATE: 3 XXX
+ SG_ CRUISE_ENABLED : 3|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 852 ESP: 8 XXX
+ SG_ ESP_DISABLED : 38|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 853 HUD_SETTINGS: 8 XXX
+ SG_ SPEED_MPH : 37|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 856 LIGHTS: 8 XXX
+ SG_ LEFT_BLINKER : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BLINKER : 18|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1057 GEARBOX: 3 XXX
+ SG_ GEAR_SHIFTER : 5|3@0+ (1,0) [0|255] "" XXX
+
+BO_ 1228 PROPILOT_HUD_INFO_MSG: 8 XXX
+ SG_ NA_HIGH_ACCEL_TEMP : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_NA_HIGH_CABIN_TEMP : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_MALFUNCTION : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_MALFUNCTION : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_MALFUNCTION : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_NA_CLEAN_REAR_CAMERA : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ NA_POOR_ROAD_CONDITIONS : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ CURRENTLY_UNAVAILABLE : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ SAFETY_SHIELD_OFF : 18|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_COLLISION_NA_FRONT_RADAR_OBSTRUCTION : 20|1@0+ (1,0) [0|1] "" XXX
+ SG_ PEDAL_MISSAPPLICATION_SYSTEM_ACTIVATED : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_IMPACT_NA_RADAR_OBSTRUCTION : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ WARNING_DO_NOT_ENTER : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_IMPACT_SYSTEM_OFF : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_IMPACT_MALFUNCTION : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_COLLISION_MALFUNCTION : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_MALFUNCTION2 : 37|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_MALFUNCTION2 : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_MALFUNCTION2 : 39|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_NA_MSGS : 42|3@0+ (1,0) [0|7] "" XXX
+ SG_ BOTTOM_MSG : 45|3@0+ (1,0) [0|7] "" XXX
+ SG_ HANDS_ON_WHEEL_WARNING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ WARNING_STEP_ON_BRAKE_NOW : 51|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_NA_FRONT_CAMERA_OBSTRUCTED : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_NA_HIGH_CABIN_TEMP : 53|1@0+ (1,0) [0|1] "" XXX
+ SG_ WARNING_PROPILOT_MALFUNCTION : 54|1@0+ (1,0) [0|3] "" XXX
+ SG_ ACC_UNAVAILABLE_HIGH_CABIN_TEMP : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACC_NA_FRONT_CAMERA_IMPARED : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown07 : 7|7@0+ (1,0) [0|127] "" XXX
+ SG_ unknown10 : 10|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown15 : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown23 : 23|3@0+ (1,0) [0|7] "" XXX
+ SG_ unknown19 : 19|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown31 : 31|6@0+ (1,0) [0|63] "" XXX
+ SG_ unknown32 : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown46 : 46|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown50 : 50|3@0+ (1,0) [0|7] "" XXX
+ SG_ unknown55 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown61 : 61|6@0+ (1,0) [0|63] "" XXX
+
+BO_ 1549 DOORS_LIGHTS: 8 XXX
+ SG_ DOOR_OPEN_FL : 3|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FR : 4|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 5|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 6|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1227 LKAS_SETTINGS: 8 XXX
+ SG_ LKAS_ENABLED : 51|1@0+ (1,0) [0|1] "" XXX
+
+VAL_ 1057 GEAR_SHIFTER 7 "B" 4 "D" 3 "N" 2 "R" 1 "P" ;
+VAL_ 1228 PROPILOT_NA_MSGS 0 "NO_MSG" 1 "NA_FRONT_CAMERA_IMPARED" 2 "STEERING_ASSIST_ON_STANDBY" 3 "NA_PARKING_ASSIST_ENABLED" 4 "STEER_ASSIST_CURRENTLY_NA" 5 "NA_BAD_WEATHER" 6 "NA_PARK_BRAKE_ON" 7 "NA_SEATBELT_NOT_FASTENED" ;
+VAL_ 1228 BOTTOM_MSG 0 "OK_STEER_ASSIST_SETTINGS" 1 "NO_MSG" 2 "PRESS_SET_TO_SET_SPEED" 3 "PRESS_RES_SET_TO_CHANGE_SPEED" 4 "PRESS_RES_TO_RESTART" 5 "NO_MSG" 6 "CRUISE_NOT_AVAIL" 7 "NO_MSG" ;
+VAL_ 689 FOLLOW_DISTANCE 0 "NO_FOLLOW_DISTANCE" 1 "FOLLOW_DISTANCE_1" 2 "FOLLOW_DISTANCE_2" 3 "FOLLOW_DISANCE_3" ;
+VAL_ 689 AUDIBLE_TONE 0 "NO_TONE" 1 "CONT" 2 "FAST_BEEP_CONT" 3 "TRIPLE_FAST_BEEP_CONT" 4 "SLOW_BEEP_CONT" 5 "QUAD_SLOW_BEEP_CONT" 6 "SINGLE_BEEP_ONCE" 7 "DOUBLE_BEEP_ONCE" ;
+VAL_ 689 SMALL_STEERING_WHEEL_ICON 0 "NO_ICON" 1 "GRAY_ICON" 2 "GRAY_ICON_FLASHING" 3 "GREEN_ICON" 4 "GREEN_ICON_FLASHING" 5 "RED_ICON" 6 "RED_ICON_FLASHING" 7 "YELLOW_ICON" ;
+VAL_ 689 LARGE_STEERING_WHEEL_ICON 0 "NO_STEERINGWHEEL" 1 "GRAY_STEERINGWHEEL" 2 "GREEN_STEERINGWHEEL" 3 "GREEN_STEERINGWHEEL_FLASHING" ;
diff --git a/opendbc/nissan_x_trail_2017.dbc b/opendbc/nissan_x_trail_2017.dbc
new file mode 100644
index 00000000000000..ea27445d3286e2
--- /dev/null
+++ b/opendbc/nissan_x_trail_2017.dbc
@@ -0,0 +1,218 @@
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX
+
+
+BO_ 2 STEER_ANGLE_SENSOR: 5 XXX
+ SG_ STEER_ANGLE_RATE : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X07 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 0|16@1- (-0.1,0) [0|65535] "" XXX
+ SG_ COUNTER : 32|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 348 GAS_PEDAL: 8 XXX
+ SG_ GAS_PEDAL_RAW : 26|11@0+ (1,0) [0|2047] "" XXX
+ SG_ GAS_PEDAL : 47|10@0+ (1,0) [0|1023] "" XXX
+
+BO_ 361 LKAS: 8 XXX
+ SG_ MAX_TORQUE : 39|8@0+ (0.01,0) [0|255] "Nm" XXX
+ SG_ SET_0x80 : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ LKA_ACTIVE : 52|1@0+ (1,0) [0|15] "" XXX
+ SG_ SET_0x80_2 : 31|8@0+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ DESIRED_ANGLE : 7|18@0+ (-0.01,1310) [0|255] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 389 STEER_TORQUE_SENSOR: 8 XXX
+ SG_ LKAS_ACTIVE : 37|1@0+ (1,0) [0|3] "" XXX
+ SG_ STEER_TORQUE_LKAS : 47|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 23|18@0+ (-0.01,1310) [0|262143] "" XXX
+ SG_ STEER_TORQUE_DRIVER : 7|12@0+ (-0.01,20.47) [0|4095] "Nm" XXX
+ SG_ COUNTER : 51|4@0+ (1,0) [0|15] "" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|127] "" XXX
+
+BO_ 438 PRO_PILOT: 8 XXX
+ SG_ COUNTER : 55|4@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X03 : 33|2@0+ (1,0) [0|15] "" XXX
+ SG_ CRUISE_ACTIVATED : 38|1@0+ (1,0) [0|3] "" XXX
+ SG_ CRUISE_ON : 36|1@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_STATUS : 51|1@0+ (1,0) [0|3] "" XXX
+
+BO_ 523 CRUISE_THROTTLE: 6 XXX
+ SG_ PROPILOT_BUTTON : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ CANCEL_BUTTON : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL_INVERTED : 37|10@0+ (1,0) [0|1023] "" XXX
+ SG_ SET_BUTTON : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ RES_BUTTON : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ FOLLOW_DISTANCE_BUTTON : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ NO_BUTTON_PRESSED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL : 31|10@0+ (1,0) [0|255] "" XXX
+ SG_ USER_BRAKE_PRESSED : 21|1@0+ (1,0) [0|1] "" XXX
+ SG_ USER_BRAKE_PRESSED_INVERTED : 22|1@0+ (1,0) [0|3] "" XXX
+ SG_ NEW_SIGNAL_2 : 23|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PRESSED_INVERTED : 20|1@0+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 17|2@0+ (1,0) [0|3] "" XXX
+ SG_ unsure1 : 7|10@0+ (1,0) [0|1023] "" XXX
+ SG_ unsure2 : 43|4@0+ (1,0) [0|1] "" XXX
+ SG_ unsure3 : 19|2@0+ (1,0) [0|3] "" XXX
+
+BO_ 645 WHEEL_SPEEDS_REAR: 8 XXX
+ SG_ WHEEL_SPEED_RR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
+ SG_ WHEEL_SPEED_RL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
+
+BO_ 665 ESP: 8 XXX
+ SG_ ESP_DISABLED : 24|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 666 WHEEL_SPEEDS_FRONT: 8 XXX
+ SG_ WHEEL_SPEED_FR : 7|16@0+ (0.005,0) [0|65535] "KPH" XXX
+ SG_ WHEEL_SPEED_FL : 23|16@0+ (0.005,0) [0|65535] "KPH" XXX
+
+BO_ 689 PROPILOT_HUD: 8 XXX
+ SG_ LARGE_WARNING_FLASHING : 9|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_ERROR_FLASHING1 : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_ERROR_FLASHING2 : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_LANE_YELLOW_FLASH : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_LANE_YELLOW_FLASH : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEAD_CAR : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEAD_CAR_ERROR : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_ERROR : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_ERROR_FLASHING : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_LANE_GREEN : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_LANE_GREEN : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_ERROR_FLASHING3 : 27|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_ERROR_FLASHING : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ SAFETY_SHIELD_ACTIVE : 44|1@0+ (1,0) [0|1] "" XXX
+ SG_ LARGE_STEERING_WHEEL_ICON : 61|2@0+ (1,0) [0|3] "" XXX
+ SG_ RIGHT_LANE_GREEN_FLASH : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_LANE_GREEN_FLASH : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ FOLLOW_DISTANCE : 3|2@0+ (1,0) [0|3] "" XXX
+ SG_ AUDIBLE_TONE : 47|3@0+ (1,0) [0|8] "" XXX
+ SG_ SPEED_SET_ICON : 7|2@0+ (1,0) [0|3] "" XXX
+ SG_ SMALL_STEERING_WHEEL_ICON : 42|3@0+ (1,0) [0|7] "" XXX
+ SG_ SET_SPEED : 39|8@0+ (1,0) [0|255] "" XXX
+ SG_ unknown02 : 1|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown05 : 5|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown08 : 8|7@0+ (1,0) [0|63] "" XXX
+ SG_ unknown26 : 26|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown28 : 28|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown31 : 31|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown43 : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown55 : 55|8@0+ (1,0) [0|63] "" XXX
+ SG_ unknown59 : 59|4@0+ (1,0) [0|15] "" XXX
+
+BO_ 768 STEER_TORQUE_SENSOR2: 2 XXX
+ SG_ STEERING_TORQUE : 6|7@0+ (1,0) [0|127] "" XXX
+ SG_ STEERING_PRESSED : 15|1@0+ (-1,1) [0|7] "" XXX
+
+BO_ 783 CRUISE_STATE: 3 XXX
+ SG_ CRUISE_ENABLED : 3|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1055 GEARBOX: 2 XXX
+ SG_ SPORTS_MODE : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ GEAR_SHIFTER : 5|3@0+ (1,0) [0|255] "" XXX
+
+BO_ 1107 LIGHTS: 8 XXX
+ SG_ RIGHT_BLINKER : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BLINKER : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ HEADLIGHTS : 5|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1108 DOORS_LIGHTS: 8 XXX
+ SG_ DOOR_CLOSED_RR : 40|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 41|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_CLOSED_RL : 42|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 43|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_CLOSED_FL : 44|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
+ SG_ DOOR_CLOSED_FR : 46|1@0+ (1,0) [0|3] "" XXX
+ SG_ DOOR_OPEN_FR : 47|1@0+ (1,0) [0|3] "" XXX
+ SG_ BOOT_OPEN : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE_LIGHT : 54|1@0+ (1,0) [0|1] "" XXX
+ SG_ USER_BRAKE_PRESSED : 23|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1228 PROPILOT_HUD_INFO_MSG: 8 XXX
+ SG_ NA_HIGH_ACCEL_TEMP : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_NA_HIGH_CABIN_TEMP : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_MALFUNCTION : 11|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_MALFUNCTION : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_MALFUNCTION : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_NA_CLEAN_REAR_CAMERA : 14|1@0+ (1,0) [0|1] "" XXX
+ SG_ NA_POOR_ROAD_CONDITIONS : 16|1@0+ (1,0) [0|1] "" XXX
+ SG_ CURRENTLY_UNAVAILABLE : 17|1@0+ (1,0) [0|1] "" XXX
+ SG_ SAFETY_SHIELD_OFF : 18|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_COLLISION_NA_FRONT_RADAR_OBSTRUCTION : 20|1@0+ (1,0) [0|1] "" XXX
+ SG_ PEDAL_MISSAPPLICATION_SYSTEM_ACTIVATED : 24|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_IMPACT_NA_RADAR_OBSTRUCTION : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ WARNING_DO_NOT_ENTER : 33|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_IMPACT_SYSTEM_OFF : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_IMPACT_MALFUNCTION : 35|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_COLLISION_MALFUNCTION : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ SIDE_RADAR_MALFUNCTION2 : 37|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_MALFUNCTION2 : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ FRONT_RADAR_MALFUNCTION2 : 39|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_NA_MSGS : 42|3@0+ (1,0) [0|7] "" XXX
+ SG_ BOTTOM_MSG : 45|3@0+ (1,0) [0|7] "" XXX
+ SG_ HANDS_ON_WHEEL_WARNING : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ WARNING_STEP_ON_BRAKE_NOW : 51|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_NA_FRONT_CAMERA_OBSTRUCTED : 52|1@0+ (1,0) [0|1] "" XXX
+ SG_ PROPILOT_NA_HIGH_CABIN_TEMP : 53|1@0+ (1,0) [0|1] "" XXX
+ SG_ WARNING_PROPILOT_MALFUNCTION : 54|1@0+ (1,0) [0|3] "" XXX
+ SG_ ACC_UNAVAILABLE_HIGH_CABIN_TEMP : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ ACC_NA_FRONT_CAMERA_IMPARED : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown07 : 7|7@0+ (1,0) [0|127] "" XXX
+ SG_ unknown10 : 10|2@0+ (1,0) [0|3] "" XXX
+ SG_ unknown15 : 15|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown23 : 23|3@0+ (1,0) [0|7] "" XXX
+ SG_ unknown19 : 19|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown31 : 31|6@0+ (1,0) [0|63] "" XXX
+ SG_ unknown32 : 32|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown46 : 46|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown50 : 50|3@0+ (1,0) [0|7] "" XXX
+ SG_ unknown55 : 55|1@0+ (1,0) [0|1] "" XXX
+ SG_ unknown61 : 61|6@0+ (1,0) [0|63] "" XXX
+
+BO_ 1227 LKAS_SETTINGS: 8 XXX
+ SG_ LKAS_ENABLED : 51|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 1273 HUD: 7 XXX
+ SG_ SEATBELT_DRIVER_LATCHED : 25|1@0+ (1,0) [0|1] "" XXX
+ SG_ SPEED_MPH : 5|1@0+ (1,0) [0|1] "" XXX
+
+VAL_ 1055 GEAR_SHIFTER 6 "L" 4 "D" 3 "N" 2 "R" 1 "P" ;
+VAL_ 1228 PROPILOT_NA_MSGS 0 "NO_MSG" 1 "NA_FRONT_CAMERA_IMPARED" 2 "STEERING_ASSIST_ON_STANDBY" 3 "NA_PARKING_ASSIST_ENABLED" 4 "STEER_ASSIST_CURRENTLY_NA" 5 "NA_BAD_WEATHER" 6 "NA_PARK_BRAKE_ON" 7 "NA_SEATBELT_NOT_FASTENED" ;
+VAL_ 1228 BOTTOM_MSG 0 "OK_STEER_ASSIST_SETTINGS" 1 "NO_MSG" 2 "PRESS_SET_TO_SET_SPEED" 3 "PRESS_RES_SET_TO_CHANGE_SPEED" 4 "PRESS_RES_TO_RESTART" 5 "NO_MSG" 6 "CRUISE_NOT_AVAIL" 7 "NO_MSG" ;
+VAL_ 689 FOLLOW_DISTANCE 0 "NO_FOLLOW_DISTANCE" 1 "FOLLOW_DISTANCE_1" 2 "FOLLOW_DISTANCE_2" 3 "FOLLOW_DISANCE_3" ;
+VAL_ 689 AUDIBLE_TONE 0 "NO_TONE" 1 "CONT" 2 "FAST_BEEP_CONT" 3 "TRIPLE_FAST_BEEP_CONT" 4 "SLOW_BEEP_CONT" 5 "QUAD_SLOW_BEEP_CONT" 6 "SINGLE_BEEP_ONCE" 7 "DOUBLE_BEEP_ONCE" ;
+VAL_ 689 SMALL_STEERING_WHEEL_ICON 0 "NO_ICON" 1 "GRAY_ICON" 2 "GRAY_ICON_FLASHING" 3 "GREEN_ICON" 4 "GREEN_ICON_FLASHING" 5 "RED_ICON" 6 "RED_ICON_FLASHING" 7 "YELLOW_ICON" ;
+VAL_ 689 LARGE_STEERING_WHEEL_ICON 0 "NO_STEERINGWHEEL" 1 "GRAY_STEERINGWHEEL" 2 "GREEN_STEERINGWHEEL" 3 "GREEN_STEERINGWHEEL_FLASHING" ;
diff --git a/opendbc/subaru_forester_2017_generated.dbc b/opendbc/subaru_forester_2017_generated.dbc
new file mode 100644
index 00000000000000..c1ef35fbc1d67f
--- /dev/null
+++ b/opendbc/subaru_forester_2017_generated.dbc
@@ -0,0 +1,258 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _subaru_preglobal_2015.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX X
+
+
+BO_ 2 Steering: 8 XXX
+ SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
+ SG_ Counter : 27|3@0+ (1,0) [0|7] "" XXX
+ SG_ Checksum : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 208 G_Sensor: 8 XXX
+ SG_ Steering_Angle : 0|16@1- (-0.1,0) [-500|500] "" XXX
+ SG_ Lateral : 16|16@1- (-0.0035,1) [-255|255] "" XXX
+ SG_ Longitudinal : 48|16@1- (-0.00035,0) [-255|255] "" XXX
+
+BO_ 209 Brake_Pedal: 8 XXX
+ SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
+ SG_ Brake_Pedal : 16|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 210 Brake_2: 8 XXX
+ SG_ Brake_Light : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Related : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Left_Brake : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 211 Brake_Type: 8 XXX
+ SG_ Brake_Light : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Speed_Counter : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Cruise_On : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal_On : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 48|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 212 Wheel_Speeds: 8 XXX
+ SG_ FL : 0|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ RL : 32|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ RR : 48|16@1+ (0.0592,0) [0|255] "KPH" XXX
+
+BO_ 320 Throttle: 8 XXX
+ SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Not_Full_Throttle : 14|1@1+ (1,0) [0|1] "" XXX
+ SG_ Engine_RPM : 16|14@1+ (1,0) [0|32767] "" XXX
+ SG_ Off_Throttle : 30|1@1+ (1,0) [0|1] "" XXX
+ SG_ Throttle_Cruise : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Body : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 321 Engine: 8 XXX
+ SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
+ SG_ Engine_Stop : 15|1@1+ (1,0) [0|1] "" XXX
+ SG_ Wheel_Torque : 16|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
+
+BO_ 324 CruiseControl: 8 XXX
+ SG_ OnOffButton : 2|1@1+ (1,0) [0|1] "" XXX
+ SG_ SET_BUTTON : 3|1@1+ (1,0) [0|1] "" XXX
+ SG_ RES_BUTTON : 4|1@1+ (1,0) [0|1] "" XXX
+ SG_ Button : 13|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_On : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal_On : 51|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 328 Transmission: 8 XXX
+ SG_ Manual_Gear : 4|4@1+ (1,0) [0|15] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
+ SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
+ SG_ Paddle_Shift : 60|2@1+ (1,0) [0|3] "" XXX
+
+BO_ 329 CVT_Ratio: 8 XXX
+
+BO_ 336 Brake_Pressure: 8 XXX
+ SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Pressure_Left : 8|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 338 Stalk: 8 XXX
+ SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Brake_Light : 52|1@1+ (1,0) [0|1] "" XXX
+ SG_ Runlights : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ Headlights : 59|1@1+ (1,0) [0|1] "" XXX
+ SG_ Highbeam : 60|1@1+ (1,0) [0|1] "" XXX
+ SG_ Wiper : 62|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 352 ES_Brake: 8 XXX
+ SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Light : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Error : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_On : 22|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 353 ES_CruiseThrottle: 8 XXX
+ SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Cruise_Activated : 16|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 17|3@1+ (1,0) [0|7] "" XXX
+ SG_ Brake_On : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ DistanceSwap : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Standstill : 22|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ CloseDistance : 24|8@1+ (0.0196,0) [0|255] "m" XXX
+ SG_ Signal4 : 32|9@1+ (1,0) [0|255] "" XXX
+ SG_ Standstill_2 : 41|1@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Error : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal5 : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 44|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal6 : 47|1@1+ (1,0) [0|1] "" XXX
+ SG_ Button : 48|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal7 : 51|5@1+ (1,0) [0|31] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 354 ES_RPM: 8 XXX
+ SG_ Brake : 8|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 9|1@1+ (1,0) [0|1] "" XXX
+ SG_ RPM : 16|16@1+ (1,0) [0|65535] "" XXX
+ SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
+
+BO_ 356 ES_LKAS: 8 XXX
+ SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
+ SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 359 ES_LDW: 8 XXX
+ SG_ All_depart_2015 : 0|1@1+ (1,0) [0|1] "" XXX
+ SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1All_Depart : 28|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig2All_Depart : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Active : 37|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|1] "" XXX
+ SG_ Left_Depart_Front : 51|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig3All_Depart : 52|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 604 BSD_RCTA: 8 XXX
+ SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ State : 5|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_ADJACENT : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_ADJACENT : 33|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_APPROACHING : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_APPROACHING : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_RCTA : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_RCTA : 47|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 642 Dashlights: 8 XXX
+ SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BLINKER : 44|1@1+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BLINKER : 45|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 880 Steering_Torque_2: 8 XXX
+ SG_ Steering_Voltage_Flat : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
+ SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 884 BodyInfo: 8 XXX
+ SG_ DOOR_OPEN_FR : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FL : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 26|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_Hatch : 28|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 864 Engine_Temp: 8 XXX
+ SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
+ SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
+ SG_ Cruise_Activated : 45|1@1+ (1,0) [0|1] "" XXX
+ SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 866 Fuel: 8 XXX
+
+BO_ 1745 Dash_State: 8 XXX
+ SG_ Units : 15|1@1+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
+CM_ SG_ 320 Throttle_Body "Throttle related";
+CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
+CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
+CM_ SG_ 353 Button "1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 resume deep";
+CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
+CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
+CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
+CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
+CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
+CM_ SG_ 359 Sig1All_Depart "Left and right depart";
+CM_ SG_ 359 Sig2All_Depart "Left and right depart";
+CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
+CM_ SG_ 604 R_APPROACHING "Faster car approaching in far right lane";
+CM_ SG_ 604 L_APPROACHING "Faster car approaching in far left lane";
+CM_ SG_ 604 R_RCTA "Rear cross traffic alert, only when in R gear";
+CM_ SG_ 604 L_RCTA "Rear cross traffic alert, only when in R gear";
+CM_ SG_ 642 Counter "Affected by signals";
+CM_ SG_ 642 SEATBELT_FL "Driver seatbelt";
+CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
+
+VAL_ 328 Gear 0 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 14 "R" 15 "P";
+VAL_ 1745 Units 0 "Metric" 1 "Imperial";
+
+CM_ "subaru_forester_2017.dbc starts here";
+
+
+BO_ 355 ES_DashStatus: 8 XXX
+ SG_ Not_Ready_Startup : 4|2@1+ (1,0) [0|3] "" XXX
+ SG_ Cruise_On : 16|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 40|3@1+ (1,0) [0|7] "" XXX
+ SG_ Cruise_Activated : 54|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 881 Steering_Torque: 8 XXX
+ SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|1000] "" XXX
+ SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-1000|1000] "" XXX
+ SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
+ SG_ Steering_Angle : 40|16@1- (-0.033,0) [-600|600] "" XXX
diff --git a/opendbc/subaru_global_2017.dbc b/opendbc/subaru_global_2017.dbc
deleted file mode 100644
index 0e2c87f8137d4c..00000000000000
--- a/opendbc/subaru_global_2017.dbc
+++ /dev/null
@@ -1,363 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX X
-
-
-BO_ 2 Steering: 8 XXX
- SG_ Counter : 25|3@1+ (1,0) [0|7] "" XXX
- SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ Steering_Angle : 7|16@0- (0.1,0) [0|65535] "" XXX
-
-BO_ 64 Throttle: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|255] "" XXX
- SG_ Off_Accel : 60|4@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_3 : 56|4@1+ (1,0) [0|255] "" XXX
- SG_ Engine_RPM : 16|12@1+ (1,0) [0|255] "" XXX
- SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
- SG_ Throttle_Combo : 55|8@1+ (1,0) [0|255] "" XXX
- SG_ Throttle_Pedal : 32|8@1+ (1,0) [0|255] "" XXX
-
-
-BO_ 65 NEW_MSG_1: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_4 : 32|12@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 16|12@1+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_5 : 31|1@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_6 : 48|8@1+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_7 : 59|2@0+ (1,0) [0|255] "" XXX
-
-BO_ 72 NEW_MSG_2: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 40|16@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 38|3@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 16|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 316 NEW_MSG_3: 8 XXX
-
-BO_ 326 Cruise_Buttons: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Signal1 : 12|30@1+ (1,0) [0|1073741823] "" XXX
- SG_ Main : 42|1@1+ (1,0) [0|1] "" XXX
- SG_ set : 43|1@1+ (1,0) [0|1] "" XXX
- SG_ Resume : 44|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal2 : 45|19@1+ (1,0) [0|524287] "" XXX
-
-BO_ 315 G_Sensor: 8 XXX
- SG_ longitudinal : 63|8@0- (1,0) [0|255] "" XXX
- SG_ Latitudinal : 48|8@1- (1,0) [0|255] "" XXX
-
-BO_ 314 Wheel_Speeds: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ FR : 12|13@1+ (0.057,0) [0|255] "kph" XXX
- SG_ RR : 25|13@1+ (0.057,0) [0|255] "kph" XXX
- SG_ FL : 51|13@1+ (0.057,0) [0|255] "kph" XXX
- SG_ RL : 38|13@1+ (0.057,0) [0|255] "kph" XXX
-
-BO_ 73 NEW_MSG_5: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 32|8@1+ (1,0) [0|4095] "" XXX
- SG_ NEW_SIGNAL_2 : 24|8@1+ (1,0) [0|127] "" XXX
-
-BO_ 280 NEW_MSG_6: 8 XXX
- SG_ NEW_SIGNAL_1 : 12|12@1- (1,0) [0|4095] "" XXX
- SG_ NEW_SIGNAL_2 : 48|8@1- (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 61|1@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_4 : 40|4@1+ (1,0) [0|255] "" XXX
-
-BO_ 281 Steering_Torque: 8 XXX
- SG_ checksum : 0|8@1+ (1,0) [0|3] "" XXX
- SG_ counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Steer_Torque_Sensor : 16|11@1- (-1,0) [0|3] "" XXX
- SG_ Steering_Angle : 32|16@1- (-0.0217,0) [0|255] "" X
- SG_ Steer_Torque_Output : 48|11@1- (-1,0) [0|31] "" XXX
-
-BO_ 312 Brake_Pressure_L_R: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|31] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|3] "" XXX
- SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
- SG_ Brake_1 : 48|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 313 Brake_Pedal: 8 XXX
- SG_ Brake_Pedal_On : 34|1@1+ (1,0) [0|7] "" XXX
- SG_ Brake_Pedal : 36|12@1+ (1,0) [0|65535] "" XXX
-
-BO_ 290 ES_LKAS: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ LKAS_Output : 16|13@1- (-1,0) [0|3] "" XXX
- SG_ LKAS_Request : 29|1@0+ (1,0) [0|3] "" XXX
- SG_ SET_1 : 12|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 722 NEW_MSG_10: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 27|3@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 56|2@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_5 : 45|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 544 ES_Brake: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Brake_Pressure : 16|16@1+ (1,0) [0|255] "" XXX
- SG_ __Status : 36|4@1+ (1,0) [0|63] "" XXX
-
-BO_ 545 ES_Distance: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Signal1 : 12|20@1+ (1,0) [0|15] "" XXX
- SG_ Signal2 : 32|24@1+ (1,0) [0|15] "" XXX
- SG_ Main : 56|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal3 : 57|7@1+ (1,0) [0|1] "" XXX
-
-BO_ 546 ES_Status: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ RPM : 16|12@1+ (1,0) [0|255] "" XXX
- SG_ Cruise_Activated : 29|1@0+ (1,0) [0|3] "" XXX
- SG_ Cruise_Brake : 30|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 554 ES_Blank: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ SET_65535 : 39|16@1+ (1,0) [0|16777215] "" XXX
- SG_ SET_1 : 13|1@1+ (1,0) [0|7] "" XXX
-
-BO_ 557 NEW_MSG_14: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 576 CruiseControl: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_5 : 42|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_On : 40|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_Activated : 41|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 577 NEW_MSG_16: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 16|12@1+ (1,0) [0|255] "" XXX
-
-BO_ 552 NEW_MSG_17: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 48|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 912 Dashlights: 8 XXX
- SG_ NEW_SIGNAL_1 : 32|1@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_2 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ RIGHT_BLINKER : 51|1@1+ (1,0) [0|1] "" XXX
- SG_ LEFT_BLINKER : 50|1@1+ (1,0) [0|3] "" XXX
- SG_ SEATBELT_FL : 48|1@1+ (1,0) [0|1] "" XXX
-
-BO_ 940 BodyInfo: 8 XXX
- SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 32|1@1+ (1,0) [0|255] "" XXX
- SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|3] "" XXX
- SG_ DOOR_OPEN_RL : 34|1@1+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 35|1@1+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_TRUNK : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
- SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
- SG_ Lowbeam : 57|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 801 ES_DashStatus: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_9 : 60|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_10 : 49|2@1+ (1,0) [0|3] "" XXX
- SG_ Brake_Pedal : 51|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
- SG_ Cruise_Activated : 36|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|3] "" XXX
- SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ Car_Follow : 52|1@1+ (1,0) [0|3] "" XXX
- SG_ ACC_Distance : 28|3@1+ (1,0) [0|3] "" XXX
-
-BO_ 802 ES_LKAS_State: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Keep_Hands_On_Wheel : 12|1@1+ (1,0) [0|1] "" XXX
- SG_ Empty_Box : 13|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal1 : 14|3@1+ (1,0) [0|7] "" XXX
- SG_ LKAS_ACTIVE : 17|1@1+ (1,0) [0|3] "" XXX
- SG_ Signal2 : 18|5@1+ (1,0) [0|7] "" XXX
- SG_ Backward_Speed_Limit_Menu : 23|1@1+ (1,0) [0|1] "" XXX
- SG_ LKAS_ENABLE_3 : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal3 : 25|1@1+ (1,0) [0|1] "" XXX
- SG_ LKAS_ENABLE_2 : 26|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal4 : 27|1@1+ (1,0) [0|1] "" XXX
- SG_ LKAS_Left_Line_Visible : 28|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal6 : 29|1@1+ (1,0) [0|1] "" XXX
- SG_ LKAS_Right_Line_Visible : 30|1@1+ (1,0) [0|1] "" XXX
- SG_ Signal7 : 31|1@1+ (1,0) [0|1] "" XXX
- SG_ FCW_Cont_Beep : 32|1@1+ (1,0) [0|1] "" XXX
- SG_ FCW_Repeated_Beep : 33|1@1+ (1,0) [0|1] "" XXX
- SG_ Throttle_Management_Activated : 34|1@1+ (1,0) [0|1] "" XXX
- SG_ Traffic_light_Ahead : 35|1@1+ (1,0) [0|1] "" XXX
- SG_ Right_Depart : 36|1@1+ (1,0) [0|3] "" XXX
- SG_ Signal5 : 37|27@1+ (1,0) [0|1] "" XXX
-
-BO_ 805 ES_NEW_MSG_22: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 22|2@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_1 : 14|1@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 15|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 808 NEW_MSG_23: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 837 NEW_MSG_24: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 40|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 32|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_5 : 24|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 838 NEW_MSG_25: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 40|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 842 NEW_MSG_26: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 32|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 915 NEW_MSG_27: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 32|9@1+ (1,0) [0|255] "" XXX
-
-BO_ 1788 NEW_MSG_28: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 40|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_4 : 48|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 16|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 816 NEW_MSG_29: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 826 NEW_MSG_30: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 839 NEW_MSG_31: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 2015 NEW_MSG_32: 8 XXX
- SG_ NEW_SIGNAL_2 : 16|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 2024 NEW_MSG_33: 8 XXX
- SG_ NEW_SIGNAL_1 : 24|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 0|3@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 32|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 1614 NEW_MSG_34: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1617 NEW_MSG_35: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1632 NEW_MSG_36: 8 XXX
- SG_ NEW_SIGNAL_1 : 55|16@0+ (1,0) [0|255] "" XXX
-
-BO_ 1650 NEW_MSG_37: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1657 NEW_MSG_38: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1658 NEW_MSG_39: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 33|1@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 31|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 1677 Dash_State: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ Units : 29|3@1+ (1,0) [0|7] "" XXX
-
-BO_ 1743 NEW_MSG_41: 8 XXX
- SG_ Checksum : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1785 NEW_MSG_42: 8 XXX
- SG_ NEW_SIGNAL_1 : 0|4@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 21|1@1+ (1,0) [0|31] "" XXX
- SG_ NEW_SIGNAL_3 : 17|1@1+ (1,0) [0|7] "" XXX
-
-BO_ 1759 NEW_MSG_43: 8 XXX
- SG_ NEW_SIGNAL_1 : 17|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 1786 NEW_MSG_44: 8 XXX
- SG_ NEW_SIGNAL_1 : 0|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2 : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 8|8@1+ (1,0) [0|15] "" XXX
-
-BO_ 1787 NEW_MSG_45: 8 XXX
- SG_ NEW_SIGNAL_1 : 0|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2 : 8|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 16|8@1+ (1,0) [0|255] "" XXX
-
-
-
-
-CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
-CM_ SG_ 940 Highbeam "01 = low beam, 11 = high beam";
-CM_ SG_ 805 NEW_SIGNAL_3 "always 3";
-CM_ SG_ 805 NEW_SIGNAL_4 "always 1";
-CM_ SG_ 1677 Units "1 = imperial, 6 = metric";
diff --git a/opendbc/subaru_global_2017_generated.dbc b/opendbc/subaru_global_2017_generated.dbc
new file mode 100644
index 00000000000000..f17667e5624e24
--- /dev/null
+++ b/opendbc/subaru_global_2017_generated.dbc
@@ -0,0 +1,306 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _subaru_global.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX X
+
+
+BO_ 2 Steering: 8 XXX
+ SG_ Steering_Angle : 7|16@0- (0.1,0) [0|65535] "" XXX
+ SG_ Counter : 25|3@1+ (1,0) [0|7] "" XXX
+ SG_ CHECKSUM : 32|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 64 Throttle: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Engine_RPM : 16|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Throttle_Pedal : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Cruise : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Combo : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Signal1 : 56|4@1+ (1,0) [0|15] "" XXX
+ SG_ Off_Accel : 60|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 316 Brake_Status: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|46@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Brake : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 59|3@1+ (1,0) [0|1] "" XXX
+ SG_ Brake : 62|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 63|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 326 Cruise_Buttons: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|30@1+ (1,0) [0|1073741823] "" XXX
+ SG_ Main : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Set : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ Resume : 44|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 45|19@1+ (1,0) [0|524287] "" XXX
+
+BO_ 315 G_Sensor: 8 XXX
+ SG_ Lateral : 48|8@1- (-0.1,0) [0|255] "m/s2" XXX
+ SG_ Longitudinal : 56|8@1- (-0.1,0) [0|255] "m/s2" XXX
+
+BO_ 314 Wheel_Speeds: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ FR : 12|13@1+ (0.057,0) [0|255] "kph" XXX
+ SG_ RR : 25|13@1+ (0.057,0) [0|255] "kph" XXX
+ SG_ FL : 51|13@1+ (0.057,0) [0|255] "kph" XXX
+ SG_ RL : 38|13@1+ (0.057,0) [0|255] "kph" XXX
+
+BO_ 280 STOP_START: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ State : 63|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 281 Steering_Torque: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Steer_Error_1 : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ Steer_Torque_Sensor : 16|11@1- (-1,0) [-1000|1000] "" XXX
+ SG_ Steer_Error_2 : 28|1@1+ (1,0) [0|1] "" XXX
+ SG_ Steer_Warning : 29|1@1+ (1,0) [0|1] "" XXX
+ SG_ Steering_Angle : 32|16@1- (-0.0217,0) [-600|600] "" X
+ SG_ Steer_Torque_Output : 48|11@1- (-1,0) [-1000|1000] "" XXX
+
+BO_ 312 Brake_Pressure_L_R: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Brake_1 : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_2 : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 313 Brake_Pedal: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Speed : 16|12@1+ (0.05625,0) [0|255] "kph" XXX
+ SG_ Signal2 : 28|6@1+ (1,0) [0|63] "" XXX
+ SG_ Brake_Lights : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal : 36|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Signal4 : 48|16@1+ (1,0) [0|65535] "" XXX
+
+BO_ 290 ES_LKAS: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ SET_1 : 12|1@0+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Output : 16|13@1- (-1,0) [-8191|8191] "" XXX
+ SG_ LKAS_Request : 29|1@0+ (1,0) [0|1] "" XXX
+
+BO_ 544 ES_Brake: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Brake_Pressure : 16|16@1+ (1,0) [0|65535] "" XXX
+ SG_ Signal2 : 32|4@1+ (1,0) [0|15] "" XXX
+ SG_ Cruise_Brake_Lights : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Brake_Fault : 37|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Brake_Active : 38|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 39|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 40|24@1+ (1,0) [0|16777215] "" XXX
+
+BO_ 577 Cruise_Status: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Cruise_On : 54|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 55|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Active : 57|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 552 BSD_RCTA: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ R_ADJACENT : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_ADJACENT : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_APPROACHING : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_APPROACHING : 59|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 912 Dashlights: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ ICY_ROAD : 32|2@1+ (1,0) [0|3] "" XXX
+ SG_ SEATBELT_FL : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BLINKER : 50|1@1+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BLINKER : 51|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 940 BodyInfo: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ DOOR_OPEN_FL : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_TRUNK : 36|1@0+ (1,0) [0|1] "" XXX
+ SG_ DASH_BTN_LIGHTS : 56|1@0+ (1,0) [0|1] "" XXX
+ SG_ Lowbeam : 57|1@1+ (1,0) [0|1] "" XXX
+ SG_ Highbeam : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ FOG_LIGHTS2 : 60|1@1+ (1,0) [0|1] "" XXX
+ SG_ WIPERS : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ BRAKE : 54|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 801 ES_DashStatus: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ PCB_Off : 12|1@1+ (1,0) [0|1] "" XXX
+ SG_ LDW_Off : 13|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal1 : 14|10@1+ (1,0) [0|1023] "" XXX
+ SG_ Cruise_Soft_Disable : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 25|3@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Distance : 28|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal3 : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ Conventional_Cruise : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal4 : 33|2@1+ (1,0) [0|3] "" XXX
+ SG_ Cruise_Disengaged : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal5 : 37|3@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Set_Speed : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ Cruise_Fault : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_On : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal6 : 50|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Lights : 51|1@1+ (1,0) [0|1] "" XXX
+ SG_ Car_Follow : 52|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal7 : 53|3@1+ (1,0) [0|1] "" XXX
+ SG_ Far_Distance : 56|4@1+ (1,0) [0|15] "" XXX
+ SG_ Cruise_State : 60|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 802 ES_LKAS_State: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Keep_Hands_On_Wheel : 12|1@1+ (1,0) [0|1] "" XXX
+ SG_ Empty_Box : 13|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal1 : 14|3@1+ (1,0) [0|7] "" XXX
+ SG_ LKAS_ACTIVE : 17|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 18|5@1+ (1,0) [0|31] "" XXX
+ SG_ Backward_Speed_Limit_Menu : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_ENABLE_3 : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Left_Line_Light_Blink : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_ENABLE_2 : 26|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Right_Line_Light_Blink : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Left_Line_Visible : 28|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Left_Line_Green : 29|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Right_Line_Visible : 30|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Right_Line_Green : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Alert : 32|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal3 : 36|28@1+ (1,0) [0|1] "" XXX
+
+BO_ 722 AC_State: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ AC_Mode : 37|3@1+ (1,0) [0|1] "" XXX
+ SG_ AC_ON : 24|2@1+ (1,0) [0|1] "" XXX
+
+BO_ 1677 Dash_State: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Units : 29|3@1+ (1,0) [0|7] "" XXX
+
+CM_ SG_ 64 Throttle_Combo "Throttle Cruise + Pedal";
+CM_ SG_ 313 Brake_Lights "Driver or Cruise Brake on";
+CM_ SG_ 544 Cruise_Brake_Lights "1 = switch on brake lights";
+CM_ SG_ 801 PCB_Off "Pre-Collision Braking off";
+CM_ SG_ 801 Brake_Lights "Driver or Cruise brake on";
+CM_ SG_ 801 Cruise_State "0 = Normal, 1 = Hold+User Brake, 2 = Ready, 3 = Hold";
+CM_ SG_ 801 Far_Distance "1=0-5m, 2=5-10m, 3=10-15m, 4=15-20m, 5=20-25m, 6=25-30m, 7=30-35m, 8=35-40m, 9=40-45m, 10=45-50m, 11=50-55m, 12=55-60m, 13=60-65m, 14=65-70m, 15=75m+";
+CM_ SG_ 801 Cruise_Soft_Disable "Eyesight soft disable (eg direct sunlight)";
+CM_ SG_ 802 LKAS_Alert "1 = FCW_Cont_Beep, 2 = FCW_Repeated_Beep, 3 = Throttle_Management_Activated_Warning, 4 = Throttle_Management_Activated_Alert, 8 = Traffic_Light_Ahead, 9 = Apply_Brake_to_Hold Position, 11 = LDW_Right, 12 = LDW_Left, 13 = Stay_Alert, 14 = Lead_Vehicle_Start_Alert";
+CM_ SG_ 912 ICY_ROAD "1 = DASHLIGHT ON, 2 = WARNING, 3 = OFF";
+CM_ SG_ 940 Highbeam "01 = low beam, 11 = high beam";
+CM_ SG_ 940 FOG_LIGHTS2 "yellow fog light in the dash";
+CM_ SG_ 1677 Units "AU/EU: 1 = imperial, 3 = metric US: 3 = imperial, 4 = metric";
+
+CM_ "subaru_global_2017.dbc starts here";
+
+
+BO_ 72 Transmission: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Gear : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ RPM : 40|16@1+ (1,0) [0|65535] "" XXX
+
+BO_ 73 CVT: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ CVT_Gear : 24|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 545 ES_Distance: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|3@1+ (1,0) [0|7] "" XXX
+ SG_ Cruise_Fault : 15|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Throttle : 16|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Signal2 : 28|4@1+ (1,0) [0|15] "" XXX
+ SG_ Car_Follow : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 33|3@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Brake_Active : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ Distance_Swap : 37|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_EPB : 38|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal4 : 39|1@0+ (1,0) [0|1] "" XXX
+ SG_ Close_Distance : 40|8@1+ (1,0) [0|1] "" XXX
+ SG_ Signal5 : 48|8@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Cancel : 56|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Set : 57|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Resume : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal6 : 59|5@1+ (1,0) [0|1] "" XXX
+
+BO_ 546 ES_Status: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|3@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Fault : 15|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_RPM : 16|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Signal2 : 28|1@0+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 29|1@0+ (1,0) [0|1] "" XXX
+ SG_ Brake_Lights : 30|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Hold : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 32|32@1+ (1,0) [0|1] "" XXX
+
+BO_ 576 CruiseControl: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Signal1 : 12|28@1+ (1,0) [0|268435455] "" XXX
+ SG_ Cruise_On : 40|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 41|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 42|22@1+ (1,0) [0|4194303] "" XXX
+
+CM_ SG_ 545 Cruise_Throttle "RPM-like output signal";
+CM_ SG_ 545 Cruise_EPB "1 = Electric Parking Brake set";
+CM_ SG_ 545 Distance_Swap "Switch from Close to Far distance";
+CM_ SG_ 546 Cruise_RPM "ES RPM output for ECM and TCM";
+CM_ SG_ 546 Signal3 "0 when cruise_activated = 1";
+VAL_ 72 Gear 2 "N" 3 "R" 4 "P" 121 "D" 137 "1" 145 "2" 153 "3" 161 "4" 169 "5" 177 "6";
diff --git a/opendbc/subaru_outback_2015_eyesight.dbc b/opendbc/subaru_outback_2015_eyesight.dbc
deleted file mode 100644
index 2f796558501817..00000000000000
--- a/opendbc/subaru_outback_2015_eyesight.dbc
+++ /dev/null
@@ -1,372 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 2 Steering: 8 XXX
- SG_ NEW_SIGNAL_1 : 31|4@0- (1,0) [0|65535] "" XXX
- SG_ Counter : 25|3@1+ (1,0) [0|15] "" XXX
- SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 22|3@0+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_6 : 24|1@1+ (1,0) [0|3] "" XXX
- SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
-
-BO_ 208 G_Sensor: 8 XXX
- SG_ NEW_SIGNAL_3 : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ Steering_Angle : 0|16@1- (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_1 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ _Latitudinal : 16|16@1- (0.0035,1) [0|65535] "" XXX
- SG_ _Longitudinal : 48|16@1- (0.000035,0) [0|255] "" XXX
-
-BO_ 209 Brake_Pedal: 8 XXX
- SG_ NEW_SIGNAL_1 : 26|1@1+ (1,0) [0|3] "" XXX
- SG_ Brake_Pedal : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 31|1@1+ (1,0) [0|255] "" XXX
- SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
-
-BO_ 210 Brake_2: 8 XXX
- SG_ NEW_SIGNAL_1 : 46|1@0+ (1,0) [0|4294967295] "" XXX
- SG_ NEW_SIGNAL_2 : 39|3@0+ (1,0) [0|7] "" XXX
- SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
- SG_ Left_Brake : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ Brake_Light : 35|1@1+ (1,0) [0|15] "" XXX
- SG_ Brake_Related : 36|1@1+ (1,0) [0|255] "" XXX
-
-BO_ 211 Brake_Type: 8 XXX
- SG_ NEW_SIGNAL_4 : 28|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 7|1@0+ (1,0) [0|4294967295] "" XXX
- SG_ NEW_SIGNAL_2 : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ Speed_Counter : 39|8@0+ (1,0) [0|15] "" XXX
- SG_ Counter : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ Brake_Light : 21|1@0+ (1,0) [0|3] "" XXX
- SG_ Brake_Cruise_On : 42|1@0+ (1,0) [0|3] "" XXX
- SG_ Brake_Pedal_On : 46|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 212 Wheel_Speeds: 8 XXX
- SG_ FL : 0|16@1+ (0.0592,0) [2|255] "KPH" XXX
- SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
- SG_ RL : 32|16@1+ (0.0592,0) [0|255] "" XXX
- SG_ RR : 48|16@1+ (0.0592,0) [0|127] "KPH" XXX
-
-BO_ 320 Throttle: 8 XXX
- SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|3] "" XXX
- SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
- SG_ Engine_RPM : 16|14@1+ (1,0) [0|15] "" XXX
- SG_ Off_Throttle : 30|1@0+ (1,0) [0|3] "" XXX
- SG_ Throttle_Cruise : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ Throttle_Body_ : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 63|1@0+ (1,0) [0|15] "" XXX
- SG_ Not_Full_Throttle : 14|1@0+ (1,0) [0|15] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
-
-BO_ 321 undefined: 8 XXX
- SG_ NEW_SIGNAL_7 : 59|2@1+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_6 : 46|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_2 : 47|1@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_5 : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 54|2@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_8 : 31|4@0+ (1,0) [0|15] "" XXX
- SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
- SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
- SG_ Wheel_Torque : 16|12@1+ (1,0) [0|255] "" XXX
- SG_ Engine_Stop : 15|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 324 CruiseControl: 8 XXX
- SG_ Cruise_On : 48|1@0+ (1,0) [0|3] "" XXX
- SG_ OnOffButton : 2|1@1+ (1,0) [0|3] "" XXX
- SG_ SET_BUTTON : 3|1@0+ (1,0) [0|3] "" XXX
- SG_ RES_BUTTON : 4|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_6 : 50|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 28|5@0+ (1,0) [0|16777215] "" XXX
- SG_ NEW_SIGNAL_9 : 15|1@1+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_2 : 8|1@0+ (1,0) [0|255] "" XXX
- SG_ Cruise_Activated : 49|1@0+ (1,0) [0|7] "" XXX
- SG_ Brake_Pedal_On : 51|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_1 : 23|8@0+ (1,-124) [0|255] "" XXX
- SG_ Button : 13|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 328 Transmission: 8 XXX
- SG_ Counter : 11|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_7 : 63|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ Paddle_Shift : 60|2@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 31|1@0+ (1,0) [0|3] "" XXX
- SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_5 : 43|1@0+ (1,0) [0|65535] "" XXX
- SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
- SG_ Manual_Gear : 4|4@1+ (1,0) [0|255] "" XXX
-
-BO_ 329 CVT_Ratio: 8 XXX
- SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 40|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 11|4@0+ (1,0) [0|65535] "" XXX
- SG_ NEW_SIGNAL_1 : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 336 Brake_Pressure: 8 XXX
- SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|15] "" XXX
- SG_ Brake_Pressure_Left : 15|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 338 Stalk: 8 XXX
- SG_ Wiper : 62|1@0+ (1,0) [0|3] "" XXX
- SG_ brake_light : 52|1@0+ (1,0) [0|3] "" XXX
- SG_ Headlights : 59|1@0+ (1,0) [0|3] "" XXX
- SG_ Runlights : 58|1@1+ (1,0) [0|3] "" XXX
- SG_ Highbeam : 60|1@0+ (1,0) [0|3] "" XXX
- SG_ Counter : 15|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 342 NEW_MSG_2: 8 XXX
-
-BO_ 346 Counter_3: 8 XXX
- SG_ Counter : 0|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 20|1@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2 : 57|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 352 ES_Brake: 8 XXX
- SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
- SG_ Checksum : 56|8@1+ (1,0) [0|7] "" XXX
- SG_ Brake_On : 22|1@0+ (1,0) [0|3] "" XXX
- SG_ Brake_Light : 20|1@0+ (1,0) [0|2047] "" XXX
- SG_ Cruise_Activated : 23|1@0+ (1,0) [0|3] "" XXX
- SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
- SG_ ES_Error : 21|1@0+ (1,0) [0|7] "" XXX
-
-BO_ 353 ES_CruiseThrottle: 8 XXX
- SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|255] "" XXX
- SG_ Counter_1 : 46|3@0+ (1,0) [0|15] "" XXX
- SG_ Wheel_stop : 22|1@0+ (1,0) [0|3] "" XXX
- SG_ CloseDistance : 24|8@1+ (1,0) [0|255] "" XXX
- SG_ Unknown : 18|1@1+ (1,0) [0|7] "" XXX
- SG_ Button_Speed_Down : 49|1@1+ (1,0) [0|3] "" XXX
- SG_ Button_Resume : 50|1@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3_Blank : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2_Blank : 48|1@1+ (1,0) [0|3] "" XXX
- SG_ Checksum : 56|8@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_9 : 17|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_Activatedish : 16|1@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_6_Blank : 23|1@0+ (1,0) [0|7] "" XXX
- SG_ DistanceSwap : 21|1@0+ (1,0) [0|3] "" XXX
- SG_ Brake_On : 20|1@0+ (1,0) [0|7] "" XXX
- SG_ ES_Error : 42|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 354 ES_RPM: 8 XXX
- SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
- SG_ Cruise_Activated : 9|1@0+ (1,0) [0|3] "" XXX
- SG_ Checksum : 39|8@0+ (1,0) [0|65535] "" XXX
- SG_ RPM : 16|16@1+ (1,0) [0|255] "" XXX
- SG_ Brake : 8|1@1+ (1,0) [0|7] "" XXX
-
-BO_ 356 ES_LKAS: 8 XXX
- SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
- SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
- SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
-
-BO_ 358 ES_DashStatus: 8 XXX
- SG_ Counter : 39|3@0+ (1,0) [0|7] "" XXX
- SG_ Obstacle_Distance : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ Cruise_Off : 22|1@0+ (1,0) [0|3] "" XXX
- SG_ Car_Follow : 46|1@1+ (1,0) [0|255] "" XXX
- SG_ Driver_Input : 20|1@0+ (1,0) [0|15] "" XXX
- SG_ WHEELS_MOVING_2015 : 19|1@1+ (1,0) [0|3] "" XXX
- SG_ Untitled_Blank : 18|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_6_Blank : 21|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_5_Blank : 33|1@1+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4_Blank : 34|1@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_1 : 35|1@0+ (1,0) [0|31] "" XXX
- SG_ Steep_Hill_Disengage : 44|1@0+ (1,0) [0|3] "" XXX
- SG_ ES_Error : 32|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_Activated : 17|1@1+ (1,0) [0|3] "" XXX
- SG_ Cruise_On : 16|1@1+ (1,0) [0|7] "" XXX
- SG_ Disengage_Alert : 15|2@0+ (1,0) [0|3] "" XXX
- SG_ 3SecondDisengage : 13|2@0+ (1,0) [0|3] "" XXX
- SG_ Not_Ready_Startup : 0|3@1+ (1,0) [0|7] "" XXX
- SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 359 ES_LDW: 8 XXX
- SG_ All_depart_2015 : 0|1@1+ (1,0) [0|255] "" XXX
- SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|3] "" XXX
- SG_ LKAS_Steer_Active_2017 : 37|1@0+ (1,0) [0|3] "" XXX
- SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|7] "" XXX
- SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|3] "" XXX
- SG_ Sig2All_Depart : 28|1@0+ (1,0) [0|3] "" XXX
- SG_ Sig1All_Depart : 31|1@0+ (1,0) [0|15] "" XXX
- SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|3] "" XXX
- SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|3] "" XXX
- SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|7] "" XXX
- SG_ Left_Depart_Front : 51|1@0+ (1,0) [0|3] "" XXX
- SG_ Sig3All_Depart : 52|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 392 Counter_0: 8 XXX
- SG_ Counter : 16|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 554 NEW_MSG_3: 8 XXX
- SG_ Counter : 0|4@1+ (1,0) [0|255] "" XXX
-
-BO_ 604 undefined: 8 XXX
-
-BO_ 640 NEW_MSG_10: 8 XXX
- SG_ NEW_SIGNAL_2 : 24|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 54|2@0+ (1,0) [0|15] "" XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 34|2@0+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_1 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 39|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_6 : 0|1@1+ (1,0) [0|7] "" XXX
- SG_ NEW_SIGNAL_7 : 38|1@0+ (1,0) [0|3] "" XXX
-
-BO_ 642 Dashlights: 8 XXX
- SG_ NEW_SIGNAL_2 : 32|1@1+ (1,0) [0|15] "" XXX
- SG_ Counter : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_1 : 0|12@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 34|2@1+ (1,0) [0|3] "" XXX
- SG_ LEFT_BLINKER : 44|1@0+ (1,0) [0|3] "" XXX
- SG_ RIGHT_BLINKER : 45|1@0+ (1,0) [0|3] "" XXX
- SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|3] "" XXX
-
-BO_ 644 NEW_MSG_8: 8 XXX
- SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 805 undefined: 8 XXX
-
-BO_ 880 Steer_Torque_2: 8 XXX
- SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 48|4@1- (1,0) [0|15] "" XXX
- SG_ Steering_Voltage_Flat : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_1 : 8|1@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 30|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_4_2017 : 52|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_5_2017 : 54|1@0+ (1,0) [0|3] "" XXX
- SG_ Steer_Torque_Sensor : 32|8@1- (-1,0) [0|255] "" XXX
-
-BO_ 881 Steering_Torque: 8 XXX
- SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|16500] "" XXX
- SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-16500|16500] "" XXX
- SG_ Steer_Torque_Sensor : 29|11@1- (8,0) [-8500|-8500] "" XXX
- SG_ Steering_Angle : 40|16@1- (-0.026,0) [-600|600] "" XXX
- SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
-
-BO_ 882 Counter: 8 XXX
- SG_ Counter : 15|4@0+ (1,0) [0|31] "" XXX
- SG_ Something : 16|2@1+ (1,0) [0|255] "" XXX
-
-BO_ 884 BodyInfo: 8 XXX
- SG_ DOOR_OPEN_FR : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RL : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_Hatch : 28|1@0+ (1,0) [0|1] "" XXX
- SG_ _UNKNOWN : 2|3@0+ (1,0) [0|1] "" XXX
-
-BO_ 886 undefined: 8 XXX
-
-BO_ 864 Engine_Temp: 8 XXX
- SG_ NEW_SIGNAL_1 : 32|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 44|1@1+ (1,0) [0|3] "" XXX
- SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
- SG_ Cruise_Activated : 45|1@1+ (1,0) [0|3] "" XXX
- SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
- SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
-
-BO_ 865 NEW_MSG_16: 8 XXX
- SG_ NEW_SIGNAL_1 : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ Counter : 32|4@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_2 : 12|1@1+ (1,0) [0|255] "" XXX
-
-BO_ 866 Fuel__: 8 XXX
- SG_ NEW_SIGNAL_2 : 55|8@0+ (1,0) [0|16777215] "" XXX
- SG_ NEW_SIGNAL_3 : 35|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_1 : 0|16@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_5 : 24|1@0+ (1,0) [0|32767] "" XXX
-
-BO_ 872 NEW_MSG_15: 8 XXX
- SG_ NEW_SIGNAL_1 : 31|8@0+ (1,0) [0|65535] "" XXX
-
-BO_ 977 NEW_MSG_12: 8 XXX
- SG_ NEW_SIGNAL_1 : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 16|12@1+ (1,0) [0|255] "" XXX
-
-BO_ 1632 Huge_Counter: 8 XXX
- SG_ NEW_SIGNAL_1 : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ Counter : 55|16@0+ (1,0) [0|255] "" XXX
-
-BO_ 1745 NEW_MSG_11: 8 XXX
- SG_ NEW_SIGNAL_1 : 24|6@1+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 40|6@1+ (1,0) [0|15] "" XXX
- SG_ NEW_SIGNAL_3 : 0|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 1786 NEW_MSG_9: 8 XXX
- SG_ Counter : 3|4@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_2 : 8|16@1+ (1,0) [0|15] "" XXX
-
-
-
-
-CM_ SG_ 2 NEW_SIGNAL_1 "";
-CM_ SG_ 211 Brake_Pedal_On "high tolerance";
-CM_ SG_ 212 FL "KPH";
-CM_ SG_ 212 RL "KPH";
-CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
-CM_ SG_ 320 Throttle_Body_ "Throttle related";
-CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
-CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
-CM_ SG_ 353 NEW_SIGNAL_3_Blank "always 2";
-CM_ SG_ 353 NEW_SIGNAL_2_Blank "0";
-CM_ SG_ 353 NEW_SIGNAL_9 "flipped around quick engagement";
-CM_ SG_ 353 NEW_SIGNAL_6_Blank "always 1";
-CM_ SG_ 353 Brake_On "long activatedish";
-CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
-CM_ SG_ 358 Car_Follow "front car detected";
-CM_ SG_ 358 ES_Error "No engagement until restart";
-CM_ SG_ 358 Cruise_Activated "is 1 when cruise is able to go";
-CM_ SG_ 358 Disengage_Alert "seatbelt and steep hill disengage";
-CM_ SG_ 358 3SecondDisengage "seatbelt disengage";
-CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
-CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
-CM_ SG_ 359 Sig2All_Depart "Left and right depart";
-CM_ SG_ 359 Sig1All_Depart "Left and right depart";
-CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
-CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
-CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
-CM_ SG_ 642 Counter "Affected by signals";
-CM_ SG_ 642 RIGHT_BLINKER "0 off, 2 right, 1 left";
-CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
-CM_ SG_ 880 NEW_SIGNAL_1 "0 in 2017";
-CM_ SG_ 880 NEW_SIGNAL_4_2017 "1 in 2017";
-CM_ SG_ 880 NEW_SIGNAL_5_2017 "1 in 2017";
diff --git a/opendbc/subaru_outback_2015_generated.dbc b/opendbc/subaru_outback_2015_generated.dbc
new file mode 100644
index 00000000000000..c0a601589e0e6b
--- /dev/null
+++ b/opendbc/subaru_outback_2015_generated.dbc
@@ -0,0 +1,273 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _subaru_preglobal_2015.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX X
+
+
+BO_ 2 Steering: 8 XXX
+ SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
+ SG_ Counter : 27|3@0+ (1,0) [0|7] "" XXX
+ SG_ Checksum : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 208 G_Sensor: 8 XXX
+ SG_ Steering_Angle : 0|16@1- (-0.1,0) [-500|500] "" XXX
+ SG_ Lateral : 16|16@1- (-0.0035,1) [-255|255] "" XXX
+ SG_ Longitudinal : 48|16@1- (-0.00035,0) [-255|255] "" XXX
+
+BO_ 209 Brake_Pedal: 8 XXX
+ SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
+ SG_ Brake_Pedal : 16|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 210 Brake_2: 8 XXX
+ SG_ Brake_Light : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Related : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Left_Brake : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 211 Brake_Type: 8 XXX
+ SG_ Brake_Light : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Speed_Counter : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Cruise_On : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal_On : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 48|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 212 Wheel_Speeds: 8 XXX
+ SG_ FL : 0|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ RL : 32|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ RR : 48|16@1+ (0.0592,0) [0|255] "KPH" XXX
+
+BO_ 320 Throttle: 8 XXX
+ SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Not_Full_Throttle : 14|1@1+ (1,0) [0|1] "" XXX
+ SG_ Engine_RPM : 16|14@1+ (1,0) [0|32767] "" XXX
+ SG_ Off_Throttle : 30|1@1+ (1,0) [0|1] "" XXX
+ SG_ Throttle_Cruise : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Body : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 321 Engine: 8 XXX
+ SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
+ SG_ Engine_Stop : 15|1@1+ (1,0) [0|1] "" XXX
+ SG_ Wheel_Torque : 16|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
+
+BO_ 324 CruiseControl: 8 XXX
+ SG_ OnOffButton : 2|1@1+ (1,0) [0|1] "" XXX
+ SG_ SET_BUTTON : 3|1@1+ (1,0) [0|1] "" XXX
+ SG_ RES_BUTTON : 4|1@1+ (1,0) [0|1] "" XXX
+ SG_ Button : 13|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_On : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal_On : 51|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 328 Transmission: 8 XXX
+ SG_ Manual_Gear : 4|4@1+ (1,0) [0|15] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
+ SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
+ SG_ Paddle_Shift : 60|2@1+ (1,0) [0|3] "" XXX
+
+BO_ 329 CVT_Ratio: 8 XXX
+
+BO_ 336 Brake_Pressure: 8 XXX
+ SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Pressure_Left : 8|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 338 Stalk: 8 XXX
+ SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Brake_Light : 52|1@1+ (1,0) [0|1] "" XXX
+ SG_ Runlights : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ Headlights : 59|1@1+ (1,0) [0|1] "" XXX
+ SG_ Highbeam : 60|1@1+ (1,0) [0|1] "" XXX
+ SG_ Wiper : 62|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 352 ES_Brake: 8 XXX
+ SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Light : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Error : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_On : 22|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 353 ES_CruiseThrottle: 8 XXX
+ SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Cruise_Activated : 16|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 17|3@1+ (1,0) [0|7] "" XXX
+ SG_ Brake_On : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ DistanceSwap : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Standstill : 22|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ CloseDistance : 24|8@1+ (0.0196,0) [0|255] "m" XXX
+ SG_ Signal4 : 32|9@1+ (1,0) [0|255] "" XXX
+ SG_ Standstill_2 : 41|1@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Error : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal5 : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 44|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal6 : 47|1@1+ (1,0) [0|1] "" XXX
+ SG_ Button : 48|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal7 : 51|5@1+ (1,0) [0|31] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 354 ES_RPM: 8 XXX
+ SG_ Brake : 8|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 9|1@1+ (1,0) [0|1] "" XXX
+ SG_ RPM : 16|16@1+ (1,0) [0|65535] "" XXX
+ SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
+
+BO_ 356 ES_LKAS: 8 XXX
+ SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
+ SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 359 ES_LDW: 8 XXX
+ SG_ All_depart_2015 : 0|1@1+ (1,0) [0|1] "" XXX
+ SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1All_Depart : 28|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig2All_Depart : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Active : 37|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|1] "" XXX
+ SG_ Left_Depart_Front : 51|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig3All_Depart : 52|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 604 BSD_RCTA: 8 XXX
+ SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ State : 5|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_ADJACENT : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_ADJACENT : 33|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_APPROACHING : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_APPROACHING : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_RCTA : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_RCTA : 47|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 642 Dashlights: 8 XXX
+ SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BLINKER : 44|1@1+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BLINKER : 45|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 880 Steering_Torque_2: 8 XXX
+ SG_ Steering_Voltage_Flat : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
+ SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 884 BodyInfo: 8 XXX
+ SG_ DOOR_OPEN_FR : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FL : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 26|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_Hatch : 28|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 864 Engine_Temp: 8 XXX
+ SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
+ SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
+ SG_ Cruise_Activated : 45|1@1+ (1,0) [0|1] "" XXX
+ SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 866 Fuel: 8 XXX
+
+BO_ 1745 Dash_State: 8 XXX
+ SG_ Units : 15|1@1+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
+CM_ SG_ 320 Throttle_Body "Throttle related";
+CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
+CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
+CM_ SG_ 353 Button "1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 resume deep";
+CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
+CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
+CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
+CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
+CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
+CM_ SG_ 359 Sig1All_Depart "Left and right depart";
+CM_ SG_ 359 Sig2All_Depart "Left and right depart";
+CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
+CM_ SG_ 604 R_APPROACHING "Faster car approaching in far right lane";
+CM_ SG_ 604 L_APPROACHING "Faster car approaching in far left lane";
+CM_ SG_ 604 R_RCTA "Rear cross traffic alert, only when in R gear";
+CM_ SG_ 604 L_RCTA "Rear cross traffic alert, only when in R gear";
+CM_ SG_ 642 Counter "Affected by signals";
+CM_ SG_ 642 SEATBELT_FL "Driver seatbelt";
+CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
+
+VAL_ 328 Gear 0 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 14 "R" 15 "P";
+VAL_ 1745 Units 0 "Metric" 1 "Imperial";
+
+CM_ "subaru_outback_2015.dbc starts here";
+
+
+BO_ 358 ES_DashStatus: 8 XXX
+ SG_ Not_Ready_Startup : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ Seatbelt_Disengage : 12|2@1+ (1,0) [0|3] "" XXX
+ SG_ Disengage_Alert : 14|2@1+ (1,0) [0|3] "" XXX
+ SG_ Cruise_On : 16|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 17|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal1 : 18|1@1+ (1,0) [0|1] "" XXX
+ SG_ WHEELS_MOVING_2015 : 19|1@1+ (1,0) [0|1] "" XXX
+ SG_ Driver_Input : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ Distance_Bars : 21|3@1+ (1,0) [0|7] "" XXX
+ SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ ES_Error : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_On_2 : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 37|3@1+ (1,0) [0|7] "" XXX
+ SG_ Steep_Hill_Disengage : 44|1@1+ (1,0) [0|3] "" XXX
+ SG_ Lead_Car : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ Obstacle_Distance : 48|4@1+ (5,0) [0|15] "m" XXX
+
+BO_ 881 Steering_Torque: 8 XXX
+ SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|1000] "" XXX
+ SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-1000|1000] "" XXX
+ SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ Steer_Torque_Sensor : 29|11@1- (1,0) [-1000|1000] "" XXX
+ SG_ Steering_Angle : 40|16@1- (-0.033,0) [-600|600] "" XXX
+
+CM_ SG_ 358 Disengage_Alert "seatbelt and steep hill disengage";
+CM_ SG_ 358 ES_Error "No engagement until restart";
+CM_ SG_ 358 Lead_Car "front car detected";
diff --git a/opendbc/subaru_outback_2016_eyesight.dbc b/opendbc/subaru_outback_2016_eyesight.dbc
deleted file mode 100644
index 871f7821843231..00000000000000
--- a/opendbc/subaru_outback_2016_eyesight.dbc
+++ /dev/null
@@ -1,73 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 884 DoorStatus: 8 XXX
- SG_ DoorOpenFD : 24|1@0+ (1,0) [0|1] "" XXX
- SG_ DoorOpenFP : 25|1@0+ (1,0) [0|1] "" XXX
- SG_ DoorOpenRP : 26|1@0+ (1,0) [0|1] "" XXX
- SG_ DoorOpenRD : 27|1@0+ (1,0) [0|1] "" XXX
- SG_ DoorOpenHatch : 28|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 324 CruiseControl: 7 XXX
- SG_ BrakeApplied : 8|1@0+ (1,0) [0|0] "" XXX
- SG_ CruiseEnabled : 48|1@0+ (1,0) [0|0] "" XXX
- SG_ BrakeStatus : 51|1@0+ (1,0) [0|0] "" XXX
- SG_ CruiseButtons : 4|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 320 Throttle: 8 XXX
- SG_ ThrottlePosition : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 209 NEW_MSG_1: 8 XXX
- SG_ BrakePosition : 23|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 2 Steering: 8 XXX
- SG_ SteeringAngle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
-
-BO_ 642 NEW_MSG_2: 8 XXX
- SG_ TurnSignal : 45|2@0+ (1,0) [0|3] "" XXX
-
-
-
-CM_ "CHFFR_METRIC 2 STEER_ANGLE STEER_ANGLE 0.36 180";
-
-VAL_ 324 BrakeApplied 1 "On" 0 "Off" ;
-VAL_ 324 CruiseEnabled 1 "On" 0 "Off" ;
-VAL_ 324 BrakeStatus 1 "On" 0 "Off" ;
-VAL_ 324 CruiseButtons 2 "Set" 1 "Resume" ;
-
-VAL_ 642 TurnSignal 2 "Left" 1 "Right" ;
diff --git a/opendbc/subaru_outback_2019_generated.dbc b/opendbc/subaru_outback_2019_generated.dbc
new file mode 100644
index 00000000000000..00b042487b8802
--- /dev/null
+++ b/opendbc/subaru_outback_2019_generated.dbc
@@ -0,0 +1,273 @@
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
+
+
+CM_ "Imported file _subaru_preglobal_2015.dbc starts here";
+VERSION ""
+
+
+NS_ :
+ NS_DESC_
+ CM_
+ BA_DEF_
+ BA_
+ VAL_
+ CAT_DEF_
+ CAT_
+ FILTER
+ BA_DEF_DEF_
+ EV_DATA_
+ ENVVAR_DATA_
+ SGTYPE_
+ SGTYPE_VAL_
+ BA_DEF_SGTYPE_
+ BA_SGTYPE_
+ SIG_TYPE_REF_
+ VAL_TABLE_
+ SIG_GROUP_
+ SIG_VALTYPE_
+ SIGTYPE_VALTYPE_
+ BO_TX_BU_
+ BA_DEF_REL_
+ BA_REL_
+ BA_DEF_DEF_REL_
+ BU_SG_REL_
+ BU_EV_REL_
+ BU_BO_REL_
+ SG_MUL_VAL_
+
+BS_:
+
+BU_: XXX X
+
+
+BO_ 2 Steering: 8 XXX
+ SG_ Steering_Angle : 7|16@0- (0.1,0) [-500|500] "degree" XXX
+ SG_ Counter : 27|3@0+ (1,0) [0|7] "" XXX
+ SG_ Checksum : 39|8@0+ (1,0) [0|255] "" XXX
+
+BO_ 208 G_Sensor: 8 XXX
+ SG_ Steering_Angle : 0|16@1- (-0.1,0) [-500|500] "" XXX
+ SG_ Lateral : 16|16@1- (-0.0035,1) [-255|255] "" XXX
+ SG_ Longitudinal : 48|16@1- (-0.00035,0) [-255|255] "" XXX
+
+BO_ 209 Brake_Pedal: 8 XXX
+ SG_ Speed : 0|16@1+ (0.05625,0) [0|255] "KPH" XXX
+ SG_ Brake_Pedal : 16|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 210 Brake_2: 8 XXX
+ SG_ Brake_Light : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Related : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ Right_Brake : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Left_Brake : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 211 Brake_Type: 8 XXX
+ SG_ Brake_Light : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Speed_Counter : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Cruise_On : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal_On : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 48|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 212 Wheel_Speeds: 8 XXX
+ SG_ FL : 0|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ FR : 16|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ RL : 32|16@1+ (0.0592,0) [0|255] "KPH" XXX
+ SG_ RR : 48|16@1+ (0.0592,0) [0|255] "KPH" XXX
+
+BO_ 320 Throttle: 8 XXX
+ SG_ Throttle_Pedal : 0|8@1+ (0.392157,0) [0|255] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Not_Full_Throttle : 14|1@1+ (1,0) [0|1] "" XXX
+ SG_ Engine_RPM : 16|14@1+ (1,0) [0|32767] "" XXX
+ SG_ Off_Throttle : 30|1@1+ (1,0) [0|1] "" XXX
+ SG_ Throttle_Cruise : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Combo : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ Throttle_Body : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ Off_Throttle_2 : 56|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 321 Engine: 8 XXX
+ SG_ Engine_Torque : 0|15@1+ (1,0) [0|255] "" XXX
+ SG_ Engine_Stop : 15|1@1+ (1,0) [0|1] "" XXX
+ SG_ Wheel_Torque : 16|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Engine_RPM : 32|12@1+ (1,0) [0|8191] "" XXX
+
+BO_ 324 CruiseControl: 8 XXX
+ SG_ OnOffButton : 2|1@1+ (1,0) [0|1] "" XXX
+ SG_ SET_BUTTON : 3|1@1+ (1,0) [0|1] "" XXX
+ SG_ RES_BUTTON : 4|1@1+ (1,0) [0|1] "" XXX
+ SG_ Button : 13|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_On : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_Pedal_On : 51|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 328 Transmission: 8 XXX
+ SG_ Manual_Gear : 4|4@1+ (1,0) [0|15] "" XXX
+ SG_ Counter : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Transmission_Engine : 16|15@1+ (1,0) [0|65535] "" XXX
+ SG_ Gear : 48|4@1+ (1,0) [0|15] "" XXX
+ SG_ Gear_2 : 52|4@1+ (1,0) [0|15] "" XXX
+ SG_ Paddle_Shift : 60|2@1+ (1,0) [0|3] "" XXX
+
+BO_ 329 CVT_Ratio: 8 XXX
+
+BO_ 336 Brake_Pressure: 8 XXX
+ SG_ Brake_Pressure_Right : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Pressure_Left : 8|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 338 Stalk: 8 XXX
+ SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Brake_Light : 52|1@1+ (1,0) [0|1] "" XXX
+ SG_ Runlights : 58|1@1+ (1,0) [0|1] "" XXX
+ SG_ Headlights : 59|1@1+ (1,0) [0|1] "" XXX
+ SG_ Highbeam : 60|1@1+ (1,0) [0|1] "" XXX
+ SG_ Wiper : 62|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 352 ES_Brake: 8 XXX
+ SG_ Brake_Pressure : 0|16@1+ (1,0) [0|255] "" XXX
+ SG_ Brake_Light : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Error : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Brake_On : 22|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 353 ES_CruiseThrottle: 8 XXX
+ SG_ Throttle_Cruise : 0|12@1+ (1,0) [0|4095] "" XXX
+ SG_ Signal1 : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ Cruise_Activated : 16|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal2 : 17|3@1+ (1,0) [0|7] "" XXX
+ SG_ Brake_On : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ DistanceSwap : 21|1@1+ (1,0) [0|1] "" XXX
+ SG_ Standstill : 22|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal3 : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ CloseDistance : 24|8@1+ (0.0196,0) [0|255] "m" XXX
+ SG_ Signal4 : 32|9@1+ (1,0) [0|255] "" XXX
+ SG_ Standstill_2 : 41|1@1+ (1,0) [0|1] "" XXX
+ SG_ ES_Error : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal5 : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 44|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal6 : 47|1@1+ (1,0) [0|1] "" XXX
+ SG_ Button : 48|3@1+ (1,0) [0|7] "" XXX
+ SG_ Signal7 : 51|5@1+ (1,0) [0|31] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 354 ES_RPM: 8 XXX
+ SG_ Brake : 8|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 9|1@1+ (1,0) [0|1] "" XXX
+ SG_ RPM : 16|16@1+ (1,0) [0|65535] "" XXX
+ SG_ Checksum : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ Counter : 48|3@1+ (1,0) [0|7] "" XXX
+
+BO_ 356 ES_LKAS: 8 XXX
+ SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ LKAS_Command : 8|13@1- (-1,0) [-4096|4096] "" XXX
+ SG_ LKAS_Active : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Checksum : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 359 ES_LDW: 8 XXX
+ SG_ All_depart_2015 : 0|1@1+ (1,0) [0|1] "" XXX
+ SG_ Right_Line_2017 : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ Left_Line_2017 : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1All_Depart : 28|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig2All_Depart : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Inactive_2017 : 36|1@1+ (1,0) [0|1] "" XXX
+ SG_ LKAS_Active : 37|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1Right_Depart : 48|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig1Right_Depart_Front : 49|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig2Right_Depart : 50|1@1+ (1,0) [0|1] "" XXX
+ SG_ Left_Depart_Front : 51|1@1+ (1,0) [0|1] "" XXX
+ SG_ Sig3All_Depart : 52|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 604 BSD_RCTA: 8 XXX
+ SG_ Counter : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ State : 5|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_ADJACENT : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_ADJACENT : 33|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_APPROACHING : 42|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_APPROACHING : 43|1@1+ (1,0) [0|1] "" XXX
+ SG_ R_RCTA : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ L_RCTA : 47|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 642 Dashlights: 8 XXX
+ SG_ Counter : 12|4@1+ (1,0) [0|15] "" XXX
+ SG_ SEATBELT_FL : 40|1@1+ (1,0) [0|1] "" XXX
+ SG_ LEFT_BLINKER : 44|1@1+ (1,0) [0|1] "" XXX
+ SG_ RIGHT_BLINKER : 45|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 880 Steering_Torque_2: 8 XXX
+ SG_ Steering_Voltage_Flat : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
+ SG_ Counter : 40|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 884 BodyInfo: 8 XXX
+ SG_ DOOR_OPEN_FR : 24|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_FL : 25|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RL : 26|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_RR : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ DOOR_OPEN_Hatch : 28|1@1+ (1,0) [0|1] "" XXX
+
+BO_ 864 Engine_Temp: 8 XXX
+ SG_ Oil_Temp : 16|8@1+ (1,-40) [0|255] "" XXX
+ SG_ Coolant_Temp : 24|8@1+ (1,-40) [0|255] "" XXX
+ SG_ Cruise_Activated : 45|1@1+ (1,0) [0|1] "" XXX
+ SG_ Saved_Speed : 56|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 866 Fuel: 8 XXX
+
+BO_ 1745 Dash_State: 8 XXX
+ SG_ Units : 15|1@1+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 320 Off_Throttle_2 "Less sensitive";
+CM_ SG_ 320 Throttle_Body "Throttle related";
+CM_ SG_ 328 Gear "15 = P, 14 = R, 0 = N, 1-6=gear";
+CM_ SG_ 328 Gear_2 "15 = P, 14 = R, 0 = N, 1-6=gear";
+CM_ SG_ 353 Button "1 = main, 2 = set shallow, 3 = set deep, 4 = resume shallow, 5 resume deep";
+CM_ SG_ 354 RPM "20hz version of Transmission_Engine under Transmission";
+CM_ SG_ 359 Sig1Right_Depart "right depart, hill steep and seatbelt disengage";
+CM_ SG_ 359 LKAS_Inactive_2017 "1 when not steering, 0 when lkas steering";
+CM_ SG_ 359 Sig1Right_Depart_Front "object in front, right depart, hill steep and seatbelt disengage alert ";
+CM_ SG_ 359 Left_Depart_Front "warning after acceleration into car in front and left depart";
+CM_ SG_ 359 Sig1All_Depart "Left and right depart";
+CM_ SG_ 359 Sig2All_Depart "Left and right depart";
+CM_ SG_ 359 All_depart_2015 "always 1 on 2017";
+CM_ SG_ 604 R_APPROACHING "Faster car approaching in far right lane";
+CM_ SG_ 604 L_APPROACHING "Faster car approaching in far left lane";
+CM_ SG_ 604 R_RCTA "Rear cross traffic alert, only when in R gear";
+CM_ SG_ 604 L_RCTA "Rear cross traffic alert, only when in R gear";
+CM_ SG_ 642 Counter "Affected by signals";
+CM_ SG_ 642 SEATBELT_FL "Driver seatbelt";
+CM_ SG_ 880 Steering_Voltage_Flat "receives later than 371";
+
+VAL_ 328 Gear 0 "N" 1 "D" 2 "D" 3 "D" 4 "D" 5 "D" 6 "D" 14 "R" 15 "P";
+VAL_ 1745 Units 0 "Metric" 1 "Imperial";
+
+CM_ "subaru_outback_2019.dbc starts here";
+
+
+BO_ 358 ES_DashStatus: 8 XXX
+ SG_ Not_Ready_Startup : 0|3@1+ (1,0) [0|7] "" XXX
+ SG_ Seatbelt_Disengage : 12|2@1+ (1,0) [0|3] "" XXX
+ SG_ Disengage_Alert : 14|2@1+ (1,0) [0|3] "" XXX
+ SG_ Cruise_On : 16|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_Activated : 17|1@1+ (1,0) [0|1] "" XXX
+ SG_ Signal1 : 18|1@1+ (1,0) [0|1] "" XXX
+ SG_ WHEELS_MOVING_2015 : 19|1@1+ (1,0) [0|1] "" XXX
+ SG_ Driver_Input : 20|1@1+ (1,0) [0|1] "" XXX
+ SG_ Distance_Bars : 21|3@1+ (1,0) [0|7] "" XXX
+ SG_ Cruise_Set_Speed : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ ES_Error : 32|1@1+ (1,0) [0|1] "" XXX
+ SG_ Cruise_On_2 : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ Counter : 37|3@1+ (1,0) [0|7] "" XXX
+ SG_ Steep_Hill_Disengage : 44|1@1+ (1,0) [0|3] "" XXX
+ SG_ Lead_Car : 46|1@1+ (1,0) [0|1] "" XXX
+ SG_ Obstacle_Distance : 48|4@1+ (5,0) [0|15] "m" XXX
+
+BO_ 881 Steering_Torque: 8 XXX
+ SG_ Steering_Motor_Flat : 0|10@1+ (32,0) [0|1000] "" XXX
+ SG_ Steer_Torque_Output : 16|11@1- (-32,0) [-1000|1000] "" XXX
+ SG_ LKA_Lockout : 27|1@1+ (1,0) [0|1] "" XXX
+ SG_ Steer_Torque_Sensor : 29|11@1- (-1,0) [-1000|1000] "" XXX
+ SG_ Steering_Angle : 40|16@1- (-0.033,0) [-600|600] "" XXX
+
+CM_ SG_ 358 Disengage_Alert "seatbelt and steep hill disengage";
+CM_ SG_ 358 ES_Error "No engagement until restart";
+CM_ SG_ 358 Lead_Car "front car detected";
diff --git a/opendbc/tesla_can.dbc b/opendbc/tesla_can.dbc
index 60642f43c17ed1..b48d1319cbffd5 100644
--- a/opendbc/tesla_can.dbc
+++ b/opendbc/tesla_can.dbc
@@ -172,22 +172,26 @@ BO_ 532 EPB_epasControl: 3 EPB
SG_ EPB_epasEACAllow : 2|3@0+ (1,0) [4|7] "" NEO,EPAS
BO_ 792 GTW_carState: 8 GTW
- SG_ BOOT_STATE : 47|2@0+ (1,0) [-1|4] "" NEO
- SG_ CERRD : 7|1@0+ (1,0) [-1|2] "" NEO
- SG_ DAY : 36|5@0+ (1,0) [2|31] "" NEO
- SG_ DOOR_STATE_FL : 13|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_FR : 15|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_FrontTrunk : 51|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_RL : 23|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_RR : 30|2@0+ (1,0) [-1|4] "" NEO
- SG_ GTW_updateInProgress : 49|2@0+ (1,0) [-1|4] "" NEO
- SG_ Hour : 28|5@0+ (1,0) [0|29] "h" NEO
- SG_ MCU_factoryMode : 52|1@0+ (1,0) [-1|2] "" NEO
- SG_ MCU_transportModeOn : 53|1@0+ (1,0) [1|1] "" NEO
- SG_ MINUTE : 45|6@0+ (1,0) [0|61] "min" NEO
- SG_ MONTH : 11|4@0+ (1,0) [0|14] "Month" NEO
- SG_ SECOND : 21|6@0+ (1,0) [0|61] "s" NEO
- SG_ YEAR : 6|7@0+ (1,2000) [2000|2125] "Year" NEO
+ SG_ YEAR : 0|7@1+ (1,2000) [2000|2127] "Year" NEO
+ SG_ CERRD : 7|1@1+ (1,0) [0|1] "" NEO
+ SG_ MONTH : 8|4@1+ (1,0) [1|12] "Month" NEO
+ SG_ DOOR_STATE_FL : 12|2@1+ (1,0) [0|3] "" NEO
+ SG_ DOOR_STATE_FR : 14|2@1+ (1,0) [0|3] "" NEO
+ SG_ SECOND : 16|6@1+ (1,0) [0|59] "s" NEO
+ SG_ DOOR_STATE_RL : 22|2@1+ (1,0) [0|3] "" NEO
+ SG_ Hour : 24|5@1+ (1,0) [0|23] "h" NEO
+ SG_ DOOR_STATE_RR : 29|2@1+ (1,0) [0|3] "" NEO
+ SG_ DAY : 32|5@1+ (1,0) [0|31] "" NEO
+ SG_ MINUTE : 40|6@1+ (1,0) [0|59] "min" NEO
+ SG_ BOOT_STATE : 46|2@1+ (1,0) [0|3] "" NEO
+ SG_ GTW_updateInProgress : 48|2@1+ (1,0) [0|3] "" NEO
+ SG_ DOOR_STATE_FrontTrunk : 50|2@1+ (1,0) [0|3] "" NEO
+ SG_ MCU_factoryMode : 52|1@1+ (1,0) [0|1] "" NEO
+ SG_ MCU_transportModeOn : 53|1@0+ (1,0) [0|1] "" NEO
+ SG_ BC_headLightLStatus : 55|2@0+ (1,0) [0|3] "" NEO
+ SG_ BC_headLightRStatus : 57|2@0+ (1,0) [0|3] "" NEO
+ SG_ BC_indicatorLStatus : 59|2@0+ (1,0) [0|3] "" NEO
+ SG_ BC_indicatorRStatus : 61|2@0+ (1,0) [0|3] "" NEO
BO_ 872 DI_state: 8 DI
SG_ DI_systemState : 0|3@1+ (1,0) [0|0] "" NEO
@@ -280,16 +284,15 @@ BO_ 643 BODY_R1: 8 GTW
SG_ VTA_Alm_Actv : 13|1@0+ (1,0) [0|1] "" NEO
SG_ WprOutsdPkPosn : 29|1@0+ (1,0) [0|1] "" NEO
-BO_ 760 MCU_gpsVehicleSpeed: 8 GTW
- SG_ MCU_gpsHDOP : 0|8@1+ (0.1,0) [0|25.5] "1" DAS
- SG_ MCU_gpsVehicleHeading : 8|16@1+ (0.0078125,0) [0|511.9921875] "deg" DAS
- SG_ MCU_gpsVehicleSpeed : 24|16@1+ (0.00390625,0) [0|250.996] "km/hr" DAS
- SG_ MCU_userSpeedOffset : 40|6@1+ (1,-30) [-30|33] "kph/mph" DAS
- SG_ MCU_mapSpeedLimitUnits : 46|1@1+ (1,0) [0|1] "" DAS
- SG_ MCU_userSpeedOffsetUnits : 47|1@1+ (1,0) [0|1] "" DAS
- SG_ MCU_mppSpeedLimit : 48|5@1+ (5,0) [0|155] "kph/mph" DAS
- SG_ MCU_gpsNmeaMIA : 53|1@1+ (1,0) [0|0] "" DAS
- SG_ MCU_gpsAntennaDisconnected : 54|1@1+ (1,0) [0|0] "" DAS
+BO_ 760 UI_gpsVehicleSpeed: 8 GTW
+ SG_ UI_gpsHDOP : 0|8@1+ (0.1,0) [0|25.5] "1" DAS
+ SG_ UI_gpsVehicleHeading : 8|16@1+ (0.0078125,0) [0|511.9921875] "deg" DAS
+ SG_ UI_gpsVehicleSpeed : 24|16@1+ (0.00390625,0) [0|250.996] "km/hr" Vector__XXX
+ SG_ UI_userSpeedOffset : 40|6@1+ (1,-30) [-30|33] "kph/mph" DAS
+ SG_ UI_mapSpeedLimitUnits : 46|1@1+ (1,0) [0|1] "" DAS
+ SG_ UI_userSpeedOffsetUnits : 47|1@1+ (1,0) [0|1] "" DAS
+ SG_ UI_mppSpeedLimit : 48|5@1+ (5,0) [0|155] "kph/mph" DAS
+ SG_ UI_gpsNmeaMIA : 53|1@1+ (1,0) [0|0] "" DAS
BO_ 536 MCU_chassisControl: 8 GTW
SG_ MCU_dasDebugEnable : 0|1@1+ (1,0) [0|0] "" NEO
@@ -352,20 +355,6 @@ BO_ 840 GTW_status: 8 GTW
SG_ GTW_statusChecksum : 63|8@0+ (1,0) [0|255] "" NEO
SG_ GTW_statusCounter : 51|4@0+ (1,0) [0|15] "" NEO
-BO_ 1361 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.0507968128,-22.85856576) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.1015936256,-22.85856576) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ IDX : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
- SG_ CHECKSUM : 47|8@0+ (1,0) [0|3] "" INTERCEPTOR
-
-BO_ 1362 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.0507968128,-22.85856576) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.1015936256,-22.85856576) [0|1] "" EON
- SG_ STATE : 35|4@0+ (1,0) [0|15] "" EON
- SG_ IDX : 39|4@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM : 47|8@0+ (1,0) [0|3] "" EON
-
BO_ 920 GTW_carConfig: 8 GTW
SG_ GTW_performanceConfig : 2|3@0+ (1,0) [0|0] "" NEO
SG_ GTW_fourWheelDrive : 4|2@0+ (1,0) [0|0] "" NEO
@@ -675,8 +664,9 @@ VAL_ 309 ESP_absFaultLamp 0 "OFF" 1 "ON" ;
VAL_ 309 ESP_espOffLamp 0 "OFF" 1 "ON" ;
VAL_ 309 ESP_stabilityControlSts 2 "ENGAGED" 3 "FAULTED" 5 "INIT" 4 "NOT_CONFIGURED" 0 "OFF" 1 "ON" ;
VAL_ 309 ESP_tcLampFlash 1 "FLASH" 0 "OFF" ;
-VAL_ 760 MCU_speedLimitUnits 1 "KPH" 0 "MPH" ;
-VAL_ 760 MCU_userSpeedOffsetUnits 1 "KPH" 0 "MPH" ;
+VAL_ 568 UI_mapSpeedLimit 31 "SNA" 30 "UNLIMITED" 29 "LESS_OR_EQ_160" 28 "LESS_OR_EQ_150" 27 "LESS_OR_EQ_140" 26 "LESS_OR_EQ_130" 25 "LESS_OR_EQ_120" 24 "LESS_OR_EQ_115" 23 "LESS_OR_EQ_110" 22 "LESS_OR_EQ_105" 21 "LESS_OR_EQ_100" 20 "LESS_OR_EQ_95" 19 "LESS_OR_EQ_90" 18 "LESS_OR_EQ_85" 17 "LESS_OR_EQ_80" 16 "LESS_OR_EQ_75" 15 "LESS_OR_EQ_70" 14 "LESS_OR_EQ_65" 13 "LESS_OR_EQ_60" 12 "LESS_OR_EQ_55" 11 "LESS_OR_EQ_50" 10 "LESS_OR_EQ_45" 9 "LESS_OR_EQ_40" 8 "LESS_OR_EQ_35" 7 "LESS_OR_EQ_30" 6 "LESS_OR_EQ_25" 5 "LESS_OR_EQ_20" 4 "LESS_OR_EQ_15" 3 "LESS_OR_EQ_10" 2 "LESS_OR_EQ_7" 1 "LESS_OR_EQ_5" 0 "UNKNOWN" ;
+VAL_ 760 UI_mapSpeedLimitUnits 1 "KPH" 0 "MPH" ;
+VAL_ 760 UI_userSpeedOffsetUnits 1 "KPH" 0 "MPH" ;
VAL_ 643 AirTemp_Insd 255 "SNA" ;
VAL_ 643 AirTemp_Outsd 254 "INIT" 255 "SNA" ;
VAL_ 643 Bckl_Sw_RL_Stat_SAM_R 2 "FLT" 1 "NOT" 0 "OK" 3 "SNA" ;
@@ -730,7 +720,6 @@ VAL_ 904 MCU_clusterReadyForDrive 0 "NO_SNA" 1 "YES" ;
VAL_ 1160 DAS_steeringAngleRequest 16384 "ZERO_ANGLE" ;
VAL_ 1160 DAS_steeringControlType 1 "ANGLE_CONTROL" 3 "DISABLED" 0 "NONE" 2 "RESERVED" ;
VAL_ 1160 DAS_steeringHapticRequest 1 "ACTIVE" 0 "IDLE" ;
-VAL_ 1362 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
CM_ "CHFFR_METRIC 1160 DAS_steeringAngleRequest STEER_ANGLE 0.1098666 180; CHFFR_METRIC 264 DI_motorRPM ENGINE_RPM 1 0";
diff --git a/opendbc/tesla_can1916.dbc b/opendbc/tesla_can1916.dbc
index 97c42ab9de04ab..a02da2bb4b4ec8 100644
--- a/opendbc/tesla_can1916.dbc
+++ b/opendbc/tesla_can1916.dbc
@@ -172,22 +172,26 @@ BO_ 532 EPB_epasControl: 3 EPB
SG_ EPB_epasEACAllow : 2|3@0+ (1,0) [4|7] "" NEO,EPAS
BO_ 792 GTW_carState: 8 GTW
- SG_ BOOT_STATE : 47|2@0+ (1,0) [-1|4] "" NEO
- SG_ CERRD : 7|1@0+ (1,0) [-1|2] "" NEO
- SG_ DAY : 36|5@0+ (1,0) [2|31] "" NEO
- SG_ DOOR_STATE_FL : 13|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_FR : 15|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_FrontTrunk : 51|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_RL : 23|2@0+ (1,0) [-1|4] "" NEO
- SG_ DOOR_STATE_RR : 30|2@0+ (1,0) [-1|4] "" NEO
- SG_ GTW_updateInProgress : 49|2@0+ (1,0) [-1|4] "" NEO
- SG_ Hour : 28|5@0+ (1,0) [0|29] "h" NEO
- SG_ MCU_factoryMode : 52|1@0+ (1,0) [-1|2] "" NEO
- SG_ MCU_transportModeOn : 53|1@0+ (1,0) [1|1] "" NEO
- SG_ MINUTE : 45|6@0+ (1,0) [0|61] "min" NEO
- SG_ MONTH : 11|4@0+ (1,0) [0|14] "Month" NEO
- SG_ SECOND : 21|6@0+ (1,0) [0|61] "s" NEO
- SG_ YEAR : 6|7@0+ (1,2000) [2000|2125] "Year" NEO
+ SG_ YEAR : 0|7@1+ (1,2000) [2000|2127] "Year" NEO
+ SG_ CERRD : 7|1@1+ (1,0) [0|1] "" NEO
+ SG_ MONTH : 8|4@1+ (1,0) [1|12] "Month" NEO
+ SG_ DOOR_STATE_FL : 12|2@1+ (1,0) [0|3] "" NEO
+ SG_ DOOR_STATE_FR : 14|2@1+ (1,0) [0|3] "" NEO
+ SG_ SECOND : 16|6@1+ (1,0) [0|59] "s" NEO
+ SG_ DOOR_STATE_RL : 22|2@1+ (1,0) [0|3] "" NEO
+ SG_ Hour : 24|5@1+ (1,0) [0|23] "h" NEO
+ SG_ DOOR_STATE_RR : 29|2@1+ (1,0) [0|3] "" NEO
+ SG_ DAY : 32|5@1+ (1,0) [0|31] "" NEO
+ SG_ MINUTE : 40|6@1+ (1,0) [0|59] "min" NEO
+ SG_ BOOT_STATE : 46|2@1+ (1,0) [0|3] "" NEO
+ SG_ GTW_updateInProgress : 48|2@1+ (1,0) [0|3] "" NEO
+ SG_ DOOR_STATE_FrontTrunk : 50|2@1+ (1,0) [0|3] "" NEO
+ SG_ MCU_factoryMode : 52|1@1+ (1,0) [0|1] "" NEO
+ SG_ MCU_transportModeOn : 53|1@0+ (1,0) [0|1] "" NEO
+ SG_ BC_headLightLStatus : 55|2@0+ (1,0) [0|3] "" NEO
+ SG_ BC_headLightRStatus : 57|2@0+ (1,0) [0|3] "" NEO
+ SG_ BC_indicatorLStatus : 59|2@0+ (1,0) [0|3] "" NEO
+ SG_ BC_indicatorRStatus : 61|2@0+ (1,0) [0|3] "" NEO
BO_ 872 DI_state: 8 DI
SG_ DI_systemState : 0|3@1+ (1,0) [0|0] "" NEO
@@ -280,16 +284,15 @@ BO_ 643 BODY_R1: 8 GTW
SG_ VTA_Alm_Actv : 13|1@0+ (1,0) [0|1] "" NEO
SG_ WprOutsdPkPosn : 29|1@0+ (1,0) [0|1] "" NEO
-BO_ 760 MCU_gpsVehicleSpeed: 8 GTW
- SG_ MCU_gpsHDOP : 0|8@1+ (0.1,0) [0|25.5] "1" DAS
- SG_ MCU_gpsVehicleHeading : 8|16@1+ (0.0078125,0) [0|511.9921875] "deg" DAS
- SG_ MCU_gpsVehicleSpeed : 24|16@1+ (0.00390625,0) [0|250.996] "km/hr" DAS
- SG_ MCU_userSpeedOffset : 40|6@1+ (1,-30) [-30|33] "kph/mph" DAS
- SG_ MCU_mapSpeedLimitUnits : 46|1@1+ (1,0) [0|1] "" DAS
- SG_ MCU_userSpeedOffsetUnits : 47|1@1+ (1,0) [0|1] "" DAS
- SG_ MCU_mppSpeedLimit : 48|5@1+ (5,0) [0|155] "kph/mph" DAS
- SG_ MCU_gpsNmeaMIA : 53|1@1+ (1,0) [0|0] "" DAS
- SG_ MCU_gpsAntennaDisconnected : 54|1@1+ (1,0) [0|0] "" DAS
+BO_ 760 UI_gpsVehicleSpeed: 8 GTW
+ SG_ UI_gpsHDOP : 0|8@1+ (0.1,0) [0|25.5] "1" DAS
+ SG_ UI_gpsVehicleHeading : 8|16@1+ (0.0078125,0) [0|511.9921875] "deg" DAS
+ SG_ UI_gpsVehicleSpeed : 24|16@1+ (0.00390625,0) [0|250.996] "km/hr" Vector__XXX
+ SG_ UI_userSpeedOffset : 40|6@1+ (1,-30) [-30|33] "kph/mph" DAS
+ SG_ UI_mapSpeedLimitUnits : 46|1@1+ (1,0) [0|1] "" DAS
+ SG_ UI_userSpeedOffsetUnits : 47|1@1+ (1,0) [0|1] "" DAS
+ SG_ UI_mppSpeedLimit : 48|5@1+ (5,0) [0|155] "kph/mph" DAS
+ SG_ UI_gpsNmeaMIA : 53|1@1+ (1,0) [0|0] "" DAS
BO_ 536 MCU_chassisControl: 8 GTW
SG_ MCU_dasDebugEnable : 0|1@1+ (1,0) [0|0] "" NEO
@@ -352,20 +355,6 @@ BO_ 840 GTW_status: 8 GTW
SG_ GTW_statusChecksum : 63|8@0+ (1,0) [0|255] "" NEO
SG_ GTW_statusCounter : 51|4@0+ (1,0) [0|15] "" NEO
-BO_ 1361 GAS_COMMAND: 6 EON
- SG_ GAS_COMMAND : 7|16@0+ (0.0507968128,-22.85856576) [0|1] "" INTERCEPTOR
- SG_ GAS_COMMAND2 : 23|16@0+ (0.1015936256,-22.85856576) [0|1] "" INTERCEPTOR
- SG_ ENABLE : 39|1@0+ (1,0) [0|1] "" INTERCEPTOR
- SG_ IDX : 35|4@0+ (1,0) [0|15] "" INTERCEPTOR
- SG_ CHECKSUM : 47|8@0+ (1,0) [0|3] "" INTERCEPTOR
-
-BO_ 1362 GAS_SENSOR: 6 INTERCEPTOR
- SG_ INTERCEPTOR_GAS : 7|16@0+ (0.0507968128,-22.85856576) [0|1] "" EON
- SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.1015936256,-22.85856576) [0|1] "" EON
- SG_ STATE : 35|4@0+ (1,0) [0|15] "" EON
- SG_ IDX : 39|4@0+ (1,0) [0|15] "" EON
- SG_ CHECKSUM : 47|8@0+ (1,0) [0|3] "" EON
-
BO_ 920 GTW_carConfig: 8 GTW
SG_ GTW_performanceConfig : 2|3@0+ (1,0) [0|0] "" NEO
SG_ GTW_fourWheelDrive : 4|2@0+ (1,0) [0|0] "" NEO
@@ -675,8 +664,9 @@ VAL_ 309 ESP_absFaultLamp 0 "OFF" 1 "ON" ;
VAL_ 309 ESP_espOffLamp 0 "OFF" 1 "ON" ;
VAL_ 309 ESP_stabilityControlSts 2 "ENGAGED" 3 "FAULTED" 5 "INIT" 4 "NOT_CONFIGURED" 0 "OFF" 1 "ON" ;
VAL_ 309 ESP_tcLampFlash 1 "FLASH" 0 "OFF" ;
-VAL_ 760 MCU_speedLimitUnits 1 "KPH" 0 "MPH" ;
-VAL_ 760 MCU_userSpeedOffsetUnits 1 "KPH" 0 "MPH" ;
+VAL_ 568 UI_mapSpeedLimit 31 "SNA" 30 "UNLIMITED" 29 "LESS_OR_EQ_160" 28 "LESS_OR_EQ_150" 27 "LESS_OR_EQ_140" 26 "LESS_OR_EQ_130" 25 "LESS_OR_EQ_120" 24 "LESS_OR_EQ_115" 23 "LESS_OR_EQ_110" 22 "LESS_OR_EQ_105" 21 "LESS_OR_EQ_100" 20 "LESS_OR_EQ_95" 19 "LESS_OR_EQ_90" 18 "LESS_OR_EQ_85" 17 "LESS_OR_EQ_80" 16 "LESS_OR_EQ_75" 15 "LESS_OR_EQ_70" 14 "LESS_OR_EQ_65" 13 "LESS_OR_EQ_60" 12 "LESS_OR_EQ_55" 11 "LESS_OR_EQ_50" 10 "LESS_OR_EQ_45" 9 "LESS_OR_EQ_40" 8 "LESS_OR_EQ_35" 7 "LESS_OR_EQ_30" 6 "LESS_OR_EQ_25" 5 "LESS_OR_EQ_20" 4 "LESS_OR_EQ_15" 3 "LESS_OR_EQ_10" 2 "LESS_OR_EQ_7" 1 "LESS_OR_EQ_5" 0 "UNKNOWN" ;
+VAL_ 760 UI_mapSpeedLimitUnits 1 "KPH" 0 "MPH" ;
+VAL_ 760 UI_userSpeedOffsetUnits 1 "KPH" 0 "MPH" ;
VAL_ 643 AirTemp_Insd 255 "SNA" ;
VAL_ 643 AirTemp_Outsd 254 "INIT" 255 "SNA" ;
VAL_ 643 Bckl_Sw_RL_Stat_SAM_R 2 "FLT" 1 "NOT" 0 "OK" 3 "SNA" ;
@@ -730,7 +720,6 @@ VAL_ 904 MCU_clusterReadyForDrive 0 "NO_SNA" 1 "YES" ;
VAL_ 1160 DAS_steeringAngleRequest 16384 "ZERO_ANGLE" ;
VAL_ 1160 DAS_steeringControlType 1 "ANGLE_CONTROL" 3 "DISABLED" 0 "NONE" 2 "RESERVED" ;
VAL_ 1160 DAS_steeringHapticRequest 1 "ACTIVE" 0 "IDLE" ;
-VAL_ 1362 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
CM_ "CHFFR_METRIC 1160 DAS_steeringAngleRequest STEER_ANGLE 0.1098666 180; CHFFR_METRIC 264 DI_motorRPM ENGINE_RPM 1 0";
diff --git a/opendbc/tesla_can_epas.dbc b/opendbc/tesla_can_epas.dbc
index abd3f1431cb4c8..b496cf23d230e9 100644
--- a/opendbc/tesla_can_epas.dbc
+++ b/opendbc/tesla_can_epas.dbc
@@ -45,7 +45,42 @@ BU_:
APP
DAS
+BO_ 513 SDM1: 5 GTW
+ SG_ SDM_bcklPassStatus : 3|2@0+ (1,0) [0|3] "" NEO
+ SG_ SDM_bcklDrivStatus : 5|2@0+ (1,0) [0|3] "" NEO
+BO_ 643 BODY_R1: 8 GTW
+ SG_ AirTemp_Insd : 47|8@0+ (0.25,0) [0|63.5] "C" NEO
+ SG_ AirTemp_Outsd : 63|8@0+ (0.5,-40) [-40|86.5] "C" NEO
+ SG_ Bckl_Sw_RL_Stat_SAM_R : 49|2@0+ (1,0) [-1|4] "" NEO
+ SG_ Bckl_Sw_RM_Stat_SAM_R : 53|2@0+ (1,0) [-1|4] "" NEO
+ SG_ Bckl_Sw_RR_Stat_SAM_R : 51|2@0+ (1,0) [-1|4] "" NEO
+ SG_ DL_RLtch_Stat : 9|2@0+ (1,0) [-1|4] "" NEO
+ SG_ DrRLtch_FL_Stat : 1|2@0+ (1,0) [-1|4] "" NEO
+ SG_ DrRLtch_FR_Stat : 3|2@0+ (1,0) [-1|4] "" NEO
+ SG_ DrRLtch_RL_Stat : 5|2@0+ (1,0) [-1|4] "" NEO
+ SG_ DrRLtch_RR_Stat : 7|2@0+ (1,0) [-1|4] "" NEO
+ SG_ EngHd_Stat : 11|2@0+ (1,0) [-1|4] "" NEO
+ SG_ LoBm_On_Rq : 32|1@0+ (1,0) [0|1] "" NEO
+ SG_ HiBm_On : 33|1@0+ (1,0) [0|1] "" NEO
+ SG_ Hrn_On : 26|1@0+ (1,0) [0|1] "" NEO
+ SG_ IrLmp_D_Lt_Flt : 34|1@0+ (1,0) [0|1] "" NEO
+ SG_ IrLmp_P_Rt_Flt : 35|1@0+ (1,0) [0|1] "" NEO
+ SG_ LgtSens_Twlgt : 18|3@0+ (1,0) [0|7] "Steps" NEO
+ SG_ LgtSens_SNA : 19|1@0+ (1,0) [0|1] "" NEO
+ SG_ LgtSens_Tunnel : 20|1@0+ (1,0) [0|1] "" NEO
+ SG_ LgtSens_Flt : 21|1@0+ (1,0) [0|1] "" NEO
+ SG_ LgtSens_Night : 22|1@0+ (1,0) [-1|2] "" NEO
+ SG_ ADL_LoBm_On_Rq : 23|1@0+ (1,0) [0|1] "" NEO
+ SG_ LoBm_D_Lt_Flt : 36|1@0+ (1,0) [0|1] "" NEO
+ SG_ LoBm_P_Rt_Flt : 37|1@0+ (1,0) [0|1] "" NEO
+ SG_ MPkBrk_Stat : 28|1@0+ (1,0) [-1|2] "" NEO
+ SG_ RevGr_Engg : 39|2@0+ (1,0) [-1|4] "" NEO
+ SG_ StW_Cond_Stat : 55|2@0+ (1,0) [-1|4] "" NEO
+ SG_ Term54_Actv : 27|1@0+ (1,0) [0|1] "" NEO
+ SG_ Trlr_Stat : 25|2@0+ (1,0) [-1|4] "" NEO
+ SG_ VTA_Alm_Actv : 13|1@0+ (1,0) [0|1] "" NEO
+ SG_ WprOutsdPkPosn : 29|1@0+ (1,0) [0|1] "" NEO
BO_ 880 EPAS_sysStatus: 8 EPAS
SG_ EPAS_currentTuneMode : 7|4@0+ (1,0) [8|15] "" NEO
@@ -59,7 +94,23 @@ BO_ 880 EPAS_sysStatus: 8 EPAS
SG_ EPAS_sysStatusChecksum : 63|8@0+ (1,0) [0|255] "" NEO
SG_ EPAS_sysStatusCounter : 51|4@0+ (1,0) [0|15] "" NEO
SG_ EPAS_torsionBarTorque : 19|12@0+ (0.01,-20.5) [0|0] "Nm" NEO
-
+
+VAL_ 643 AirTemp_Insd 255 "SNA" ;
+VAL_ 643 AirTemp_Outsd 254 "INIT" 255 "SNA" ;
+VAL_ 643 Bckl_Sw_RL_Stat_SAM_R 2 "FLT" 1 "NOT" 0 "OK" 3 "SNA" ;
+VAL_ 643 Bckl_Sw_RM_Stat_SAM_R 2 "FLT" 1 "NOT" 0 "OK" 3 "SNA" ;
+VAL_ 643 Bckl_Sw_RR_Stat_SAM_R 2 "FLT" 1 "NOT" 0 "OK" 3 "SNA" ;
+VAL_ 643 DL_RLtch_Stat 1 "CLS" 0 "NDEF0" 2 "OPN" 3 "SNA" ;
+VAL_ 643 DrRLtch_FL_Stat 1 "CLS" 0 "NDEF0" 2 "OPN" 3 "SNA" ;
+VAL_ 643 DrRLtch_FR_Stat 1 "CLS" 0 "NDEF0" 2 "OPN" 3 "SNA" ;
+VAL_ 643 DrRLtch_RL_Stat 1 "CLS" 0 "NDEF0" 2 "OPN" 3 "SNA" ;
+VAL_ 643 DrRLtch_RR_Stat 1 "CLS" 0 "NDEF0" 2 "OPN" 3 "SNA" ;
+VAL_ 643 EngHd_Stat 1 "CLS" 0 "NDEF0" 2 "OPN" 3 "SNA" ;
+VAL_ 643 LgtSens_Night 0 "DAY" 1 "NIGHT" ;
+VAL_ 643 MPkBrk_Stat 1 "ENGG" 0 "RELS" ;
+VAL_ 643 RevGr_Engg 0 "DISENGG" 1 "ENGG" 2 "NDEF2" 3 "SNA" ;
+VAL_ 643 StW_Cond_Stat 3 "BLINK" 1 "NDEF1" 0 "OFF" 2 "ON" ;
+VAL_ 643 Trlr_Stat 2 "NDEF2" 0 "NONE" 1 "OK" 3 "SNA" ;
VAL_ 880 EPAS_currentTuneMode 1 "DM_COMFORT" 3 "DM_SPORT" 2 "DM_STANDARD" 0 "FAIL_SAFE_DEFAULT" 4 "RWD_COMFORT" 6 "RWD_SPORT" 5 "RWD_STANDARD" 7 "UNAVAILABLE" ;
VAL_ 880 EPAS_eacErrorCode 14 "EAC_ERROR_EPB_INHIBIT" 3 "EAC_ERROR_HANDS_ON" 7 "EAC_ERROR_HIGH_ANGLE_RATE_REQ" 9 "EAC_ERROR_HIGH_ANGLE_RATE_SAFETY" 6 "EAC_ERROR_HIGH_ANGLE_REQ" 8 "EAC_ERROR_HIGH_ANGLE_SAFETY" 10 "EAC_ERROR_HIGH_MMOT_SAFETY" 11 "EAC_ERROR_HIGH_TORSION_SAFETY" 0 "EAC_ERROR_IDLE" 12 "EAC_ERROR_LOW_ASSIST" 2 "EAC_ERROR_MAX_SPEED" 1 "EAC_ERROR_MIN_SPEED" 13 "EAC_ERROR_PINION_VEL_DIFF" 4 "EAC_ERROR_TMP_FAULT" 5 "EAR_ERROR_MAX_STEER_DELTA" 15 "SNA" ;
VAL_ 880 EPAS_eacStatus 2 "EAC_ACTIVE" 1 "EAC_AVAILABLE" 3 "EAC_FAULT" 0 "EAC_INHIBITED" 4 "SNA" ;
diff --git a/opendbc/tesla_can_pedal.dbc b/opendbc/tesla_can_pedal.dbc
index db30fb4fe572c4..dc65be3c5ad32c 100644
--- a/opendbc/tesla_can_pedal.dbc
+++ b/opendbc/tesla_can_pedal.dbc
@@ -58,4 +58,5 @@ BO_ 1362 GAS_SENSOR: 6 INTERCEPTOR
SG_ STATE : 35|4@0+ (1,0) [0|15] "" EON
SG_ IDX : 39|4@0+ (1,0) [0|15] "" EON
SG_ CHECKSUM : 47|8@0+ (1,0) [0|3] "" EON
-
\ No newline at end of file
+
+VAL_ 1362 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
diff --git a/opendbc/toyota_2017_ref_pt.dbc b/opendbc/toyota_2017_ref_pt.dbc
deleted file mode 100644
index 2622c9f42e5732..00000000000000
--- a/opendbc/toyota_2017_ref_pt.dbc
+++ /dev/null
@@ -1,1313 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: AFS BSR CGW CSR DS1 FCM FRD KSS MAV SCS Vector__XXX
-
-
-BO_ 1196 ABG1D50: 8 CGW
- SG_ DRABG01 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG02 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG03 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG04 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG05 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG06 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG07 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG08 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1212 ABG1D51: 8 CGW
- SG_ DRABG09 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG10 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG11 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG12 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG13 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG14 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG15 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRABG16 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 945 ABG1S01: 8 CGW
- SG_ CDT : 22|3@0+ (1,0) [0|0] "" DS1
- SG_ AB : 19|2@0+ (1,0) [0|0] "" DS1
- SG_ DBKLAB : 17|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PODT : 27|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PBKLAB : 25|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ EDRTRG : 44|2@0+ (1,0) [0|0] "" DS1
-
-BO_ 836 ACC1F01: 8 DS1
- SG_ DSS1GDRV : 7|10@0- (0.1,0) [0|0] "m/s^2" Vector__XXX
- SG_ DS1STAT2 : 13|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DS1STBK2 : 10|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSWAR : 18|1@0+ (1,0) [0|0] "" FCM
- SG_ PCSALM : 17|1@0+ (1,0) [0|0] "" FCM
- SG_ PCSOPR : 16|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSABK : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PBATRGR : 30|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PPTRGR : 28|1@0+ (1,0) [0|0] "" FCM
- SG_ IBTRGR : 27|1@0+ (1,0) [0|0] "" FCM
- SG_ CLEXTRGR : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ IRLT_REQ : 25|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BRKHLD : 37|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AVSTRGR : 36|1@0+ (1,0) [0|0] "" SCS
- SG_ VGRSTRGR : 35|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PREFILL : 33|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PBRTRGR : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSDIS : 43|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PBPREPMP : 40|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACCF01SM : 63|8@0+ (1,0) [0|0] "" FCM
-
-BO_ 1227 ACC1N01: 8 DS1
- SG_ ACCNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ ACCSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ ACCSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ ACCREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 835 ACC1S03: 8 DS1
- SG_ ATACC2 : 7|16@0- (0.001,0) [0|0] "m/s^2" Vector__XXX
- SG_ ACCTYPE : 23|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XTRGT2 : 21|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XLTMD2 : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LCDT2 : 19|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LCNG : 18|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SMC : 17|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ STOKJD : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PMTBRKG : 30|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LVSTP : 29|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LCCWOK : 25|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LCBW2 : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACC : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AT_RAW : 47|8@0- (0.05,0) [0|0] "m/s^2" Vector__XXX
- SG_ ACC03SUM : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 896 ACN1S01: 8 CGW
- SG_ R_AC2 : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_HTR : 5|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECOSW : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_EGON : 1|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BLWON : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SCAC : 13|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CGIH : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FAN_AC : 22|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACHI : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACMAX : 19|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_VSCUS : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_SHTR : 30|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_PTC : 29|2@0+ (1,0) [0|0] "piece" Vector__XXX
- SG_ GNRTIH : 27|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_COL_TM : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_HET_TM : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TAMOUT : 55|8@0- (0.625,0) [0|0] "ÂŽ" Vector__XXX
-
-BO_ 897 ACN1S04: 8 CGW
- SG_ R_ACCALL : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_AC_WNG : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_SW_CON : 5|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_BEEP : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_RA_AUT : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_RA_AC : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_RA_LO : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_RA_HI : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_AUTO_D : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_AUTO_P : 14|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_DEF : 13|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_RRDEF : 12|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_RFAUT : 11|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_REC : 10|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_FRS : 9|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_AC : 8|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_MHTR : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_WIPD : 22|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_DUSY : 21|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_SWNG : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_BLW_F : 19|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_OAUT_D : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_OLET_D : 30|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_OAUT_P : 27|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_OLET_P : 26|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ST_BMN_F : 39|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_AIRPR : 47|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_O2 : 46|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_PLSM : 45|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_KAFUN : 43|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_SAFS : 42|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ I_ACOFF : 41|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_ONSCRN : 40|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 944 ACN1S07: 6 CGW
- SG_ RDEF : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MHTR : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TR_TEMP : 15|8@0+ (0.25,-6.5) [0|0] "ÂŽ" Vector__XXX
- SG_ ACN_AMB : 31|8@0+ (1,0) [0|0] "ÂŽ" CSR,DS1,FCM
- SG_ AC_AMB05 : 44|1@0+ (1,0) [0|0] "ÂŽ" Vector__XXX
- SG_ AC_MODE : 43|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1250 AFS1N01: 8 AFS
- SG_ AFSNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ AFSSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ AFSSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ AFSREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 913 AFS1S01: 8 AFS
- SG_ HLLI : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AZB_ADV : 5|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HEDH_AZB : 3|1@0+ (1,0) [0|0] "" FCM
- SG_ AZB_IND : 13|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AZB_HIND : 11|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AZB_PRE : 10|1@0+ (1,0) [0|0] "" FCM
- SG_ LED_HLI : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LPECU_PR : 24|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 845 AFS1S02: 5 AFS
- SG_ AHRR : 17|10@0+ (0.0048828125,0) [0|0] "V" Vector__XXX
- SG_ AHVLD : 39|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AHFAIL : 38|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1044 AHB1S01: 8 FCM
- SG_ AHB_DUTY : 47|8@0+ (0.5,0) [0|0] "%" Vector__XXX
- SG_ F_AHB : 55|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_AHB : 51|4@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 900 AVN1S01: 6 CGW
- SG_ RDC : 7|4@0+ (1,0) [0|0] "" SCS
- SG_ CONFID01 : 3|2@0+ (1,0) [0|0] "" SCS
- SG_ CONF : 1|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LYT : 15|4@0+ (1,0) [0|0] "" SCS
- SG_ DRVW : 9|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MWMP : 8|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GRAD : 23|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HARSHID : 19|4@0+ (1,0) [0|0] "" SCS
- SG_ BRANCH : 27|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HARSH : 35|2@0+ (1,0) [0|0] "" SCS
- SG_ TOLLGATE : 33|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TUNL : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LEAVEOUT : 47|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MRGLANE : 46|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LVLANE : 45|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 902 AVN1S03: 6 CGW
- SG_ ANS : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CRS1 : 15|1@0+ (1,0) [0|0] "" SCS
- SG_ RQAC : 14|7@0+ (0.02,0) [0|0] "G" Vector__XXX
- SG_ GUID : 23|1@0+ (1,0) [0|0] "" SCS
- SG_ GYRO : 22|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ NCRN : 21|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CRN6 : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CRN5 : 19|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CRN3 : 18|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CRN2 : 17|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CRN1 : 16|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CONFID03 : 31|2@0+ (1,0) [0|0] "" SCS
- SG_ CURV : 29|2@0+ (1,0) [0|0] "" SCS
- SG_ CVST : 27|1@0+ (1,0) [0|0] "" SCS
- SG_ NAVI_STR : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MIND : 25|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ONOFF : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HWPB : 39|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RAD : 38|7@0+ (5,0) [0|0] "m" SCS
- SG_ AFS_SW : 41|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AVS_SW : 40|1@0+ (1,0) [0|0] "" SCS
-
-BO_ 911 AVN1S07: 8 CGW
- SG_ TOFC_RST : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SL_CSTM : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SL_RMDG : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ST_RTCOM : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AVN07VLD : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ST_UCST : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSCOM51 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSCOM52 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSCOM53 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSCOM54 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSCOM55 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSCOM56 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 905 AVN1S08: 8 CGW
- SG_ VVSW : 7|3@0+ (1,0) [0|0] "" CSR
- SG_ BZV : 4|3@0+ (1,0) [0|0] "" CSR
- SG_ DFS : 1|2@0+ (1,0) [0|0] "" CSR
- SG_ BZ_M_SW : 15|1@0+ (1,0) [0|0] "" CSR
- SG_ VOL_SW : 14|1@0+ (1,0) [0|0] "" CSR
- SG_ BM : 13|1@0+ (1,0) [0|0] "" CSR
- SG_ DOFR : 12|1@0+ (1,0) [0|0] "" CSR
- SG_ RDSW : 11|1@0+ (1,0) [0|0] "" CSR
- SG_ FDSW : 10|1@0+ (1,0) [0|0] "" CSR
- SG_ RBSW : 9|1@0+ (1,0) [0|0] "" CSR
- SG_ FBSW : 8|1@0+ (1,0) [0|0] "" CSR
- SG_ NVDP_OK : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DEVICE : 22|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DISPSIZE : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HPTCSW_L : 30|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HPTCSW_R : 29|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HPTCSW_E : 28|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_MODE : 27|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VARBGM : 26|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ WBGM : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ X_LL : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ Y_LL : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ X_RH : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ Y_RH : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 998 AVN1S11: 5 CGW
- SG_ SENSPFM : 7|3@0+ (1,0) [0|0] "" SCS
- SG_ SENSFAIL : 4|3@0+ (1,0) [0|0] "" SCS
- SG_ CONFID11 : 1|2@0+ (1,0) [0|0] "" SCS
- SG_ CONFMMC : 15|8@0+ (1,0) [0|0] "" SCS
- SG_ DISTERR : 23|8@0+ (1,0) [0|0] "" SCS
- SG_ CONFLANE : 31|8@0+ (1,0) [0|0] "" SCS
- SG_ CONFDIR : 39|8@0+ (1,0) [0|0] "" SCS
-
-BO_ 933 AVN1S13: 8 CGW
- SG_ HUD_DISP : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRVSIDE : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DT_GP : 5|6@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DT_UNIT : 15|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DIR_TURN : 12|5@0+ (11.25,0) [0|0] "degree" Vector__XXX
- SG_ ROTARY : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ROAD_TP1 : 22|15@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ROAD_TP2 : 39|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ N_H_UP : 55|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ COMPASS : 54|6@0+ (11.25,0) [0|0] "degree" Vector__XXX
- SG_ DIR : 63|6@0+ (11.25,0) [0|0] "degree" Vector__XXX
-
-BO_ 936 AVN1S16: 5 CGW
- SG_ NDADVSRY : 7|5@0+ (1,0) [0|0] "" Vector__XXX
- SG_ NDCAUTON : 15|5@0+ (1,0) [0|0] "" Vector__XXX
- SG_ NDSSLCT : 23|5@0+ (1,0) [0|0] "" Vector__XXX
- SG_ NDCNFDID : 18|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ NDINDST : 25|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AVN16SUM : 39|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 999 AVN1S17: 7 CGW
- SG_ AVN17VLD : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANEID17 : 6|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRVLANE : 3|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRV_SIDE : 12|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE_NS : 11|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE1FLG : 23|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE2FLG : 19|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE1DIR : 31|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE2DIR : 47|16@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1000 AVN1S18: 8 CGW
- SG_ AVN18VLD : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANEID18 : 6|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE3FLG : 3|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE4FLG : 15|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE5FLG : 11|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE3DIR : 23|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE4DIR : 39|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE5DIR : 55|16@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1001 AVN1S19: 8 CGW
- SG_ AVN19VLD : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANEID19 : 6|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE6FLG : 3|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE7FLG : 15|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE8FLG : 11|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE6DIR : 23|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE7DIR : 39|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LANE8DIR : 55|16@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1076 AVN1S20: 8 CGW
- SG_ A_LNG_ST : 7|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LANG : 5|6@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGDB7 : 63|7@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_LNGCHG : 56|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1077 AVN1S21: 8 CGW
- SG_ A_OPEN_S : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OPENCHG : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CAPSW_S : 5|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_CLR_S : 3|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DISP_BRT : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DISP_CNT : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MM_CLOCK : 31|11@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CLK_OFST : 36|4@0- (5,0) [0|0] "min" Vector__XXX
- SG_ DST : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CLK_TYP : 47|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_UNTTMP : 45|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_UNTSP : 43|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_UNTDST : 41|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_UNTCSP : 55|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_CLRCHG : 52|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_TMPCHG : 51|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_SPCHG : 50|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_DSTCHG : 49|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_CSPCHG : 48|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ A_SPLM : 63|6@0+ (5,0) [0|0] "" Vector__XXX
- SG_ A_UTSPLM : 57|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1043 AVN1S31: 8 CGW
- SG_ GPSTM_Y : 7|8@0+ (1,0) [0|0] "year" Vector__XXX
- SG_ GPSTM_MO : 15|8@0+ (1,0) [0|0] "month" Vector__XXX
- SG_ GPSTM_D : 23|8@0+ (1,0) [0|0] "day" Vector__XXX
- SG_ GPSTM_H : 31|8@0+ (1,0) [0|0] "hour" Vector__XXX
- SG_ GPSTM_MI : 39|8@0+ (1,0) [0|0] "minute" Vector__XXX
- SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GMTDIF_H : 54|4@0+ (1,0) [0|0] "hour" Vector__XXX
- SG_ GMTDIF_M : 50|6@0+ (1,0) [0|0] "minute" Vector__XXX
- SG_ SUMMERTM : 60|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1020 BDB1S19: 8 CGW
- SG_ SOLAR_R : 23|9@0+ (100,0) [0|0] "" Vector__XXX
- SG_ SOLAR_L : 39|9@0+ (100,0) [0|0] "" Vector__XXX
- SG_ N_LX : 55|13@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1005 BGM1S01: 2 CGW
- SG_ WCAA : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ R_DISP : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BGM_BEEP : 11|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BGM_MODE : 9|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1237 BSR1N01: 8 BSR
- SG_ BSRNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ BSRSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ BSRSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ BSRREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 1014 BSR1S01: 8 BSR
- SG_ BSD_STAT : 7|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BSD_SW : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BSD_BUZ : 23|1@0+ (1,0) [0|0] "" CSR
-
-BO_ 1114 CGW1N02: 8 CGW
- SG_ CGW2REV : 7|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1228 CSR1N01: 8 CSR
- SG_ CSRNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ CSRSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ CSRSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ CSRREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 918 CSR1S01: 7 CSR
- SG_ CSV : 7|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CSSR : 4|2@0+ (1,0) [0|0] "" MAV
- SG_ CSD : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CSME : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CSIN : 0|1@0+ (1,0) [0|0] "" MAV
- SG_ FL_INFO : 15|4@0+ (1,0) [0|0] "" MAV
- SG_ FR_INFO : 11|4@0+ (1,0) [0|0] "" MAV
- SG_ RB_INFO : 23|4@0+ (1,0) [0|0] "" MAV
- SG_ FC_INFO : 19|4@0+ (1,0) [0|0] "" MAV
- SG_ RL_INFO : 31|4@0+ (1,0) [0|0] "" MAV
- SG_ RR_INFO : 27|4@0+ (1,0) [0|0] "" MAV
- SG_ CZV : 39|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VOT : 47|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FCZD : 43|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RCZD : 42|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FCDD : 41|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RCDD : 40|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VOL : 55|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CDG : 52|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MUTE : 49|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BZ_OFF : 48|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 869 DS11D70: 7 DS1
- SG_ D_TRGJDG : 7|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_RESSW : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_SETSW : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_CANSW : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_MAINSW : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_VMCC : 15|8@0+ (1,0) [0|0] "km/h" Vector__XXX
- SG_ D_VNCC : 23|8@0+ (1,0) [0|0] "km/h" Vector__XXX
- SG_ D_CCREQ : 31|8@0+ (100,-12800) [0|0] "N" Vector__XXX
- SG_ D_TGTDST : 39|8@0+ (1,0) [0|0] "m" Vector__XXX
- SG_ D_VRCC : 47|8@0- (1,0) [0|0] "km/h" Vector__XXX
- SG_ D_WSTL : 55|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_DSW : 54|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_FDJDG : 52|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ D_DSSJDG : 51|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 870 DS11D71: 7 DS1
- SG_ XREQALM : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XREQABK : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TGT_DIST : 5|14@0+ (0.01,0) [0|0] "m" Vector__XXX
- SG_ XREQPBA : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XREQFPB : 22|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XREQPB : 21|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XREQEXT : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XREQPSB : 19|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TGT_VGAP : 18|11@0+ (0.025,-51.175) [0|0] "m/s" Vector__XXX
- SG_ PCSDISP : 39|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XPCSRDY : 35|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TGT_NUMB : 34|3@0+ (1,1) [0|0] "" Vector__XXX
- SG_ TGT_POSX : 47|8@0- (0.04,0) [0|0] "m" Vector__XXX
-
-BO_ 871 DS11D72: 2 FCM
- SG_ LKADRTRG : 7|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKADRSHR : 5|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKADRSLK : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKADRSLD : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKADRCC : 2|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKADRTUR : 15|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKADRINV : 13|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 643 DS11F01: 7 DS1
- SG_ DSCOUNT : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DSLCCW1 : 15|1@0+ (1,0) [0|0] "" FCM
- SG_ DSSTPBZ : 14|1@0+ (1,0) [0|0] "" FCM
- SG_ PBRTRGR2 : 12|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DSSFTRQD : 11|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DSS1FDRV : 23|16@0- (2,0) [0|0] "N" Vector__XXX
- SG_ DSS1STBK : 39|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DSS1STAT : 36|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DSBHOK : 33|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PPTRGR2 : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DSRQBH : 47|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ IBTRGR2 : 45|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSABK2 : 44|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSNOCHG : 41|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DS1F01SM : 55|8@0+ (1,0) [0|0] "" FCM
-
-BO_ 1041 DS12F02: 8 DS1
- SG_ PCSINDI : 7|2@0+ (1,0) [0|0] "" FCM
- SG_ PCSWM : 5|2@0+ (1,0) [0|0] "" FCM
- SG_ PCSFCT : 3|1@0+ (1,0) [0|0] "" FCM
- SG_ PCSTUCT : 2|1@0+ (1,0) [0|0] "" FCM
- SG_ DS1LCCK : 1|2@0+ (1,0) [0|0] "" FCM
- SG_ PBTUCT : 14|1@0+ (1,0) [0|0] "" FCM
- SG_ PCSEXIST : 13|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSWDUCT : 11|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSWD : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSDW : 39|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSDSRF : 36|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSTEMP : 35|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSDUST : 34|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSLCCK : 33|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSPEDW : 47|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSPVSN : 44|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCTEMP2 : 42|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSDUST2 : 41|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSOFFS : 40|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSWDS : 55|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FRDADJ : 53|3@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1042 DS12F03: 8 FCM
- SG_ LKAINDI : 7|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKAWLSL : 5|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKAWLSR : 3|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKAFCT : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKATUCT : 14|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKACAMT : 13|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LDWEXIST : 10|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKASPCND : 23|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKAWTCS : 18|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LKASAUT : 16|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LDWBZ : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LDAFCVB : 47|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LDARDA : 46|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SWSSENSD : 45|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SWSSWD : 43|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SWSRAD : 55|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SWSFLD : 53|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SWSBUZ : 50|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1207 ECO1D50: 8 CGW
- SG_ DRECO01 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO02 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO03 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO04 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO05 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO06 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO07 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECO08 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 355 ECO1S01: 5 CGW
- SG_ ECOSTAON : 19|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECOMODE : 18|3@0+ (1,0) [0|0] "" KSS,SCS
- SG_ FCREQ : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SSVMREQ : 27|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ E2MRXMK : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BPHLDRQ : 36|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BPHLDRQ2 : 35|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECOEGSTP : 33|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 922 ECO1S90: 8 CGW
- SG_ ECOBZR : 23|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECOLMP : 21|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TESTECO : 30|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OPLMPMSK : 29|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MSTART : 28|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECOMODE3 : 27|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ INFSSCOP : 39|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ INFSSSTL : 36|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECLMP : 34|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AUTOSTA : 47|1@0+ (1,0) [0|0] "" SCS
- SG_ INFSSFAL : 46|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ INFSSINH : 45|6@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SSACMODE : 52|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ INFSSADV : 50|3@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1182 ECT1D50: 8 CGW
- SG_ DRECT01 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT02 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT03 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT04 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT05 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT06 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT07 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT08 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1183 ECT1D51: 8 CGW
- SG_ DRECT11 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT12 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT13 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT14 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT15 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT16 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT17 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT18 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1200 ECT1D52: 8 CGW
- SG_ DRECT21 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT22 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT23 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT24 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT25 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT26 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT27 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT28 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1201 ECT1D53: 8 CGW
- SG_ DRECT31 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT32 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT33 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT34 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT35 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT36 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT37 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT38 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1202 ECT1D54: 8 CGW
- SG_ DRECT41 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT42 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT43 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT44 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT45 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT46 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT47 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT48 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1203 ECT1D55: 8 CGW
- SG_ DRECT51 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT52 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT53 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT54 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT55 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT56 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT57 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRECT58 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 464 ECT1F03: 8 CGW
- SG_ NT : 7|16@0- (0.390625,0) [0|0] "rpm" Vector__XXX
- SG_ ACT : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XDMET : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XNTSW : 19|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XNMET : 18|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XRMET : 17|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XPMET : 16|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SFTOUT_S : 29|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ X3MET : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ X2MET : 25|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XLOMET : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ L4SW : 38|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SNOW : 36|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XFSFT : 35|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SFTOUT : 34|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HSSLWN : 55|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HSINH : 54|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CLTMODBK : 53|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LUOUT : 51|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LUKG : 50|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FBCOA : 48|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ECTF03SM : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 725 ECT1S10: 2 CGW
- SG_ VTORATIO : 7|16@0+ (0.0009765625,0) [0|0] "" Vector__XXX
-
-BO_ 956 ECT1S92: 8 CGW
- SG_ B_OILW : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_OILMD : 5|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_ISNW : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_RJTB : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_WNDL : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_LMULRJ : 14|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_P : 13|1@0+ (1,0) [0|0] "" AFS,CSR,MAV
- SG_ B_R : 12|1@0+ (1,0) [0|0] "" AFS,BSR,CSR,DS1,FCM,MAV
- SG_ B_N : 11|1@0+ (1,0) [0|0] "" AFS,CSR,MAV
- SG_ B_ISPTM : 10|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BV_THOCL : 23|16@0+ (0.625,-50) [0|0] "ÂŽ" Vector__XXX
- SG_ B_GEAR : 39|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_SMDE : 32|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_D : 47|1@0+ (1,0) [0|0] "" AFS,CSR,DS1,MAV
- SG_ B_ECOMI : 40|1@0+ (1,0) [0|0] "" DS1
- SG_ B_SPTMI : 55|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_PWRM : 54|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_OILWM : 51|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_SPTMS : 49|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_DMODE : 61|3@0+ (1,0) [0|0] "" SCS
-
-BO_ 1176 ENG1D50: 8 CGW
- SG_ DRENG01 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG02 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG03 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG04 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG05 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG06 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG07 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG08 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1177 ENG1D51: 8 CGW
- SG_ DRENG11 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG12 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG13 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG14 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG15 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG16 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG17 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG18 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1178 ENG1D52: 8 CGW
- SG_ DRENG21 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG22 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG23 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG24 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG25 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG26 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG27 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG28 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1179 ENG1D53: 8 CGW
- SG_ DRENG31 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG32 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG33 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG34 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG35 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG36 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG37 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG38 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1180 ENG1D54: 8 CGW
- SG_ DRENG41 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG42 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG43 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG44 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG45 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG46 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG47 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG48 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1181 ENG1D55: 8 CGW
- SG_ DRENG51 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG52 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG53 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG54 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG55 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG56 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG57 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG58 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1192 ENG1D56: 8 CGW
- SG_ DRENG61 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG62 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG63 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG64 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG65 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG66 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG67 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG68 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1191 ENG1D57: 8 CGW
- SG_ DRENG71 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG72 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG73 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG74 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG75 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG76 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG77 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG78 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1197 ENG1D58: 8 CGW
- SG_ DRENG81 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG82 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG83 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG84 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG85 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG86 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG87 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG88 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1198 ENG1D59: 8 CGW
- SG_ DRENG91 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG92 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG93 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG94 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG95 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG96 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG97 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG98 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1199 ENG1D60: 8 CGW
- SG_ DRENG101 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG102 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG103 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG104 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG105 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG106 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG107 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRENG108 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1017 ENG1F03: 8 CGW
- SG_ VARENG1 : 7|4@0+ (1,0) [0|0] "" AFS,SCS
- SG_ VARENG2 : 3|4@0+ (1,0) [0|0] "" AFS,SCS
- SG_ VARENG3 : 15|4@0+ (1,0) [0|0] "" AFS,SCS
- SG_ VARENG4 : 11|1@0+ (1,0) [0|0] "" AFS,SCS
- SG_ HVFLAG : 10|1@0+ (1,0) [0|0] "" AFS,BSR,FCM,SCS
- SG_ VARTRM1 : 23|4@0+ (1,0) [0|0] "" AFS,CSR,FCM,MAV,SCS
- SG_ GEARINF : 19|4@0+ (1,0) [0|0] "" SCS
- SG_ DVINF : 31|2@0+ (1,0) [0|0] "" AFS,DS1,FCM,SCS
- SG_ OBDINF : 27|4@0+ (1,0) [0|0] "" BSR,DS1,FCM,SCS
- SG_ ECOFLAG : 39|1@0+ (1,0) [0|0] "" FCM
- SG_ CDYMD : 38|2@0+ (1,0) [0|0] "" DS1,FCM
- SG_ ENGF03SM : 63|8@0+ (1,0) [0|0] "" DS1,FCM,MAV
-
-BO_ 452 ENG1F07: 8 CGW
- SG_ NE1 : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
- SG_ THA1 : 23|8@0+ (2.5,-40) [0|0] "ÂŽ" Vector__XXX
- SG_ THWX : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ EGF : 30|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ T2ERXF : 29|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ T2ERXMK : 28|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ASTEFI : 27|1@0+ (1,0) [0|0] "" AFS
- SG_ B2ERXMK : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PDLF : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ENTCAL2 : 39|8@0+ (12.5,0) [0|0] "rpm" Vector__XXX
- SG_ EGFB : 46|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ PTFB : 45|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MILREQ : 43|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_ECOL : 55|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_IECOCR : 53|6@0+ (2,0) [0|0] "" Vector__XXX
- SG_ ENGF07SM : 63|8@0+ (1,0) [0|0] "" AFS,DS1,FCM
-
-BO_ 114 ENG1F43: 5 CGW
- SG_ FAVLMCHL : 7|16@0- (2,0) [0|0] "N" Vector__XXX
- SG_ FAVLMONL : 23|16@0- (2,0) [0|0] "N" Vector__XXX
- SG_ ENGF43SM : 39|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 705 ENG1S01: 8 CGW
- SG_ ETCSFB : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ETCSF : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VSCTH : 5|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ THF : 4|1@0+ (1,0) [0|0] "" DS1
- SG_ IDL1 : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XCCACT2 : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ STPSWF : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ WTC : 0|1@0+ (1,0) [0|0] "" KSS,SCS
- SG_ ETQLVSC : 15|16@0- (0.03125,0) [0|0] "Nm" Vector__XXX
- SG_ ETQREAL : 31|16@0- (0.03125,0) [0|0] "Nm" SCS
- SG_ ETQISC : 47|8@0+ (1,-192) [0|0] "Nm" Vector__XXX
- SG_ EACCP : 55|8@0+ (0.5,0) [0|0] "%" DS1,FCM
- SG_ ENG01SUM : 63|8@0+ (1,0) [0|0] "" DS1,FCM
-
-BO_ 961 ENG1S23: 3 CGW
- SG_ EKLSM : 7|8@0+ (0.625,0) [0|0] "%" Vector__XXX
- SG_ GATHW : 15|16@0- (0.625,0) [0|0] "ÂŽ" Vector__XXX
-
-BO_ 979 ENG1S28: 2 CGW
- SG_ B_FC : 7|16@0+ (0.0005,0) [0|0] "ml" Vector__XXX
-
-BO_ 1408 ENG1S51: 8 CGW
- SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_3 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_4 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_5 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_6 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_7 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_8 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1409 ENG1S52: 8 CGW
- SG_ VIN_9 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_10 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_11 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_12 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_13 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_14 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_15 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VIN_16 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1410 ENG1S54: 8 CGW
- SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VC : 52|5@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TES : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 955 ENG1S92: 8 CGW
- SG_ B_ST : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_TC : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_GLOW : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_STPE : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_OMWI : 15|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_SILUP : 13|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_SILDN : 12|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_WSTP : 11|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_LOUT : 10|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_OILPL : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_TMP : 23|8@0+ (0.5,0) [0|0] "ÂŽ" Vector__XXX
- SG_ OGENETCS : 30|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_DPFW : 28|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BOSLAMP : 37|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BOSMINF : 34|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GOSLAMP : 45|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GOSMINF : 42|3@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 921 ENG1S95: 8 CGW
- SG_ B_LLSP2 : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TLSTBZ : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_ASLBZ2 : 5|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_SPU2 : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACASID1 : 3|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACASID2 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_LSP2 : 31|8@0+ (1,0) [0|0] "km/hÂEmph" Vector__XXX
- SG_ B_ASLSP2 : 39|8@0+ (1,0) [0|0] "km/hÂEmph" Vector__XXX
- SG_ CACCTRN : 47|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCINF : 46|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCFR2 : 45|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCFR1 : 44|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCFLD : 43|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCCM3 : 42|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCCM2 : 41|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CACCCM1 : 40|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 238 ENG2F01: 4 CGW
- SG_ STOFOK : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GROWIND : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_TMP3 : 15|8@0+ (0.5,0) [0|0] "ÂŽ" Vector__XXX
- SG_ IMMINJST : 23|16@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 466 ENG2F04: 8 CGW
- SG_ XLDR : 7|1@0+ (1,0) [0|0] "" DS1
- SG_ XACCACTV : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XACCACT : 5|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ XPAIDLV : 4|1@0+ (1,0) [0|0] "" DS1
- SG_ XPAIDL : 3|1@0+ (1,0) [0|0] "" DS1
- SG_ BHOK : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RQBH : 1|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACCSTAT : 15|3@0+ (1,0) [0|0] "" DS1
- SG_ ACCSTBK : 12|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ STPBZ : 9|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ PLOCKF : 8|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ACCREQ : 23|16@0- (0.0009765625,0) [0|0] "m/s^2" DS1
- SG_ ACCAVL : 39|16@0- (2,0) [0|0] "N" Vector__XXX
- SG_ SPDSTAT : 55|4@0+ (1,0) [0|0] "Â|" DS1
- SG_ SSTOK : 51|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CANREQ : 49|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FCACT : 48|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SM1D2 : 63|8@0+ (1,0) [0|0] "" DS1,FCM
-
-BO_ 467 ENG2F05: 8 CGW
- SG_ LCCW2 : 4|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ WSTL2 : 3|1@0+ (1,0) [0|0] "" DS1
- SG_ LCCHK : 2|3@0+ (1,0) [0|0] "" DS1
- SG_ XCCOK2 : 15|1@0+ (1,0) [0|0] "" DS1
- SG_ SLTACC : 14|2@0+ (1,0) [0|0] "" DS1
- SG_ LTME2 : 12|2@0+ (1,0) [0|0] "" DS1
- SG_ STPSWF2 : 10|1@0+ (1,0) [0|0] "" DS1
- SG_ CCSF : 9|1@0+ (1,0) [0|0] "" DS1
- SG_ CCSNG : 8|1@0+ (1,0) [0|0] "" DS1
- SG_ VM : 23|16@0+ (0.00390625,0) [0|0] "km/h" DS1
- SG_ INTG : 39|8@0- (0.04,0) [0|0] "m/s^2" DS1
- SG_ D2PRXMK : 47|1@0+ (1,0) [0|0] "" DS1
- SG_ SM1D3 : 63|8@0+ (1,0) [0|0] "" DS1,FCM
-
-BO_ 119 ENG2F41: 6 CGW
- SG_ FDRV : 7|16@0- (2,0) [0|0] "N" Vector__XXX
- SG_ FDRVREAL : 23|13@0- (10,0) [0|0] "N" Vector__XXX
- SG_ XAECT : 39|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ XFDRVCOL : 38|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FDRVSELP : 34|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ENG2F41S : 47|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 120 ENG2F42: 4 CGW
- SG_ FAVLMCHH : 7|16@0- (2,0) [0|0] "N" Vector__XXX
- SG_ CCRNG : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FDRVTYPD : 22|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GEARHD : 18|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ ENG2F42S : 31|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 916 EPS1S90: 1 CGW
- SG_ B_WPS0 : 1|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1235 FCM1N01: 8 FCM
- SG_ FCMNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ FCMSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ FCMSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ FCMREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 1161 FCM1S10: 8 FCM
- SG_ TSGN1 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNGRY1 : 12|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNHLT1 : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPDVAL1 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPLSGN1 : 31|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPLSGN2 : 27|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGN2 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNGRY2 : 44|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNHLT2 : 41|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPDVAL2 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BZRRQ_P : 63|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BZRRQ_A : 61|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SYNCID1 : 59|4@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1162 FCM1S11: 8 FCM
- SG_ TSGN3 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNGRY3 : 12|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNHLT3 : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPLSGN3 : 31|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPLSGN4 : 27|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGN4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNGRY4 : 44|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSGNHLT4 : 41|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DPSGNREQ : 54|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SGNNUMP : 53|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SGNNUMA : 50|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SPDUNT : 63|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSRWMSG : 61|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SYNCID2 : 59|4@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1163 FCM1S12: 8 FCM
- SG_ TSREQPD : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSRMSW : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OTSGNNTM : 5|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ NTLVLSPD : 3|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OVSPNTM : 1|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OVSPVALL : 11|4@0+ (1,-5) [0|0] "" Vector__XXX
- SG_ OVSPVALM : 19|4@0+ (1,-5) [0|0] "" Vector__XXX
- SG_ OVSPVALH : 27|4@0+ (1,-5) [0|0] "" Vector__XXX
- SG_ TSRSPU : 33|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1279 FRD1N01: 8 FRD
- SG_ FRDNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ FRDSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ FRDSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ FRDREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 737 FWM1S01: 2 CGW
- SG_ ACTHLF : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ MOT4WD : 6|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CCANCEL : 5|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AI4WD : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LOW4 : 3|1@0+ (1,0) [0|0] "" MAV,SCS
- SG_ DLOCK : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RDLOCK : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ HLN : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ F_SP4WD : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RQ_SP4WD : 14|7@0+ (1,73) [0|0] "km/h" Vector__XXX
-
-BO_ 1082263092 IDT1S03_82: 8 CGW
- SG_ IDT03_ID : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ IDT03_IF : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CO_IDT : 23|16@0+ (1,0) [0|0] "" Vector__XXX
- SG_ UACK : 39|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ WRT : 38|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RSTP : 37|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1082328629 IDT1S04_83: 8 CGW
- SG_ IDT04_ID : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ IDT04_IF : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OSID : 47|16@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1257 KSS1N01: 8 KSS
- SG_ KSSNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ KSSSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ KSSSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ KSSREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 927 KSS1S90: 1 KSS
- SG_ LKSS0 : 1|2@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1263 MAV1N01: 8 MAV
- SG_ MAVNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ MAVSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ MAVSPF : 23|16@0+ (1,0) [0|0] "" CGW
-
-BO_ 992 MET1S18: 8 CGW
- SG_ M_LANG : 7|6@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNG_ST : 1|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ M_LNGDB7 : 63|7@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1193 SCS1D50: 8 SCS
- SG_ DRSCS01 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS02 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS03 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS04 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS05 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS06 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS07 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DRSCS08 : 63|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1226 SCS1N01: 8 SCS
- SG_ SCSNID : 7|8@0+ (1,0) [0|0] "" CGW
- SG_ SCSSNG : 15|1@0+ (1,0) [0|0] "" CGW
- SG_ SCSSPF : 23|16@0+ (1,0) [0|0] "" CGW
- SG_ SCSREV : 39|32@0+ (1,0) [0|0] "" CGW
-
-BO_ 744 SCS1S01: 8 SCS
- SG_ SELECTOR : 3|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AVS_MD : 63|3@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 815 SCS1S06: 5 SCS
- SG_ RRVH : 23|8@0- (1,0) [0|0] "mm" AFS
- SG_ RLVH : 31|8@0- (1,0) [0|0] "mm" AFS
- SG_ SCECOINH : 35|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 917 SCS1S90: 4 SCS
- SG_ B_LSUS6 : 7|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_LSUS4 : 5|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_LSUS2 : 3|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_LSUS8 : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ DLR_HSID : 23|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LAR_HS : 18|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AVSNI : 16|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 37 Steering_Angle_sensor: 8 CGW
- SG_ STS3 : 7|1@0+ (1,0) [0|0] "" AFS,BSR,DS1,FCM,MAV
- SG_ STS2 : 6|1@0+ (1,0) [0|0] "" AFS,DS1,FCM,KSS,MAV,SCS
- SG_ STS1 : 5|1@0+ (1,0) [0|0] "" AFS,BSR,DS1,FCM,KSS,MAV,SCS
- SG_ STS0 : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SSA : 3|12@0- (1.5,0) [0|0] "deg" AFS,BSR,DS1,FCM,KSS,MAV,SCS
- SG_ SAZS : 23|1@0+ (1,0) [0|0] "" AFS,BSR,DS1,FCM
- SG_ SFRZ : 22|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ SSAZ : 19|12@0- (1.5,0) [0|0] "deg" AFS,BSR,DS1,FCM
- SG_ SSAS : 39|4@0- (0.1,0) [0|0] "deg" FCM,KSS,SCS
- SG_ SSAV : 35|12@0- (1,0) [0|0] "deg/s" FCM,KSS,SCS
- SG_ STDID : 51|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ STR01SUM : 63|8@0+ (1,0) [0|0] "" AFS,DS1,FCM,MAV
-
-BO_ 1059 STR1S02: 1 CGW
- SG_ SFR : 5|1@0+ (1,0) [0|0] "" MAV
- SG_ STRWVG : 4|1@0+ (1,0) [0|0] "" AFS,BSR,DS1,FCM
-
-BO_ 170 Wheel_speeds: 8 CGW
- SG_ VXFREF : 7|1@0+ (1,0) [0|0] "" AFS,FCM,MAV
- SG_ VXFR : 6|15@0+ (0.01,-67.67) [0|0] "km/h" AFS,BSR,DS1,FCM,KSS,MAV,SCS
- SG_ VXFLEF : 23|1@0+ (1,0) [0|0] "" AFS,FCM,MAV
- SG_ VXFL : 22|15@0+ (0.01,-67.67) [0|0] "km/h" AFS,BSR,DS1,FCM,KSS,MAV,SCS
- SG_ VXRREF : 39|1@0+ (1,0) [0|0] "" AFS,FCM,MAV
- SG_ VXRR : 38|15@0+ (0.01,-67.67) [0|0] "km/h" AFS,BSR,DS1,FCM,KSS,MAV,SCS
- SG_ VXRLEF : 55|1@0+ (1,0) [0|0] "" AFS,FCM,MAV
- SG_ VXRL : 54|15@0+ (0.01,-67.67) [0|0] "km/h" AFS,BSR,DS1,FCM,KSS,MAV,SCS
-
-BO_ 426 VSC1F02: 6 CGW
- SG_ VXFRF : 7|1@0+ (1,0) [0|0] "" AFS,BSR,FCM,MAV
- SG_ VXFRIGS : 6|1@0+ (1,0) [0|0] "" BSR,DS1,FCM,MAV
- SG_ VXFRHDS : 5|1@0+ (1,0) [0|0] "" FCM,KSS,MAV,SCS
- SG_ VXFLF : 2|1@0+ (1,0) [0|0] "" AFS,BSR,FCM,MAV
- SG_ VXFLIGS : 1|1@0+ (1,0) [0|0] "" BSR,DS1,FCM,MAV
- SG_ VXFLHDS : 0|1@0+ (1,0) [0|0] "" FCM,KSS,MAV,SCS
- SG_ VXRRF : 13|1@0+ (1,0) [0|0] "" AFS,BSR,FCM,MAV
- SG_ VXRRIGS : 12|1@0+ (1,0) [0|0] "" BSR,DS1,FCM,MAV
- SG_ VXRRHDS : 11|1@0+ (1,0) [0|0] "" FCM,KSS,MAV,SCS
- SG_ VXRLF : 8|1@0+ (1,0) [0|0] "" AFS,BSR,FCM,MAV
- SG_ VXRLIGS : 23|1@0+ (1,0) [0|0] "" BSR,DS1,FCM,MAV
- SG_ VXRLHDS : 22|1@0+ (1,0) [0|0] "" FCM,KSS,MAV,SCS
- SG_ VSCF02SM : 47|8@0+ (1,0) [0|0] "" AFS,DS1,FCM,MAV
-
-BO_ 550 Brake_module: 8 CGW
- SG_ VSCF01FG : 7|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AHCURQ : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PMCF : 3|1@0+ (1,0) [0|0] "" DS1
- SG_ PMCS : 2|1@0+ (1,0) [0|0] "" DS1
- SG_ PMC : 1|10@0+ (0.02,0) [0|0] "Mpa" DS1
- SG_ ECOEN : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ CCS : 22|1@0+ (1,0) [0|0] "" DS1
- SG_ FBA : 21|1@0+ (1,0) [0|0] "" DS1
- SG_ TRBRKSYS : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TS : 38|1@0+ (1,0) [0|0] "" KSS,SCS
- SG_ WSTP : 37|1@0+ (1,0) [0|0] "" DS1,KSS,SCS
- SG_ VSCACT : 36|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ BAEX : 35|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TEM : 34|3@0+ (1,0) [0|0] "" SCS
- SG_ FSTP : 60|1@0+ (1,0) [0|0] "" DS1
- SG_ ABSACT : 59|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
-
-BO_ 180 Speed : 8 CGW
- SG_ SP1P : 39|6@0+ (1,0) [0|0] "" DS1,FCM
- SG_ SP1S : 33|1@0+ (1,0) [0|0] "" BSR,DS1,FCM,MAV
- SG_ SP1 : 47|16@0- (0.01,0) [0|0] "km/h" BSR,DS1,FCM,MAV
- SG_ VSC03SUM : 63|8@0+ (1,0) [0|0] "" DS1,FCM,MAV
-
-BO_ 800 VSC1S07: 8 CGW
- SG_ FBKRLY : 6|1@0+ (1,0) [0|0] "" DS1
- SG_ FVSCM : 4|1@0+ (1,0) [0|0] "" DS1
- SG_ FVSCSFT : 3|1@0+ (1,0) [0|0] "" DS1
- SG_ FABS : 2|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ TSVSC : 1|1@0+ (1,0) [0|0] "" DS1
- SG_ FVSCL : 0|1@0+ (1,0) [0|0] "" DS1
- SG_ RQCSTBKB : 15|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PSBSTBY : 14|1@0+ (1,0) [0|0] "" DS1
- SG_ P2BRXMK : 13|1@0+ (1,0) [0|0] "" DS1
- SG_ MCC : 11|1@0+ (1,0) [0|0] "" DS1
- SG_ RQBKB : 10|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BRSTOP : 9|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ BRKON : 8|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ ASLP : 23|8@0- (1,0) [0|0] "deg" DS1
- SG_ BRTYPACC : 31|2@0+ (1,0) [0|0] "" DS1
- SG_ BRKABT3 : 26|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BRKABT2 : 25|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BRKABT1 : 24|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GVC : 39|8@0- (0.04,0) [0|0] "m/s^2" DS1
- SG_ XGVCINV : 43|1@0+ (1,0) [0|0] "" DS1
- SG_ S07CNT : 52|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ PCSBRSTA : 50|2@0+ (1,0) [0|0] "" DS1
- SG_ VSC07SUM : 63|8@0+ (1,0) [0|0] "" DS1,FCM
-
-BO_ 1056 VSC1S08: 8 CGW
- SG_ YR1Z : 7|16@0- (1,0) [0|0] "rad/s" DS1,FCM,MAV
- SG_ YR2Z : 23|16@0- (1,0) [0|0] "rad/s" DS1,FCM,MAV
- SG_ GL1Z : 39|8@0- (0.0359,0) [0|0] "m/s^2" DS1,FCM,KSS,MAV,SCS
- SG_ GL2Z : 47|8@0- (0.0359,0) [0|0] "m/s^2" DS1,FCM,KSS,MAV,SCS
- SG_ YRGSDIR : 55|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,SCS
- SG_ GLZS : 51|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,MAV,SCS
- SG_ YRZF : 50|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ YRZS : 49|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ YRZKS : 48|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ VSC08SUM : 63|8@0+ (1,0) [0|0] "" DS1,FCM,MAV
-
-BO_ 186 VSC1S12: 4 CGW
- SG_ HAC2ESRQ : 21|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FHACHOLD : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VSC12SUM : 31|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 562 VSC1S14: 6 CGW
- SG_ VWPSUMFR : 7|8@0+ (1,0) [0|0] "" MAV
- SG_ VWPSUMFL : 15|8@0+ (1,0) [0|0] "" MAV
- SG_ VWPFRPM : 23|1@0+ (1,0) [0|0] "" MAV
- SG_ VWPFLPM : 22|1@0+ (1,0) [0|0] "" MAV
- SG_ S14CNT : 21|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VWPFRPMS : 18|1@0+ (1,0) [0|0] "" MAV
- SG_ VWPFLPMS : 17|1@0+ (1,0) [0|0] "" MAV
- SG_ VWPSUMRR : 31|8@0+ (1,0) [0|0] "" MAV
- SG_ VWPSUMRL : 39|8@0+ (1,0) [0|0] "" MAV
- SG_ VSC14SUM : 47|8@0+ (1,0) [0|0] "" MAV
-
-BO_ 552 VSC1S29: 4 CGW
- SG_ ICBACT : 7|1@0+ (1,0) [0|0] "" DS1
- SG_ DVS0PCS : 6|15@0- (0.001,0) [0|0] "m/s^2" DS1
- SG_ SM228 : 31|8@0+ (1,0) [0|0] "" DS1
-
-BO_ 1168 VSC1S92: 1 CGW
- SG_ C_DCMOD1 : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_DCMOD2 : 6|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ C_DCMOD3 : 3|4@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 951 VSC1S95: 8 CGW
- SG_ B_BRKW : 7|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_ABS : 5|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_BRLV : 14|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TRCOFF : 13|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ VSCOFF : 12|2@0+ (1,0) [0|0] "" DS1,FCM
- SG_ SLP_WL : 10|3@0+ (1,0) [0|0] "" MAV
- SG_ B_MCST : 19|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_BUZZER : 31|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_ALSD : 27|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_DACIND : 25|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ OGENVSC : 37|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_ATRC : 47|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_STRC : 46|3@0+ (1,0) [0|0] "" MAV
- SG_ B_HZD : 43|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VSCSWIH : 51|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ STRCDISP : 50|3@0+ (1,0) [0|0] "" Vector__XXX
- SG_ STRCDSP2 : 60|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VSCEXIST : 59|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 1063 VSC1S96: 8 CGW
- SG_ MTS_DISP : 5|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ B_MTS : 1|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TRCCONRL : 11|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TRCCONRR : 10|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TRCCONFL : 9|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TRCCONFR : 8|1@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 545 VSC2F05: 5 CGW
- SG_ TQER : 7|16@0- (0.03125,0) [0|0] "Nm" Vector__XXX
- SG_ REQC : 23|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ REQ2 : 22|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ REQ1 : 21|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ AIDWI : 20|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ RTD : 19|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ LOMUSFT : 31|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VSC2F05S : 39|8@0+ (1,0) [0|0] "" Vector__XXX
-
-BO_ 544 VSC2F07: 4 CGW
- SG_ FSROT : 7|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BRK2 : 4|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ BRK1 : 3|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ FCNG : 1|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TSLP : 0|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ TRCACT : 15|1@0+ (1,0) [0|0] "" DS1,FCM
- SG_ ABSSLP : 14|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VDMACT : 13|1@0+ (1,0) [0|0] "" FCM
- SG_ DAC_CND : 9|2@0+ (1,0) [0|0] "" Vector__XXX
- SG_ VSC2F07S : 31|8@0+ (1,0) [0|0] "" DS1,FCM
-
-BO_ 36 Kinematics: 8 CGW
- SG_ YRS11S : 7|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ YRS14S : 6|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ YRS21S : 5|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ YRS24S : 4|1@0+ (1,0) [0|0] "" DS1,FCM,MAV
- SG_ YGS1 : 3|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,MAV,SCS
- SG_ YGS0 : 2|1@0+ (1,0) [0|0] "" Vector__XXX
- SG_ YR : 1|10@0+ (0.244,-125) [0|0] "deg/sec" DS1,FCM,MAV
- SG_ YR_CPUMN : 23|4@0+ (1,0) [0|0] "" Vector__XXX
- SG_ GS4S : 19|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,MAV,SCS
- SG_ GS1S : 18|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,MAV,SCS
- SG_ GL1X : 17|10@0+ (0.03589,-18.375) [0|0] "m/s^2" DS1,FCM,KSS,MAV,SCS
- SG_ YG_ID : 39|4@0+ (1,0) [0|0] "" DS1,FCM,KSS,SCS
- SG_ GS5S : 35|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,MAV,SCS
- SG_ GS2S : 34|1@0+ (1,0) [0|0] "" DS1,FCM,KSS,MAV,SCS
- SG_ GL2Y : 33|10@0+ (0.03589,-18.375) [0|0] "m/s^2" DS1,FCM,KSS,MAV,SCS
- SG_ YR_DIF : 55|8@0+ (0.244,-31) [0|0] "deg/sec" DS1,FCM,MAV
- SG_ YGS03SUM : 63|8@0+ (1,0) [0|0] "" DS1,FCM,MAV
-
diff --git a/opendbc/toyota_avalon_2017_pt_generated.dbc b/opendbc/toyota_avalon_2017_pt_generated.dbc
index 7749d9610e3c89..fb6a569d4bc539 100644
--- a/opendbc/toyota_avalon_2017_pt_generated.dbc
+++ b/opendbc/toyota_avalon_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_avalon_2017_pt.dbc starts here"
+CM_ "toyota_avalon_2017_pt.dbc starts here";
@@ -362,6 +385,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_camry_hybrid_2018_pt_generated.dbc b/opendbc/toyota_camry_hybrid_2018_pt_generated.dbc
index e2561f18c44ea8..72f3d8bded5cfb 100644
--- a/opendbc/toyota_camry_hybrid_2018_pt_generated.dbc
+++ b/opendbc/toyota_camry_hybrid_2018_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_camry_hybrid_2018_pt.dbc starts here"
+CM_ "toyota_camry_hybrid_2018_pt.dbc starts here";
@@ -367,7 +390,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 31|16@0- (0.05527,0) [-500|500] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 8 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_corolla_2017_pt_generated.dbc b/opendbc/toyota_corolla_2017_pt_generated.dbc
index e0a405dea9f926..d76e3cd71b4b42 100644
--- a/opendbc/toyota_corolla_2017_pt_generated.dbc
+++ b/opendbc/toyota_corolla_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_corolla_2017_pt.dbc starts here"
+CM_ "toyota_corolla_2017_pt.dbc starts here";
@@ -357,10 +380,11 @@ BO_ 705 GAS_PEDAL: 8 XXX
SG_ GAS_PEDAL : 55|8@0+ (0.005,0) [0|1] "" XXX
BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (1.0,0) [-20000|20000] "" XXX
+ SG_ STEER_TORQUE_EPS : 47|16@0- (0.88,0) [-20000|20000] "" XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_highlander_2017_pt_generated.dbc b/opendbc/toyota_highlander_2017_pt_generated.dbc
index f5063df3fca89b..b81779fe784eb8 100644
--- a/opendbc/toyota_highlander_2017_pt_generated.dbc
+++ b/opendbc/toyota_highlander_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_highlander_2017_pt.dbc starts here"
+CM_ "toyota_highlander_2017_pt.dbc starts here";
@@ -362,6 +385,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_highlander_hybrid_2018_pt_generated.dbc b/opendbc/toyota_highlander_hybrid_2018_pt_generated.dbc
index 193735a0ff3f79..6e22e0e2260b87 100644
--- a/opendbc/toyota_highlander_hybrid_2018_pt_generated.dbc
+++ b/opendbc/toyota_highlander_hybrid_2018_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_highlander_hybrid_2018_pt.dbc starts here"
+CM_ "toyota_highlander_hybrid_2018_pt.dbc starts here";
@@ -361,6 +384,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_iQ_2009_can.dbc b/opendbc/toyota_iQ_2009_can.dbc
deleted file mode 100644
index 90f91d7cb283b5..00000000000000
--- a/opendbc/toyota_iQ_2009_can.dbc
+++ /dev/null
@@ -1,197 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX
-
-BO_ 1552 CONTAINS_LRES_SPEED: 8 XXX
- SG_ SPEED_LOWRES : 16|8@1+ (1,0) [0|255] "km/h?" XXX
- SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 452 ENGINE: 8 XXX
- SG_ ENGINE_RPM : 7|16@0+ (1,0) [0|65535] "rpm" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ DIFFERENT_EACH_RIDE : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ A_DECREASING_VALUE : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 37 STEERING: 8 XXX
- SG_ STEER_DIRECTION : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_1 : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_4 : 42|2@0- (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_2 : 44|2@0- (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 46|2@0- (1,0) [0|3] "" XXX
- SG_ STEER_ANGLE : 2|11@0- (1,0) [-350|350] "" XXX
-
-BO_ 36 ACCELERATIONS: 8 XXX
- SG_ ACC_LAT_CLEAN : 2|11@0- (1,0) [0|255] "" XXX
- SG_ ACC_LATERAL : 63|8@0- (1,0) [0|255] "" XXX
- SG_ ACC_FRONT_BACK_1 : 31|8@0- (1,0) [0|255] "" XXX
- SG_ ACC_FRONT_BACK_2 : 47|8@0- (1,0) [0|255] "" XXX
-
-BO_ 947 LOW_RES_INDICATORS: 8 XXX
- SG_ LOW_RES_ACC_PEDAL : 23|7@0+ (1,0) [0|63] "" XXX
- SG_ LOW_RES_RPM : 7|16@0+ (1,0) [0|255] "rpm" XXX
-
-BO_ 955 BRAKING_PLUS_OTHER: 8 XXX
- SG_ IS_BRAKING_2 : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ ENGINE_TEMPERATURE : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ MAYBE_CLUTCH : 13|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1595 CONTAINS_TIME: 8 XXX
- SG_ TIME_ON : 55|16@0+ (0.1,0) [0|65535] "s" XXX
- SG_ BETWEEN_RIDES : 7|32@0+ (1,0) [0|4294967295] "" XXX
-
-BO_ 170 WHEELS_SPEEDS: 8 XXX
- SG_ FRONT_LEFT_WHEEL_SPEED : 23|16@0+ (0.01,-67.67) [0|65535] "km/h" XXX
- SG_ REAR_RIGHT_WHEEL_SPEED : 39|16@0+ (0.01,-67.67) [0|65535] "km/h" XXX
- SG_ REAR_LEFT_WHEEL_SPEED : 55|16@0+ (0.01,-67.67) [0|65535] "km/h" XXX
- SG_ FRONT_RIGHT_WHEEL_SPEED : 7|16@0+ (0.01,-67.67) [0|65535] "km/h" XXX
-
-BO_ 180 VEHICLE_DYNAMICS: 8 XXX
- SG_ WIERD_STUFF : 8|2@1+ (1,0) [0|3] "" XXX
- SG_ VEHICLE_SPEED : 47|16@0+ (0.01,0) [0|255] "km/h" XXX
- SG_ SPEED_MOD_256 : 63|8@0- (1,0) [0|255] "" XXX
- SG_ MAYBE_DISTANCE_MOD_256 : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 186 NEW_MSG_9: 8 XXX
- SG_ NEW_SIGNAL_2 : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 426 NEW_MSG_5: 8 XXX
- SG_ CONSTANT : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 906 BOOLS: 8 XXX
- SG_ MAY_CONTAIN_LIGHTS : 7|4@0+ (1,0) [0|127] "" XXX
- SG_ NEW_SIGNAL_1 : 3|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_2 : 2|1@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_3 : 1|1@0+ (1,0) [0|1] "" XXX
- SG_ MOVEMENT_START_TRIGGER : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 979 LOW_RES_ACCELERATOR: 8 XXX
- SG_ VERY_LRES_ACC : 7|16@0+ (1,0) [0|65535] "" XXX
-
-BO_ 1600 SLOW_VARIABLE_INFOS: 8 XXX
- SG_ CHANGES_EACH_RIDE : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ INCREASING_VALUE_FUEL : 47|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1568 DOORS: 8 XXX
- SG_ KEY_ACC : 36|1@0+ (1,0) [0|1] "" XXX
- SG_ KEY_ON : 37|1@0+ (1,0) [0|1] "" XXX
- SG_ KEY_INSERT : 46|1@0+ (1,0) [0|1] "" XXX
- SG_ NOT_ON : 63|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_RIGHT : 44|1@0+ (1,0) [0|3] "" XXX
- SG_ DOOR_TRUNK : 41|1@1+ (1,0) [0|3] "" XXX
- SG_ DOOR_LEFT : 45|1@0+ (1,0) [0|255] "" XXX
- SG_ HANDBRAKE : 60|1@0+ (1,0) [0|3] "" XXX
- SG_ NEW_SIGNAL_1 : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ DRIVER_SEATBELT : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ TRIGGER_BOOL : 15|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 705 COMMAND: 8 XXX
- SG_ NOT_ACCELERATING_PEDAL : 3|1@1+ (1,0) [0|1] "" XXX
- SG_ ACC_PEDAL_SENSOR : 55|16@0+ (1,0) [0|65535] "" XXX
- SG_ ACC_COMMAND : 31|16@0- (1,0) [0|7] "" XXX
- SG_ ACC_PEDAL_MEAN : 15|16@0- (1,0) [0|255] "" XXX
- SG_ NEGATIVE_COMMAND_OFFSET : 47|8@0- (1,0) [0|255] "" XXX
-
-BO_ 928 STEER2_MAYBE: 8 XXX
- SG_ NEW_SIGNAL_1 : 13|6@0+ (1,0) [0|63] "" XXX
- SG_ NEW_SIGNAL_2 : 60|5@0+ (1,0) [0|31] "" XXX
- SG_ NEW_SIGNAL_4 : 5|6@0+ (1,0) [0|255] "" XXX
- SG_ NEW_SIGNAL_3 : 46|7@0+ (1,0) [0|15] "" XXX
-
-BO_ 896 LONG_TERM_2: 8 XXX
- SG_ NEW_SIGNAL_1 : 55|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 944 LONG_TERM_MSG: 8 XXX
- SG_ LONG_TERM_SIGN : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 1553 TOTAL_DIST: 8 XXX
- SG_ TOTAL_DISTANCE : 55|16@0+ (1,0) [0|65535] "" XXX
-
-BO_ 1572 WHY_THESE_VALUES: 8 XXX
-
-BO_ 1555 BETWEEN_RIDES_CHANGE_1: 8 XXX
- SG_ BETWEEN_RIDES : 23|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1090 ASYNC_MSG_ACK: 8 XXX
- SG_ NEW_SIGNAL_1 : 13|2@0+ (1,0) [0|1] "" XXX
- SG_ NEW_SIGNAL_2 : 23|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1592 NEW_MSG_14: 8 XXX
- SG_ DOORS_LOCKED2 : 20|1@0+ (1,0) [0|1] "" XXX
- SG_ DOORS_LOCKED1 : 16|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 608 NEW_MSG_6: 8 XXX
- SG_ VERY_SMALL_SIGNAL2 : 56|1@0+ (1,0) [0|255] "" XXX
- SG_ VERY_SMALL_SIGNAL1 : 0|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 945 BETWEEN_RIDES_CHANGES_2: 8 XXX
- SG_ BETWEEN_RIDES : 24|1@0+ (1,0) [0|65535] "" XXX
-
-
-
-
-CM_ SG_ 1552 SPEED_LOWRES "Negative values to check";
-CM_ SG_ 452 CHECKSUM "Follows path of RPMs but more precise & 1 byte only";
-CM_ SG_ 452 A_DECREASING_VALUE "stabilizes to 62 after ~10 mins";
-CM_ SG_ 37 STEER_DIRECTION "Could be intended as 12 bit steering angle";
-CM_ SG_ 37 STEER_ANGLE "can convert to degrees (imprecise) or percentage of max amplitude";
-CM_ SG_ 36 ACC_FRONT_BACK_1 "more likely up-down";
-CM_ SG_ 36 ACC_FRONT_BACK_2 "more likely front-back";
-CM_ SG_ 947 LOW_RES_ACC_PEDAL "Follows rather closely other acceleration commands";
-CM_ SG_ 947 LOW_RES_RPM "Mabe used for onboard display?";
-CM_ SG_ 955 MAYBE_CLUTCH "might be related to shifting gears";
-CM_ SG_ 1595 TIME_ON "Time since last ignition, tenth of seconds";
-CM_ SG_ 1595 BETWEEN_RIDES "the fourth byte (at least) changes between rides";
-CM_ SG_ 180 WIERD_STUFF "Might be a signed value on the whole two bytes (sometimes all set)";
-CM_ SG_ 180 VEHICLE_SPEED "Roughly 2 seconds before wheel speeds";
-CM_ SG_ 180 SPEED_MOD_256 "One byte speed, a bit before vehicle speed";
-CM_ SG_ 180 MAYBE_DISTANCE_MOD_256 "Looks like measure for distance or wheel angle";
-CM_ SG_ 906 MOVEMENT_START_TRIGGER "trigger of when speed becomes != 0";
-CM_ SG_ 979 VERY_LRES_ACC "Power used by engine? moves alongside speed, very low res, goes from 0 to 9 max?";
-CM_ SG_ 1600 CHANGES_EACH_RIDE "Small decrementation during some rides, possibly long term fuel";
-CM_ SG_ 1600 INCREASING_VALUE_FUEL "Fuel/distance? Average fuel consumption?";
-CM_ SG_ 705 NOT_ACCELERATING_PEDAL "Looks like opposite of accelerating bit";
-CM_ SG_ 705 ACC_PEDAL_SENSOR "similar to pedal sensor maybe checksum.";
-CM_ SG_ 705 ACC_COMMAND "Similar to other pedal indicator., cleaner, must be sent back to engine";
-CM_ SG_ 705 ACC_PEDAL_MEAN "Actual sensor for pedal (works when engine off)";
-CM_ SG_ 705 NEGATIVE_COMMAND_OFFSET "Mysterious for now";
-CM_ SG_ 928 NEW_SIGNAL_1 "Very slow changing noisy value, 45-49 in 10 min";
-CM_ SG_ 928 NEW_SIGNAL_2 "Other very slow changing 24-26 in 10 min";
-CM_ SG_ 928 NEW_SIGNAL_4 "Inconsistent across rides";
-CM_ SG_ 896 NEW_SIGNAL_1 "there is a difference at the beginning of 2017-10-31--12-04-05";
-CM_ SG_ 1553 TOTAL_DISTANCE "Probably also contains the previous/two previous bytes but can't confirm";
-CM_ SG_ 945 BETWEEN_RIDES "Might be others in the same message. at least this one";
-
-CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180; CHFFR_METRIC 452 ENGINE_RPM ENGINE_RPM 1 0; CHFFR_METRIC 955 ENGINE_TEMPERATURE ENGINE_TEMPERATURE 1 0";
diff --git a/opendbc/toyota_nodsu_hybrid_pt_generated.dbc b/opendbc/toyota_nodsu_hybrid_pt_generated.dbc
index 14193330a17006..6d77072b01848e 100644
--- a/opendbc/toyota_nodsu_hybrid_pt_generated.dbc
+++ b/opendbc/toyota_nodsu_hybrid_pt_generated.dbc
@@ -1,7 +1,24 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _toyota_nodsu_bsm.dbc starts here";
+BO_ 1014 BSM: 8 XXX
+ SG_ L_ADJACENT : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ L_APPROACHING : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ R_ADJACENT : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ R_APPROACHING : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ ADJACENT_ENABLED : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ APPROACHING_ENABLED : 15|1@0+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 1014 L_ADJACENT "vehicle adjacent left side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 L_APPROACHING "vehicle approaching from left side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 R_ADJACENT "vehicle adjacent right side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 R_APPROACHING "vehicle approaching from right side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 ADJACENT_ENABLED "when BSM is enabled in settings, this is on along with APPROACHING_ENABLED. this controls bsm alert visibility";
+CM_ SG_ 1014 APPROACHING_ENABLED "when BSM is enabled in settings, this is on along with ADJACENT_ENABLED. this controls bsm alert visibility";
+
+
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +26,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +47,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
+
-CM_ "Imported file _toyota_2017.dbc starts here"
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +92,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +113,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +184,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +210,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +235,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +269,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +333,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +342,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +384,8 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_nodsu_hybrid_pt.dbc starts here"
+CM_ "toyota_nodsu_hybrid_pt.dbc starts here";
+
@@ -367,7 +408,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 31|16@0- (0.056,0) [-500|500] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 8 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_nodsu_pt_generated.dbc b/opendbc/toyota_nodsu_pt_generated.dbc
index 8d304954baf626..068766894ba8d0 100644
--- a/opendbc/toyota_nodsu_pt_generated.dbc
+++ b/opendbc/toyota_nodsu_pt_generated.dbc
@@ -1,7 +1,24 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _toyota_nodsu_bsm.dbc starts here";
+BO_ 1014 BSM: 8 XXX
+ SG_ L_ADJACENT : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ L_APPROACHING : 8|1@0+ (1,0) [0|1] "" XXX
+ SG_ R_ADJACENT : 1|1@0+ (1,0) [0|1] "" XXX
+ SG_ R_APPROACHING : 10|1@0+ (1,0) [0|1] "" XXX
+ SG_ ADJACENT_ENABLED : 7|1@0+ (1,0) [0|1] "" XXX
+ SG_ APPROACHING_ENABLED : 15|1@0+ (1,0) [0|1] "" XXX
+
+CM_ SG_ 1014 L_ADJACENT "vehicle adjacent left side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 L_APPROACHING "vehicle approaching from left side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 R_ADJACENT "vehicle adjacent right side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 R_APPROACHING "vehicle approaching from right side of car. enabled above 10mph, regardless of ADJACENT_ENABLED or APPROACHING_ENABLED";
+CM_ SG_ 1014 ADJACENT_ENABLED "when BSM is enabled in settings, this is on along with APPROACHING_ENABLED. this controls bsm alert visibility";
+CM_ SG_ 1014 APPROACHING_ENABLED "when BSM is enabled in settings, this is on along with ADJACENT_ENABLED. this controls bsm alert visibility";
+
+
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +26,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +47,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
+
-CM_ "Imported file _toyota_2017.dbc starts here"
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +92,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +113,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +184,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +210,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +235,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +269,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +333,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +342,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,20 +384,23 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_nodsu_pt.dbc starts here"
+CM_ "toyota_nodsu_pt.dbc starts here";
+
BO_ 401 STEERING_LTA: 8 XXX
- SG_ COUNTER : 7|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SETME_X3 : 29|2@0+ (1,0) [0|3] "" XXX
SG_ PERCENTAGE : 39|8@0+ (1,0) [0|255] "" XXX
SG_ SETME_X64 : 47|8@0+ (1,0) [0|255] "" XXX
SG_ ANGLE : 55|8@0- (0.5,0) [0|255] "" XXX
- SG_ STEER_ANGLE_CMD : 15|16@0- (0.056,0) [-540|540] "" XXX
+ SG_ STEER_ANGLE_CMD : 15|16@0- (0.0573,0) [-540|540] "" XXX
SG_ STEER_REQUEST : 25|1@0+ (1,0) [0|1] "" XXX
SG_ BIT : 30|1@0+ (1,0) [0|1] "" XXX
+ SG_ COUNTER : 6|6@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_REQUEST_2 : 0|1@0+ (1,0) [0|1] "" XXX
+ SG_ SETME_X1 : 7|1@0+ (1,0) [0|1] "" XXX
BO_ 550 BRAKE_MODULE: 8 XXX
SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
@@ -373,7 +416,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_ANGLE : 31|16@0- (0.056,0) [-500|500] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 8 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_prius_2010_pt.dbc b/opendbc/toyota_prius_2010_pt.dbc
deleted file mode 100644
index 634b1dc0bf0b80..00000000000000
--- a/opendbc/toyota_prius_2010_pt.dbc
+++ /dev/null
@@ -1,203 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
- BO_TX_BU_
- BA_DEF_REL_
- BA_REL_
- BA_DEF_DEF_REL_
- BU_SG_REL_
- BU_EV_REL_
- BU_BO_REL_
- SG_MUL_VAL_
-
-BS_:
-
-BU_: XXX DSU HCU EPS IPAS
-
-
-BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
-
-BO_ 166 BRAKE: 8 XXX
- SG_ BRAKE_AMOUNT : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ BRAKE_PEDAL : 23|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 170 WHEEL_SPEEDS: 8 XXX
- SG_ WHEEL_SPEED_FR : 7|16@0+ (0.0062,-67.67) [0|250] "mph" XXX
- SG_ WHEEL_SPEED_FL : 23|16@0+ (0.0062,-67.67) [0|250] "mph" XXX
- SG_ WHEEL_SPEED_RR : 39|16@0+ (0.0062,-67.67) [0|250] "mph" XXX
- SG_ WHEEL_SPEED_RL : 55|16@0+ (0.0062,-67.67) [0|250] "mph" XXX
-
-BO_ 180 SPEED: 8 XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ SPEED : 47|16@0+ (0.0062,0) [0|115] "mph" XXX
- SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 295 GEAR_PACKET: 8 XXX
- SG_ CAR_MOVEMENT : 39|8@0- (1,0) [0|255] "" XXX
- SG_ COUNTER : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
- SG_ GEAR : 47|4@0+ (1,0) [0|15] "" XXX
-
-BO_ 466 PCM_CRUISE: 8 XXX
- SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ ACCEL_NET : 23|16@0- (0.001,0) [-20|20] "m/s2" XXX
- SG_ CRUISE_STATE : 55|4@0+ (1,0) [0|15] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 550 BRAKE_MODULE: 8 XXX
- SG_ BRAKE_PRESSURE : 0|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_POSITION : 16|9@0+ (1,0) [0|511] "" XXX
- SG_ BRAKE_PRESSED : 37|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 552 ACCELEROMETER: 8 XXX
- SG_ ACCEL_Z : 22|15@0- (1,0) [0|32767] "" XXX
- SG_ ACCEL_X : 6|15@0- (0.001,0) [-20|20] "m/s2" XXX
-
-BO_ 560 BRAKE_MODULE2: 8 XXX
- SG_ BRAKE_LIGHTS : 26|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 581 GAS_PEDAL: 8 XXX
- SG_ GAS_PEDAL : 23|8@0+ (0.005,0) [0|1] "" XXX
-
-BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
- SG_ STEER_TORQUE_EPS : 47|16@0- (0.66,0) [-20000|20000] "" XXX
- SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
- SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 610 EPS_STATUS: 5 EPS
- SG_ STATE : 3|4@0+ (1,0) [0|15] "" XXX
- SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 614 STEERING_IPAS: 8 IPAS
- SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
- SG_ ANGLE : 3|12@0- (1,0) [0|16777215] "" XXX
- SG_ SET_ME_X10 : 23|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 643 PRE_COLLISION: 8 XXX
-
-BO_ 740 STEERING_LKA: 8 XXX
- SG_ LKA_STATE : 31|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ STEER_REQUEST : 0|1@0+ (1,0) [0|1] "" XXX
- SG_ COUNTER : 6|6@0+ (1,0) [0|63] "" XXX
- SG_ SET_ME_1 : 7|1@0+ (1,0) [0|1] "" XXX
- SG_ STEER_TORQUE_CMD : 15|16@0- (1,0) [0|65535] "" XXX
-
-BO_ 742 LEAD_INFO: 8 DSU
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" HCU
- SG_ LEAD_REL_SPEED : 23|12@0- (0.025,0) [-100|100] "m/s" HCU
- SG_ LEAD_LONG_DIST : 7|13@0+ (0.05,0) [0|300] "m" HCU
-
-BO_ 835 ACC_CONTROL: 8 DSU
- SG_ ACCEL_CMD : 7|16@0- (0.001,0) [-20|20] "m/s2" HCU
-
-BO_ 1556 STEERING_LEVERS: 8 XXX
- SG_ TURN_SIGNALS : 29|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
- SG_ STEER_ANGLE : 3|12@0- (1.5,0) [-500|500] "deg" XXX
- SG_ STEER_FRACTION : 39|4@0- (0.1,0) [-0.7|0.7] "deg" XXX
- SG_ STEER_RATE : 35|12@0- (1,0) [-2000|2000] "deg/s" XXX
-
-BO_ 467 PCM_CRUISE_2: 8 XXX
- SG_ MAIN_ON : 15|1@0+ (1,0) [0|1] "" XXX
- SG_ LOW_SPEED_LOCKOUT : 14|2@0+ (1,0) [0|3] "kph" XXX
- SG_ SET_SPEED : 23|8@0+ (1,0) [0|255] "kph" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 921 PCM_CRUISE_SM: 8 XXX
- SG_ MAIN_ON : 4|1@0+ (1,0) [0|1] "" XXX
- SG_ CRUISE_CONTROL_STATE : 11|4@0+ (1,0) [0|15] "" XXX
- SG_ UI_SET_SPEED : 31|8@0+ (1,0) [0|255] "" XXX
-
-BO_ 951 ESP_CONTROL: 8 ESP
- SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1042 LKAS_HUD: 8 XXX
- SG_ BARRIERS : 1|2@0+ (1,0) [0|3] "" XXX
- SG_ RIGHT_LINE : 3|2@0+ (1,0) [0|3] "" XXX
- SG_ LEFT_LINE : 5|2@0+ (1,0) [0|3] "" XXX
- SG_ SET_ME_1 : 7|2@0+ (1,0) [0|3] "" XXX
- SG_ LDA_ALERT : 9|2@0+ (1,0) [0|3] "" XXX
- SG_ TWO_BEEPS : 12|1@0+ (1,0) [0|1] "" XXX
- SG_ ADJUSTING_CAMERA : 13|1@0+ (1,0) [0|1] "" XXX
- SG_ LDA_MALFUNCTION : 15|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 1553 UI_SEETING: 8 XXX
- SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
-
-BO_ 1568 SEATS_DOORS: 8 XXX
- SG_ SEATBELT_DRIVER_UNLATCHED : 62|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FL : 45|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RL : 42|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_RR : 43|1@0+ (1,0) [0|1] "" XXX
- SG_ DOOR_OPEN_FR : 44|1@0+ (1,0) [0|1] "" XXX
-
-BO_ 452 POWERTRAIN: 8 XXX
- SG_ ENGINE_RPM : 7|16@0+ (1,0) [0|65535] "rpm" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-
-
-
-
-CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ SG_ 36 ACCEL_Y "unit is tbd";
-CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
-CM_ SG_ 36 YAW_RATE "verify";
-CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 550 BRAKE_PRESSURE "seems prop to pedal force";
-CM_ SG_ 550 BRAKE_POSITION "seems proportional to pedal displacement, unclear the max value of 0x1c8";
-CM_ SG_ 560 BRAKE_LIGHTS "double check";
-CM_ SG_ 581 GAS_PEDAL "it seems slightly filtered";
-CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
-CM_ SG_ 608 STEER_OVERRIDE "set when driver torque exceeds a certain value";
-CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
-CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
-CM_ SG_ 37 STEER_RATE "factor is tbd";
-CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
-CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
-CM_ SG_ 1042 SET_ME_1 "unclear what this is, nut it's always 1 in drive traces";
-VAL_ 295 GEAR 0 "P" 1 "R" 2 "N" 3 "D" 4 "B" ;
-VAL_ 466 CRUISE_STATE 8 "active" 7 "standstill" 1 "off" ;
-VAL_ 610 STATE 5 "override" 3 "enabled" 1 "disabled" ;
-VAL_ 610 LKA_STATE 50 "temporary_fault" ;
-VAL_ 614 STATE 3 "enabled" 1 "disabled" ;
-VAL_ 614 DIRECTION_CMD 3 "right" 2 "center" 1 "left" ;
-VAL_ 1556 TURN_SIGNALS 3 "none" 2 "right" 1 "left" ;
-VAL_ 467 LOW_SPEED_LOCKOUT 2 "low speed locked" 1 "ok" ;
-VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted" ;
-VAL_ 1042 BARRIERS 3 "both" 2 "right" 1 "left" 0 "none" ;
-VAL_ 1042 RIGHT_LINE 3 "orange" 2 "double" 1 "solid" 0 "none" ;
-VAL_ 1042 LEFT_LINE 3 "orange" 2 "double" 1 "solid" 0 "none" ;
-VAL_ 1042 LDA_ALERT 3 "hold with continuous beep" 2 "LDA unavailable" 1 "hold" 0 "none" ;
-VAL_ 1553 UNITS 1 "km" 2 "miles" ;
diff --git a/opendbc/toyota_prius_2017_pt_generated.dbc b/opendbc/toyota_prius_2017_pt_generated.dbc
index 9b02b364e36a31..868381e5e56014 100644
--- a/opendbc/toyota_prius_2017_pt_generated.dbc
+++ b/opendbc/toyota_prius_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_prius_2017_pt.dbc starts here"
+CM_ "toyota_prius_2017_pt.dbc starts here";
@@ -367,6 +390,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 8 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_rav4_2017_pt_generated.dbc b/opendbc/toyota_rav4_2017_pt_generated.dbc
index 5825028dbe2880..19c5271d8df0e4 100644
--- a/opendbc/toyota_rav4_2017_pt_generated.dbc
+++ b/opendbc/toyota_rav4_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_rav4_2017_pt.dbc starts here"
+CM_ "toyota_rav4_2017_pt.dbc starts here";
@@ -361,6 +384,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_rav4_hybrid_2017_pt_generated.dbc b/opendbc/toyota_rav4_hybrid_2017_pt_generated.dbc
index 6004bfd941564b..bb98e0d30c6d0d 100644
--- a/opendbc/toyota_rav4_hybrid_2017_pt_generated.dbc
+++ b/opendbc/toyota_rav4_hybrid_2017_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_rav4_hybrid_2017_pt.dbc starts here"
+CM_ "toyota_rav4_hybrid_2017_pt.dbc starts here";
@@ -361,6 +384,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/toyota_sienna_xle_2018_pt_generated.dbc b/opendbc/toyota_sienna_xle_2018_pt_generated.dbc
index 3bff57f44a0010..ad0d1f31dd0b7b 100644
--- a/opendbc/toyota_sienna_xle_2018_pt_generated.dbc
+++ b/opendbc/toyota_sienna_xle_2018_pt_generated.dbc
@@ -1,7 +1,7 @@
-CM_ "AUTOGENERATED FILE, DO NOT EDIT"
+CM_ "AUTOGENERATED FILE, DO NOT EDIT";
-CM_ "Imported file _comma.dbc starts here"
+CM_ "Imported file _comma.dbc starts here";
BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ STATE : 7|4@0+ (1,0) [0|15] "" XXX
SG_ ANGLE : 3|12@0- (1.5,0) [-510|510] "deg" XXX
@@ -9,10 +9,10 @@ BO_ 359 STEERING_IPAS_COMMA: 8 IPAS
SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|255] "" XXX
SG_ DIRECTION_CMD : 38|2@0+ (1,0) [0|3] "" XXX
SG_ SET_ME_X40 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ SET_ME_X00 : 55|8@0+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_X00_1 : 55|8@0+ (1,0) [0|255] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
+CM_ "BO_ STEERING_IPAS_COMMA: Copy of msg 614 so we can do angle control while the Park Assist ECU is connected (Panda spoofs 614 with 359 on connector J70). Note that addresses 0x266 and 0x167 are checksum-invariant";
BO_ 512 GAS_COMMAND: 6 EON
SG_ GAS_COMMAND : 7|16@0+ (0.159375,-75.555) [0|1] "" INTERCEPTOR
@@ -30,8 +30,13 @@ CM BO_ STEERING_IPAS_COMMA "Copy of msg 614 so we can do angle control while the
VAL_ 513 STATE 5 "FAULT_TIMEOUT" 4 "FAULT_STARTUP" 3 "FAULT_SCE" 2 "FAULT_SEND" 1 "FAULT_BAD_CHECKSUM" 0 "NO_FAULT" ;
+BO_ 35 SECONDARY_STEER_ANGLE: 8 XXX
+ SG_ ZORRO_STEER : 7|24@0- (0.004901594652,0) [-500|500] "" XXX
+
+CM_ "BO_ SECONDARY_STEER_ANGLE: ZSS is a high-precision steering angle sensor that can replace the lower resolution sensor in most TSS1 Toyotas. Learn more: https://github.com/commaai/openpilot/wiki/Toyota-Lexus#zorro-steering-sensor-zss";
-CM_ "Imported file _toyota_2017.dbc starts here"
+
+CM_ "Imported file _toyota_2017.dbc starts here";
VERSION ""
@@ -70,8 +75,8 @@ BS_:
BU_: XXX DSU HCU EPS IPAS CGW
BO_ 36 KINEMATICS: 8 XXX
- SG_ ACCEL_Y : 33|10@0+ (1,-512) [0|65535] "" XXX
- SG_ YAW_RATE : 1|10@0+ (1,-512) [0|65535] "" XXX
+ SG_ ACCEL_Y : 33|10@0+ (0.03589,-18.375) [0|65535] "m/s^2" XXX
+ SG_ YAW_RATE : 1|10@0+ (0.244,-125) [0|65535] "deg/sec" XXX
SG_ STEERING_TORQUE : 17|10@0+ (1,-512) [0|65535] "" XXX
BO_ 37 STEER_ANGLE_SENSOR: 8 XXX
@@ -91,12 +96,15 @@ BO_ 170 WHEEL_SPEEDS: 8 XXX
BO_ 180 SPEED: 8 XXX
SG_ ENCODER : 39|8@0+ (1,0) [0|255] "" XXX
- SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
SG_ SPEED : 47|16@0+ (0.01,0) [0|250] "kph" XXX
+ SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
-BO_ 353 DSU_SPEED: 8 XXX
+BO_ 353 DSU_SPEED: 7 XXX
SG_ FORWARD_SPEED : 15|16@0- (0.00390625,-30) [0|255] "kph" XXX
+BO_ 452 ENGINE_RPM: 8 CGW
+ SG_ RPM : 7|16@0- (0.78125,0) [0|0] "rpm" SCS
+
BO_ 466 PCM_CRUISE: 8 XXX
SG_ GAS_RELEASED : 4|1@0+ (1,0) [0|1] "" XXX
SG_ CRUISE_ACTIVE : 5|1@0+ (1,0) [0|1] "" XXX
@@ -159,10 +167,11 @@ BO_ 835 ACC_CONTROL: 8 DSU
SG_ DISTANCE : 20|1@0+ (1,0) [0|1] "" XXX
SG_ MINI_CAR : 21|1@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X3 : 19|4@0+ (1,0) [0|15] "" XXX
- SG_ SET_ME_1 : 30|1@0+ (1,0) [0|1] "" HCU
+ SG_ PERMIT_BRAKING : 30|1@0+ (1,0) [0|1] "" HCU
SG_ RELEASE_STANDSTILL : 31|1@0+ (1,0) [0|1] "" HCU
SG_ CANCEL_REQ : 24|1@0+ (1,0) [0|1] "" HCU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ ACCEL_CMD_ALT : 47|8@0- (0.05,0) [0|0] "m/s^2" XXX
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
@@ -184,6 +193,7 @@ BO_ 921 PCM_CRUISE_SM: 8 XXX
BO_ 951 ESP_CONTROL: 8 ESP
SG_ TC_DISABLED : 13|1@0+ (1,0) [0|1] "" XXX
+ SG_ VSC_DISABLED : 12|2@0+ (1,0) [0|1] "" XXX
SG_ BRAKE_LIGHTS_ACC : 18|1@0+ (1,0) [0|1] "" XXX
BO_ 1041 ACC_HUD: 8 DSU
@@ -208,6 +218,17 @@ BO_ 1042 LKAS_HUD: 8 XXX
SG_ SET_ME_X38 : 55|8@0+ (1,0) [0|1] "" XXX
SG_ SET_ME_X02 : 63|8@0+ (1,0) [0|1] "" XXX
+BO_ 1043 TIME : 8 CGW
+ SG_ YEAR : 7|8@0+ (1,0) [0|0] "year" XXX
+ SG_ MONTH : 15|8@0+ (1,0) [0|0] "month" XXX
+ SG_ DAY : 23|8@0+ (1,0) [0|0] "day" XXX
+ SG_ HOUR : 31|8@0+ (1,0) [0|0] "hour" XXX
+ SG_ MINUTE : 39|8@0+ (1,0) [0|0] "minute" XXX
+ SG_ GMT_DIFF : 55|1@0+ (1,0) [0|0] "" XXX
+ SG_ GMTDIFF_HOURS : 54|4@0+ (1,0) [0|0] "hours" XXX
+ SG_ GMTDIFF_MINUTES : 50|6@0+ (1,0) [0|0] "minutes" XXX
+ SG_ SUMMER : 60|1@0+ (1,0) [0|0] "" XXX
+
BO_ 1408 VIN_PART_1: 8 CGW
SG_ VIN_1 : 7|8@0+ (1,0) [0|0] "" XXX
SG_ VIN_2 : 15|8@0+ (1,0) [0|0] "" XXX
@@ -231,7 +252,7 @@ BO_ 1409 VIN_PART_2: 8 CGW
BO_ 1410 VIN_PART_3: 8 CGW
SG_ VIN_17 : 7|8@0+ (1,0) [0|0] "" XXX
-BO_ 1553 UI_SEETING: 8 XXX
+BO_ 1553 UI_SETTING: 8 XXX
SG_ UNITS : 26|2@0+ (1,0) [0|3] "" XXX
BO_ 1556 STEERING_LEVERS: 8 XXX
@@ -295,7 +316,7 @@ CM_ SG_ 36 STEERING_TORQUE "does not seem the steer torque, tbd";
CM_ SG_ 37 STEER_FRACTION "1/15th of the signal STEER_ANGLE, which is 1.5 deg; note that 0x8 is never set";
CM_ SG_ 37 STEER_RATE "factor is tbd";
CM_ SG_ 466 ACCEL_NET "net acceleration produced by the system, given ACCEL_CMD, road grade and other factors";
-CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isnt perfect";
+CM_ SG_ 467 SET_SPEED "43 kph are shown as 28mph, so conversion isn't perfect";
CM_ SG_ 467 LOW_SPEED_LOCKOUT "in low speed lockout, system would always disengage below 28mph";
CM_ SG_ 560 BRAKE_PRESSED "another brake pressed?";
CM_ SG_ 608 STEER_TORQUE_DRIVER "driver torque";
@@ -304,13 +325,15 @@ CM_ SG_ 614 ANGLE "set to measured angle when ipas control isn't active";
CM_ SG_ 643 COUNTER "only used on cars that use this msg for cruise control";
CM_ SG_ 643 BRAKE_STATUS "only used on cars that use this msg for cruise control";
CM_ SG_ 643 PRECOLLISION_ACTIVE "set 0.5s before any braking";
+CM_ SG_ 835 PERMIT_BRAKING "Original ACC has this going high when a car in front is detected. In openpilot and before the PERMIT_BRAKING name, this was 'SET_ME_1' and is hardcoded to be high. Unsure if only informational or has an effect though existing usage in openpilot is to always set it to 1. Originally 'PMTBRKG' in the leaked toyota_2017_ref_pt.dbc file and name expansion speculated to be PerMiT BRaKinG.";
+CM_ SG_ 835 ACCEL_CMD_ALT "Copy of main ACCEL_CMD, but across 8 bits instead of 16 bits like ACCEL_CMD. Unsure if only informational or has an effect. Likely informational as existing openpilot sets this to 0 and no loss of functionality observed. Originally 'AT_RAW' in leaked toyota_2017_ref_pt.dbc file.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in UI with user set unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
CM_ SG_ 1042 SET_ME_1 "unclear what this is, but it's always 1 in drive traces";
CM_ SG_ 1042 REPEATED_BEEPS "recommended for fcw and other important alerts";
CM_ SG_ 1161 SPDVAL1 "Numbers 0-199 is displayed, 200-254 displays circle without number and 255 is for no limit.";
CM_ SG_ 1161 SYNCID1 "counter from 1 to f at 1 Hz";
-CM_ SG_ 1161 SPDVAL2 "conditional speed value 70"
+CM_ SG_ 1161 SPDVAL2 "conditional speed value 70";
CM_ SG_ 1162 SGNNUMP "1 if SPDVAL1 is set, otherwise 0";
CM_ SG_ 1162 SYNCID2 "counter from 1 to f at 1 Hz";
CM_ SG_ 1163 TSREQPD "always 1";
@@ -344,7 +367,7 @@ VAL_ 1162 SPLSGN3 15 "conditional blank" 4 "wet road" 5 "rain" 0 "none";
CM_ "CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180";
-CM_ "toyota_sienna_xle_2018_pt.dbc starts here"
+CM_ "toyota_sienna_xle_2018_pt.dbc starts here";
@@ -362,6 +385,7 @@ BO_ 608 STEER_TORQUE_SENSOR: 8 XXX
SG_ STEER_TORQUE_DRIVER : 15|16@0- (1,0) [-32768|32767] "" XXX
SG_ STEER_OVERRIDE : 0|1@0+ (1,0) [0|1] "" XXX
SG_ CHECKSUM : 63|8@0+ (1,0) [0|255] "" XXX
+ SG_ STEER_ANGLE : 31|16@0- (0.0573,0) [-500|500] "" XXX
BO_ 610 EPS_STATUS: 5 EPS
SG_ IPAS_STATE : 3|4@0+ (1,0) [0|15] "" XXX
diff --git a/opendbc/vw_golf_mk4.dbc b/opendbc/vw_golf_mk4.dbc
deleted file mode 100644
index 596f2d082ad041..00000000000000
--- a/opendbc/vw_golf_mk4.dbc
+++ /dev/null
@@ -1,1041 +0,0 @@
-VERSION ""
-
-
-NS_ :
- NS_DESC_
- CM_
- BA_DEF_
- BA_
- VAL_
- CAT_DEF_
- CAT_
- FILTER
- BA_DEF_DEF_
- EV_DATA_
- ENVVAR_DATA_
- SGTYPE_
- SGTYPE_VAL_
- BA_DEF_SGTYPE_
- BA_SGTYPE_
- SIG_TYPE_REF_
- VAL_TABLE_
- SIG_GROUP_
- SIG_VALTYPE_
- SIGTYPE_VALTYPE_
-
-BS_:
-
-BU_: XXX
-
-
-BO_ 1394 ZAS_1: 2 XXX
- SG_ Fehlerspeichereintrag__ZAS_ : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_ZAS_1_3 : 8|7@1+ (1,0) [0|0] "" XXX
- SG_ Frei_ZAS_1_2 : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_15_SV : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_ZAS_1_1 : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_P__Parklichtstellung_ : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_50__Starten_ : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_X__Startvorgang_ : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_15__Z_ndung_ein_ : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Kontakt__Schl_ssel_steckt_ : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1336 Wischer_1: 2 XXX
- SG_ Blockierung_Heckwischer_erkannt : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Wischer_1_2 : 12|3@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerspeichereintrag__Wischer_ : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Scheibenwischer_Hec : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Wascher_Heck : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Scheibenwischer_Heck_eingeschal : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Blockierung_Frontwischer_erkann : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Wischer_1_1 : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Waschduesenheizung : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Parklage_Frontwischer : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Frontwischer_Schnel : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Frontwischer_Normal : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Wascher_Front : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Frontwischer__eingeschaltet : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1464 WFS_1: 2 XXX
- SG_ WFS_Textbits : 8|8@1+ (1,0) [0|0] "" XXX
- SG_ Frei_WFS_1_1 : 1|7@1+ (1,0) [0|0] "" XXX
- SG_ WFS_LED : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1096 Waehlhebel_1: 4 XXX
- SG_ Frei_Waehlhebel_1_1 : 29|3@1+ (1,0) [0|0] "" XXX
- SG_ Test_aktiv_Flag : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Waehlhebel_1 : 24|4@1+ (1,0) [0|15] "" XXX
- SG_ Waehlhebel_Testergebnis : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ Fehler_Waehlhebel : 8|8@1+ (1,0) [0|0] "" XXX
- SG_ Waehlhebelposition : 4|4@1+ (1,0) [0|0] "" XXX
- SG_ Waehlhebel_Initialisierung : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Shiftlock_Position : 0|3@1+ (1,0) [0|0] "" XXX
-
-BO_ 1496 Verbauliste_1: 8 XXX
- SG_ TV_Tuner : 63|1@1+ (1,0) [0|0] "" XXX
- SG_ DSP : 62|1@1+ (1,0) [0|0] "" XXX
- SG_ CD_Wechsler : 61|1@1+ (1,0) [0|0] "" XXX
- SG_ Spracheingabe : 60|1@1+ (1,0) [0|0] "" XXX
- SG_ Telematik : 59|1@1+ (1,0) [0|0] "" XXX
- SG_ Navigation : 58|1@1+ (1,0) [0|0] "" XXX
- SG_ Telefon : 57|1@1+ (1,0) [0|0] "" XXX
- SG_ Radio : 56|1@1+ (1,0) [0|0] "" XXX
- SG_ MMI_vorne : 55|1@1+ (1,0) [0|0] "" XXX
- SG_ MMI_hinten : 54|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Verbauliste_1_11 : 53|1@1+ (1,0) [0|0] "" XXX
- SG_ Klimabedienteil_HL : 52|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Verbauliste_1_10 : 50|2@1+ (1,0) [0|0] "" XXX
- SG_ Tankgeber : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Assistenzfahrlicht : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Memory_hinter_Fahrer : 47|1@1+ (1,0) [0|0] "" XXX
- SG_ Sitzmemory_hinten : 46|1@1+ (1,0) [0|0] "" XXX
- SG_ Sitzmemory_Beifahrer : 45|1@1+ (1,0) [0|0] "" XXX
- SG_ Anh_ngersteuergeraet : 44|1@1+ (1,0) [0|0] "" XXX
- SG_ Energiemanagement : 43|1@1+ (1,0) [0|0] "" XXX
- SG_ Wischermodul : 42|1@1+ (1,0) [0|0] "" XXX
- SG_ EZS___Kessy__Komfort_ : 41|1@1+ (1,0) [0|0] "" XXX
- SG_ Verdecksteuergeraet : 40|1@1+ (1,0) [0|0] "" XXX
- SG_ Standheizung : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Verbauliste_1_9 : 38|1@1+ (1,0) [0|0] "" XXX
- SG_ Einparkhilfe : 37|1@1+ (1,0) [0|0] "" XXX
- SG_ Klimasteuergeraet_Komfort : 36|1@1+ (1,0) [0|0] "" XXX
- SG_ Gateway : 35|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenksaeulenmodul : 34|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruck : 33|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombiinstrument_Komfort : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ Dachmodul : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Memory : 30|1@1+ (1,0) [0|0] "" XXX
- SG_ TSG_HR : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ TSG_HL : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ TSG_BT : 27|1@1+ (1,0) [0|0] "" XXX
- SG_ TSG_FT : 26|1@1+ (1,0) [0|0] "" XXX
- SG_ ZKE : 25|1@1+ (1,0) [0|0] "" XXX
- SG_ BSG_Komfort : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Verbauliste_1_8 : 19|5@1+ (1,0) [0|0] "" XXX
- SG_ Stabi_Entkopplung : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Waehlhebel : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Batteriemanager : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Daempfer_SG : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Niveauregulierung : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ EZS___Kessy__Antrieb_ : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsbooster : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Antrieb : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Einspritzpumpe : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkwinkel : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Allrad : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ BSG_Antrieb : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ ADR : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Airbag : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Climatronic_Antrieb : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ ABS : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Getriebesteuergeraet : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Motorsteuergeraet : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1488 Systeminfo_1: 6 XXX
- SG_ CAN_Stand_4_1_Antrieb_Daten_Hau : 44|4@1+ (1,0) [0|15] "" XXX
- SG_ CAN_Stand_4_1_Antrieb_Daten_Neb : 40|4@1+ (1,0) [0|15] "" XXX
- SG_ CAN_Stand_4_1_Komfort_Daten_Hau : 36|4@1+ (1,0) [0|15] "" XXX
- SG_ CAN_Stand_4_1_Komfort_Daten_Neb : 32|4@1+ (1,0) [0|15] "" XXX
- SG_ Frei_Systeminfo_1_6 : 30|1@1+ (1,0) [0|0] "" XXX
- SG_ Viertuerer : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ Rechtslenker : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrzeug_Index : 24|4@1+ (1,0) [0|0] "" XXX
- SG_ Fahrzeug_Generation : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ Fahrzeug_Derivat : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ Fahrzeug_Marke_2 : 12|4@1+ (1,0) [0|15] "" XXX
- SG_ Fahrzeug_Klasse : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Verbauinformation_gueltig : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ CAN_Infotainment_verbaut : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ CAN_Infotainment_in_Diagnose : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Sleep_CAN_Infotainment : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ CAN_Komfort_in_Diagnose : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Sleep_CAN_Komfort : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ CAN_Antrieb_in_Diagnose : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ CAN_Extern_zugeschaltet : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 268 Slave_1: 8 XXX
- SG_ Delta_reduziertes_Sollmoment : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Delta_Drosselklappenwinkel : 32|16@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Slave_1_1 : 25|7@1+ (1,0) [0|0] "" XXX
- SG_ Delta_Zuendwinkelausgabe : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Ubat_Freigabe_DVE__Slave_ : 23|1@1+ (1,0) [0|0] "" XXX
- SG_ Drosselklappe_Sollwertbegrenzun : 22|1@1+ (1,0) [0|0] "" XXX
- SG_ Einspritzverbot_lernen__Slave_ : 21|1@1+ (1,0) [0|0] "" XXX
- SG_ Master_erkannt__Slave_ : 20|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehler_Momentenausgabe : 19|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehler_Getriebe_Moment : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehler_Bremsenbotschaft : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Indiziertes_Istmoment__Slave_ : 0|16@1+ (0.0015259,0) [0|99.998] "%" XXX
- SG_ Timeout_Bremsenbotschaft : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1332 Sitz_info: 2 XXX
- SG_ Positionserkennung_Beifahrersit : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Beifahrersitz_im_vorderen_Dritt : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Positionserkennung_Fahrersitz_u : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrersitz_im_vorderen_Drittel : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Sitzinfo : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Checksumme_Sitzinfo : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 1810 PSG_3: 2 XXX
- SG_ Selbsttestergebnis : 0|16@1+ (1,0) [0|0] "" XXX
-
-BO_ 1298 PSG_2: 8 XXX
- SG_ RAM_Inhalt_4 : 48|16@1+ (1,0) [0|0] "" XXX
- SG_ RAM_Inhalt_3 : 32|16@1+ (1,0) [0|0] "" XXX
- SG_ RAM_Inhalt_2 : 16|16@1+ (1,0) [0|0] "" XXX
- SG_ RAM_Inhalt_1 : 0|16@1+ (1,0) [0|0] "" XXX
-
-BO_ 274 PSG_1: 8 XXX
- SG_ Pumpentemperatur__2_1_ : 48|16@1+ (0.0625,0) [0|4096] "°K" XXX
- SG_ Pumpentemperatur__3_2_2_ : 44|12@1+ (1,0) [0|0] "" XXX
- SG_ Zylinderzaehler__3_2_2_ : 43|3@1+ (1,0) [1|8] "Zähler" XXX
- SG_ Ansteuerdauer__3_2_2_ : 32|11@1+ (0.0469,0) [0|96] "°NW" XXX
- SG_ Nockenwellendrehzahl__3_2_2_ : 20|12@1+ (4,0) [0|16380] "upm" XXX
- SG_ Pumpen_Statuswort__3_2_2_ : 0|20@1+ (1,0) [0|0] "" XXX
-
-BO_ 1300 NOX_1: 8 XXX
- SG_ OBD_fuer_NOX : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Frei_NOX1_4 : 53|3@1+ (1,0) [0|0] "" XXX
- SG_ IP2 : 52|1@1+ (1,0) [0|0] "" XXX
- SG_ IP1 : 51|1@1+ (1,0) [0|0] "" XXX
- SG_ IP0 : 50|1@1+ (1,0) [0|0] "" XXX
- SG_ Sondenheizung_NOX : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Offsetkorrektur_NOX : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_NOX1_3 : 43|5@1+ (1,0) [0|0] "" XXX
- SG_ Sauerstoff_binaer : 32|11@1+ (1,-200) [-200|1847] "mV" XXX
- SG_ Frei_NOX1_2 : 27|5@1+ (1,0) [0|0] "" XXX
- SG_ Sauerstoff_linear : 16|11@1+ (1,0) [0|2047] "1000/Lambd" XXX
- SG_ Frei_NOX1_1 : 11|5@1+ (1,0) [0|0] "" XXX
- SG_ NOX_Signal : 0|11@1+ (1,0) [0|2047] "ppm" XXX
-
-BO_ 1424 Niveau_1: 6 XXX
- SG_ Beladungszustand : 40|8@1+ (1,0) [0|253] "Zuladung" XXX
- SG_ Fehlerspeichereintrag__Niveau_1 : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Systemstatus__Niveau_1_ : 38|1@1+ (1,0) [0|0] "" XXX
- SG_ Reserve_Fahrzeugart : 37|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrzeugart_Niveau : 36|1@1+ (1,0) [0|0] "" XXX
- SG_ Textbits__Niveau_1_ : 32|4@1+ (1,0) [0|0] "" XXX
- SG_ Verstellung_HL : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Verstellung_HR : 30|1@1+ (1,0) [0|0] "" XXX
- SG_ Verstellung_VL : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ Verstellung_VR : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Absenkung_Fahrzeug : 27|1@1+ (1,0) [0|0] "" XXX
- SG_ Anhebung_Fahrzeug : 26|1@1+ (1,0) [0|0] "" XXX
- SG_ Verstellung_aktiv : 25|1@1+ (1,0) [0|0] "" XXX
- SG_ Kompressorlauf_in_Kuerze : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Niveau_1_5 : 23|1@1+ (1,0) [0|0] "" XXX
- SG_ Taster_Niveau : 22|1@1+ (1,0) [0|0] "" XXX
- SG_ Parkniveau : 21|1@1+ (1,0) [0|0] "" XXX
- SG_ Zwischenniveau : 20|1@1+ (1,0) [0|0] "" XXX
- SG_ Niveaustati : 16|4@1+ (1,0) [0|0] "" XXX
- SG_ MSG_Einschraenkung : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ ESP_Beeinflussung : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Warnlampe_Niveau_1 : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Niveau_1_1 : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Niveau_1 : 8|4@1+ (1,0) [0|15] "Zähler" XXX
- SG_ Checksumme_Niveau_1 : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 1328 Navigation_1: 7 XXX
- SG_ Kreuzungstyp : 54|2@1+ (1,0) [0|3] "" XXX
- SG_ Entfernung_bis_Kreuzung : 48|6@1+ (5,0) [0|315] "m" XXX
- SG_ Entfernung_bis_Kurvenanfang : 40|8@1+ (1,0) [0|255] "m" XXX
- SG_ Voarusliegende_Kurvenrichtung : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Vorausliegender_Kurvenverlauf : 32|7@1+ (50,0) [0|6350] "m" XXX
- SG_ Fehler_Navigation : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Anzahl_Fahrbahnen__0_ist_unguel : 28|3@1+ (1,0) [1|7] "" XXX
- SG_ Strassentyp : 24|4@1+ (1,0) [0|15] "" XXX
- SG_ Laenderkennung : 16|8@1+ (1,0) [0|0] "" XXX
- SG_ Vorzeichen_Gierrate______ : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Gierratenfehler : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Gierrate : 0|14@1+ (0.01,0) [0|100] "°/sek" XXX
-
-BO_ 1792 MSG_3: 3 XXX
- SG_ MSG_Konfiguration : 16|8@1+ (1,0) [0|0] "" XXX
- SG_ Lage_des_OT_Impuls : 0|16@1+ (0.01172,-384) [-384|384] "°KW" XXX
-
-BO_ 1280 MSG_2: 8 XXX
- SG_ RAM_Adresse_4 : 48|16@1+ (1,0) [0|0] "" XXX
- SG_ RAM_Adresse_3 : 32|16@1+ (1,0) [0|0] "" XXX
- SG_ RAM_Adresse_2 : 16|16@1+ (1,0) [0|0] "" XXX
- SG_ Ram_Adresse_1 : 0|16@1+ (1,0) [0|0] "" XXX
-
-BO_ 256 MSG_1: 8 XXX
- SG_ Kurbelwellendrehzahl__3_2_2_ : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Soll_Foerderbeginn_KW__3_2_2_ : 40|16@1+ (0.01172,-384) [-384|384] "°KW" XXX
- SG_ Soll_Foerderbeginn_NW__3_2_2_ : 28|12@1+ (0.01172,0) [0|768] "°NW" XXX
- SG_ Soll_Voreinspritzung : 16|12@1+ (1,0) [0|0] "" XXX
- SG_ Soll_Einspritzmenge : 0|16@1+ (0.03125,0) [0|2047] "mg/H" XXX
-
-BO_ 1796 Motor_NOX: 8 XXX
- SG_ Frei_Motor_NOX_1_2 : 24|40@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Motor_NOX_1_1 : 19|5@1+ (1,0) [0|0] "" XXX
- SG_ Heizleistungsanforderung : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Offsetkorrektur_moeglich : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Betriebsbereich : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Abgastemperatur_NOX : 8|8@1+ (5,-40) [-40|1230] "°C" XXX
- SG_ Abgasdruck_NOX : 0|8@1+ (5,600) [600|1870] "mbar" XXX
-
-BO_ 900 Motor_Momente: 8 XXX
- SG_ Momentenangaben_ungenau__Moment : 35|2@1+ (1,0) [0|0] "" XXX
-
-BO_ 1408 Motor_Flexia: 8 XXX
- SG_ Ansaugsystem m0 : 63|1@1+ (1,0) [0|0] "" XXX
- SG_ Hubraum m0 : 56|7@1+ (0.1,0) [0|12.7] "l" XXX
- SG_ Steigung_der_Befuellungskennlin m1 : 56|8@1+ (0.001,0) [0|0.255] "l/mm" XXX
- SG_ Anzahl_Zylinder m0 : 52|4@1+ (1,0) [0|15] "Vent./Zyl." XXX
- SG_ Bewertungsfaktor_Russindex_Turb m1 : 50|6@1+ (0.1,0) [0|6.3] "" XXX
- SG_ Anzahl_Ventile m0 : 49|3@1+ (1,0) [0|7] "Vent./Zyl." XXX
- SG_ Bewertungsfaktor_Verschleissind m1 : 44|6@1+ (0.1,0) [0|6.3] "" XXX
- SG_ Hersteller_Code m1 : 40|4@1+ (1,0) [0|15] "" XXX
- SG_ Motorleistung m0 : 40|9@1+ (1,0) [0|512] "KW" XXX
- SG_ Max_Drehmoment m0 : 32|8@1+ (10,0) [0|2550] "Nm" XXX
- SG_ Normierter_Verbrauch m1 : 32|8@1+ (10,0) [0|2550] "l/Zyl." XXX
- SG_ Oelniveauschwelle m1 : 24|8@1+ (0.25,0) [0|63.75] "cm" XXX
- SG_ Drehzahl_MaxNorm m0 : 24|8@1+ (100,0) [0|25500] "U/min" XXX
- SG_ Verschleissindex : 16|8@1+ (1,0) [0|254] "" XXX
- SG_ Russindex : 8|8@1+ (1,0) [0|254] "" XXX
- SG_ Verbrennungsart : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Motor_Flexia_1 : 4|3@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Motor_Flexia : 1|3@1+ (1,0) [0|15] "" XXX
- SG_ Multiplex_Schalter_Motor_Flexia M : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1416 Motor_7: 8 XXX
- SG_ Frei_Motor_7_3 : 40|24@1+ (1,0) [0|0] "" XXX
- SG_ Ladedruck : 32|8@1+ (0.01,0) [0|2.54] "bar" XXX
- SG_ Vorzeichen_Motordrehzahlgradien : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Motordrehzahlgradient : 24|7@1+ (1,0) [0|126] "U/min" XXX
- SG_ Hoeheninfo__Motor_7_ : 16|8@1+ (0.00787,0) [0|2] "" XXX
- SG_ Klemme_DFM : 8|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ PTC___Gluehstifte_ausgeschaltet : 5|3@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Motor_7_1 : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerspeichereintrag__Motor_7_ : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Statusbit_Geschwindikeitsbegren : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Geschwindigkegrenzung_aktivierb : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Leerlauf_Solldrehzahl_auf_Max_W : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1160 Motor_6: 8 XXX
- SG_ Zaehler_Motor_6 : 60|4@1+ (1,0) [0|15] "" XXX
- SG_ Frei_Motor_6_4 : 58|2@1+ (1,0) [0|0] "" XXX
- SG_ ltemperaturschutz : 57|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_Bremseingriff_Freigabe : 56|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Motor_6_3 : 40|16@1+ (1,0) [0|0] "" XXX
- SG_ GRA_Sollbeschleunigung : 32|8@1+ (0.024,-3.984) [-3.984|2.112] "m/s2" XXX
- SG_ Hoeheninfo__Motor_6_ : 24|8@1+ (0.00787,0) [0|2] "" XXX
- SG_ Istmoment_f_r_Getriebe : 16|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Sollmoment_f_r_Getriebe : 8|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Checksumme_Motor_6 : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 1152 Motor_5: 8 XXX
- SG_ Checksumme_Motor_5 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Motortext_Bits__4_1_ : 52|4@1+ (1,0) [0|0] "" XXX
- SG_ Doppelte_Momente : 51|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_Hauptschalter : 50|1@1+ (1,0) [0|0] "" XXX
- SG_ Anlasser_Ausspuren : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Anlasser_Freigabe : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Klimadrucksignal__Motor_5_ : 40|8@1+ (0.2,0) [0|50.8] "bar" XXX
- SG_ K_hlerluefteransteuerung : 32|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ Verbrauch_Ueberlauf : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Kraftstoffverbrauchssignal : 16|15@1+ (1,0) [0|32767] "ul" XXX
- SG_ Klimakompressor_Leistungsreduzi : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Kennfeldkuehlung : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Klimakompressor_aus__Motor_5_ : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ CAT_Warnung : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ OBD_2_Lampe : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ E_Gas_Lampe : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Vorgluehlampe__Motor_5_ : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Ladekontroll_Lampe : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Code M : 6|2@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Info_norm__Verbrauch m3 : 0|6@1+ (20,0) [0|1260] "l/Zyl" XXX
- SG_ Multiplex_Info_Motortyp m2 : 0|6@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Info_Drehzahl_MD_Max m1 : 0|6@1+ (100,0) [0|6300] "U/min" XXX
- SG_ Multiplex_Info_Max_Drehmoment m0 : 0|6@1+ (10,0) [0|630] "Nm" XXX
-
-BO_ 896 Motor_3: 8 XXX
- SG_ Drosselklappenpoti : 56|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ Motor_Wunschdrehzahl : 48|8@1+ (25,0) [0|6350] "U/min" XXX
- SG_ Motordrehzahlbeeinflussung : 40|8@1+ (0.392,0) [0|100] "%" XXX
- SG_ Kein_Start_Stop : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Kein_E_Gas : 38|1@1+ (1,0) [0|0] "" XXX
- SG_ Reserviert_Motor_3_1 : 37|1@1+ (1,0) [0|0] "" XXX
- SG_ Vorzeichen_Rad_Wunschmoment : 36|1@1+ (1,0) [0|0] "" XXX
- SG_ Rad_Wunschmoment : 24|12@1+ (0.39,0) [0|1597] "MDI" XXX
- SG_ Fahrpedal_Rohsignal : 16|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ Ansauglufttemperatur : 8|8@1+ (0.75,-48) [-48|142.5] "°" XXX
- SG_ Fehlerstatus_Ansauglufttemperat : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Motorsteuerger_t_gesperrt : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Drosselklappenwinkel_ungenau : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrpedalwert_ungenau__Motor_3_ : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Motor_3_1 : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Motor_Wunschdrehzahl_Priorit_t : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Uebertemperaturschutz__Motor_3_ : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Vorgluehmeldung : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 648 Motor_2: 8 XXX
- SG_ Minimales_Motormoment_bei_Zuend : 56|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Begrenzungsmoment : 48|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Leerlaufsolldrehzahl__Motor_2_ : 40|8@1+ (10,0) [0|2540] "U/min" XXX
- SG_ Soll_Geschwindigkeit_bei_GRA_Be : 32|8@1+ (1.28,0) [0|325] "km/h" XXX
- SG_ Fahrzeuggeschwindigkeit : 24|8@1+ (1.28,0) [0|325] "km/h" XXX
- SG_ GRA_Status : 22|2@1+ (1,0) [0|0] "" XXX
- SG_ OBD_2_freeze_frame : 21|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Normalbetrieb : 20|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Klima__4_1_ : 19|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Kuhlmitteltempera : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremstestschalter : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremslichtschalter : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Kuehlmitteltemperatur__Motor_2_ : 8|8@1+ (0.75,-48) [-48|142.5] "°" XXX
- SG_ Multiplex_Code_Motor_2 M : 6|2@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Info_Motorcode__4_x_ m1 : 0|6@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Info_Getriebecode m2 : 0|6@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Info_Max_Moment__Norm m3 : 0|6@1+ (10,0) [0|630] "Nm" XXX
- SG_ Multiplex_Info_CAN_Stand m0 : 0|6@1+ (1,0) [0|0] "" XXX
-
-BO_ 640 Motor_1: 8 XXX
- SG_ Fahrerwunschmoment : 56|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ mechanisches_Motor_Verlustmomen : 48|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Fahrpedalwert_oder_Drosselklapp : 40|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ inneres_Motor_Moment_ohne_exter : 32|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Motordrehzahl : 16|16@1+ (0.25,0) [0|16256] "U/min" XXX
- SG_ inneres_Motor_Moment : 8|8@1+ (0.39,0) [0|99] "MDI" XXX
- SG_ Momentenangaben_ungenau : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Getriebe_Momentene : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Brems_Momenteneing : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Time_Out_Bremsen_Botschaft : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Kupplungsschalter : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Kickdownschalter : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrpedalwert_ungenau__Motor_1_ M : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Leergasinformation : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 262 Master_3: 8 XXX
- SG_ Frei_Master_3_1 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Motortemperatur_linearisiert : 48|8@1+ (0.75,-48) [-48|143.25] "°" XXX
- SG_ Indiziertes_Sollmoment_f_r_Vmax : 32|16@1+ (0.0015259,0) [0|100] "%" XXX
- SG_ Relative_Momentenanforderung_de : 16|16@1+ (0.003052,0) [0|200] "%" XXX
- SG_ Delta_Motormoment_aus_Verlustmo : 0|16@1+ (0.003052,-100) [-100|100] "%" XXX
-
-BO_ 260 Master_2: 8 XXX
- SG_ Ubat_Freigabe_DVE : 45|1@1+ (1,0) [0|0] "" XXX
- SG_ DK_Sollwertbegrenzung : 44|1@1+ (1,0) [0|0] "" XXX
- SG_ Einspritzverbot_DV_E_lernen : 43|1@1+ (1,0) [0|0] "" XXX
- SG_ Master_erkannt : 42|1@1+ (1,0) [0|0] "" XXX
- SG_ Vmax_Begrenzung_aktiv : 41|1@1+ (1,0) [0|0] "" XXX
- SG_ SA_Verbot_von_FGR : 40|1@1+ (1,0) [0|0] "" XXX
- SG_ Pedalwert_Komplement : 24|16@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler__Master_2_ : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ Normierter_Fahrpedalwinkel : 0|16@1+ (0.001526,0) [0|100] "%" XXX
-
-BO_ 258 Master_1: 8 XXX
- SG_ Stationaere_Solldrehzahl : 56|8@1+ (10,0) [0|2550] "Umin" XXX
- SG_ Drehmoment_LLR__I_Anteil_ : 40|16@1+ (0.003052,-100) [-100|100] "%" XXX
- SG_ Drehmoment_LLR__PD_Anteil_ : 24|16@1+ (0.003052,-100) [-100|100] "%" XXX
- SG_ Drehmoment_LLR__Luftpfad_ : 8|16@1+ (0.003052,-100) [-100|100] "%" XXX
- SG_ Frei_Master_1_1 : 4|4@1+ (1,0) [0|0] "" XXX
- SG_ LLR_ist_aktiv : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ I_Anteil_der_LLR_aktiv : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ PD_Anteil_der_LLR_aktiv : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ LLR_Freigabe_nach_Start : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1984 LWS_Kalibrierung: 2 XXX
- SG_ Frei_LWS_Kalibrierung_1_1 : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ LWS_Identifier : 8|7@1+ (1,0) [0|0] "" XXX
- SG_ Frei_LWS_Kalibrierung_1_2 : 4|4@1+ (1,0) [0|0] "" XXX
- SG_ Command_Dode_Word : 0|4@1+ (1,0) [0|0] "" XXX
-
-BO_ 1986 Lenkwinkel_Init: 4 XXX
- SG_ Kodierbytes : 8|24@1+ (1,0) [0|0] "" XXX
- SG_ Identiifier_f_r_LWS_Init : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 192 Lenkwinkel_1__RB_: 2 XXX
- SG_ Vorzeichen__RB_ : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkwinkel__RB_ : 5|10@1+ (2.5,-720) [-720|720] "°" XXX
- SG_ LWS_OK__RB_ : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ LWS_Abgleich__RB_ : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Lenkwinkel_1_1__RB_ : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ FINE_CHECK__RB_ : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ COARSE_CHECK__RB_ : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 196 Lenkwinkel_1__ITT_: 2 XXX
- SG_ Vorzeichen__ITT_ : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkwinkel__ITT_ : 5|10@1+ (1.5,-768) [-768|766.5] "°" XXX
- SG_ LWS_OK : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ LWS_Abgleich__ITT_ : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ LWS_Initialisierung__ITT_ : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ FINE_CHECK__ITT_ : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ COARSE_CHECK__ITT_ : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 194 Lenkwinkel_1: 8 XXX
- SG_ Checksumme_Lenkwinkel_1 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Kodierdaten : 48|8@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Lenkwinkel_1 : 44|4@1+ (1,0) [0|15] "" XXX
- SG_ Status_KL30_Ausfall__z_Zt__nur : 43|1@1+ (1,0) [0|0] "" XXX
- SG_ Interner_Status : 41|2@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Lenkwinkel_1_1 : 40|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkwinkel_ID : 32|8@1+ (1,0) [0|0] "" XXX
- SG_ Lenkradwinkel_Geschwindigkeit_S : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkradwinkel_Geschwindigkeit : 16|15@1+ (0.04375,0) [0|1433.6] "Grad/Sek" XXX
- SG_ Lenkradwinkel_Sign : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkradwinkel : 0|15@1+ (0.04375,0) [0|1433.6] "Grad" XXX
-
-BO_ 1502 Lenkhilfe_Fehler: 7 XXX
- SG_ Werkstattcode : 48|8@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Signal : 45|3@1+ (1,0) [0|7] "" XXX
- SG_ Sensorcodierung_Lenkhilfe : 44|1@1+ (1,0) [0|0] "" XXX
- SG_ Kennliniencodierung_Lenkhilfe : 40|4@1+ (1,0) [0|15] "Kennlinie" XXX
- SG_ Geber_f__Lenkw__Speicher_ausles : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombiinstr__Speicher_auslesen : 38|1@1+ (1,0) [0|0] "" XXX
- SG_ Steuerger__Speicher_auslesen : 37|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Steuergeraet_defekt : 36|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Lenkhilfe_1_3 : 32|4@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Lenkhilfe_1_4 : 30|2@1+ (1,0) [0|0] "" XXX
- SG_ Geber_f__Lenkwi__k__CAN_Komm_sp : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ Geber_f__Lenkwinkel_k__CAN_Komm : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombiinstr__k__CAN_Kommunik__sp : 27|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombiinstrument_k__CAN_Kommunik : 26|1@1+ (1,0) [0|0] "" XXX
- SG_ Steuergeraet_k__CAN_Kommunik__S : 25|1@1+ (1,0) [0|0] "" XXX
- SG_ Steuergeraet_keine_CAN_Kommunik : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Spannung_Ks__nach_Mas : 23|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Spannung_Ks_nach_Mass : 22|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Spannung_Ks__nach___s : 21|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Spannung_Ks__nach__ : 20|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Temperaturschutz_sp_ : 19|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Temperaturschutz : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Betrieb_unpl__Sig__sp : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfe_Betrieb_unpl__Signal : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_k__Kommunik__sp : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_keine_Kommunik_ : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_defekt_sp_ : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_defekt : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_Unterbrechung_s : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_Unterbrechung : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhilfesensor_Ks_nach_Masse_s : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkhifesensor_Ks_nach_Masse : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Spannung_Kl_15_zu_klein_sp_ : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Spannung_Kl_15_zu_klein : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Lenkhilfe_1_5 : 4|2@1+ (1,0) [0|0] "" XXX
- SG_ Spannung_Kl_30_zu_klein_sp_ : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Spannung_Kl_30_zu_klein : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Spannung_Kl_30_zu_gro__sp_ : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Spannung_Kl_30_zu_gro_ : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 976 Lenkhilfe_1: 2 XXX
- SG_ Fehlerspeichereintrag__Lenkhilf : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Lenkhilfe_1_2 : 9|6@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerlampe_Lenkhilfe : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Lastinformation : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Lastinformation : 0|7@1+ (1,0) [0|127] "A" XXX
-
-BO_ 1312 Kombi_3: 8 XXX
- SG_ Frei_Kombi_3_2 : 60|4@1+ (1,0) [0|0] "" XXX
- SG_ Kilometerstand : 40|20@1+ (1,0) [0|1000000] "km" XXX
- SG_ Fehlerstatus_Standzeit : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Standzeit : 24|15@1+ (4,0) [0|131068] "sec" XXX
- SG_ Frei_Kombi_3_1 : 20|4@1+ (1,0) [0|0] "" XXX
- SG_ Schluesselinfo : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ Kombi_Multiplex_Code M : 14|2@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Niveauregulie m3 : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Marke m1 : 11|3@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Lenkhilfe m3 : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Dieselpumpe m3 : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Lenkwinkel m3 : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Baureihe m1 : 8|3@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Laendervariante m0 : 8|6@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Allrad m3 : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Bordnetz m3 : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_ACC m3 : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Airbag m3 : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Generation m1 : 4|4@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Klima m3 : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_ABS m3 : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Verbauliste_Motor m3 : 0|1@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Derivat m1 : 0|4@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Sprachvariante m0 : 0|8@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_Multiplex_Reifenumfang m2 : 0|12@1+ (1,0) [0|4095] "mm" XXX
-
-BO_ 1056 Kombi_2: 8 XXX
- SG_ Frei_Kombi_2_2 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Kl__58_s : 55|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_58s__Kombi_2_ : 48|7@1+ (1,0) [0|100] "%" XXX
- SG_ Fehlerstatus_Kl__58_d : 47|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_58d__Kombi_2_ : 40|7@1+ (1,0) [0|100] "%" XXX
- SG_ Kuehlmitteltemp__4_1__Kombi_2_ : 32|8@1+ (0.75,-48) [-48|142.5] "°C" XXX
- SG_ Oeltemperatur_4_1 : 24|8@1+ (1,-60) [-60|194] "°C" XXX
- SG_ Aussentemp__ungefiltert_4_1__Ko : 16|8@1+ (0.5,-50) [-50|77] "°C" XXX
- SG_ Aussentemperatur_gefiltert : 8|8@1+ (0.5,-50) [-50|77] "°C" XXX
- SG_ Fehlerspeichereintrag__Kombi_ : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Kombi_2_1 : 4|3@1+ (1,0) [0|0] "" XXX
- SG_ Anhaenger_erkannt : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerst__Kuehlmitteltemp__4_1 : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Oeltemperatur_4_1 : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Aussentemp__4_1 : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 800 Kombi_1: 8 XXX
- SG_ Frei_Kombi_1_3 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Angezeigte_Geschwindigkeit : 46|10@1+ (0.32,0) [0|325] "km/h" XXX
- SG_ Blinker_rechts_4_1 : 45|1@1+ (1,0) [0|0] "" XXX
- SG_ Blinker_links_4_1 : 44|1@1+ (1,0) [0|0] "" XXX
- SG_ Gesetzte_Zeitluecke__Kombi_1_ : 43|1@1+ (1,0) [0|0] "" XXX
- SG_ ADR_Summer_abgeschaltet : 42|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Kombi_1_2 : 40|2@1+ (1,0) [0|0] "" XXX
- SG_ Geschwindigkeit__Kombi_1_ : 25|15@1+ (0.01,0) [0|326] "km/h" XXX
- SG_ Signalquelle_Geschwindigkeit_4_ : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Tankwarnung : 23|1@1+ (1,0) [0|0] "" XXX
- SG_ Tankinhalt : 16|7@1+ (1,0) [0|126] "l" XXX
- SG_ Tankstop : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Kombi_1_7 : 12|3@1+ (1,0) [0|0] "" XXX
- SG_ Kombi_im_Stellgliedtest : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Ladekontroll_Lampe__Kombi_ : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsinfo : 8|2@1+ (1,0) [0|0] "" XXX
- SG_ Vorgluehlampe__Kombi_1_ : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Tankwarnlampe : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Heissleuchten_Vorwarnung : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Kuehlmittelmangel : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Dynamische_Oeldruckwarnung : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Oeldruck : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Tank : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrertuer_4_1 : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1504 Klima_1: 8 XXX
- SG_ Aussentemp__ungef__Sto_f__4_1 : 56|8@1+ (0.5,-50) [-50|77] "°C" XXX
- SG_ Fehlerspeichereintrag__Klima_ : 55|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Klima_1_5 : 50|5@1+ (1,0) [0|0] "" XXX
- SG_ AC_Schalter : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Temperatureinheit : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Kuehlerluefteransteuerung__Klim : 40|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ Geblaeselast_4_1 : 32|8@1+ (0.4,0) [0|101.6] "%" XXX
- SG_ Kompressorlast : 24|8@1+ (0.25,0) [0|63.5] "Nm" XXX
- SG_ Klimadrucksignal__Klima_1_ : 16|8@1+ (0.2,0) [0|50.8] "bar" XXX
- SG_ Aussentemp__ungef__4_1__Klima_1 : 8|8@1+ (0.5,-50) [-50|77] "°C" XXX
- SG_ Kaeltemitteldruck_veraltet : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Kompressormoment_veraltet_4_1 : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Keine_Heizleistg_gewuenscht_4_1 : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Kompressorzustand__4_1_ : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Heizbare_Frontscheibe : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Heizbare_Heckscheibe : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrerwunsch_Zuheizer : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Drehzahlanhebung : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 906 GRA_neu: 4 XXX
- SG_ Tiptronik_Bedienteilfehler : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_GRA_neu_1_2 : 29|2@1+ (1,0) [0|0] "" XXX
- SG_ Limiter_ein : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Zeitlueckenverstellung : 26|2@1+ (1,0) [0|0] "" XXX
- SG_ Tiptronic_Tip_Up__4_1_ : 25|1@1+ (1,0) [0|0] "" XXX
- SG_ Tiptronic_Tip_Down__4_1_ : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler__GRA_neu_ : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ Sender_Codierung__4_1_ : 18|2@1+ (1,0) [0|0] "" XXX
- SG_ Wiederaufnahme : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Setzen : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_Neu_frei_1 : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Bedienteil_Fehler : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Lang_Tip_up : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Lang_Tip_down : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Kurz_Tip_up : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Kurz_Tip_down : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Abbrechen : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Hauptschalter : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Checksumme_GRA_Neu : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 904 GRA: 3 XXX
- SG_ Checksumme_GRA_alt : 16|8@1+ (1,0) [0|0] "" XXX
- SG_ Frei_GRA_alt : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR_Bedienteil_Fehler : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR_beschleunigen : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR_verzoegern : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR___Tipschalter__Wie : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR___Tipschalter__Set : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR___Tipschalter__Aus : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ GRA_alt__ADR___Hauptschalter : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_GRA_alt : 0|8@1+ (1,0) [0|255] "" XXX
-
-BO_ 1352 Getriebe_4: 3 XXX
- SG_ Testparameter_2 : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ Testparameter_1 : 8|8@1+ (1,0) [0|255] "" XXX
- SG_ Waehlhebelausleuchtung : 4|4@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Getriebe_4_1 : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Testfreigabeflag : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Handbremserinnerung_s_Lampe : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Shiftlock_Getriebe_4 : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1344 Getriebe_2: 8 XXX
- SG_ eingelegte_Fahrstufe : 60|4@1+ (1,0) [0|0] "" XXX
- SG_ Ganganzeige_Kombi___Getriebe_Va : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ Fehlerlampe_f_r_Kupplung_bei_VL : 55|1@1+ (1,0) [0|0] "" XXX
- SG_ Anforderung_Kriechadaption : 54|1@1+ (1,0) [0|0] "" XXX
- SG_ ECO_Anzeige__4_1_ : 53|1@1+ (1,0) [0|0] "" XXX
- SG_ Shift_Lock_Lampe : 52|1@1+ (1,0) [0|0] "" XXX
- SG_ Unterdrueckung_von_Warnungen : 51|1@1+ (1,0) [0|0] "" XXX
- SG_ Gong : 50|1@1+ (1,0) [0|0] "" XXX
- SG_ Starter_wird_angesteuert : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Hochschaltlampe : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Synchronisationszeit : 40|8@1+ (20,0) [0|5080] "ms" XXX
- SG_ invertierte_Synchronisations_Wu : 32|8@1+ (25,0) [0|6350] "U/min" XXX
- SG_ Synchronisations_Wunschdrehzahl : 24|8@1+ (25,0) [0|6350] "U/min" XXX
- SG_ Gradientenbegrenzung : 16|8@1+ (10,0) [0|2540] "Nm/s" XXX
- SG_ Leerlaufsolldrehzahl__Getriebe : 8|8@1+ (10,0) [0|2540] "U/min" XXX
- SG_ Zahler_Getriebe_2 : 4|4@1+ (1,0) [0|15] "" XXX
- SG_ Zwischengasflag : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Ecomatic__4_1_ : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Schubabschaltunterstuetzung : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ LFR_Adaption_Freigabeflag : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1088 Getriebe_1: 8 XXX
- SG_ Wandlerverlustmoment : 56|8@1+ (0.39,0) [0|99.06] "MDI" XXX
- SG_ Fehlerspeichereintrag__Getriebe : 55|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Getriebe_1 : 51|4@1+ (1,0) [0|15] "" XXX
- SG_ Gang_eingelegt : 50|1@1+ (1,0) [0|0] "" XXX
- SG_ Schaltabsicht : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Motor_aus : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ OBD_Status__Getriebe_1___4_1_ : 46|2@1+ (1,0) [0|0] "" XXX
- SG_ Kuehlleistung : 44|2@1+ (1,0) [0|0] "" XXX
- SG_ Getriebe_Notlauf : 40|4@1+ (1,0) [0|0] "" XXX
- SG_ Fahrwiderstandsindex : 32|8@1+ (0.249,-31.6) [-31.6|31.6] "" XXX
- SG_ inneres_Soll_Motormoment : 24|8@1+ (0.39,0) [0|99.06] "MDI" XXX
- SG_ Uebertragungsfunktion : 16|8@1+ (0.1,0) [0|25.4] "" XXX
- SG_ Waehlhebelposition__Getriebe_1_ : 12|4@1+ (1,0) [0|0] "" XXX
- SG_ Zielgang_oder_eingelegter_Gang : 8|4@1+ (1,0) [0|0] "" XXX
- SG_ EGS_Anforderung : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Kodierung_im_MSG : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Leerlaufsolldrehzahlanhebung : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Wandlerkupplung : 3|2@1+ (1,0) [0|0] "" XXX
- SG_ Klimakompressor_aus__Getriebe_1 : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Getriebe_und_Wandlerschu : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Schaltung_aktiv__Getriebe_1_ : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 912 Gateway_Komfort_1: 6 XXX
- SG_ Bremslicht_Anhaenger : 47|1@1+ (1,0) [0|0] "" XXX
- SG_ Anhaenger_erkannt_Gateway : 46|1@1+ (1,0) [0|0] "" XXX
- SG_ ECD_AAG_unplausibel : 45|1@1+ (1,0) [0|0] "" XXX
- SG_ BLS_AAG_unplausibel : 44|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Anhaenger : 40|4@1+ (1,0) [0|15] "" XXX
- SG_ Frei_Gateway_Komfort_1_4 : 34|6@1+ (1,0) [0|0] "" XXX
- SG_ ECD_ILM_unplausibel : 33|1@1+ (1,0) [0|0] "" XXX
- SG_ BLS_ILM_unplausibel : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremslicht_mitte_defekt : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremslicht_rechts_defekt : 30|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremslicht_links_defekt : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ Rueckfahrlicht_Gateway : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Bremslicht : 24|4@1+ (1,0) [0|15] "" XXX
- SG_ Frei_Gateway_Komfort_1_3 : 17|7@1+ (1,0) [0|0] "" XXX
- SG_ Fahrertuerkontakt : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ RDK_Systemfehler : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ RDK_Warnstufe_1 : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ RDK_Warnstufe_2 : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruckwarnung_Reserverad : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruckwarnung_hinten_recht : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruckwarnung_hinten_links : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruckwarnung_vorn_rechts : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruckwarnung_vorn_links : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Gateway_Komfort_1_2 : 5|3@1+ (1,0) [0|0] "" XXX
- SG_ Fahrertuerkontakt_veraltet : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Gateway_Komfort_1_1 : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Licht_1_Botschaft_veraltet : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Anhaenger_Botschaft_veraltet : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Reifendruckwarnung_veraltet : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1340 Fahrwerk_1: 1 XXX
- SG_ Frei_Fahrwerk_1_2 : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Fahrwerk_1_1 : 6|2@1+ (1,0) [0|0] "" XXX
- SG_ Einstellung_Fahrwerkdaempfung_4 : 4|3@1+ (1,0) [0|7] "" XXX
- SG_ Ansteuererung_Fahrzeugniveau : 0|4@1+ (1,0) [0|15] "" XXX
-
-BO_ 1472 EPB_1: 8 XXX
- SG_ Textmeldungen_EPB : 52|4@1+ (1,0) [0|0] "" XXX
- SG_ Aufmerksamkeits_Gtong_EPB : 51|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehler_Gong_EBP : 50|1@1+ (1,0) [0|0] "" XXX
- SG_ Warnton_EPB : 49|1@1+ (1,0) [0|0] "" XXX
- SG_ Funktionslampe_EPB : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_EPB_1_1 : 33|15@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerspeichereintrag_EPB : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ Neigungswinkel : 24|8@1+ (1,-128) [-128|127] "g" XXX
- SG_ Verzoegerungsanforderung__EPB_ : 24|8@1+ (0.5,0) [0|255] "g" XXX
- SG_ Status_Neigungswinkelgeber : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Schalterinfo_Parkbremse : 13|2@1+ (1,0) [0|0] "" XXX
- SG_ Erreichte_Spannkraft : 8|5@1+ (1,0) [0|30] "kN" XXX
- SG_ Checksumme_Parkbremse : 8|8@1+ (1,0) [0|255] "" XXX
- SG_ Schalterstatus_Parkbremse : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Parkbremse : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Parkbremse : 4|2@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Parkbremse : 0|4@1+ (1,0) [0|0] "" XXX
-
-BO_ 1326 Diag_Lenkhilfe: 3 XXX
- SG_ Werkstattcode__Diag_ : 16|8@1+ (1,0) [0|0] "" XXX
- SG_ Multiplex_Signal__Diag_ : 13|3@1+ (1,0) [0|7] "" XXX
- SG_ Befehl_Sensorcodierung_Lenkhilf : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Befehl_Kennliniencodierung_Lenk : 8|4@1+ (1,0) [0|0] "" XXX
- SG_ Befehl_Fehlerspeicher_loeschen : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 1432 Daempfer_1: 2 XXX
- SG_ Frei_Daempfer_1_4 : 12|4@1+ (1,0) [0|0] "" XXX
- SG_ Textbits_Daempfer : 8|4@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerspeicherbit__Daempfer_1_ : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Systemstatus__Daempfer_1_ : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Daempfer_1_3 : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_CDC_Taster : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Daempfer_1_2 : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Daempferregelung_4_1 : 0|3@1+ (1,0) [0|7] "" XXX
-
-BO_ 1392 BSG_Last: 4 XXX
- SG_ Klimaanlage_abschalten : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Sitzbelueftung_abschalten : 30|1@1+ (1,0) [0|0] "" XXX
- SG_ Wischwasserheizung_abschalten : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ Lenkradheizung_abschalten : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Heizbare_Sitze_abschalten : 27|1@1+ (1,0) [0|0] "" XXX
- SG_ Heizbare_Aussenspiegel_abschalt : 26|1@1+ (1,0) [0|0] "" XXX
- SG_ Heizbare_Frontscheibe_abschalte : 25|1@1+ (1,0) [0|0] "" XXX
- SG_ Heizbare_Heckscheibe_abschalten : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Batteriespannung_Bordnetzbatter : 16|8@1+ (0.05,5) [5|17.7] "V" XXX
- SG_ Motorhaubenkontakt : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Leuchtweitenregulierung : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerspeichereintrag__BSG_Last : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Zustand_der_Starterbatterie : 11|2@1+ (1,0) [0|0] "" XXX
- SG_ Zustand_der_Bordnetzbatterie : 9|2@1+ (1,0) [0|0] "" XXX
- SG_ LL_Drehzahlanhebung : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_L : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_BSG_Last_1_1 : 4|3@1+ (1,0) [0|0] "" XXX
- SG_ ZAS_Klemme_50 : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ ZAS_Klemme_X : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ ZAS_Klemme_15 : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ ZAS_Klemme_S : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1136 BSG_Kombi: 5 XXX
- SG_ Frei_BSG_Kombi_1_3 : 36|4@1+ (1,0) [0|0] "" XXX
- SG_ Ruecksitzlehne_HR_verr__4_1 : 35|1@1+ (1,0) [0|0] "" XXX
- SG_ Ruecksitzlehne_HL_verr__4_1 : 34|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerlampe_Lenkhilfe_veraltet : 33|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerlampe_Lenkhilfe__BSG_Komb : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Kl__58s : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_58s__BSG_Kombi_ : 24|7@1+ (1,0) [0|100] "%" XXX
- SG_ Fehlerstatus_Kl__58d : 23|1@1+ (1,0) [0|0] "" XXX
- SG_ Klemme_58d__BSG_Kombi_ : 16|7@1+ (1,0) [0|100] "%" XXX
- SG_ Unterspannung : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_BSG_Kombi_1_2 : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Heckdeckel_geoeffnet : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Motorhaube_geoeffnet : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Tuer_hinten_rechts_geoeffnet : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Tuer_hinten_links_geoeffnet : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Beifahrertuer_geoeffnet : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrertuer_geoeffnet : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Lade_Kontrollampe : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_BSG_Kombi_1_1 : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Rueckfahrlicht : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ DWA_Akku : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Warnblink_Mode : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Anhaenger_Kontrollampe : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Blinker_rechts_Kontrollampe : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Blinker_links_Kontrollampe : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 424 Bremse_6: 3 XXX
- SG_ Checksumme_Bremse_6 : 16|8@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Bremse_6 : 12|4@1+ (1,0) [0|15] "" XXX
- SG_ Status_Bremsdruck__Bremse_6__du : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Bremse_6_1 : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsdruck__Bremse_6_ : 0|10@1+ (0.3255,-40) [-40|293] "bar" XXX
-
-BO_ 1192 Bremse_5: 8 XXX
- SG_ Checksumme_Bremse_5 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Bremse_5 : 52|4@1+ (1,0) [0|15] "" XXX
- SG_ Bremslicht_ECD : 51|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsentemperatur_vorn : 48|3@1+ (125,125) [125|1000] "°C" XXX
- SG_ Frei_Bremse_5_5 : 40|8@1+ (1,0) [0|0] "" XXX
- SG_ Offset_Gierrate : 32|8@1+ (0.05,-6.375) [-6.375|6.375] "°/s" XXX
- SG_ Vorzeichen_Bremsdruck : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Bremsdruck_durch_ESP_Sys : 30|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsdruck_ungueltig : 29|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Bremse_5_3 : 28|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsdruck : 16|12@1+ (0.1,0) [0|250] "bar" XXX
- SG_ Vorzeichen_der_Giergeschwindigk : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Gierrate_ungueltig : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Giergeschwindigkeit : 0|14@1+ (0.01,0) [0|100] "Grad/sec" XXX
-
-BO_ 672 Bremse_4: 3 XXX
- SG_ Frei_Bremse_4_1 : 17|7@1+ (1,0) [0|0] "" XXX
- SG_ Einheit_Kupplungssteifigkeit : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ ABS_Vorgabewert_hinten_Kupplung : 8|8@1+ (0.7874,0) [0|100] "%" XXX
- SG_ ABS_Vorgabewert_mitte_Kupplungs : 0|8@1+ (3,-381) [-381|378] "Nm/min" XXX
-
-BO_ 1184 Bremse_3: 8 XXX
- SG_ Radgeschw__HR_4_1 : 49|15@1+ (0.01,0) [0|326] "km/h" XXX
- SG_ Frei_Bremse_3_4 : 48|1@1+ (1,0) [0|0] "" XXX
- SG_ Radgeschw__HL_4_1 : 33|15@1+ (0.01,0) [0|326] "km/h" XXX
- SG_ Frei_Bremse_3_3 : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ Radgeschw__VR_4_1 : 17|15@1+ (0.01,0) [0|326] "km/h" XXX
- SG_ Frei_Bremse_3_2 : 16|1@1+ (0.01,0) [0|325] "km/h" XXX
- SG_ Radgeschw__VL_4_1 : 1|15@1+ (0.01,0) [0|326] "km/h" XXX
- SG_ Frei_Bremse_3_1 : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1440 Bremse_2: 8 XXX
- SG_ gemessene_Querbeschleunigung : 63|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Bremse_2_2 : 62|1@1+ (1,0) [0|0] "" XXX
- SG_ Impulszahl : 56|6@1+ (1,0) [0|63] "" XXX
- SG_ Fehlerstatus_Wegimpulse_4_1 : 55|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Bremse_2_5 : 54|1@1+ (1,0) [0|0] "" XXX
- SG_ Warnlampe_DDS : 53|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerspeichereintrag_Bremse : 52|1@1+ (1,0) [0|0] "" XXX
- SG_ Wegimpulszaehlerstatus : 51|1@1+ (1,0) [0|0] "" XXX
- SG_ Wegimpulse_Vorderachse : 40|11@1+ (1,0) [0|2047] "" XXX
- SG_ Zeitstempel : 24|16@1+ (1,0) [0|65535] "tics" XXX
- SG_ mittlere_Raddrehzahl__Bremse_2 : 9|15@1+ (0.002,0) [0|65.278] "U/sec" XXX
- SG_ Querbeschl__TimerTic M : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Timer m1 : 0|8@1+ (0.04,0) [0|10.2] "usec" XXX
- SG_ Querbeschleunigung m0 : 0|8@1+ (0.01,-1.27) [-1.27|1.27] "g" XXX
-
-BO_ 416 Bremse_1: 8 XXX
- SG_ Geschwindigkeitsersatzwert : 63|1@1+ (1,0) [0|0] "" XXX
- SG_ ESP_Systemstatus_4_1 : 62|1@1+ (1,0) [0|0] "" XXX
- SG_ ESP_Passiv_getastet : 61|1@1+ (1,0) [0|0] "" XXX
- SG_ ASR_Steuerger_t : 60|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Bremse_1 : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ MSR_Eingriffsmoment : 48|8@1+ (0.39,0) [0|99.06] "MDI" XXX
- SG_ ASR_Eingriffsmoment_schnell : 40|8@1+ (0.39,0) [0|99.06] "MDI" XXX
- SG_ ASR_Eingriffsmoment_langsam : 32|8@1+ (0.39,0) [0|99.06] "MDI" XXX
- SG_ Geschwindigkeit_neu__Bremse_1_ : 17|15@1+ (0.01,0) [0|326.39] "km/h" XXX
- SG_ Aktiver_Bremskraftverstaerker : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ ABS_in_Diagnose : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Schlechtwegausblen : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Schlechtwegausblendung : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Fahrer_bremst__Bremse_1___4_1_ : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremskontroll_Lampe : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Lampe_ASR___ESP : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Lampe_ABS : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ EBV_Eingriff : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ ASR_Schaltbeeinflussung : 5|2@1+ (1,0) [0|0] "" XXX
- SG_ ESP_Eingriff : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ EDS_Eingriff : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ ABS_Bremsung__4_1_ : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ MSR_Anforderung : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ ASR_Anforderung : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 680 Bremsbooster_1: 3 XXX
- SG_ Fehlerspeichereintrag_Booster : 23|1@1+ (1,0) [0|0] "" XXX
- SG_ Loseschalter_unplausibel_Boost : 22|1@1+ (1,0) [0|0] "" XXX
- SG_ Position_Standby : 21|1@1+ (1,0) [0|0] "" XXX
- SG_ ADR_Relais_ge_ffnet : 20|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_Bremsbooster_Steuerung : 19|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremsbooster_verf_gbar : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Eingriff_Bremsbooster : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Bremseingriff_Fahrer : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Bremsbooster_1_1 : 12|4@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Booster_1 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Checksumme_Booster_1 : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 1400 BatMan_1: 1 XXX
- SG_ Fehlerspeichereintrag__BatMan_ : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Leistungsrelais : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Messung_Starterleitung : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Zustand_Starterleitung : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Umschaltrelais_Bordnetzbatterie : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Ladung_Starterbatterie : 1|2@1+ (1,0) [0|0] "" XXX
- SG_ Startmodus : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 704 Allrad_1: 5 XXX
- SG_ Kupplungssteifigkeit_Hinten__Is : 32|8@1+ (0.7874,0) [0|100] "%" XXX
- SG_ Fehlerspeichereintrag_Allrad_1 : 31|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Allrad_1_1 : 26|5@1+ (1,0) [0|0] "" XXX
- SG_ Schaltung_Vorwarnung : 25|1@1+ (1,0) [0|0] "" XXX
- SG_ Schaltung_aktiv__Allrad_1_ : 24|1@1+ (1,0) [0|0] "" XXX
- SG_ Ganginfo__PNG_ : 20|4@1+ (1,0) [0|0] "" XXX
- SG_ PNG_Anzeige_blinkend : 19|1@1+ (1,0) [0|0] "" XXX
- SG_ PNG_Status_4_1 : 16|3@1+ (1,0) [0|0] "" XXX
- SG_ Kupplungssteifigkeit_Mitte__Ist : 8|8@1+ (3,-381) [-381|378] "Nm/min" XXX
- SG_ Einheit_der_Kupplungssteifigkei : 7|1@1+ (1,0) [0|0] "" XXX
- SG_ Geschwindigkeitsbegrenzung : 6|1@1+ (1,0) [0|0] "" XXX
- SG_ Allrad_Warnlampe : 5|1@1+ (1,0) [0|0] "" XXX
- SG_ Notlauf : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Kupplung_komplett_offen : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehlerstatus_Kupplungssteifigke : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Ubertemperaturschutz__Allrad_1_ : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Fehler_Allrad_Kupplung : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 1360 Airbag_2: 2 XXX
- SG_ OOP_Beifahrer : 14|2@1+ (1,0) [0|0] "" XXX
- SG_ OOP_Fahrer : 12|2@1+ (1,0) [0|0] "" XXX
- SG_ Belegungserkennung_hinten_mitte : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Belegungserkennung_hinten_recht : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Belegungserkennung_hinten_links : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Belegungserkennung_Beifahrersit : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Checksumme_Airbag_2__reserviert : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 80 Airbag_1: 4 XXX
- SG_ Checksumme_Airbag_1 : 24|8@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_Airbag_1 : 20|4@1+ (1,0) [0|15] "" XXX
- SG_ Fehlerspeichereintrag : 19|1@1+ (1,0) [0|0] "" XXX
- SG_ Frei_Airbag_1_2 : 18|1@1+ (1,0) [0|0] "" XXX
- SG_ Airbag_im_Stellgliedtest : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Airbag_in_Diagnose : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Gurtwarnung_Beifahrer : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Gurtschalter_Beifahrer : 14|1@1+ (1,0) [0|0] "" XXX
- SG_ Gurtwarnung_Fahrer : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Gurtschalter_Fahrer : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Airbag_Systemfehler : 11|1@1+ (1,0) [0|0] "" XXX
- SG_ Kindersitzerkennung : 10|1@1+ (1,0) [0|0] "" XXX
- SG_ Airbag_deaktiviert : 9|1@1+ (1,0) [0|0] "" XXX
- SG_ Airbag_Lampe : 8|1@1+ (1,0) [0|0] "" XXX
- SG_ Crash_Intensitaet : 5|3@1+ (1,0) [0|111] "B" XXX
- SG_ Rollover : 4|1@1+ (1,0) [0|0] "" XXX
- SG_ Seiten_Crash_Beifahrer : 3|1@1+ (1,0) [0|0] "" XXX
- SG_ Seiten_Crash_Fahrer : 2|1@1+ (1,0) [0|0] "" XXX
- SG_ Heck_Crash : 1|1@1+ (1,0) [0|0] "" XXX
- SG_ Front_Crash : 0|1@1+ (1,0) [0|0] "" XXX
-
-BO_ 864 ADR_System: 8 XXX
- SG_ S_Checksumme_ADR_1 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ S_Frei_ADR_1_1 : 52|4@1+ (1,0) [0|0] "" XXX
- SG_ S_Zeitluecke_gemessen : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ S_Fehlerspeichereintrag_ADR : 47|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Fehlerspeichereintrag_Bremsbo : 46|1@1+ (1,0) [0|0] "" XXX
- SG_ S_ADR_Relais_geoeffnet : 45|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Bremsbooster_Status : 43|2@1+ (1,0) [0|0] "" XXX
- SG_ S_Eingriff_Bremsbooster : 42|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Loeseschalter_unplausibel : 41|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Bremseingriff_Fahrer : 40|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Anzeige_Sensor_blind : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Ansteuerung_optischer_Fahrerh : 38|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Ansteuerung_Gong_2 : 37|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Ansteuerung_Gong_1 : 36|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Schaltaufforderung : 34|2@1+ (1,0) [0|0] "" XXX
- SG_ S_Anzeige_Prioritaet : 33|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Anzeige_Zeitluecke : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Wunschgeschwindigkeit : 24|8@1+ (1,0) [0|254] "km/h" XXX
- SG_ S_Objekt_erfasst : 22|2@1+ (1,0) [0|0] "" XXX
- SG_ S_Gesetzte_Zeitluecke__ADR_1_ : 18|4@1+ (1,0) [0|15] "" XXX
- SG_ S_Synchronisation_Bremsbooster : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Momentenanforderung_Freigabe : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Verhinderung_Schubabschaltung : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Status_ADR_1__S_ : 13|2@1+ (1,0) [0|0] "" XXX
- SG_ S_Fehler_ADR_1__S_ : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ S_Zaehler_ADR_1 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ S_Momentenanforderung_ADR : 0|8@1+ (0.39,0) [0|99] "MDI" XXX
-
-BO_ 608 ADR_2: 4 XXX
- SG_ Frei_ADR_2_2 : 27|5@1+ (1,0) [0|0] "" XXX
- SG_ Anforderung_Bremsdruck : 16|11@1+ (0.0625,0) [0|127.9375] "bar" XXX
- SG_ Frei_ADR_2_1 : 14|2@1+ (1,0) [0|0] "" XXX
- SG_ Relais_Test_Fehler : 13|1@1+ (1,0) [0|0] "" XXX
- SG_ Standby : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_ADR_2 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Checksumme_ADR_2 : 0|8@1+ (1,0) [0|0] "" XXX
-
-BO_ 1324 ADR_1: 8 XXX
- SG_ Checksumme_ADR_1 : 56|8@1+ (1,0) [0|0] "" XXX
- SG_ Frei_ADR_1_5 : 52|4@1+ (1,0) [0|0] "" XXX
- SG_ Zeitluecke_gemessen : 48|4@1+ (1,0) [0|15] "" XXX
- SG_ Fehlerspeichereintrag_ADR : 47|1@1+ (1,0) [0|0] "" XXX
- SG_ Reserviert_ADR_1_1 : 40|7@1+ (1,0) [0|0] "" XXX
- SG_ Anzeige_Sensor_blind : 39|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_optischer_Fahrerhin : 38|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Gong_2 : 37|1@1+ (1,0) [0|0] "" XXX
- SG_ Ansteuerung_Gong_1 : 36|1@1+ (1,0) [0|0] "" XXX
- SG_ Schaltaufforderung : 34|2@1+ (1,0) [0|0] "" XXX
- SG_ Anzeige_Prioritaet : 33|1@1+ (1,0) [0|0] "" XXX
- SG_ Anzeige_Zeitluecke : 32|1@1+ (1,0) [0|0] "" XXX
- SG_ Wunschgeschwindigkeit : 24|8@1+ (1,0) [0|254] "km/h" XXX
- SG_ Objekt_erfasst : 22|2@1+ (1,0) [0|0] "" XXX
- SG_ Gesetzte_Zeitluecke__ADR_1_ : 18|4@1+ (1,0) [0|15] "" XXX
- SG_ Synchronisation_Bremsbooster : 17|1@1+ (1,0) [0|0] "" XXX
- SG_ Momentenanforderung_Freigabe : 16|1@1+ (1,0) [0|0] "" XXX
- SG_ Verhinderung_Schubabschaltung : 15|1@1+ (1,0) [0|0] "" XXX
- SG_ Status_ADR_1 : 13|2@1+ (1,0) [0|0] "" XXX
- SG_ Fehler_ADR_1 : 12|1@1+ (1,0) [0|0] "" XXX
- SG_ Zaehler_ADR_1 : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Momentenanforderung_ADR : 0|8@1+ (0.39,0) [0|99] "MDI" XXX
diff --git a/opendbc/vw_mqb_2010.dbc b/opendbc/vw_mqb_2010.dbc
index 4529f8847a0b87..c542b31f4f6602 100644
--- a/opendbc/vw_mqb_2010.dbc
+++ b/opendbc/vw_mqb_2010.dbc
@@ -37,8 +37,8 @@ BU_: Airbag_MQB BAP_Tester_MQB BMS_MQB Datenlogger_MQB Gateway_MQB Getriebe_DQ_H
BO_ 290 ACC_06: 8 Gateway_MQB
- SG_ ACC_06_CRC : 0|8@1+ (1,0) [0|255] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ ACC_06_BZ : 8|4@1+ (1,0) [0|15] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ACC_limitierte_Anfahrdyn : 12|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ACC_zul_Regelabw_unten : 16|6@1+ (0.024,0) [0|1.512] "Unit_MeterPerSeconSquar" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ACC_StartStopp_Info : 22|2@1+ (1,0) [0|3] "" Motor_Diesel_MQB,Motor_Otto_MQB
@@ -53,8 +53,8 @@ BO_ 290 ACC_06: 8 Gateway_MQB
SG_ ACC_Minimale_Bremsung : 63|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
BO_ 279 ACC_10: 8 Gateway_MQB
- SG_ ACC_10_CRC : 0|8@1+ (1,0) [0|255] "" Airbag_MQB
- SG_ ACC_10_BZ : 8|4@1+ (1,0) [0|15] "" Airbag_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Airbag_MQB
SG_ AWV1_Anf_Prefill : 16|1@1+ (1,0) [0|1] "" Airbag_MQB
SG_ ANB_CM_Info : 17|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ AWV2_Freigabe : 18|1@1+ (1,0) [0|1] "" Airbag_MQB
@@ -281,8 +281,8 @@ BO_ 257 ESP_02: 8 Gateway_MQB
SG_ ESP_Status_ESP_PLA : 60|4@1+ (1,0) [0|15] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
BO_ 262 ESP_05: 8 Gateway_MQB
- SG_ ESP_05_CRC : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ ESP_05_BZ : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ESP_QBit_Bremsdruck : 12|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ESP_QBit_Fahrer_bremst : 13|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ESP_Schwelle_Unterdruck : 14|2@1+ (1,0) [0|3] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
@@ -360,8 +360,8 @@ BO_ 178 ESP_19: 8 Gateway_MQB
SG_ ESP_VR_Radgeschw_02 : 48|16@1+ (0.0075,0) [0|491.49] "Unit_KiloMeterPerHour" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
BO_ 1629 ESP_20: 8 Gateway_MQB
- SG_ ESP_20_CRC : 0|8@1+ (1,0) [0|255] "" Vector__XXX
- SG_ ESP_20_BZ : 8|4@1+ (1,0) [0|15] "" Vector__XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Vector__XXX
SG_ BR_Systemart : 12|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ ESP_Zaehnezahl : 16|8@1+ (1,0) [0|255] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
SG_ ESP_Charisma_FahrPr : 24|4@1+ (1,0) [0|15] "" Vector__XXX
@@ -370,8 +370,8 @@ BO_ 1629 ESP_20: 8 Gateway_MQB
SG_ BR_Reifenumfang : 52|12@1+ (1,0) [0|4095] "Unit_MilliMeter" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
BO_ 253 ESP_21: 8 Gateway_MQB
- SG_ ESP_21_CRC : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,LEH_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ ESP_21_BZ : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,BMS_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,LEH_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,LEH_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,BMS_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,LEH_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ BR_Eingriffsmoment : 12|10@1+ (1,-509) [-509|509] "Unit_NewtoMeter" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ESP_v_Signal : 32|16@1+ (0.01,0) [0|655.32] "Unit_KiloMeterPerHour" Airbag_MQB,BMS_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,LEH_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB,SAK_MQB
SG_ ASR_Tastung_passiv : 48|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
@@ -451,8 +451,8 @@ BO_ 296 Getriebe_06: 3 Getriebe_DQ_Hybrid_MQB
SG_ GE_Testparameter_2 : 16|8@1+ (1,0) [0|255] "" Waehlhebel_MQB
BO_ 173 Getriebe_11: 8 Getriebe_DQ_Hybrid_MQB
- SG_ Getriebe_11_CRC : 0|8@1+ (1,0) [0|255] "" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ Getriebe_11_BZ : 8|4@1+ (1,0) [0|15] "" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTERXX : 8|4@1+ (1,0) [0|15] "" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GE_MMom_Soll_02 : 12|10@1+ (1,-509) [-509|509] "Unit_NewtoMeter" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GE_MMom_Vorhalt_02 : 22|10@1+ (1,-509) [-509|509] "Unit_NewtoMeter" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GE_Uefkt : 32|10@1+ (0.1,0) [0|102.2] "" Gateway_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
@@ -520,8 +520,8 @@ BO_ 158 Getriebe_Hybrid_01: 8 Getriebe_DQ_Hybrid_MQB
SG_ GE_HYB_VM_Startkontr : 63|1@1+ (1,0) [0|1] "" Motor_Hybrid_MQB
BO_ 299 GRA_ACC_01: 8 Gateway_MQB
- SG_ GRA_ACC_01_CRC : 0|8@1+ (1,0) [0|255] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ GRA_ACC_01_BZ : 8|4@1+ (1,0) [0|15] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GRA_Hauptschalter : 12|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GRA_Abbrechen : 13|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GRA_Typ_Hauptschalter : 14|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
@@ -535,10 +535,11 @@ BO_ 299 GRA_ACC_01: 8 Gateway_MQB
SG_ GRA_Fehler : 24|1@1+ (1,0) [0|1] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GRA_Typ468 : 25|2@1+ (1,0) [0|3] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ GRA_Tip_Stufe_2 : 27|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ GRA_ButtonTypeInfo : 28|2@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
BO_ 960 Klemmen_Status_01: 4 Gateway_MQB
- SG_ Klemmen_Status_01_CRC : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,BMS_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ Klemmen_Status_01_BZ : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,BMS_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,BMS_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,BMS_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ZAS_Kl_S : 16|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ ZAS_Kl_15 : 17|1@1+ (1,0) [0|1] "" Airbag_MQB,BMS_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ ZAS_Kl_X : 18|1@1+ (1,0) [0|1] "" Vector__XXX
@@ -683,16 +684,16 @@ BO_ 982 Licht_hinten_01: 8 Gateway_MQB
SG_ LH_Bremsl_re_ges_def : 55|1@1+ (1,0) [0|1] "" Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
BO_ 134 LWI_01: 8 Gateway_MQB
- SG_ LWI_01_CRC : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ LWI_01_BZ : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ LWI_Sensorstatus : 12|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ LWI_QBit_Sub_Daten : 13|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ LWI_QBit_Lenkradwinkel : 15|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ LWI_Lenkradwinkel : 16|13@1+ (0.1,0) [0|800] "Unit_DegreOfArc" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
+ SG_ LWI_VZ_Lenkradwinkel : 29|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
SG_ LWI_VZ_Lenkradw_Geschw : 30|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LWI_Lenkradw_Geschw : 31|9@1+ (5,0) [0|2500] "Unit_DegreOfArcPerSecon" Vector__XXX
SG_ LWI_Sub_Daten : 40|16@1+ (1,0) [0|65535] "" Vector__XXX
- SG_ LWI_Lenkradwinkel : 16|13@1+ (0.1,0) [0|800] "Unit_DegreOfArc" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ LWI_QBit_Lenkradwinkel : 15|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
- SG_ LWI_VZ_Lenkradwinkel : 29|1@1+ (1,0) [0|1] "" Airbag_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB,Motor_Diesel_MQB,Motor_Hybrid_MQB,Motor_Otto_MQB
BO_ 263 Motor_04: 8 Motor_Diesel_MQB
SG_ MO_Istgang : 8|4@1+ (1,0) [0|15] "" Gateway_MQB
@@ -824,6 +825,8 @@ BO_ 1648 Motor_18: 8 Motor_Diesel_MQB
SG_ MO_obere_Drehzahlgrenze : 56|8@1+ (50,0) [50|12750] "Unit_MinutInver" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
BO_ 289 Motor_20: 8 Motor_Diesel_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|255] "" XXX
SG_ MO_Fahrpedalrohwert_01 : 12|8@1+ (0.4,0) [0|101.6] "Unit_PerCent" Airbag_MQB,Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
SG_ MO_QBit_Fahrpedalwerte_01 : 20|1@1+ (1,0) [0|1] "" Airbag_MQB,Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
SG_ MO_Fahrpedalgradient : 21|8@1+ (25,0) [0|6350] "Unit_PerCentPerSecon" Airbag_MQB,Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
@@ -1105,8 +1108,8 @@ BO_ 1413 Systeminfo_01: 8 Gateway_MQB
SG_ SI_BUS_15 : 30|1@1+ (1,0) [0|1] "" Vector__XXX
BO_ 288 TSK_06: 8 Motor_Diesel_MQB
- SG_ TSK_06_CRC : 0|8@1+ (1,0) [0|255] "" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
- SG_ TSK_06_BZ : 8|4@1+ (1,0) [0|15] "" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
SG_ TSK_Radbremsmom : 12|12@1+ (8,0) [0|32760] "Unit_NewtoMeter" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
SG_ TSK_Status : 24|3@1+ (1,0) [0|7] "" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
SG_ TSK_v_Begrenzung_aktiv : 27|1@1+ (1,0) [0|1] "" Gateway_MQB,Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
@@ -1126,6 +1129,28 @@ BO_ 798 TSK_07: 8 Motor_Diesel_MQB
SG_ TSK_Status_Anzeige : 61|3@1+ (1,0) [0|7] "" Gateway_MQB
BO_ 1716 VIN_01: 8 Gateway_MQB
+ SG_ VIN_01_MUX M : 0|2@1+ (1,0) [0|3] "" Airbag_MQB
+ SG_ KS_Geheimnis_1 m0 : 8|8@1+ (1,0) [0|255] "" Vector__XXX
+ SG_ VIN_4 m1 : 8|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_11 m2 : 8|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ KS_Geheimnis_2 m0 : 16|8@1+ (1,0) [0|255] "" Vector__XXX
+ SG_ VIN_5 m1 : 16|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_12 m2 : 16|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ KS_Geheimnis_3 m0 : 24|8@1+ (1,0) [0|255] "" Vector__XXX
+ SG_ VIN_6 m1 : 24|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_13 m2 : 24|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ KS_Geheimnis_4 m0 : 32|8@1+ (1,0) [0|255] "" Vector__XXX
+ SG_ VIN_7 m1 : 32|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_14 m2 : 32|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_1 m0 : 40|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_8 m1 : 40|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_15 m2 : 40|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_2 m0 : 48|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_9 m1 : 48|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_16 m2 : 48|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_3 m0 : 56|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_10 m1 : 56|8@1+ (1,0) [0|255] "" Airbag_MQB
+ SG_ VIN_17 m2 : 56|8@1+ (1,0) [0|255] "" Airbag_MQB
BO_ 175 Waehlhebel_03: 4 Waehlhebel_MQB
SG_ WH_Status_Sperre : 0|3@1+ (1,0) [0|7] "" Getriebe_DQ_Hybrid_MQB,Getriebe_DQ_MQB
@@ -1157,30 +1182,30 @@ BO_ 1602 WIV_01: 8 Motor_Diesel_MQB
SG_ WIV_W_max : 56|7@1+ (1000,0) [0|127000] "Unit_KiloMeter" Gateway_MQB
BO_ 294 HCA_01: 8 XXX
- SG_ 3 : 15|4@0+ (1,0) [0|15] "" XXX
- SG_ 7 : 55|8@0+ (1,0) [0|255] "" XXX
- SG_ 254 : 47|8@0+ (1,0) [0|255] "" XXX
- SG_ HCA_01_CRC : 7|8@0+ (1,0) [0|255] "" XXX
- SG_ HCA_01_BZ : 11|4@0+ (1,0) [0|255] "" XXX
- SG_ Assist_Requested : 30|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_0X3 : 12|4@1+ (1,0) [0|15] "" XXX
SG_ Assist_Torque : 16|14@1+ (1,0) [0|300] "Nm" XXX
- SG_ Assist_VZ : 31|1@0+ (1,0) [0|1] "" XXX
+ SG_ Assist_Requested : 30|1@1+ (1,0) [0|1] "" XXX
+ SG_ Assist_VZ : 31|1@1+ (1,0) [0|1] "" XXX
SG_ HCA_Available : 32|1@1+ (1,0) [0|1] "" XXX
- SG_ HCA_Standby : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ HCA_Active : 34|1@0+ (1,0) [0|1] "" XXX
+ SG_ HCA_Standby : 33|1@1+ (1,0) [0|1] "" XXX
+ SG_ HCA_Active : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ SET_ME_0XFE : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ SET_ME_0X07 : 48|8@1+ (1,0) [0|255] "" XXX
BO_ 159 EPS_01: 8 XXX
- SG_ EPS_01_CRC : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ EPS_01_BZ : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ Steering_Wheel_Angle : 16|13@1+ (0.075,0) [0|16383] "Unit_DegreOfArc" XXX
- SG_ Steering_Wheel_Angle_VZ : 31|1@0+ (1,0) [0|1] "" XXX
- SG_ HCA_Active : 34|1@0+ (1,0) [0|1] "" XXX
- SG_ HCA_Standby : 33|1@0+ (1,0) [0|1] "" XXX
- SG_ Unknown_Status2 : 63|1@0+ (1,0) [0|1] "" XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ Steering_Wheel_Angle : 16|13@1+ (0.15,0) [0|16383] "Unit_DegreOfArc" XXX
+ SG_ Steering_Wheel_Angle_VZ : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ HCA_Active : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ HCA_Standby : 33|1@1+ (1,0) [0|1] "" XXX
+ SG_ Unknown_Status2 : 63|1@1+ (1,0) [0|1] "" XXX
SG_ HCA_Ready : 32|1@1+ (1,0) [0|3] "" XXX
SG_ Driver_Strain : 40|13@1+ (1,0) [0|255] "Nm" XXX
SG_ Driver_Strain_VZ : 55|1@1+ (1,0) [0|1] "" XXX
- SG_ Unknown_Status1 : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ Unknown_Status1 : 62|1@1+ (1,0) [0|1] "" XXX
BO_ 286 VehicleSpeed: 8 XXX
SG_ VehicleSpeed_CRC : 0|8@1+ (1,0) [0|255] "" XXX
@@ -1190,16 +1215,20 @@ BO_ 286 VehicleSpeed: 8 XXX
BO_ 919 LDW_02: 8 XXX
SG_ LDW_DLC : 40|8@1+ (0.01,0) [0|255] "m" XXX
SG_ LDW_TLC : 48|5@1+ (0.05,0) [0|255] "Seconds" XXX
- SG_ LDW_Unknown : 15|2@0+ (1,0) [0|3] "" XXX
+ SG_ LDW_Unknown : 14|2@1+ (1,0) [0|3] "" XXX
SG_ Alert_Message : 16|4@1+ (1,0) [0|15] "" XXX
- SG_ LDW_Direction : 20|1@0+ (1,0) [0|1] "" XXX
+ SG_ LDW_Direction : 20|1@1+ (1,0) [0|1] "" XXX
SG_ Right_Lane_Status : 36|2@1+ (1,0) [0|3] "" XXX
SG_ Left_Lane_Status : 38|2@1+ (1,0) [0|3] "" XXX
- SG_ Kombi_Lamp_Orange : 61|1@0+ (1,0) [0|1] "" XXX
- SG_ Kombi_Lamp_Green : 62|1@0+ (1,0) [0|1] "" XXX
+ SG_ Kombi_Lamp_Orange : 61|1@1+ (1,0) [0|1] "" XXX
+ SG_ Kombi_Lamp_Green : 62|1@1+ (1,0) [0|1] "" XXX
BO_ 780 ACC_02: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ SetSpeed : 12|10@1+ (0.08865,0) [0|90.68] "Unit_MeterPerSecond" XXX
SG_ Kollision1 : 23|1@1+ (1,0) [0|1] "" XXX
+ SG_ Abstand : 24|10@1+ (0.1,0) [0|102.3] "m" XXX
SG_ ACC_MinusInv : 36|2@1+ (1,0) [0|3] "" XXX
SG_ ACC_Minus : 38|2@1+ (1,0) [0|3] "" XXX
SG_ Kollision2 : 40|1@1+ (1,0) [0|1] "" XXX
@@ -1212,10 +1241,6 @@ BO_ 780 ACC_02: 8 XXX
SG_ MotorbitB5_7 : 47|1@1+ (1,0) [0|1] "" XXX
SG_ SetAbstand : 48|4@1+ (1,0) [0|15] "" XXX
SG_ Hebel : 56|4@1+ (1,0) [0|15] "" XXX
- SG_ SetSpeed : 12|10@1+ (0.32,0) [0|320] "kmh" XXX
- SG_ Abstand : 24|10@1+ (0.1,0) [0|102.3] "m" XXX
- SG_ ACC_02_CRC : 0|8@1+ (1,0) [0|255] "" XXX
- SG_ ACC_02_BZ : 8|4@1+ (1,0) [0|15] "" XXX
BO_ 302 ACC_07: 8 XXX
SG_ ACC_07_BZ : 8|4@1+ (1,0) [0|15] "" XXX
@@ -1229,9 +1254,26 @@ BO_ 695 RCTA_01: 8 XXX
SG_ RCTA_01_BZ : 8|4@1+ (1,0) [0|15] "" XXX
SG_ RCTA_01_CRC : 0|8@1+ (1,0) [0|255] "" XXX
-BO_ 783 SWA_01: 8 XXX
- SG_ SWA_01_BZ : 8|4@1+ (1,0) [0|15] "" XXX
- SG_ SWA_01_CRC : 0|8@1+ (1,0) [0|255] "" XXX
+BO_ 783 SWA_01: 8 Gateway_MQB
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" Vector__XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" Vector__XXX
+ SG_ SWA_Anzeigen : 12|4@1+ (1,0) [0|15] "" Kombi_D4
+ SG_ SWA_Blindheit_erkannt : 16|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_rel_Nichtverf : 17|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_rel_Fehler : 18|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Sta_aktiv : 19|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Sta_passiv : 20|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Standziele_li : 24|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Kolonne_li : 25|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Infostufe_SWA_li : 26|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Warnung_SWA_li : 27|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Kolonne_mi : 33|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Standziele_re : 40|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Kolonne_re : 41|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Infostufe_SWA_re : 42|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Warnung_SWA_re : 43|1@1+ (1,0) [0|1] "" Vector__XXX
+ SG_ SWA_Gischtzaehler : 48|7@1+ (1,0) [0|100] "Unit_PerCent" Vector__XXX
+ SG_ SWA_KD_Fehler : 59|1@1+ (1,0) [0|1] "" Vector__XXX
BO_ 804 ACC_04: 8 XXX
SG_ ACC_04_CRC : 0|8@1+ (1,0) [0|255] "" XXX
@@ -1251,9 +1293,47 @@ BO_ 427 ESP_33: 8 XXX
SG_ ESP_33_BZ : 8|4@1+ (1,0) [0|15] "" XXX
SG_ ESP_33_CRC : 0|8@1+ (1,0) [0|255] "" XXX
+BO_ 418 ESP_15: 8 XXX
+ SG_ ESP_15_CRC : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ ESP_15_BZ : 8|4@1+ (1,0) [0|15] "" XXX
+
+BO_ 1122 PSD_04: 8 XXX
+ SG_ PSD_Object_Index : 0|6@1+ (1,0) [0|63] "" XXX
+
+BO_ 1123 PSD_05: 8 XXX
+ SG_ PSD_Current_Route_Index : 0|6@1+ (1,0) [0|63] "" XXX
+ SG_ Route_Distance_Remaining : 8|5@1+ (1,0) [0|31] "" XXX
+
+BO_ 1124 PSD_06: 8 XXX
+BO_ 988 Gateway_73: 8 XXX
+BO_ 792 Kamera_Status: 8 XXX
+BO_ 981 Licht_Anf_01: 8 XXX
+
+BO_ 1440 RLS_01: 8 XXX
+
+BO_ 870 Blinkmodi_02: 8 XXX
+
+BO_ 1385 HVEM_04: 8 XXX
+
+BO_ 1605 FLA_01: 8 XXX
+
+BO_ 1624 Licht_vorne_01: 8 XXX
+
+BO_ 1646 Klima_03: 8 XXX
+
+BO_ 1720 Kombi_03: 8 XXX
+
+BO_ 391 EV_Gearshift: 8 XXX
+ SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
+ SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX
+ SG_ GearPosition : 16|4@1+ (1,0) [0|255] "" XXX
+ SG_ RegenBrakingMode : 12|2@1+ (1,0) [0|3] "" XXX
+
+CM_ SG_ 173 COUNTERXX "Message not renamed to COUNTER because J533 rate-limiting makes it look like messages are being lost";
+CM_ SG_ 134 LWI_Lenkradwinkel "Steering angle WITH variable ratio effect included";
CM_ SG_ 294 3 "May be zero when sent by older cameras";
CM_ SG_ 294 7 "May be zero when sent by older cameras";
CM_ SG_ 294 254 "May be zero when sent by older cameras";
@@ -1263,6 +1343,7 @@ CM_ SG_ 294 HCA_Available "Must be 1 for steering rack to accept HCA commands";
CM_ SG_ 159 HCA_Ready "1 if HCA is okay, 0 if the rack doesn't have HCA configured or a timer/constraint has been violated, rack will not respond to HCA commands";
CM_ SG_ 159 Driver_Strain "Steering input by driver, torque";
CM_ SG_ 159 Driver_Strain_VZ "Steering input by driver, sign (direction)";
+CM_ SG_ 159 Steering_Wheel_Angle "Steering angle WITHOUT variable ratio effect included";
CM_ SG_ 919 LDW_DLC "Probable DLC (distance to line crossing)";
CM_ SG_ 919 LDW_TLC "Probable TLC (time to line crossing)";
CM_ SG_ 919 LDW_Unknown "Might be a steering pressed / driver active flag";
@@ -1274,6 +1355,10 @@ CM_ SG_ 919 Kombi_Lamp_Orange "Enables orange LDW light in instrument cluster";
CM_ SG_ 919 Kombi_Lamp_Green "Enables green LDW light in instrument cluster";
CM_ SG_ 780 Folgefahrt "Following another vehicle";
CM_ SG_ 780 SetAbstand "Set following distance";
-CM_ SG_ 780 SetSpeed "ACC set speed";
CM_ SG_ 780 Abstand "Following distance";
-VAL_ 173 GE_Fahrstufe 5 "P" 6 "R" 7 "N" 8 "D" 9 "S" 10 "E" 14 "T" ;
+CM_ SG_ 780 SetSpeed "ACC set speed";
+CM_ SG_ 391 GearPosition "Traditional PRND plus B-mode aggressive regen, B-mode mapped to Drive";
+CM_ SG_ 960 ZAS_Kl_15 "Indicates ignition on";
+VAL_ 173 GE_Fahrstufe 5 "P" 6 "R" 7 "N" 8 "D" 9 "S" 10 "E" 14 "T";
+VAL_ 391 GearPosition 2 "P" 3 "R" 4 "N" 5 "D" 6 "D";
+VAL_ 391 RegenBrakingMode 0 "default" 1 "B1" 2 "B2" 3 "B3";
diff --git a/panda/.circleci/config.yml b/panda/.circleci/config.yml
deleted file mode 100644
index d74c1a20e09686..00000000000000
--- a/panda/.circleci/config.yml
+++ /dev/null
@@ -1,103 +0,0 @@
-version: 2
-jobs:
- safety:
- machine:
- docker_layer_caching: true
- steps:
- - checkout
- - run:
- name: Build image
- command: "docker build -t panda_safety -f tests/safety/Dockerfile ."
- - run:
- name: Run safety test
- command: |
- docker run panda_safety /bin/bash -c "cd /panda/tests/safety; ./test.sh"
-
- misra-c2012:
- machine:
- docker_layer_caching: true
- steps:
- - checkout
- - run:
- name: Build image
- command: "docker build -t panda_misra -f tests/misra/Dockerfile ."
- - run:
- name: Run Misra C 2012 test
- command: |
- mkdir /tmp/misra
- docker run -v /tmp/misra:/tmp/misra panda_misra /bin/bash -c "cd /panda/tests/misra; ./test_misra.sh"
- - store_artifacts:
- name: Store cppcheck test output
- path: /tmp/misra/cppcheck_output.txt
- - store_artifacts:
- name: Store misra test output
- path: /tmp/misra/misra_output.txt
-
- build:
- machine:
- docker_layer_caching: true
- steps:
- - checkout
- - run:
- name: Build image
- command: "docker build -t panda_build -f tests/build/Dockerfile ."
- - run:
- name: Test python package installer
- command: |
- docker run panda_build /bin/bash -c "cd /panda; python setup.py install"
- - run:
- name: Build Panda STM image
- command: |
- docker run panda_build /bin/bash -c "cd /panda/board; make bin"
- - run:
- name: Build Panda STM bootstub image
- command: |
- docker run panda_build /bin/bash -c "cd /panda/board; make obj/bootstub.panda.bin"
- - run:
- name: Build Pedal STM image
- command: |
- docker run panda_build /bin/bash -c "cd /panda/board/pedal; make obj/comma.bin"
- - run:
- name: Build Pedal STM bootstub image
- command: |
- docker run panda_build /bin/bash -c "cd /panda/board/pedal; make obj/bootstub.bin"
- - run:
- name: Build ESP image
- command: |
- docker run panda_build /bin/bash -c "cd /panda/boardesp; make user1.bin"
-
- safety_replay:
- machine:
- docker_layer_caching: true
- steps:
- - checkout
- - run:
- name: Build image
- command: "docker build -t panda_safety_replay -f tests/safety_replay/Dockerfile ."
- - run:
- name: Replay drives
- command: |
- docker run panda_safety_replay /bin/bash -c "cd /openpilot/panda/tests/safety_replay; PYTHONPATH=/openpilot ./test_safety_replay.py"
-
- language_check:
- machine:
- docker_layer_caching: true
- steps:
- - checkout
- - run:
- name: Build image
- command: "docker build -t language_check -f tests/language/Dockerfile ."
- - run:
- name: Check code for bad language
- command: |
- docker run language_check /bin/bash -c "cd /panda/tests/language; ./test_language.py"
-
-workflows:
- version: 2
- main:
- jobs:
- - safety
- - misra-c2012
- - build
- - safety_replay
- - language_check
diff --git a/panda/.dockerignore b/panda/.dockerignore
deleted file mode 100644
index f04ae5c0aa6892..00000000000000
--- a/panda/.dockerignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.git
-.DS_Store
-boardesp/esp-open-sdk
diff --git a/panda/.gitignore b/panda/.gitignore
index 70d010fabf3d7f..503ce91c7f0992 100644
--- a/panda/.gitignore
+++ b/panda/.gitignore
@@ -4,6 +4,7 @@
*.o
*.so
*.d
+*.dump
a.out
*~
.#*
@@ -12,4 +13,6 @@ pandacan.egg-info/
board/obj/
examples/output.csv
.DS_Store
+.vscode
nosetests.xml
+.mypy_cache/
diff --git a/panda/Dockerfile b/panda/Dockerfile
deleted file mode 100644
index 1a0d924661d6ce..00000000000000
--- a/panda/Dockerfile
+++ /dev/null
@@ -1,62 +0,0 @@
-FROM ubuntu:16.04
-ENV PYTHONUNBUFFERED 1
-
-RUN apt-get update && apt-get install -y \
- autoconf \
- automake \
- bash \
- bison \
- bzip2 \
- curl \
- dfu-util \
- flex \
- g++ \
- gawk \
- gcc \
- git \
- gperf \
- help2man \
- iputils-ping \
- libexpat-dev \
- libstdc++-arm-none-eabi-newlib \
- libtool \
- libtool-bin \
- libusb-1.0-0 \
- make \
- ncurses-dev \
- network-manager \
- python-dev \
- python-serial \
- sed \
- texinfo \
- unrar-free \
- unzip \
- wget \
- build-essential \
- python-dev \
- python-pip \
- screen \
- vim \
- wget \
- wireless-tools
-
-RUN pip install --upgrade pip==18.0
-
-COPY requirements.txt /tmp/
-RUN pip install -r /tmp/requirements.txt
-
-RUN mkdir -p /home/batman
-ENV HOME /home/batman
-
-ENV PYTHONPATH /tmp:$PYTHONPATH
-
-COPY ./boardesp/get_sdk_ci.sh /tmp/panda/boardesp/
-
-RUN useradd --system -s /sbin/nologin pandauser
-RUN mkdir -p /tmp/panda/boardesp/esp-open-sdk
-RUN chown pandauser /tmp/panda/boardesp/esp-open-sdk
-USER pandauser
-RUN cd /tmp/panda/boardesp && ./get_sdk_ci.sh
-USER root
-
-ADD ./panda.tar.gz /tmp/panda
diff --git a/panda/Jenkinsfile b/panda/Jenkinsfile
deleted file mode 100644
index 19dc3d4c80863c..00000000000000
--- a/panda/Jenkinsfile
+++ /dev/null
@@ -1,73 +0,0 @@
-pipeline {
- agent any
- environment {
- AUTHOR = """${sh(
- returnStdout: true,
- script: "git --no-pager show -s --format='%an' ${GIT_COMMIT}"
- ).trim()}"""
-
- DOCKER_IMAGE_TAG = "panda:build-${env.GIT_COMMIT}"
- DOCKER_NAME = "panda-test-${env.GIT_COMMIT}"
- }
- stages {
- stage('Build Docker Image') {
- steps {
- timeout(time: 60, unit: 'MINUTES') {
- script {
- sh 'git archive -v -o panda.tar.gz --format=tar.gz HEAD'
- dockerImage = docker.build("${env.DOCKER_IMAGE_TAG}")
- }
- }
- }
- }
- stage('Test Dev Build (no WIFI)') {
- steps {
- lock(resource: "Pandas", inversePrecedence: true, quantity: 1){
- timeout(time: 60, unit: 'MINUTES') {
- script {
- sh "docker run --name ${env.DOCKER_NAME} --privileged --volume /dev/bus/usb:/dev/bus/usb --volume /var/run/dbus:/var/run/dbus --net host ${env.DOCKER_IMAGE_TAG} bash -c 'cd /tmp/panda; SKIPWIFI=1 ./run_automated_tests.sh'"
- sh "docker cp ${env.DOCKER_NAME}:/tmp/panda/nosetests.xml test_results_dev_nowifi.xml"
- sh "docker rm ${env.DOCKER_NAME}"
- }
- }
- }
- }
- }
- stage('Test EON Build') {
- steps {
- lock(resource: "Pandas", inversePrecedence: true, quantity: 1){
- timeout(time: 60, unit: 'MINUTES') {
- script {
- sh "docker run --name ${env.DOCKER_NAME} --privileged --volume /dev/bus/usb:/dev/bus/usb --volume /var/run/dbus:/var/run/dbus --net host ${env.DOCKER_IMAGE_TAG} bash -c 'touch /EON; cd /tmp/panda; ./run_automated_tests.sh'"
- sh "docker cp ${env.DOCKER_NAME}:/tmp/panda/nosetests.xml test_results_eon.xml"
- sh "docker rm ${env.DOCKER_NAME}"
- }
- }
- }
- }
- }
- stage('Test Dev Build (WIFI)') {
- steps {
- lock(resource: "Pandas", inversePrecedence: true, quantity: 1){
- timeout(time: 60, unit: 'MINUTES') {
- script {
- sh "docker run --name ${env.DOCKER_NAME} --privileged --volume /dev/bus/usb:/dev/bus/usb --volume /var/run/dbus:/var/run/dbus --net host ${env.DOCKER_IMAGE_TAG} bash -c 'cd /tmp/panda; ./run_automated_tests.sh'"
- sh "docker cp ${env.DOCKER_NAME}:/tmp/panda/nosetests.xml test_results_dev.xml"
- sh "docker rm ${env.DOCKER_NAME}"
- }
- }
- }
- }
- }
- }
- post {
- failure {
- script {
- sh "docker rm ${env.DOCKER_NAME} || true"
- }
- }
- always {
- junit "test_results*.xml"
- }
- }
-}
diff --git a/panda/LICENSE b/panda/LICENSE
deleted file mode 100644
index 8a6c6976b70de3..00000000000000
--- a/panda/LICENSE
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2016, Comma.ai, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/panda/README.md b/panda/README.md
deleted file mode 100644
index 42f432dfc32a38..00000000000000
--- a/panda/README.md
+++ /dev/null
@@ -1,95 +0,0 @@
-Welcome to panda
-======
-
-[panda](http://github.com/commaai/panda) is the nicest universal car interface ever.
-
-
-
-
-
-It supports 3x CAN, 2x LIN, and 1x GMLAN. It also charges a phone. On the computer side, it has both USB and Wi-Fi.
-
-It uses an [STM32F413](http://www.st.com/en/microcontrollers/stm32f413-423.html?querycriteria=productId=LN2004) for low level stuff and an [ESP8266](https://en.wikipedia.org/wiki/ESP8266) for Wi-Fi. They are connected over high speed SPI, so the panda is actually capable of dumping the full contents of the busses over Wi-Fi, unlike every other dongle on amazon. ELM327 is weak, panda is strong.
-
-It is 2nd gen hardware, reusing code and parts from the [NEO](https://github.com/commaai/neo) interface board.
-
-[![CircleCI](https://circleci.com/gh/commaai/panda.svg?style=svg)](https://circleci.com/gh/commaai/panda)
-
-Usage (Python)
-------
-
-To install the library:
-```
-# pip install pandacan
-```
-
-See [this class](https://github.com/commaai/panda/blob/master/python/__init__.py#L80) for how to interact with the panda.
-
-For example, to receive CAN messages:
-```
->>> from panda import Panda
->>> panda = Panda()
->>> panda.can_recv()
-```
-And to send one on bus 0:
-```
->>> panda.can_send(0x1aa, "message", 0)
-```
-Find user made scripts on the [wiki](https://community.comma.ai/wiki/index.php/Panda_scripts)
-
-Usage (JavaScript)
--------
-
-See [PandaJS](https://github.com/commaai/pandajs)
-
-
-Software interface support
-------
-
-As a universal car interface, it should support every reasonable software interface.
-
-- [User space](https://github.com/commaai/panda/tree/master/python)
-- [socketcan in kernel](https://github.com/commaai/panda/tree/master/drivers/linux) (alpha)
-- [ELM327](https://github.com/commaai/panda/blob/master/boardesp/elm327.c)
-- [Windows J2534](https://github.com/commaai/panda/tree/master/drivers/windows)
-
-Directory structure
-------
-
-- board -- Code that runs on the STM32
-- boardesp -- Code that runs on the ESP8266
-- drivers -- Drivers (not needed for use with python)
-- python  -- Python userspace library for interfacing with the panda
-- tests -- Tests and helper programs for panda
-
-Programming (over USB)
-------
-
-[Programming the Board (STM32)](board/README.md)
-
-[Programming the ESP](boardesp/README.md)
-
-
-Debugging
-------
-
-To print out the serial console from the STM32, run tests/debug_console.py
-
-To print out the serial console from the ESP8266, run PORT=1 tests/debug_console.py
-
-Safety Model
-------
-
-When a panda powers up, by default it's in "SAFETY_NOOUTPUT" mode. While in no output 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.
-
-Safety modes can also optionally support "controls_allowed", which allows or blocks a subset of messages based on a piece of state in the board.
-
-Hardware
-------
-
-Check out the hardware [guide](https://github.com/commaai/panda/blob/master/docs/guide.pdf)
-
-Licensing
-------
-
-panda software is released under the MIT license unless otherwise specified.
diff --git a/panda/TODO b/panda/TODO
deleted file mode 100644
index 4e4a3551549dc1..00000000000000
--- a/panda/TODO
+++ /dev/null
@@ -1,31 +0,0 @@
-** Projects **
-
-== ELM327 Emulator ==
-
-Write an elm327 emulator in boardesp/elm327.c and make it work with Torque
-
-You'll find a start at this in the "elm327" branch.
-
-== socketcan Kernel Driver ==
-
-Write a kernel driver version of lib/panda.py that exposes the Panda on socketcan and makes it work with those tools.
-
-You may want to switch to interrupt endpoint first. Should LIN be exposed as a serial interface?
-
-== Windows J2534 DLL ==
-
-Write a Windows DLL that exposes the J2534 API.
-
-Will make the Panda work with car diagnostic software.
-
-
-** Refactors **
-
-== USB Interrupt Endpoint ==
-
-Switch USB to use an interrupt endpoint instead of a bulk endpoint for can recv
-
-== WebSocket Support ==
-
-Add CAN streaming over WebSocket to the ELM code in addition to the UDP pipe.
-
diff --git a/panda/UPDATING.md b/panda/UPDATING.md
deleted file mode 100644
index 100acc6bab5fbc..00000000000000
--- a/panda/UPDATING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Updating your panda
-
-Panda should update automatically via the [Chffr](http://chffr.comma.ai/) app ([apple](https://itunes.apple.com/us/app/chffr-dash-cam-that-remembers/id1146683979) and [android](https://play.google.com/store/apps/details?id=ai.comma.chffr))
-
-If it doesn't however, you can use the following commands on linux or Mac OSX
- `sudo pip install --upgrade pandacan`
-` PYTHONPATH="" sudo python -c "import panda; panda.flash_release()"`
-
-(You'll need to have `pip` and `sudo` installed.)
diff --git a/panda/VERSION b/panda/VERSION
index 5beebea89c0857..ad90322ab87e78 100644
--- a/panda/VERSION
+++ b/panda/VERSION
@@ -1 +1 @@
-v1.4.3
\ No newline at end of file
+v1.7.5
\ No newline at end of file
diff --git a/panda/__init__.py b/panda/__init__.py
index b802cf5a59582a..09466ddd579f72 100644
--- a/panda/__init__.py
+++ b/panda/__init__.py
@@ -1 +1,3 @@
-from .python import Panda, PandaWifiStreaming, PandaDFU, ESPROM, CesantaFlasher, flash_release, BASEDIR, ensure_st_up_to_date, build_st, PandaSerial
+# flake8: noqa
+# pylint: skip-file
+from .python import Panda, PandaWifiStreaming, PandaDFU, flash_release, BASEDIR, ensure_st_up_to_date, build_st, PandaSerial
diff --git a/panda/board/README.md b/panda/board/README.md
index 5fe2e4b238c2dd..7151bfbf93e32a 100644
--- a/panda/board/README.md
+++ b/panda/board/README.md
@@ -4,6 +4,7 @@ Dependencies
**Mac**
```
+xcode-select --install
./get_sdk_mac.sh
```
diff --git a/panda/board/board.h b/panda/board/board.h
index 5379f94643bb04..19392c9eaa2dc6 100644
--- a/panda/board/board.h
+++ b/panda/board/board.h
@@ -7,22 +7,35 @@
// ///// Board definition and detection ///// //
#include "drivers/harness.h"
#ifdef PANDA
+ #include "drivers/fan.h"
+ #include "drivers/rtc.h"
+ #include "drivers/clock_source.h"
#include "boards/white.h"
#include "boards/grey.h"
#include "boards/black.h"
+ #include "boards/uno.h"
+ #include "boards/dos.h"
#else
#include "boards/pedal.h"
#endif
void detect_board_type(void) {
#ifdef PANDA
- // SPI lines floating: white (TODO: is this reliable?)
- if((detect_with_pull(GPIOA, 4, PULL_DOWN)) || (detect_with_pull(GPIOA, 5, PULL_DOWN)) || (detect_with_pull(GPIOA, 6, PULL_DOWN)) || (detect_with_pull(GPIOA, 7, PULL_DOWN))){
+ // SPI lines floating: white (TODO: is this reliable? Not really, we have to enable ESP/GPS to be able to detect this on the UART)
+ set_gpio_output(GPIOC, 14, 1);
+ set_gpio_output(GPIOC, 5, 1);
+ if(!detect_with_pull(GPIOB, 1, PULL_UP) && !detect_with_pull(GPIOB, 7, PULL_UP)){
+ hw_type = HW_TYPE_DOS;
+ current_board = &board_dos;
+ } else if((detect_with_pull(GPIOA, 4, PULL_DOWN)) || (detect_with_pull(GPIOA, 5, PULL_DOWN)) || (detect_with_pull(GPIOA, 6, PULL_DOWN)) || (detect_with_pull(GPIOA, 7, PULL_DOWN))){
hw_type = HW_TYPE_WHITE_PANDA;
current_board = &board_white;
} else if(detect_with_pull(GPIOA, 13, PULL_DOWN)) { // Rev AB deprecated, so no pullup means black. In REV C, A13 is pulled up to 5V with a 10K
hw_type = HW_TYPE_GREY_PANDA;
current_board = &board_grey;
+ } else if(!detect_with_pull(GPIOB, 15, PULL_UP)) {
+ hw_type = HW_TYPE_UNO;
+ current_board = &board_uno;
} else {
hw_type = HW_TYPE_BLACK_PANDA;
current_board = &board_black;
@@ -31,7 +44,7 @@ void detect_board_type(void) {
#ifdef PEDAL
hw_type = HW_TYPE_PEDAL;
current_board = &board_pedal;
- #else
+ #else
hw_type = HW_TYPE_UNKNOWN;
puts("Hardware type is UNKNOWN!\n");
#endif
@@ -41,21 +54,34 @@ void detect_board_type(void) {
// ///// Configuration detection ///// //
bool has_external_debug_serial = 0;
-bool is_entering_bootmode = 0;
void detect_configuration(void) {
// detect if external serial debugging is present
has_external_debug_serial = detect_with_pull(GPIOA, 3, PULL_DOWN);
-
- #ifdef PANDA
- // check if the ESP is trying to put me in boot mode
- is_entering_bootmode = !detect_with_pull(GPIOB, 0, PULL_UP);
- #else
- is_entering_bootmode = 0;
- #endif
}
// ///// Board functions ///// //
+// TODO: Make these config options in the board struct
bool board_has_gps(void) {
- return ((hw_type == HW_TYPE_GREY_PANDA) || (hw_type == HW_TYPE_BLACK_PANDA));
+ return ((hw_type == HW_TYPE_GREY_PANDA) || (hw_type == HW_TYPE_BLACK_PANDA) || (hw_type == HW_TYPE_UNO));
+}
+
+bool board_has_gmlan(void) {
+ return ((hw_type == HW_TYPE_WHITE_PANDA) || (hw_type == HW_TYPE_GREY_PANDA));
+}
+
+bool board_has_obd(void) {
+ return ((hw_type == HW_TYPE_BLACK_PANDA) || (hw_type == HW_TYPE_UNO) || (hw_type == HW_TYPE_DOS));
+}
+
+bool board_has_lin(void) {
+ return ((hw_type == HW_TYPE_WHITE_PANDA) || (hw_type == HW_TYPE_GREY_PANDA));
+}
+
+bool board_has_rtc(void) {
+ return ((hw_type == HW_TYPE_UNO) || (hw_type == HW_TYPE_DOS));
+}
+
+bool board_has_relay(void) {
+ return ((hw_type == HW_TYPE_BLACK_PANDA) || (hw_type == HW_TYPE_UNO) || (hw_type == HW_TYPE_DOS));
}
diff --git a/panda/board/board_declarations.h b/panda/board/board_declarations.h
index 7a44113f613bf2..963539e00805af 100644
--- a/panda/board/board_declarations.h
+++ b/panda/board/board_declarations.h
@@ -1,51 +1,65 @@
// ******************** Prototypes ********************
typedef void (*board_init)(void);
-typedef void (*board_enable_can_transciever)(uint8_t transciever, bool enabled);
-typedef void (*board_enable_can_transcievers)(bool enabled);
+typedef void (*board_enable_can_transceiver)(uint8_t transceiver, bool enabled);
+typedef void (*board_enable_can_transceivers)(bool enabled);
typedef void (*board_set_led)(uint8_t color, bool enabled);
typedef void (*board_set_usb_power_mode)(uint8_t mode);
-typedef void (*board_set_esp_gps_mode)(uint8_t mode);
+typedef void (*board_set_gps_mode)(uint8_t mode);
typedef void (*board_set_can_mode)(uint8_t mode);
-typedef void (*board_usb_power_mode_tick)(uint64_t tcnt);
+typedef void (*board_usb_power_mode_tick)(uint32_t uptime);
typedef bool (*board_check_ignition)(void);
+typedef uint32_t (*board_read_current)(void);
+typedef void (*board_set_ir_power)(uint8_t percentage);
+typedef void (*board_set_fan_power)(uint8_t percentage);
+typedef void (*board_set_phone_power)(bool enabled);
+typedef void (*board_set_clock_source_mode)(uint8_t mode);
+typedef void (*board_set_siren)(bool enabled);
struct board {
const char *board_type;
const harness_configuration *harness_config;
board_init init;
- board_enable_can_transciever enable_can_transciever;
- board_enable_can_transcievers enable_can_transcievers;
+ board_enable_can_transceiver enable_can_transceiver;
+ board_enable_can_transceivers enable_can_transceivers;
board_set_led set_led;
board_set_usb_power_mode set_usb_power_mode;
- board_set_esp_gps_mode set_esp_gps_mode;
+ board_set_gps_mode set_gps_mode;
board_set_can_mode set_can_mode;
board_usb_power_mode_tick usb_power_mode_tick;
board_check_ignition check_ignition;
+ board_read_current read_current;
+ board_set_ir_power set_ir_power;
+ board_set_fan_power set_fan_power;
+ board_set_phone_power set_phone_power;
+ board_set_clock_source_mode set_clock_source_mode;
+ board_set_siren set_siren;
};
// ******************* Definitions ********************
-// These should match the enum in cereal/log.capnp
+// These should match the enums in cereal/log.capnp and __init__.py
#define HW_TYPE_UNKNOWN 0U
#define HW_TYPE_WHITE_PANDA 1U
#define HW_TYPE_GREY_PANDA 2U
#define HW_TYPE_BLACK_PANDA 3U
#define HW_TYPE_PEDAL 4U
+#define HW_TYPE_UNO 5U
+#define HW_TYPE_DOS 6U
// LED colors
#define LED_RED 0U
#define LED_GREEN 1U
#define LED_BLUE 2U
-// USB power modes
+// USB power modes (from cereal.log.health)
#define USB_POWER_NONE 0U
#define USB_POWER_CLIENT 1U
#define USB_POWER_CDP 2U
#define USB_POWER_DCP 3U
-// ESP modes
-#define ESP_GPS_DISABLED 0U
-#define ESP_GPS_ENABLED 1U
-#define ESP_GPS_BOOTMODE 2U
+// GPS modes
+#define GPS_DISABLED 0U
+#define GPS_ENABLED 1U
+#define GPS_BOOTMODE 2U
// CAN modes
#define CAN_MODE_NORMAL 0U
@@ -54,4 +68,12 @@ struct board {
#define CAN_MODE_OBD_CAN2 3U
// ********************* Globals **********************
-uint8_t usb_power_mode = USB_POWER_NONE;
\ No newline at end of file
+uint8_t usb_power_mode = USB_POWER_NONE;
+
+// ************ Board function prototypes *************
+bool board_has_gps(void);
+bool board_has_gmlan(void);
+bool board_has_obd(void);
+bool board_has_lin(void);
+bool board_has_rtc(void);
+bool board_has_relay(void);
diff --git a/panda/board/boards/black.h b/panda/board/boards/black.h
index 0372aa3d079ae2..fa5a542d05dd4e 100644
--- a/panda/board/boards/black.h
+++ b/panda/board/boards/black.h
@@ -2,8 +2,8 @@
// Black Panda + Harness //
// ///////////////////// //
-void black_enable_can_transciever(uint8_t transciever, bool enabled) {
- switch (transciever){
+void black_enable_can_transceiver(uint8_t transceiver, bool enabled) {
+ switch (transceiver){
case 1U:
set_gpio_output(GPIOC, 1, !enabled);
break;
@@ -17,14 +17,20 @@ void black_enable_can_transciever(uint8_t transciever, bool enabled) {
set_gpio_output(GPIOB, 10, !enabled);
break;
default:
- puts("Invalid CAN transciever ("); puth(transciever); puts("): enabling failed\n");
+ puts("Invalid CAN transceiver ("); puth(transceiver); puts("): enabling failed\n");
break;
}
}
-void black_enable_can_transcievers(bool enabled) {
- for(uint8_t i=1; i<=4U; i++)
- black_enable_can_transciever(i, enabled);
+void black_enable_can_transceivers(bool enabled) {
+ for(uint8_t i=1U; i<=4U; i++){
+ // Leave main CAN always on for CAN-based ignition detection
+ if((car_harness_status == HARNESS_STATUS_FLIPPED) ? (i == 3U) : (i == 1U)){
+ black_enable_can_transceiver(i, true);
+ } else {
+ black_enable_can_transceiver(i, enabled);
+ }
+ }
}
void black_set_led(uint8_t color, bool enabled) {
@@ -37,35 +43,58 @@ void black_set_led(uint8_t color, bool enabled) {
break;
case LED_BLUE:
set_gpio_output(GPIOC, 6, !enabled);
- break;
+ break;
default:
break;
}
}
-void black_set_usb_power_mode(uint8_t mode){
- usb_power_mode = mode;
- puts("Trying to set USB power mode on black panda. This is not supported.\n");
+void black_set_gps_load_switch(bool enabled) {
+ set_gpio_output(GPIOC, 12, enabled);
+}
+
+void black_set_usb_load_switch(bool enabled) {
+ set_gpio_output(GPIOB, 1, !enabled);
+}
+
+void black_set_usb_power_mode(uint8_t mode) {
+ bool valid = false;
+ switch (mode) {
+ case USB_POWER_CLIENT:
+ black_set_usb_load_switch(false);
+ valid = true;
+ break;
+ case USB_POWER_CDP:
+ black_set_usb_load_switch(true);
+ valid = true;
+ break;
+ default:
+ puts("Invalid USB power mode\n");
+ break;
+ }
+ if (valid) {
+ usb_power_mode = mode;
+ }
}
-void black_set_esp_gps_mode(uint8_t mode) {
+void black_set_gps_mode(uint8_t mode) {
switch (mode) {
- case ESP_GPS_DISABLED:
- // ESP OFF
+ case GPS_DISABLED:
+ // GPS OFF
set_gpio_output(GPIOC, 14, 0);
set_gpio_output(GPIOC, 5, 0);
break;
- case ESP_GPS_ENABLED:
- // ESP ON
+ case GPS_ENABLED:
+ // GPS ON
set_gpio_output(GPIOC, 14, 1);
set_gpio_output(GPIOC, 5, 1);
break;
- case ESP_GPS_BOOTMODE:
+ case GPS_BOOTMODE:
set_gpio_output(GPIOC, 14, 1);
set_gpio_output(GPIOC, 5, 0);
break;
default:
- puts("Invalid ESP/GPS mode\n");
+ puts("Invalid GPS mode\n");
break;
}
}
@@ -74,7 +103,7 @@ void black_set_can_mode(uint8_t mode){
switch (mode) {
case CAN_MODE_NORMAL:
case CAN_MODE_OBD_CAN2:
- if ((bool)(mode == CAN_MODE_NORMAL) != (bool)(car_harness_status == HARNESS_STATUS_NORMAL)) {
+ if ((bool)(mode == CAN_MODE_NORMAL) != (bool)(car_harness_status == HARNESS_STATUS_FLIPPED)) {
// B12,B13: disable OBD mode
set_gpio_mode(GPIOB, 12, MODE_INPUT);
set_gpio_mode(GPIOB, 13, MODE_INPUT);
@@ -90,7 +119,7 @@ void black_set_can_mode(uint8_t mode){
// B12,B13: OBD mode
set_gpio_alternate(GPIOB, 12, GPIO_AF9_CAN2);
set_gpio_alternate(GPIOB, 13, GPIO_AF9_CAN2);
- }
+ }
break;
default:
puts("Tried to set unsupported CAN mode: "); puth(mode); puts("\n");
@@ -98,8 +127,8 @@ void black_set_can_mode(uint8_t mode){
}
}
-void black_usb_power_mode_tick(uint64_t tcnt){
- UNUSED(tcnt);
+void black_usb_power_mode_tick(uint32_t uptime){
+ UNUSED(uptime);
// Not applicable
}
@@ -108,6 +137,31 @@ bool black_check_ignition(void){
return harness_check_ignition();
}
+uint32_t black_read_current(void){
+ // No current sense on black panda
+ return 0U;
+}
+
+void black_set_ir_power(uint8_t percentage){
+ UNUSED(percentage);
+}
+
+void black_set_fan_power(uint8_t percentage){
+ UNUSED(percentage);
+}
+
+void black_set_phone_power(bool enabled){
+ UNUSED(enabled);
+}
+
+void black_set_clock_source_mode(uint8_t mode){
+ UNUSED(mode);
+}
+
+void black_set_siren(bool enabled){
+ UNUSED(enabled);
+}
+
void black_init(void) {
common_init_gpio();
@@ -120,6 +174,9 @@ void black_init(void) {
set_gpio_mode(GPIOC, 0, MODE_ANALOG);
set_gpio_mode(GPIOC, 3, MODE_ANALOG);
+ // Set default state of GPS
+ current_board->set_gps_mode(GPS_ENABLED);
+
// C10: OBD_SBU1_RELAY (harness relay driving output)
// C11: OBD_SBU2_RELAY (harness relay driving output)
set_gpio_mode(GPIOC, 10, MODE_OUTPUT);
@@ -129,18 +186,20 @@ void black_init(void) {
set_gpio_output(GPIOC, 10, 1);
set_gpio_output(GPIOC, 11, 1);
- // C8: FAN aka TIM3_CH3
- set_gpio_alternate(GPIOC, 8, GPIO_AF2_TIM3);
+ // Turn on GPS load switch.
+ black_set_gps_load_switch(true);
+
+ // Turn on USB load switch.
+ black_set_usb_load_switch(true);
- // C12: GPS load switch. Turn on permanently for now
- set_gpio_output(GPIOC, 12, true);
- //set_gpio_output(GPIOC, 12, false); //TODO: stupid inverted switch on prototype
+ // Set right power mode
+ black_set_usb_power_mode(USB_POWER_CDP);
// Initialize harness
harness_init();
- // Enable CAN transcievers
- black_enable_can_transcievers(true);
+ // Enable CAN transceivers
+ black_enable_can_transceivers(true);
// Disable LEDs
black_set_led(LED_RED, false);
@@ -151,7 +210,7 @@ void black_init(void) {
black_set_can_mode(CAN_MODE_NORMAL);
// flip CAN0 and CAN2 if we are flipped
- if (car_harness_status == HARNESS_STATUS_NORMAL) {
+ if (car_harness_status == HARNESS_STATUS_FLIPPED) {
can_flip_buses(0, 2);
}
@@ -163,12 +222,12 @@ const harness_configuration black_harness_config = {
.has_harness = true,
.GPIO_SBU1 = GPIOC,
.GPIO_SBU2 = GPIOC,
- .GPIO_relay_normal = GPIOC,
- .GPIO_relay_flipped = GPIOC,
+ .GPIO_relay_SBU1 = GPIOC,
+ .GPIO_relay_SBU2 = GPIOC,
.pin_SBU1 = 0,
.pin_SBU2 = 3,
- .pin_relay_normal = 10,
- .pin_relay_flipped = 11,
+ .pin_relay_SBU1 = 10,
+ .pin_relay_SBU2 = 11,
.adc_channel_SBU1 = 10,
.adc_channel_SBU2 = 13
};
@@ -177,12 +236,18 @@ const board board_black = {
.board_type = "Black",
.harness_config = &black_harness_config,
.init = black_init,
- .enable_can_transciever = black_enable_can_transciever,
- .enable_can_transcievers = black_enable_can_transcievers,
+ .enable_can_transceiver = black_enable_can_transceiver,
+ .enable_can_transceivers = black_enable_can_transceivers,
.set_led = black_set_led,
.set_usb_power_mode = black_set_usb_power_mode,
- .set_esp_gps_mode = black_set_esp_gps_mode,
+ .set_gps_mode = black_set_gps_mode,
.set_can_mode = black_set_can_mode,
.usb_power_mode_tick = black_usb_power_mode_tick,
- .check_ignition = black_check_ignition
-};
\ No newline at end of file
+ .check_ignition = black_check_ignition,
+ .read_current = black_read_current,
+ .set_fan_power = black_set_fan_power,
+ .set_ir_power = black_set_ir_power,
+ .set_phone_power = black_set_phone_power,
+ .set_clock_source_mode = black_set_clock_source_mode,
+ .set_siren = black_set_siren
+};
diff --git a/panda/board/boards/common.h b/panda/board/boards/common.h
index d176e4eaf561a0..2f35c34febd780 100644
--- a/panda/board/boards/common.h
+++ b/panda/board/boards/common.h
@@ -23,7 +23,7 @@ void common_init_gpio(void){
set_gpio_alternate(GPIOA, 12, GPIO_AF10_OTG_FS);
GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR11 | GPIO_OSPEEDER_OSPEEDR12;
- // A9,A10: USART 1 for talking to the ESP / GPS
+ // A9,A10: USART 1 for talking to the GPS
set_gpio_alternate(GPIOA, 9, GPIO_AF7_USART1);
set_gpio_alternate(GPIOA, 10, GPIO_AF7_USART1);
@@ -58,20 +58,22 @@ void peripherals_init(void){
#endif
RCC->APB1ENR |= RCC_APB1ENR_DACEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // main counter
- RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // slow loop and pedal
- RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // gmlan_alt
- //RCC->APB1ENR |= RCC_APB1ENR_TIM5EN;
- //RCC->APB1ENR |= RCC_APB1ENR_TIM6EN;
+ RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // pedal and fan PWM
+ RCC->APB1ENR |= RCC_APB1ENR_TIM4EN; // gmlan_alt and IR PWM
+ RCC->APB1ENR |= RCC_APB1ENR_TIM5EN; // k-line init
+ RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // interrupt timer
+ RCC->APB1ENR |= RCC_APB1ENR_PWREN; // for RTC config
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
- //RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
+ RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // clock source timer
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
+ RCC->APB2ENR |= RCC_APB2ENR_TIM9EN; // slow loop
}
// Detection with internal pullup
-#define PULL_EFFECTIVE_DELAY 10
+#define PULL_EFFECTIVE_DELAY 4096
bool detect_with_pull(GPIO_TypeDef *GPIO, int pin, int mode) {
set_gpio_mode(GPIO, pin, MODE_INPUT);
set_gpio_pullup(GPIO, pin, mode);
@@ -79,4 +81,4 @@ bool detect_with_pull(GPIO_TypeDef *GPIO, int pin, int mode) {
bool ret = get_gpio_input(GPIO, pin);
set_gpio_pullup(GPIO, pin, PULL_NONE);
return ret;
-}
\ No newline at end of file
+}
diff --git a/panda/board/boards/dos.h b/panda/board/boards/dos.h
new file mode 100644
index 00000000000000..307ae724713d4e
--- /dev/null
+++ b/panda/board/boards/dos.h
@@ -0,0 +1,230 @@
+// ///////////// //
+// Dos + Harness //
+// ///////////// //
+
+void dos_enable_can_transceiver(uint8_t transceiver, bool enabled) {
+ switch (transceiver){
+ case 1U:
+ set_gpio_output(GPIOC, 1, !enabled);
+ break;
+ case 2U:
+ set_gpio_output(GPIOC, 13, !enabled);
+ break;
+ case 3U:
+ set_gpio_output(GPIOA, 0, !enabled);
+ break;
+ case 4U:
+ set_gpio_output(GPIOB, 10, !enabled);
+ break;
+ default:
+ puts("Invalid CAN transceiver ("); puth(transceiver); puts("): enabling failed\n");
+ break;
+ }
+}
+
+void dos_enable_can_transceivers(bool enabled) {
+ for(uint8_t i=1U; i<=4U; i++){
+ // Leave main CAN always on for CAN-based ignition detection
+ if((car_harness_status == HARNESS_STATUS_FLIPPED) ? (i == 3U) : (i == 1U)){
+ uno_enable_can_transceiver(i, true);
+ } else {
+ uno_enable_can_transceiver(i, enabled);
+ }
+ }
+}
+
+void dos_set_led(uint8_t color, bool enabled) {
+ switch (color){
+ case LED_RED:
+ set_gpio_output(GPIOC, 9, !enabled);
+ break;
+ case LED_GREEN:
+ set_gpio_output(GPIOC, 7, !enabled);
+ break;
+ case LED_BLUE:
+ set_gpio_output(GPIOC, 6, !enabled);
+ break;
+ default:
+ break;
+ }
+}
+
+void dos_set_gps_load_switch(bool enabled) {
+ UNUSED(enabled);
+}
+
+void dos_set_bootkick(bool enabled){
+ set_gpio_output(GPIOC, 4, !enabled);
+}
+
+void dos_set_phone_power(bool enabled){
+ UNUSED(enabled);
+}
+
+void dos_set_usb_power_mode(uint8_t mode) {
+ dos_set_bootkick(mode == USB_POWER_CDP);
+}
+
+void dos_set_gps_mode(uint8_t mode) {
+ UNUSED(mode);
+}
+
+void dos_set_can_mode(uint8_t mode){
+ switch (mode) {
+ case CAN_MODE_NORMAL:
+ case CAN_MODE_OBD_CAN2:
+ if ((bool)(mode == CAN_MODE_NORMAL) != (bool)(car_harness_status == HARNESS_STATUS_FLIPPED)) {
+ // B12,B13: disable OBD mode
+ set_gpio_mode(GPIOB, 12, MODE_INPUT);
+ set_gpio_mode(GPIOB, 13, MODE_INPUT);
+
+ // B5,B6: normal CAN2 mode
+ set_gpio_alternate(GPIOB, 5, GPIO_AF9_CAN2);
+ set_gpio_alternate(GPIOB, 6, GPIO_AF9_CAN2);
+ } else {
+ // B5,B6: disable normal CAN2 mode
+ set_gpio_mode(GPIOB, 5, MODE_INPUT);
+ set_gpio_mode(GPIOB, 6, MODE_INPUT);
+
+ // B12,B13: OBD mode
+ set_gpio_alternate(GPIOB, 12, GPIO_AF9_CAN2);
+ set_gpio_alternate(GPIOB, 13, GPIO_AF9_CAN2);
+ }
+ break;
+ default:
+ puts("Tried to set unsupported CAN mode: "); puth(mode); puts("\n");
+ break;
+ }
+}
+
+void dos_usb_power_mode_tick(uint32_t uptime){
+ UNUSED(uptime);
+}
+
+bool dos_check_ignition(void){
+ // ignition is checked through harness
+ return harness_check_ignition();
+}
+
+void dos_set_usb_switch(bool phone){
+ set_gpio_output(GPIOB, 3, phone);
+}
+
+void dos_set_ir_power(uint8_t percentage){
+ pwm_set(TIM4, 2, percentage);
+}
+
+void dos_set_fan_power(uint8_t percentage){
+ // Enable fan power only if percentage is non-zero.
+ set_gpio_output(GPIOA, 1, (percentage != 0U));
+ fan_set_power(percentage);
+}
+
+uint32_t dos_read_current(void){
+ // No current sense on Dos
+ return 0U;
+}
+
+void dos_set_clock_source_mode(uint8_t mode){
+ clock_source_init(mode);
+}
+
+void dos_set_siren(bool enabled){
+ set_gpio_output(GPIOC, 12, enabled);
+}
+
+void dos_init(void) {
+ common_init_gpio();
+
+ // A8,A15: normal CAN3 mode
+ set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3);
+ set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3);
+
+ // C0: OBD_SBU1 (orientation detection)
+ // C3: OBD_SBU2 (orientation detection)
+ set_gpio_mode(GPIOC, 0, MODE_ANALOG);
+ set_gpio_mode(GPIOC, 3, MODE_ANALOG);
+
+ // C10: OBD_SBU1_RELAY (harness relay driving output)
+ // C11: OBD_SBU2_RELAY (harness relay driving output)
+ set_gpio_mode(GPIOC, 10, MODE_OUTPUT);
+ set_gpio_mode(GPIOC, 11, MODE_OUTPUT);
+ set_gpio_output_type(GPIOC, 10, OUTPUT_TYPE_OPEN_DRAIN);
+ set_gpio_output_type(GPIOC, 11, OUTPUT_TYPE_OPEN_DRAIN);
+ set_gpio_output(GPIOC, 10, 1);
+ set_gpio_output(GPIOC, 11, 1);
+
+ // C8: FAN PWM aka TIM3_CH3
+ set_gpio_alternate(GPIOC, 8, GPIO_AF2_TIM3);
+
+ // Initialize IR PWM and set to 0%
+ set_gpio_alternate(GPIOB, 7, GPIO_AF2_TIM4);
+ pwm_init(TIM4, 2);
+ dos_set_ir_power(0U);
+
+ // Initialize fan and set to 0%
+ fan_init();
+ dos_set_fan_power(0U);
+
+ // Initialize harness
+ harness_init();
+
+ // Initialize RTC
+ rtc_init();
+
+ // Enable CAN transceivers
+ dos_enable_can_transceivers(true);
+
+ // Disable LEDs
+ dos_set_led(LED_RED, false);
+ dos_set_led(LED_GREEN, false);
+ dos_set_led(LED_BLUE, false);
+
+ // Set normal CAN mode
+ dos_set_can_mode(CAN_MODE_NORMAL);
+
+ // flip CAN0 and CAN2 if we are flipped
+ if (car_harness_status == HARNESS_STATUS_FLIPPED) {
+ can_flip_buses(0, 2);
+ }
+
+ // init multiplexer
+ can_set_obd(car_harness_status, false);
+
+ // Init clock source as internal free running
+ dos_set_clock_source_mode(CLOCK_SOURCE_MODE_FREE_RUNNING);
+}
+
+const harness_configuration dos_harness_config = {
+ .has_harness = true,
+ .GPIO_SBU1 = GPIOC,
+ .GPIO_SBU2 = GPIOC,
+ .GPIO_relay_SBU1 = GPIOC,
+ .GPIO_relay_SBU2 = GPIOC,
+ .pin_SBU1 = 0,
+ .pin_SBU2 = 3,
+ .pin_relay_SBU1 = 10,
+ .pin_relay_SBU2 = 11,
+ .adc_channel_SBU1 = 10,
+ .adc_channel_SBU2 = 13
+};
+
+const board board_dos = {
+ .board_type = "Dos",
+ .harness_config = &dos_harness_config,
+ .init = dos_init,
+ .enable_can_transceiver = dos_enable_can_transceiver,
+ .enable_can_transceivers = dos_enable_can_transceivers,
+ .set_led = dos_set_led,
+ .set_usb_power_mode = dos_set_usb_power_mode,
+ .set_gps_mode = dos_set_gps_mode,
+ .set_can_mode = dos_set_can_mode,
+ .usb_power_mode_tick = dos_usb_power_mode_tick,
+ .check_ignition = dos_check_ignition,
+ .read_current = dos_read_current,
+ .set_fan_power = dos_set_fan_power,
+ .set_ir_power = dos_set_ir_power,
+ .set_phone_power = dos_set_phone_power,
+ .set_clock_source_mode = dos_set_clock_source_mode,
+ .set_siren = dos_set_siren
+};
diff --git a/panda/board/boards/grey.h b/panda/board/boards/grey.h
index 1927b5459196bb..bd5b1559eba63d 100644
--- a/panda/board/boards/grey.h
+++ b/panda/board/boards/grey.h
@@ -3,16 +3,52 @@
// ////////// //
// Most hardware functionality is similar to white panda
+
+void grey_init(void) {
+ white_grey_common_init();
+
+ // Set default state of GPS
+ current_board->set_gps_mode(GPS_ENABLED);
+}
+
+void grey_set_gps_mode(uint8_t mode) {
+ switch (mode) {
+ case GPS_DISABLED:
+ // GPS OFF
+ set_gpio_output(GPIOC, 14, 0);
+ set_gpio_output(GPIOC, 5, 0);
+ break;
+ case GPS_ENABLED:
+ // GPS ON
+ set_gpio_output(GPIOC, 14, 1);
+ set_gpio_output(GPIOC, 5, 1);
+ break;
+ case GPS_BOOTMODE:
+ set_gpio_output(GPIOC, 14, 1);
+ set_gpio_output(GPIOC, 5, 0);
+ break;
+ default:
+ puts("Invalid ESP/GPS mode\n");
+ break;
+ }
+}
+
const board board_grey = {
.board_type = "Grey",
.harness_config = &white_harness_config,
- .init = white_init,
- .enable_can_transciever = white_enable_can_transciever,
- .enable_can_transcievers = white_enable_can_transcievers,
+ .init = grey_init,
+ .enable_can_transceiver = white_enable_can_transceiver,
+ .enable_can_transceivers = white_enable_can_transceivers,
.set_led = white_set_led,
.set_usb_power_mode = white_set_usb_power_mode,
- .set_esp_gps_mode = white_set_esp_gps_mode,
+ .set_gps_mode = grey_set_gps_mode,
.set_can_mode = white_set_can_mode,
.usb_power_mode_tick = white_usb_power_mode_tick,
- .check_ignition = white_check_ignition
-};
\ No newline at end of file
+ .check_ignition = white_check_ignition,
+ .read_current = white_read_current,
+ .set_fan_power = white_set_fan_power,
+ .set_ir_power = white_set_ir_power,
+ .set_phone_power = white_set_phone_power,
+ .set_clock_source_mode = white_set_clock_source_mode,
+ .set_siren = white_set_siren
+};
diff --git a/panda/board/boards/pedal.h b/panda/board/boards/pedal.h
index 9209a33ba79fdf..31abe9c5c710fd 100644
--- a/panda/board/boards/pedal.h
+++ b/panda/board/boards/pedal.h
@@ -2,19 +2,19 @@
// Pedal //
// ///// //
-void pedal_enable_can_transciever(uint8_t transciever, bool enabled) {
- switch (transciever){
+void pedal_enable_can_transceiver(uint8_t transceiver, bool enabled) {
+ switch (transceiver){
case 1:
set_gpio_output(GPIOB, 3, !enabled);
break;
default:
- puts("Invalid CAN transciever ("); puth(transciever); puts("): enabling failed\n");
+ puts("Invalid CAN transceiver ("); puth(transceiver); puts("): enabling failed\n");
break;
}
}
-void pedal_enable_can_transcievers(bool enabled) {
- pedal_enable_can_transciever(1U, enabled);
+void pedal_enable_can_transceivers(bool enabled) {
+ pedal_enable_can_transceiver(1U, enabled);
}
void pedal_set_led(uint8_t color, bool enabled) {
@@ -35,7 +35,7 @@ void pedal_set_usb_power_mode(uint8_t mode){
puts("Trying to set USB power mode on pedal. This is not supported.\n");
}
-void pedal_set_esp_gps_mode(uint8_t mode) {
+void pedal_set_gps_mode(uint8_t mode) {
UNUSED(mode);
puts("Trying to set ESP/GPS mode on pedal. This is not supported.\n");
}
@@ -50,8 +50,8 @@ void pedal_set_can_mode(uint8_t mode){
}
}
-void pedal_usb_power_mode_tick(uint64_t tcnt){
- UNUSED(tcnt);
+void pedal_usb_power_mode_tick(uint32_t uptime){
+ UNUSED(uptime);
// Not applicable
}
@@ -60,6 +60,31 @@ bool pedal_check_ignition(void){
return false;
}
+uint32_t pedal_read_current(void){
+ // No current sense on pedal
+ return 0U;
+}
+
+void pedal_set_ir_power(uint8_t percentage){
+ UNUSED(percentage);
+}
+
+void pedal_set_fan_power(uint8_t percentage){
+ UNUSED(percentage);
+}
+
+void pedal_set_phone_power(bool enabled){
+ UNUSED(enabled);
+}
+
+void pedal_set_clock_source_mode(uint8_t mode){
+ UNUSED(mode);
+}
+
+void pedal_set_siren(bool enabled){
+ UNUSED(enabled);
+}
+
void pedal_init(void) {
common_init_gpio();
@@ -69,8 +94,8 @@ void pedal_init(void) {
// DAC outputs on A4 and A5
// apparently they don't need GPIO setup
- // Enable transciever
- pedal_enable_can_transcievers(true);
+ // Enable transceiver
+ pedal_enable_can_transceivers(true);
// Disable LEDs
pedal_set_led(LED_RED, false);
@@ -85,12 +110,18 @@ const board board_pedal = {
.board_type = "Pedal",
.harness_config = &pedal_harness_config,
.init = pedal_init,
- .enable_can_transciever = pedal_enable_can_transciever,
- .enable_can_transcievers = pedal_enable_can_transcievers,
+ .enable_can_transceiver = pedal_enable_can_transceiver,
+ .enable_can_transceivers = pedal_enable_can_transceivers,
.set_led = pedal_set_led,
.set_usb_power_mode = pedal_set_usb_power_mode,
- .set_esp_gps_mode = pedal_set_esp_gps_mode,
+ .set_gps_mode = pedal_set_gps_mode,
.set_can_mode = pedal_set_can_mode,
.usb_power_mode_tick = pedal_usb_power_mode_tick,
.check_ignition = pedal_check_ignition,
-};
\ No newline at end of file
+ .read_current = pedal_read_current,
+ .set_fan_power = pedal_set_fan_power,
+ .set_ir_power = pedal_set_ir_power,
+ .set_phone_power = pedal_set_phone_power,
+ .set_clock_source_mode = pedal_set_clock_source_mode,
+ .set_siren = pedal_set_siren
+};
diff --git a/panda/board/boards/uno.h b/panda/board/boards/uno.h
new file mode 100644
index 00000000000000..cc9c4c0dc4ad67
--- /dev/null
+++ b/panda/board/boards/uno.h
@@ -0,0 +1,299 @@
+// ///////////// //
+// Uno + Harness //
+// ///////////// //
+#define BOOTKICK_TIME 3U
+uint8_t bootkick_timer = 0U;
+
+void uno_enable_can_transceiver(uint8_t transceiver, bool enabled) {
+ switch (transceiver){
+ case 1U:
+ set_gpio_output(GPIOC, 1, !enabled);
+ break;
+ case 2U:
+ set_gpio_output(GPIOC, 13, !enabled);
+ break;
+ case 3U:
+ set_gpio_output(GPIOA, 0, !enabled);
+ break;
+ case 4U:
+ set_gpio_output(GPIOB, 10, !enabled);
+ break;
+ default:
+ puts("Invalid CAN transceiver ("); puth(transceiver); puts("): enabling failed\n");
+ break;
+ }
+}
+
+void uno_enable_can_transceivers(bool enabled) {
+ for(uint8_t i=1U; i<=4U; i++){
+ // Leave main CAN always on for CAN-based ignition detection
+ if((car_harness_status == HARNESS_STATUS_FLIPPED) ? (i == 3U) : (i == 1U)){
+ uno_enable_can_transceiver(i, true);
+ } else {
+ uno_enable_can_transceiver(i, enabled);
+ }
+ }
+}
+
+void uno_set_led(uint8_t color, bool enabled) {
+ switch (color){
+ case LED_RED:
+ set_gpio_output(GPIOC, 9, !enabled);
+ break;
+ case LED_GREEN:
+ set_gpio_output(GPIOC, 7, !enabled);
+ break;
+ case LED_BLUE:
+ set_gpio_output(GPIOC, 6, !enabled);
+ break;
+ default:
+ break;
+ }
+}
+
+void uno_set_gps_load_switch(bool enabled) {
+ set_gpio_output(GPIOC, 12, enabled);
+}
+
+void uno_set_bootkick(bool enabled){
+ if(enabled){
+ set_gpio_output(GPIOB, 14, false);
+ } else {
+ // We want the pin to be floating, not forced high!
+ set_gpio_mode(GPIOB, 14, MODE_INPUT);
+ }
+}
+
+void uno_bootkick(void) {
+ bootkick_timer = BOOTKICK_TIME;
+ uno_set_bootkick(true);
+}
+
+void uno_set_phone_power(bool enabled){
+ set_gpio_output(GPIOB, 4, enabled);
+}
+
+void uno_set_usb_power_mode(uint8_t mode) {
+ bool valid = false;
+ switch (mode) {
+ case USB_POWER_CLIENT:
+ valid = true;
+ break;
+ case USB_POWER_CDP:
+ uno_bootkick();
+ valid = true;
+ break;
+ default:
+ puts("Invalid USB power mode\n");
+ break;
+ }
+ if (valid) {
+ usb_power_mode = mode;
+ }
+}
+
+void uno_set_gps_mode(uint8_t mode) {
+ switch (mode) {
+ case GPS_DISABLED:
+ // GPS OFF
+ set_gpio_output(GPIOB, 1, 0);
+ set_gpio_output(GPIOC, 5, 0);
+ uno_set_gps_load_switch(false);
+ break;
+ case GPS_ENABLED:
+ // GPS ON
+ set_gpio_output(GPIOB, 1, 1);
+ set_gpio_output(GPIOC, 5, 1);
+ uno_set_gps_load_switch(true);
+ break;
+ case GPS_BOOTMODE:
+ set_gpio_output(GPIOB, 1, 1);
+ set_gpio_output(GPIOC, 5, 0);
+ uno_set_gps_load_switch(true);
+ break;
+ default:
+ puts("Invalid ESP/GPS mode\n");
+ break;
+ }
+}
+
+void uno_set_can_mode(uint8_t mode){
+ switch (mode) {
+ case CAN_MODE_NORMAL:
+ case CAN_MODE_OBD_CAN2:
+ if ((bool)(mode == CAN_MODE_NORMAL) != (bool)(car_harness_status == HARNESS_STATUS_FLIPPED)) {
+ // B12,B13: disable OBD mode
+ set_gpio_mode(GPIOB, 12, MODE_INPUT);
+ set_gpio_mode(GPIOB, 13, MODE_INPUT);
+
+ // B5,B6: normal CAN2 mode
+ set_gpio_alternate(GPIOB, 5, GPIO_AF9_CAN2);
+ set_gpio_alternate(GPIOB, 6, GPIO_AF9_CAN2);
+ } else {
+ // B5,B6: disable normal CAN2 mode
+ set_gpio_mode(GPIOB, 5, MODE_INPUT);
+ set_gpio_mode(GPIOB, 6, MODE_INPUT);
+
+ // B12,B13: OBD mode
+ set_gpio_alternate(GPIOB, 12, GPIO_AF9_CAN2);
+ set_gpio_alternate(GPIOB, 13, GPIO_AF9_CAN2);
+ }
+ break;
+ default:
+ puts("Tried to set unsupported CAN mode: "); puth(mode); puts("\n");
+ break;
+ }
+}
+
+void uno_usb_power_mode_tick(uint32_t uptime){
+ UNUSED(uptime);
+ if(bootkick_timer != 0U){
+ bootkick_timer--;
+ } else {
+ uno_set_bootkick(false);
+ }
+}
+
+bool uno_check_ignition(void){
+ // ignition is checked through harness
+ return harness_check_ignition();
+}
+
+void uno_set_usb_switch(bool phone){
+ set_gpio_output(GPIOB, 3, phone);
+}
+
+void uno_set_ir_power(uint8_t percentage){
+ pwm_set(TIM4, 2, percentage);
+}
+
+void uno_set_fan_power(uint8_t percentage){
+ // Enable fan power only if percentage is non-zero.
+ set_gpio_output(GPIOA, 1, (percentage != 0U));
+ fan_set_power(percentage);
+}
+
+uint32_t uno_read_current(void){
+ // No current sense on Uno
+ return 0U;
+}
+
+void uno_set_clock_source_mode(uint8_t mode){
+ UNUSED(mode);
+}
+
+void uno_set_siren(bool enabled){
+ UNUSED(enabled);
+}
+
+void uno_init(void) {
+ common_init_gpio();
+
+ // A8,A15: normal CAN3 mode
+ set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3);
+ set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3);
+
+ // C0: OBD_SBU1 (orientation detection)
+ // C3: OBD_SBU2 (orientation detection)
+ set_gpio_mode(GPIOC, 0, MODE_ANALOG);
+ set_gpio_mode(GPIOC, 3, MODE_ANALOG);
+
+ // Set default state of GPS
+ current_board->set_gps_mode(GPS_ENABLED);
+
+ // C10: OBD_SBU1_RELAY (harness relay driving output)
+ // C11: OBD_SBU2_RELAY (harness relay driving output)
+ set_gpio_mode(GPIOC, 10, MODE_OUTPUT);
+ set_gpio_mode(GPIOC, 11, MODE_OUTPUT);
+ set_gpio_output_type(GPIOC, 10, OUTPUT_TYPE_OPEN_DRAIN);
+ set_gpio_output_type(GPIOC, 11, OUTPUT_TYPE_OPEN_DRAIN);
+ set_gpio_output(GPIOC, 10, 1);
+ set_gpio_output(GPIOC, 11, 1);
+
+ // C8: FAN PWM aka TIM3_CH3
+ set_gpio_alternate(GPIOC, 8, GPIO_AF2_TIM3);
+
+ // Turn on GPS load switch.
+ uno_set_gps_load_switch(true);
+
+ // Turn on phone regulator
+ uno_set_phone_power(true);
+
+ // Initialize IR PWM and set to 0%
+ set_gpio_alternate(GPIOB, 7, GPIO_AF2_TIM4);
+ pwm_init(TIM4, 2);
+ uno_set_ir_power(0U);
+
+ // Initialize fan and set to 0%
+ fan_init();
+ uno_set_fan_power(0U);
+
+ // Initialize harness
+ harness_init();
+
+ // Initialize RTC
+ rtc_init();
+
+ // Enable CAN transceivers
+ uno_enable_can_transceivers(true);
+
+ // Disable LEDs
+ uno_set_led(LED_RED, false);
+ uno_set_led(LED_GREEN, false);
+ uno_set_led(LED_BLUE, false);
+
+ // Set normal CAN mode
+ uno_set_can_mode(CAN_MODE_NORMAL);
+
+ // flip CAN0 and CAN2 if we are flipped
+ if (car_harness_status == HARNESS_STATUS_FLIPPED) {
+ can_flip_buses(0, 2);
+ }
+
+ // init multiplexer
+ can_set_obd(car_harness_status, false);
+
+ // Switch to phone usb mode if harness connection is powered by less than 7V
+ if(adc_get_voltage() < 7000U){
+ uno_set_usb_switch(true);
+ } else {
+ uno_set_usb_switch(false);
+ }
+
+ // Bootkick phone
+ uno_bootkick();
+}
+
+const harness_configuration uno_harness_config = {
+ .has_harness = true,
+ .GPIO_SBU1 = GPIOC,
+ .GPIO_SBU2 = GPIOC,
+ .GPIO_relay_SBU1 = GPIOC,
+ .GPIO_relay_SBU2 = GPIOC,
+ .pin_SBU1 = 0,
+ .pin_SBU2 = 3,
+ .pin_relay_SBU1 = 10,
+ .pin_relay_SBU2 = 11,
+ .adc_channel_SBU1 = 10,
+ .adc_channel_SBU2 = 13
+};
+
+const board board_uno = {
+ .board_type = "Uno",
+ .harness_config = &uno_harness_config,
+ .init = uno_init,
+ .enable_can_transceiver = uno_enable_can_transceiver,
+ .enable_can_transceivers = uno_enable_can_transceivers,
+ .set_led = uno_set_led,
+ .set_usb_power_mode = uno_set_usb_power_mode,
+ .set_gps_mode = uno_set_gps_mode,
+ .set_can_mode = uno_set_can_mode,
+ .usb_power_mode_tick = uno_usb_power_mode_tick,
+ .check_ignition = uno_check_ignition,
+ .read_current = uno_read_current,
+ .set_fan_power = uno_set_fan_power,
+ .set_ir_power = uno_set_ir_power,
+ .set_phone_power = uno_set_phone_power,
+ .set_clock_source_mode = uno_set_clock_source_mode,
+ .set_siren = uno_set_siren
+};
diff --git a/panda/board/boards/white.h b/panda/board/boards/white.h
index a4e65d67bacde5..44d8f512b0fe46 100644
--- a/panda/board/boards/white.h
+++ b/panda/board/boards/white.h
@@ -2,8 +2,8 @@
// White Panda //
// /////////// //
-void white_enable_can_transciever(uint8_t transciever, bool enabled) {
- switch (transciever){
+void white_enable_can_transceiver(uint8_t transceiver, bool enabled) {
+ switch (transceiver){
case 1U:
set_gpio_output(GPIOC, 1, !enabled);
break;
@@ -14,14 +14,16 @@ void white_enable_can_transciever(uint8_t transciever, bool enabled) {
set_gpio_output(GPIOA, 0, !enabled);
break;
default:
- puts("Invalid CAN transciever ("); puth(transciever); puts("): enabling failed\n");
+ puts("Invalid CAN transceiver ("); puth(transceiver); puts("): enabling failed\n");
break;
}
}
-void white_enable_can_transcievers(bool enabled) {
- for(uint8_t i=1; i<=3U; i++)
- white_enable_can_transciever(i, enabled);
+void white_enable_can_transceivers(bool enabled) {
+ uint8_t t1 = enabled ? 1U : 2U; // leave transceiver 1 enabled to detect CAN ignition
+ for(uint8_t i=t1; i<=3U; i++) {
+ white_enable_can_transceiver(i, enabled);
+ }
}
void white_set_led(uint8_t color, bool enabled) {
@@ -34,7 +36,7 @@ void white_set_led(uint8_t color, bool enabled) {
break;
case LED_BLUE:
set_gpio_output(GPIOC, 6, !enabled);
- break;
+ break;
default:
break;
}
@@ -69,19 +71,21 @@ void white_set_usb_power_mode(uint8_t mode){
}
}
-void white_set_esp_gps_mode(uint8_t mode) {
+void white_set_gps_mode(uint8_t mode) {
switch (mode) {
- case ESP_GPS_DISABLED:
+ case GPS_DISABLED:
// ESP OFF
set_gpio_output(GPIOC, 14, 0);
set_gpio_output(GPIOC, 5, 0);
break;
- case ESP_GPS_ENABLED:
+#ifndef EON
+ case GPS_ENABLED:
// ESP ON
set_gpio_output(GPIOC, 14, 1);
set_gpio_output(GPIOC, 5, 1);
break;
- case ESP_GPS_BOOTMODE:
+#endif
+ case GPS_BOOTMODE:
set_gpio_output(GPIOC, 14, 1);
set_gpio_output(GPIOC, 5, 0);
break;
@@ -125,7 +129,7 @@ void white_set_can_mode(uint8_t mode){
// A8,A15: normal CAN3 mode
set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3);
- set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3);
+ set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3);
break;
case CAN_MODE_GMLAN_CAN3:
// A8,A15: disable CAN3 mode
@@ -143,79 +147,90 @@ void white_set_can_mode(uint8_t mode){
// B5,B6: normal CAN2 mode
set_gpio_alternate(GPIOB, 5, GPIO_AF9_CAN2);
set_gpio_alternate(GPIOB, 6, GPIO_AF9_CAN2);
- break;
+ break;
default:
puts("Tried to set unsupported CAN mode: "); puth(mode); puts("\n");
break;
}
}
-uint64_t marker = 0;
-void white_usb_power_mode_tick(uint64_t tcnt){
- #ifndef BOOTSTUB
+uint32_t white_read_current(void){
+ return adc_get(ADCCHAN_CURRENT);
+}
+
+uint32_t marker = 0;
+void white_usb_power_mode_tick(uint32_t uptime){
+
+ // on EON or BOOTSTUB, no state machine
+#if !defined(BOOTSTUB) && !defined(EON)
#define CURRENT_THRESHOLD 0xF00U
#define CLICKS 5U // 5 seconds to switch modes
- uint32_t current = adc_get(ADCCHAN_CURRENT);
+ uint32_t current = white_read_current();
// ~0x9a = 500 ma
// puth(current); puts("\n");
switch (usb_power_mode) {
case USB_POWER_CLIENT:
- if ((tcnt - marker) >= CLICKS) {
+ if ((uptime - marker) >= CLICKS) {
if (!is_enumerated) {
puts("USBP: didn't enumerate, switching to CDP mode\n");
// switch to CDP
white_set_usb_power_mode(USB_POWER_CDP);
- marker = tcnt;
+ marker = uptime;
}
}
// keep resetting the timer if it's enumerated
if (is_enumerated) {
- marker = tcnt;
+ marker = uptime;
}
break;
case USB_POWER_CDP:
- // On the EON, if we get into CDP mode we stay here. No need to go to DCP.
- #ifndef EON
- // been CLICKS clicks since we switched to CDP
- if ((tcnt-marker) >= CLICKS) {
- // measure current draw, if positive and no enumeration, switch to DCP
- if (!is_enumerated && (current < CURRENT_THRESHOLD)) {
- puts("USBP: no enumeration with current draw, switching to DCP mode\n");
- white_set_usb_power_mode(USB_POWER_DCP);
- marker = tcnt;
- }
+ // been CLICKS clicks since we switched to CDP
+ if ((uptime - marker) >= CLICKS) {
+ // measure current draw, if positive and no enumeration, switch to DCP
+ if (!is_enumerated && (current < CURRENT_THRESHOLD)) {
+ puts("USBP: no enumeration with current draw, switching to DCP mode\n");
+ white_set_usb_power_mode(USB_POWER_DCP);
+ marker = uptime;
}
- // keep resetting the timer if there's no current draw in CDP
- if (current >= CURRENT_THRESHOLD) {
- marker = tcnt;
- }
- #endif
+ }
+ // keep resetting the timer if there's no current draw in CDP
+ if (current >= CURRENT_THRESHOLD) {
+ marker = uptime;
+ }
break;
case USB_POWER_DCP:
// been at least CLICKS clicks since we switched to DCP
- if ((tcnt-marker) >= CLICKS) {
+ if ((uptime - marker) >= CLICKS) {
// if no current draw, switch back to CDP
if (current >= CURRENT_THRESHOLD) {
puts("USBP: no current draw, switching back to CDP mode\n");
white_set_usb_power_mode(USB_POWER_CDP);
- marker = tcnt;
+ marker = uptime;
}
}
// keep resetting the timer if there's current draw in DCP
if (current < CURRENT_THRESHOLD) {
- marker = tcnt;
+ marker = uptime;
}
break;
default:
puts("USB power mode invalid\n"); // set_usb_power_mode prevents assigning invalid values
break;
}
- #else
- UNUSED(tcnt);
- #endif
+#else
+ UNUSED(uptime);
+#endif
+}
+
+void white_set_ir_power(uint8_t percentage){
+ UNUSED(percentage);
+}
+
+void white_set_fan_power(uint8_t percentage){
+ UNUSED(percentage);
}
bool white_check_ignition(void){
@@ -223,7 +238,19 @@ bool white_check_ignition(void){
return !get_gpio_input(GPIOA, 1);
}
-void white_init(void) {
+void white_set_phone_power(bool enabled){
+ UNUSED(enabled);
+}
+
+void white_set_clock_source_mode(uint8_t mode){
+ UNUSED(mode);
+}
+
+void white_set_siren(bool enabled){
+ UNUSED(enabled);
+}
+
+void white_grey_common_init(void) {
common_init_gpio();
// C3: current sense
@@ -242,9 +269,6 @@ void white_init(void) {
set_gpio_alternate(GPIOA, 6, GPIO_AF5_SPI1);
set_gpio_alternate(GPIOA, 7, GPIO_AF5_SPI1);
- // Set USB power mode
- white_set_usb_power_mode(USB_POWER_CLIENT);
-
// B12: GMLAN, ignition sense, pull up
set_gpio_pullup(GPIOB, 12, PULL_UP);
@@ -275,8 +299,8 @@ void white_init(void) {
set_gpio_alternate(GPIOC, 11, GPIO_AF7_USART3);
set_gpio_pullup(GPIOC, 11, PULL_UP);
- // Enable CAN transcievers
- white_enable_can_transcievers(true);
+ // Enable CAN transceivers
+ white_enable_can_transceivers(true);
// Disable LEDs
white_set_led(LED_RED, false);
@@ -285,6 +309,23 @@ void white_init(void) {
// Set normal CAN mode
white_set_can_mode(CAN_MODE_NORMAL);
+
+ // Init usb power mode
+ uint32_t voltage = adc_get_voltage();
+ // Init in CDP mode only if panda is powered by 12V.
+ // Otherwise a PC would not be able to flash a standalone panda with EON build
+ if (voltage > 8000U) { // 8V threshold
+ white_set_usb_power_mode(USB_POWER_CDP);
+ } else {
+ white_set_usb_power_mode(USB_POWER_CLIENT);
+ }
+}
+
+void white_init(void) {
+ white_grey_common_init();
+
+ // Set ESP off by default
+ current_board->set_gps_mode(GPS_DISABLED);
}
const harness_configuration white_harness_config = {
@@ -295,12 +336,18 @@ const board board_white = {
.board_type = "White",
.harness_config = &white_harness_config,
.init = white_init,
- .enable_can_transciever = white_enable_can_transciever,
- .enable_can_transcievers = white_enable_can_transcievers,
+ .enable_can_transceiver = white_enable_can_transceiver,
+ .enable_can_transceivers = white_enable_can_transceivers,
.set_led = white_set_led,
.set_usb_power_mode = white_set_usb_power_mode,
- .set_esp_gps_mode = white_set_esp_gps_mode,
+ .set_gps_mode = white_set_gps_mode,
.set_can_mode = white_set_can_mode,
.usb_power_mode_tick = white_usb_power_mode_tick,
- .check_ignition = white_check_ignition
-};
\ No newline at end of file
+ .check_ignition = white_check_ignition,
+ .read_current = white_read_current,
+ .set_fan_power = white_set_fan_power,
+ .set_ir_power = white_set_ir_power,
+ .set_phone_power = white_set_phone_power,
+ .set_clock_source_mode = white_set_clock_source_mode,
+ .set_siren = white_set_siren
+};
diff --git a/panda/board/bootstub.c b/panda/board/bootstub.c
index 9644326d4d0253..1521b5324030d0 100644
--- a/panda/board/bootstub.c
+++ b/panda/board/bootstub.c
@@ -1,5 +1,8 @@
#define BOOTSTUB
+#define VERS_TAG 0x53524556
+#define MIN_VERSION 2
+
#include "config.h"
#include "obj/gitversion.h"
@@ -29,9 +32,15 @@ const board *current_board;
// ********************* Includes *********************
#include "libc.h"
#include "provision.h"
+#include "critical.h"
+#include "faults.h"
+#include "drivers/registers.h"
+#include "drivers/interrupts.h"
#include "drivers/clock.h"
#include "drivers/llgpio.h"
+#include "drivers/adc.h"
+#include "drivers/pwm.h"
#include "board.h"
@@ -63,13 +72,14 @@ extern void *_app_start[];
// BOUNTY: $200 coupon on shop.comma.ai or $100 check.
int main(void) {
- __disable_irq();
+ // Init interrupt table
+ init_interrupts(true);
+
+ disable_interrupts();
clock_init();
detect_configuration();
detect_board_type();
- current_board->set_usb_power_mode(USB_POWER_CLIENT);
-
if (enter_bootloader_mode == ENTER_SOFTLOADER_MAGIC) {
enter_bootloader_mode = 0;
soft_flasher_start();
@@ -83,6 +93,13 @@ int main(void) {
uint8_t digest[SHA_DIGEST_SIZE];
SHA_hash(&_app_start[1], len-4, digest);
+ // verify version, last bytes in the signed area
+ uint32_t vers[2] = {0};
+ memcpy(&vers, ((void*)&_app_start[0]) + len - sizeof(vers), sizeof(vers));
+ if (vers[0] != VERS_TAG || vers[1] < MIN_VERSION) {
+ goto fail;
+ }
+
// verify RSA signature
if (RSA_verify(&release_rsa_key, ((void*)&_app_start[0]) + len, RSANUMBYTES, digest, SHA_DIGEST_SIZE)) {
goto good;
diff --git a/panda/board/build.mk b/panda/board/build.mk
index f435476e1faee2..a891fae38f3929 100644
--- a/panda/board/build.mk
+++ b/panda/board/build.mk
@@ -13,9 +13,10 @@ else
DFU_UTIL = "tools/dfu-util-aarch64"
endif
-CC = arm-none-eabi-gcc
-OBJCOPY = arm-none-eabi-objcopy
-OBJDUMP = arm-none-eabi-objdump
+#COMPILER_PATH = /home/batman/Downloads/gcc-arm-none-eabi-9-2020-q2-update/bin/
+CC = $(COMPILER_PATH)arm-none-eabi-gcc
+OBJCOPY = $(COMPILER_PATH)arm-none-eabi-objcopy
+OBJDUMP = $(COMPILER_PATH)arm-none-eabi-objdump
ifeq ($(RELEASE),1)
CERT = ../../pandaextra/certs/release
@@ -33,7 +34,7 @@ POSTCOMPILE = @mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d && touch $@
# this no longer pushes the bootstub
flash: obj/$(PROJ_NAME).bin
- PYTHONPATH=../ python -c "from python import Panda; Panda().flash('obj/$(PROJ_NAME).bin')"
+ PYTHONPATH=../ python3 -c "from python import Panda; Panda().flash('obj/$(PROJ_NAME).bin')"
ota: obj/$(PROJ_NAME).bin
curl http://192.168.0.10/stupdate --upload-file $<
@@ -42,8 +43,8 @@ bin: obj/$(PROJ_NAME).bin
# this flashes everything
recover: obj/bootstub.$(PROJ_NAME).bin obj/$(PROJ_NAME).bin
- -PYTHONPATH=../ python -c "from python import Panda; Panda().reset(enter_bootloader=True)"
- sleep 1.0
+ -PYTHONPATH=../ python3 -c "from python import Panda; Panda().reset(enter_bootstub=True); Panda().reset(enter_bootloader=True)"
+ sleep 2.0
$(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08004000 -D obj/$(PROJ_NAME).bin
$(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08000000:leave -D obj/bootstub.$(PROJ_NAME).bin
diff --git a/panda/board/config.h b/panda/board/config.h
index 7fd203fc30e958..335d2e1ec5e54d 100644
--- a/panda/board/config.h
+++ b/panda/board/config.h
@@ -2,8 +2,10 @@
#define PANDA_CONFIG_H
//#define DEBUG
+//#define DEBUG_UART
//#define DEBUG_USB
//#define DEBUG_SPI
+//#define DEBUG_FAULTS
#ifdef STM32F4
#define PANDA
@@ -22,7 +24,7 @@
#include
#define NULL ((void*)0)
-#define COMPILE_TIME_ASSERT(pred) ((void)sizeof(char[1 - (2 * (!(pred)))]))
+#define COMPILE_TIME_ASSERT(pred) ((void)sizeof(char[1 - (2 * ((int)(!(pred))))]))
#define MIN(a,b) \
({ __typeof__ (a) _a = (a); \
@@ -34,7 +36,14 @@
__typeof__ (b) _b = (b); \
(_a > _b) ? _a : _b; })
+#define ABS(a) \
+ ({ __typeof__ (a) _a = (a); \
+ (_a > 0) ? _a : (-_a); })
+
#define MAX_RESP_LEN 0x40U
+// Around (1Mbps / 8 bits/byte / 12 bytes per message)
+#define CAN_INTERRUPT_RATE 12000U
+
#endif
diff --git a/panda/board/crc.h b/panda/board/crc.h
new file mode 100644
index 00000000000000..ab969e5176c8b9
--- /dev/null
+++ b/panda/board/crc.h
@@ -0,0 +1,16 @@
+uint8_t crc_checksum(uint8_t *dat, int len, const uint8_t poly) {
+ uint8_t crc = 0xFF;
+ int i, j;
+ for (i = len - 1; i >= 0; i--) {
+ crc ^= dat[i];
+ for (j = 0; j < 8; j++) {
+ if ((crc & 0x80U) != 0U) {
+ crc = (uint8_t)((crc << 1) ^ poly);
+ }
+ else {
+ crc <<= 1;
+ }
+ }
+ }
+ return crc;
+}
diff --git a/panda/board/critical.h b/panda/board/critical.h
new file mode 100644
index 00000000000000..c8cf52c7a11533
--- /dev/null
+++ b/panda/board/critical.h
@@ -0,0 +1,23 @@
+// ********************* Critical section helpers *********************
+volatile bool interrupts_enabled = false;
+
+void enable_interrupts(void) {
+ interrupts_enabled = true;
+ __enable_irq();
+}
+
+void disable_interrupts(void) {
+ interrupts_enabled = false;
+ __disable_irq();
+}
+
+uint8_t global_critical_depth = 0U;
+#define ENTER_CRITICAL() \
+ __disable_irq(); \
+ global_critical_depth += 1U;
+
+#define EXIT_CRITICAL() \
+ global_critical_depth -= 1U; \
+ if ((global_critical_depth == 0U) && interrupts_enabled) { \
+ __enable_irq(); \
+ }
diff --git a/panda/board/drivers/adc.h b/panda/board/drivers/adc.h
index efd0a168787471..358497adbfdcda 100644
--- a/panda/board/drivers/adc.h
+++ b/panda/board/drivers/adc.h
@@ -9,26 +9,16 @@
#define ADCCHAN_CURRENT 13
void adc_init(void) {
- // global setup
- ADC->CCR = ADC_CCR_TSVREFE | ADC_CCR_VBATE;
- //ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_EOCS | ADC_CR2_DDS;
- ADC1->CR2 = ADC_CR2_ADON;
-
- // long
- //ADC1->SMPR1 = ADC_SMPR1_SMP10 | ADC_SMPR1_SMP11 | ADC_SMPR1_SMP12 | ADC_SMPR1_SMP13;
- ADC1->SMPR1 = ADC_SMPR1_SMP12 | ADC_SMPR1_SMP13;
+ register_set(&(ADC->CCR), ADC_CCR_TSVREFE | ADC_CCR_VBATE, 0xC30000U);
+ register_set(&(ADC1->CR2), ADC_CR2_ADON, 0xFF7F0F03U);
+ register_set(&(ADC1->SMPR1), ADC_SMPR1_SMP12 | ADC_SMPR1_SMP13, 0x7FFFFFFU);
}
uint32_t adc_get(unsigned int channel) {
- // includes length
- //ADC1->SQR1 = 0;
-
- // select channel
- ADC1->JSQR = channel << 15;
-
- //ADC1->CR1 = ADC_CR1_DISCNUM_0;
- //ADC1->CR1 = ADC_CR1_EOCIE;
+ // Select channel
+ register_set(&(ADC1->JSQR), (channel << 15U), 0x3FFFFFU);
+ // Start conversion
ADC1->SR &= ~(ADC_SR_JEOC);
ADC1->CR2 |= ADC_CR2_JSWSTART;
while (!(ADC1->SR & ADC_SR_JEOC));
@@ -36,3 +26,13 @@ uint32_t adc_get(unsigned int channel) {
return ADC1->JDR1;
}
+uint32_t adc_get_voltage(void) {
+ // REVC has a 10, 1 (1/11) voltage divider
+ // Here is the calculation for the scale (s)
+ // ADCV = VIN_S * (1/11) * (4095/3.3)
+ // RETVAL = ADCV * s = VIN_S*1000
+ // s = 1000/((4095/3.3)*(1/11)) = 8.8623046875
+
+ // Avoid needing floating point math, so output in mV
+ return (adc_get(ADCCHAN_VOLTAGE) * 8862U) / 1000U;
+}
diff --git a/panda/board/drivers/can.h b/panda/board/drivers/can.h
index 2d77281346332c..2ca7cbc719b015 100644
--- a/panda/board/drivers/can.h
+++ b/panda/board/drivers/can.h
@@ -14,6 +14,7 @@ typedef struct {
#define BUS_MAX 4U
+uint32_t can_rx_errs = 0;
uint32_t can_send_errs = 0;
uint32_t can_fwd_errs = 0;
uint32_t gmlan_send_errs = 0;
@@ -25,11 +26,17 @@ extern uint32_t can_speed[4];
void can_set_forwarding(int from, int to);
-void can_init(uint8_t can_number);
+bool can_init(uint8_t can_number);
void can_init_all(void);
-void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number);
+bool can_tx_check_min_slots_free(uint32_t min);
+void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number, bool skip_tx_hook);
bool can_pop(can_ring *q, CAN_FIFOMailBox_TypeDef *elem);
+// Ignition detected from CAN meessages
+bool ignition_can = false;
+bool ignition_cadillac = false;
+uint32_t ignition_can_cnt = 0U;
+
// end API
#define ALL_CAN_SILENT 0xFF
@@ -62,7 +69,7 @@ int can_overflow_cnt = 0;
bool can_pop(can_ring *q, CAN_FIFOMailBox_TypeDef *elem) {
bool ret = 0;
- enter_critical_section();
+ ENTER_CRITICAL();
if (q->w_ptr != q->r_ptr) {
*elem = q->elems[q->r_ptr];
if ((q->r_ptr + 1U) == q->fifo_size) {
@@ -72,7 +79,7 @@ bool can_pop(can_ring *q, CAN_FIFOMailBox_TypeDef *elem) {
}
ret = 1;
}
- exit_critical_section();
+ EXIT_CRITICAL();
return ret;
}
@@ -81,7 +88,7 @@ bool can_push(can_ring *q, CAN_FIFOMailBox_TypeDef *elem) {
bool ret = false;
uint32_t next_w_ptr;
- enter_critical_section();
+ ENTER_CRITICAL();
if ((q->w_ptr + 1U) == q->fifo_size) {
next_w_ptr = 0;
} else {
@@ -92,7 +99,7 @@ bool can_push(can_ring *q, CAN_FIFOMailBox_TypeDef *elem) {
q->w_ptr = next_w_ptr;
ret = true;
}
- exit_critical_section();
+ EXIT_CRITICAL();
if (!ret) {
can_overflow_cnt++;
#ifdef DEBUG
@@ -102,11 +109,25 @@ bool can_push(can_ring *q, CAN_FIFOMailBox_TypeDef *elem) {
return ret;
}
+uint32_t can_slots_empty(can_ring *q) {
+ uint32_t ret = 0;
+
+ ENTER_CRITICAL();
+ if (q->w_ptr >= q->r_ptr) {
+ ret = q->fifo_size - 1U - q->w_ptr + q->r_ptr;
+ } else {
+ ret = q->r_ptr - q->w_ptr - 1U;
+ }
+ EXIT_CRITICAL();
+
+ return ret;
+}
+
void can_clear(can_ring *q) {
- enter_critical_section();
+ ENTER_CRITICAL();
q->w_ptr = 0;
q->r_ptr = 0;
- exit_critical_section();
+ EXIT_CRITICAL();
}
// assign CAN numbering
@@ -124,43 +145,31 @@ uint8_t bus_lookup[] = {0,1,2};
uint8_t can_num_lookup[] = {0,1,2,-1};
int8_t can_forwarding[] = {-1,-1,-1,-1};
uint32_t can_speed[] = {5000, 5000, 5000, 333};
-#define CAN_MAX 3
+#define CAN_MAX 3U
#define CANIF_FROM_CAN_NUM(num) (cans[num])
#define CAN_NUM_FROM_CANIF(CAN) ((CAN)==CAN1 ? 0 : ((CAN) == CAN2 ? 1 : 2))
-#define CAN_NAME_FROM_CANIF(CAN) ((CAN)==CAN1 ? "CAN1" : ((CAN) == CAN2 ? "CAN2" : "CAN3"))
#define BUS_NUM_FROM_CAN_NUM(num) (bus_lookup[num])
#define CAN_NUM_FROM_BUS_NUM(num) (can_num_lookup[num])
void process_can(uint8_t can_number);
-void can_set_speed(uint8_t can_number) {
+bool can_set_speed(uint8_t can_number) {
+ bool ret = true;
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
uint8_t bus_number = BUS_NUM_FROM_CAN_NUM(can_number);
- if (!llcan_set_speed(CAN, can_speed[bus_number], can_loopback, (unsigned int)(can_silent) & (1U << can_number))) {
- puts("CAN init FAILED!!!!!\n");
- puth(can_number); puts(" ");
- puth(BUS_NUM_FROM_CAN_NUM(can_number)); puts("\n");
- }
-}
-
-void can_init(uint8_t can_number) {
- if (can_number != 0xffU) {
- CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
- can_set_speed(can_number);
-
- llcan_init(CAN);
-
- // in case there are queued up messages
- process_can(can_number);
- }
+ ret &= llcan_set_speed(CAN, can_speed[bus_number], can_loopback, (unsigned int)(can_silent) & (1U << can_number));
+ return ret;
}
void can_init_all(void) {
- for (int i=0; i < CAN_MAX; i++) {
- can_init(i);
+ bool ret = true;
+ for (uint8_t i=0U; i < CAN_MAX; i++) {
+ can_clear(can_queues[i]);
+ ret &= can_init(i);
}
+ UNUSED(ret);
}
void can_flip_buses(uint8_t bus1, uint8_t bus2){
@@ -172,7 +181,7 @@ void can_flip_buses(uint8_t bus1, uint8_t bus2){
// TODO: Cleanup with new abstraction
void can_set_gmlan(uint8_t bus) {
- if(hw_type != HW_TYPE_BLACK_PANDA){
+ if(board_has_gmlan()){
// first, disable GMLAN on prev bus
uint8_t prev_bus = can_num_lookup[3];
if (bus != prev_bus) {
@@ -186,7 +195,8 @@ void can_set_gmlan(uint8_t bus) {
bus_lookup[prev_bus] = prev_bus;
can_num_lookup[prev_bus] = prev_bus;
can_num_lookup[3] = -1;
- can_init(prev_bus);
+ bool ret = can_init(prev_bus);
+ UNUSED(ret);
break;
default:
// GMLAN was not set on either BUS 1 or 2
@@ -205,7 +215,8 @@ void can_set_gmlan(uint8_t bus) {
bus_lookup[bus] = 3;
can_num_lookup[bus] = -1;
can_num_lookup[3] = bus;
- can_init(bus);
+ bool ret = can_init(bus);
+ UNUSED(ret);
break;
case 0xFF: //-1 unsigned
break;
@@ -225,7 +236,7 @@ void can_set_obd(uint8_t harness_orientation, bool obd){
} else {
puts("setting CAN2 to be normal\n");
}
- if(hw_type == HW_TYPE_BLACK_PANDA){
+ if(board_has_obd()){
if(obd != (bool)(harness_orientation == HARNESS_STATUS_NORMAL)){
// B5,B6: disable normal mode
set_gpio_mode(GPIOB, 5, MODE_INPUT);
@@ -242,13 +253,13 @@ void can_set_obd(uint8_t harness_orientation, bool obd){
set_gpio_mode(GPIOB, 13, MODE_INPUT);
}
} else {
- puts("OBD CAN not available on non-black panda\n");
+ puts("OBD CAN not available on this board\n");
}
}
// CAN error
void can_sce(CAN_TypeDef *CAN) {
- enter_critical_section();
+ ENTER_CRITICAL();
#ifdef DEBUG
if (CAN==CAN1) puts("CAN1: ");
@@ -271,7 +282,7 @@ void can_sce(CAN_TypeDef *CAN) {
can_err_cnt += 1;
llcan_clear_send(CAN);
- exit_critical_section();
+ EXIT_CRITICAL();
}
// ***************************** CAN *****************************
@@ -279,7 +290,7 @@ void can_sce(CAN_TypeDef *CAN) {
void process_can(uint8_t can_number) {
if (can_number != 0xffU) {
- enter_critical_section();
+ ENTER_CRITICAL();
CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
uint8_t bus_number = BUS_NUM_FROM_CAN_NUM(can_number);
@@ -297,7 +308,7 @@ void process_can(uint8_t can_number) {
to_push.RDTR = (CAN->sTxMailBox[0].TDTR & 0xFFFF000FU) | ((CAN_BUS_RET_FLAG | bus_number) << 4);
to_push.RDLR = CAN->sTxMailBox[0].TDLR;
to_push.RDHR = CAN->sTxMailBox[0].TDHR;
- can_send_errs += !can_push(&can_rx_q, &to_push);
+ can_send_errs += can_push(&can_rx_q, &to_push) ? 0U : 1U;
}
if ((CAN->TSR & CAN_TSR_TERR0) == CAN_TSR_TERR0) {
@@ -324,10 +335,42 @@ void process_can(uint8_t can_number) {
CAN->sTxMailBox[0].TDHR = to_send.RDHR;
CAN->sTxMailBox[0].TDTR = to_send.RDTR;
CAN->sTxMailBox[0].TIR = to_send.RIR;
+
+ if (can_tx_check_min_slots_free(MAX_CAN_MSGS_PER_BULK_TRANSFER)) {
+ usb_outep3_resume_if_paused();
+ }
}
}
- exit_critical_section();
+ EXIT_CRITICAL();
+ }
+}
+
+void ignition_can_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+ int bus = GET_BUS(to_push);
+ int addr = GET_ADDR(to_push);
+ int len = GET_LEN(to_push);
+
+ ignition_can_cnt = 0U; // reset counter
+
+ if (bus == 0) {
+ // TODO: verify on all supported GM models that we can reliably detect ignition using only this signal,
+ // since the 0x1F1 signal can briefly go low immediately after ignition
+ if ((addr == 0x160) && (len == 5)) {
+ // this message isn't all zeros when ignition is on
+ ignition_cadillac = GET_BYTES_04(to_push) != 0;
+ }
+ // GM exception
+ if ((addr == 0x1F1) && (len == 8)) {
+ // Bit 5 is ignition "on"
+ bool ignition_gm = ((GET_BYTE(to_push, 0) & 0x20) != 0);
+ ignition_can = ignition_gm || ignition_cadillac;
+ }
+ // Tesla exception
+ if ((addr == 0x348) && (len == 8)) {
+ // GTW_status
+ ignition_can = (GET_BYTE(to_push, 0) & 0x1) != 0;
+ }
}
}
@@ -360,42 +403,50 @@ void can_rx(uint8_t can_number) {
to_send.RDTR = to_push.RDTR;
to_send.RDLR = to_push.RDLR;
to_send.RDHR = to_push.RDHR;
- can_send(&to_send, bus_fwd_num);
+ can_send(&to_send, bus_fwd_num, true);
}
- safety_rx_hook(&to_push);
+ can_rx_errs += safety_rx_hook(&to_push) ? 0U : 1U;
+ ignition_can_hook(&to_push);
current_board->set_led(LED_BLUE, true);
- can_send_errs += !can_push(&can_rx_q, &to_push);
+ can_send_errs += can_push(&can_rx_q, &to_push) ? 0U : 1U;
// next
CAN->RF0R |= CAN_RF0R_RFOM0;
}
}
-void CAN1_TX_IRQHandler(void) { process_can(0); }
-void CAN1_RX0_IRQHandler(void) { can_rx(0); }
-void CAN1_SCE_IRQHandler(void) { can_sce(CAN1); }
+void CAN1_TX_IRQ_Handler(void) { process_can(0); }
+void CAN1_RX0_IRQ_Handler(void) { can_rx(0); }
+void CAN1_SCE_IRQ_Handler(void) { can_sce(CAN1); }
-void CAN2_TX_IRQHandler(void) { process_can(1); }
-void CAN2_RX0_IRQHandler(void) { can_rx(1); }
-void CAN2_SCE_IRQHandler(void) { can_sce(CAN2); }
+void CAN2_TX_IRQ_Handler(void) { process_can(1); }
+void CAN2_RX0_IRQ_Handler(void) { can_rx(1); }
+void CAN2_SCE_IRQ_Handler(void) { can_sce(CAN2); }
-void CAN3_TX_IRQHandler(void) { process_can(2); }
-void CAN3_RX0_IRQHandler(void) { can_rx(2); }
-void CAN3_SCE_IRQHandler(void) { can_sce(CAN3); }
+void CAN3_TX_IRQ_Handler(void) { process_can(2); }
+void CAN3_RX0_IRQ_Handler(void) { can_rx(2); }
+void CAN3_SCE_IRQ_Handler(void) { can_sce(CAN3); }
-void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number) {
- if (safety_tx_hook(to_push) != 0) {
+bool can_tx_check_min_slots_free(uint32_t min) {
+ return
+ (can_slots_empty(&can_tx1_q) >= min) &&
+ (can_slots_empty(&can_tx2_q) >= min) &&
+ (can_slots_empty(&can_tx3_q) >= min) &&
+ (can_slots_empty(&can_txgmlan_q) >= min);
+}
+
+void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number, bool skip_tx_hook) {
+ if (skip_tx_hook || safety_tx_hook(to_push) != 0) {
if (bus_number < BUS_MAX) {
// add CAN packet to send queue
// bus number isn't passed through
to_push->RDTR &= 0xF;
if ((bus_number == 3U) && (can_num_lookup[3] == 0xFFU)) {
- // TODO: why uint8 bro? only int8?
- gmlan_send_errs += !bitbang_gmlan(to_push);
+ gmlan_send_errs += bitbang_gmlan(to_push) ? 0U : 1U;
} else {
- can_fwd_errs += !can_push(can_queues[bus_number], to_push);
+ can_fwd_errs += can_push(can_queues[bus_number], to_push) ? 0U : 1U;
process_can(CAN_NUM_FROM_BUS_NUM(bus_number));
}
}
@@ -406,3 +457,26 @@ void can_set_forwarding(int from, int to) {
can_forwarding[from] = to;
}
+bool can_init(uint8_t can_number) {
+ bool ret = false;
+
+ REGISTER_INTERRUPT(CAN1_TX_IRQn, CAN1_TX_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN1_RX0_IRQn, CAN1_RX0_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN1_SCE_IRQn, CAN1_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN2_TX_IRQn, CAN2_TX_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_2)
+ REGISTER_INTERRUPT(CAN2_RX0_IRQn, CAN2_RX0_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_2)
+ REGISTER_INTERRUPT(CAN2_SCE_IRQn, CAN2_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_2)
+ REGISTER_INTERRUPT(CAN3_TX_IRQn, CAN3_TX_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_3)
+ REGISTER_INTERRUPT(CAN3_RX0_IRQn, CAN3_RX0_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_3)
+ REGISTER_INTERRUPT(CAN3_SCE_IRQn, CAN3_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_3)
+
+ if (can_number != 0xffU) {
+ CAN_TypeDef *CAN = CANIF_FROM_CAN_NUM(can_number);
+ ret &= can_set_speed(can_number);
+ ret &= llcan_init(CAN);
+ // in case there are queued up messages
+ process_can(can_number);
+ }
+ return ret;
+}
+
diff --git a/panda/board/drivers/clock.h b/panda/board/drivers/clock.h
index d564c7f01db28d..b75692438ec63a 100644
--- a/panda/board/drivers/clock.h
+++ b/panda/board/drivers/clock.h
@@ -1,25 +1,24 @@
void clock_init(void) {
// enable external oscillator
- RCC->CR |= RCC_CR_HSEON;
+ register_set_bits(&(RCC->CR), RCC_CR_HSEON);
while ((RCC->CR & RCC_CR_HSERDY) == 0);
// divide things
- RCC->CFGR = RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE2_DIV2 | RCC_CFGR_PPRE1_DIV4;
+ register_set(&(RCC->CFGR), RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE2_DIV2 | RCC_CFGR_PPRE1_DIV4, 0xFF7FFCF3U);
// 16mhz crystal
- RCC->PLLCFGR = RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLM_3 |
- RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_5 | RCC_PLLCFGR_PLLSRC_HSE;
+ register_set(&(RCC->PLLCFGR), RCC_PLLCFGR_PLLQ_2 | RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLN_6 | RCC_PLLCFGR_PLLN_5 | RCC_PLLCFGR_PLLSRC_HSE, 0x7F437FFFU);
// start PLL
- RCC->CR |= RCC_CR_PLLON;
+ register_set_bits(&(RCC->CR), RCC_CR_PLLON);
while ((RCC->CR & RCC_CR_PLLRDY) == 0);
// Configure Flash prefetch, Instruction cache, Data cache and wait state
// *** without this, it breaks ***
- FLASH->ACR = FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS;
+ register_set(&(FLASH->ACR), FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS, 0x1F0FU);
// switch to PLL
- RCC->CFGR |= RCC_CFGR_SW_PLL;
+ register_set_bits(&(RCC->CFGR), RCC_CFGR_SW_PLL);
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);
// *** running on PLL ***
@@ -27,14 +26,15 @@ void clock_init(void) {
void watchdog_init(void) {
// setup watchdog
- IWDG->KR = 0x5555;
- IWDG->PR = 0; // divider /4
+ IWDG->KR = 0x5555U;
+ register_set(&(IWDG->PR), 0x0U, 0x7U); // divider/4
+
// 0 = 0.125 ms, let's have a 50ms watchdog
- IWDG->RLR = 400 - 1;
- IWDG->KR = 0xCCCC;
+ register_set(&(IWDG->RLR), (400U-1U), 0xFFFU);
+ IWDG->KR = 0xCCCCU;
}
void watchdog_feed(void) {
- IWDG->KR = 0xAAAA;
+ IWDG->KR = 0xAAAAU;
}
diff --git a/panda/board/drivers/clock_source.h b/panda/board/drivers/clock_source.h
new file mode 100644
index 00000000000000..966dee452e0839
--- /dev/null
+++ b/panda/board/drivers/clock_source.h
@@ -0,0 +1,100 @@
+
+#define CLOCK_SOURCE_MODE_DISABLED 0U
+#define CLOCK_SOURCE_MODE_FREE_RUNNING 1U
+#define CLOCK_SOURCE_MODE_EXTERNAL_SYNC 2U
+
+#define CLOCK_SOURCE_PERIOD_MS 50U
+#define CLOCK_SOURCE_PULSE_LEN_MS 2U
+
+uint8_t clock_source_mode = CLOCK_SOURCE_MODE_DISABLED;
+
+void EXTI0_IRQ_Handler(void) {
+ volatile unsigned int pr = EXTI->PR & (1U << 0);
+ if (pr != 0U) {
+ if(clock_source_mode == CLOCK_SOURCE_MODE_EXTERNAL_SYNC){
+ // TODO: Implement!
+ }
+ }
+ EXTI->PR = (1U << 0);
+}
+
+void TIM1_UP_TIM10_IRQ_Handler(void) {
+ if((TIM1->SR & TIM_SR_UIF) != 0) {
+ if(clock_source_mode != CLOCK_SOURCE_MODE_DISABLED) {
+ // Start clock pulse
+ set_gpio_output(GPIOB, 14, true);
+ set_gpio_output(GPIOB, 15, true);
+ }
+
+ // Reset interrupt
+ TIM1->SR &= ~(TIM_SR_UIF);
+ }
+}
+
+void TIM1_CC_IRQ_Handler(void) {
+ if((TIM1->SR & TIM_SR_CC1IF) != 0) {
+ if(clock_source_mode != CLOCK_SOURCE_MODE_DISABLED) {
+ // End clock pulse
+ set_gpio_output(GPIOB, 14, false);
+ set_gpio_output(GPIOB, 15, false);
+ }
+
+ // Reset interrupt
+ TIM1->SR &= ~(TIM_SR_CC1IF);
+ }
+}
+
+void clock_source_init(uint8_t mode){
+ // Setup external clock signal interrupt
+ REGISTER_INTERRUPT(EXTI0_IRQn, EXTI0_IRQ_Handler, 110U, FAULT_INTERRUPT_RATE_CLOCK_SOURCE)
+ register_set(&(SYSCFG->EXTICR[0]), SYSCFG_EXTICR1_EXTI0_PB, 0xFU);
+ register_set_bits(&(EXTI->IMR), (1U << 0));
+ register_set_bits(&(EXTI->RTSR), (1U << 0));
+ register_clear_bits(&(EXTI->FTSR), (1U << 0));
+
+ // Setup timer
+ REGISTER_INTERRUPT(TIM1_UP_TIM10_IRQn, TIM1_UP_TIM10_IRQ_Handler, (1200U / CLOCK_SOURCE_PERIOD_MS) , FAULT_INTERRUPT_RATE_TIM1)
+ REGISTER_INTERRUPT(TIM1_CC_IRQn, TIM1_CC_IRQ_Handler, (1200U / CLOCK_SOURCE_PERIOD_MS) , FAULT_INTERRUPT_RATE_TIM1)
+ register_set(&(TIM1->PSC), (9600-1), 0xFFFFU); // Tick on 0.1 ms
+ register_set(&(TIM1->ARR), ((CLOCK_SOURCE_PERIOD_MS*10U) - 1U), 0xFFFFU); // Period
+ register_set(&(TIM1->CCMR1), 0U, 0xFFFFU); // No output on compare
+ register_set_bits(&(TIM1->CCER), TIM_CCER_CC1E); // Enable compare 1
+ register_set(&(TIM1->CCR1), (CLOCK_SOURCE_PULSE_LEN_MS*10U), 0xFFFFU); // Compare 1 value
+ register_set_bits(&(TIM1->DIER), TIM_DIER_UIE | TIM_DIER_CC1IE); // Enable interrupts
+ register_set(&(TIM1->CR1), TIM_CR1_CEN, 0x3FU); // Enable timer
+
+ // Set mode
+ switch(mode) {
+ case CLOCK_SOURCE_MODE_DISABLED:
+ // No clock signal
+ NVIC_DisableIRQ(EXTI0_IRQn);
+ NVIC_DisableIRQ(TIM1_UP_TIM10_IRQn);
+ NVIC_DisableIRQ(TIM1_CC_IRQn);
+
+ // Disable pulse if we were in the middle of it
+ set_gpio_output(GPIOB, 14, false);
+ set_gpio_output(GPIOB, 15, false);
+
+ clock_source_mode = CLOCK_SOURCE_MODE_DISABLED;
+ break;
+ case CLOCK_SOURCE_MODE_FREE_RUNNING:
+ // Clock signal is based on internal timer
+ NVIC_DisableIRQ(EXTI0_IRQn);
+ NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
+ NVIC_EnableIRQ(TIM1_CC_IRQn);
+
+ clock_source_mode = CLOCK_SOURCE_MODE_FREE_RUNNING;
+ break;
+ case CLOCK_SOURCE_MODE_EXTERNAL_SYNC:
+ // Clock signal is based on external timer
+ NVIC_EnableIRQ(EXTI0_IRQn);
+ NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
+ NVIC_EnableIRQ(TIM1_CC_IRQn);
+
+ clock_source_mode = CLOCK_SOURCE_MODE_EXTERNAL_SYNC;
+ break;
+ default:
+ puts("Unknown clock source mode: "); puth(mode); puts("\n");
+ break;
+ }
+}
\ No newline at end of file
diff --git a/panda/board/drivers/dac.h b/panda/board/drivers/dac.h
index ac565eb221cd05..4bdb16100c7bb6 100644
--- a/panda/board/drivers/dac.h
+++ b/panda/board/drivers/dac.h
@@ -2,22 +2,19 @@ void puth(unsigned int i);
void puts(const char *a);
void dac_init(void) {
- // no buffers required since we have an opamp
- //DAC->CR = DAC_CR_EN1 | DAC_CR_BOFF1 | DAC_CR_EN2 | DAC_CR_BOFF2;
- DAC->DHR12R1 = 0;
- DAC->DHR12R2 = 0;
- DAC->CR = DAC_CR_EN1 | DAC_CR_EN2;
+ // No buffers required since we have an opamp
+ register_set(&(DAC->DHR12R1), 0U, 0xFFFU);
+ register_set(&(DAC->DHR12R2), 0U, 0xFFFU);
+ register_set(&(DAC->CR), DAC_CR_EN1 | DAC_CR_EN2, 0x3FFF3FFFU);
}
void dac_set(int channel, uint32_t value) {
if (channel == 0) {
- DAC->DHR12R1 = value;
+ register_set(&(DAC->DHR12R1), value, 0xFFFU);
} else if (channel == 1) {
- DAC->DHR12R2 = value;
+ register_set(&(DAC->DHR12R2), value, 0xFFFU);
} else {
- puts("Failed to set DAC: invalid channel value: ");
- puth(value);
- puts("\n");
+ puts("Failed to set DAC: invalid channel value: 0x"); puth(value); puts("\n");
}
}
diff --git a/panda/board/drivers/fan.h b/panda/board/drivers/fan.h
new file mode 100644
index 00000000000000..2f10e5ca8d7b51
--- /dev/null
+++ b/panda/board/drivers/fan.h
@@ -0,0 +1,39 @@
+void fan_set_power(uint8_t percentage){
+ pwm_set(TIM3, 3, percentage);
+}
+
+uint16_t fan_tach_counter = 0U;
+uint16_t fan_rpm = 0U;
+
+// Can be way more acurate than this, but this is probably good enough for our purposes.
+
+// Call this every second
+void fan_tick(void){
+ // 4 interrupts per rotation
+ fan_rpm = fan_tach_counter * 15U;
+ fan_tach_counter = 0U;
+}
+
+// TACH interrupt handler
+void EXTI2_IRQ_Handler(void) {
+ volatile unsigned int pr = EXTI->PR & (1U << 2);
+ if ((pr & (1U << 2)) != 0U) {
+ fan_tach_counter++;
+ }
+ EXTI->PR = (1U << 2);
+}
+
+void fan_init(void){
+ // 5000RPM * 4 tach edges / 60 seconds
+ REGISTER_INTERRUPT(EXTI2_IRQn, EXTI2_IRQ_Handler, 700U, FAULT_INTERRUPT_RATE_TACH)
+
+ // Init PWM speed control
+ pwm_init(TIM3, 3);
+
+ // Init TACH interrupt
+ register_set(&(SYSCFG->EXTICR[0]), SYSCFG_EXTICR1_EXTI2_PD, 0xF00U);
+ register_set_bits(&(EXTI->IMR), (1U << 2));
+ register_set_bits(&(EXTI->RTSR), (1U << 2));
+ register_set_bits(&(EXTI->FTSR), (1U << 2));
+ NVIC_EnableIRQ(EXTI2_IRQn);
+}
\ No newline at end of file
diff --git a/panda/board/drivers/gmlan_alt.h b/panda/board/drivers/gmlan_alt.h
index c697a21b41ef9c..2f2e568055b02f 100644
--- a/panda/board/drivers/gmlan_alt.h
+++ b/panda/board/drivers/gmlan_alt.h
@@ -122,17 +122,22 @@ int get_bit_message(char *out, CAN_FIFOMailBox_TypeDef *to_bang) {
return len;
}
+void TIM4_IRQ_Handler(void);
+
void setup_timer4(void) {
+ // register interrupt
+ REGISTER_INTERRUPT(TIM4_IRQn, TIM4_IRQ_Handler, 40000U, FAULT_INTERRUPT_RATE_GMLAN)
+
// setup
- TIM4->PSC = 48-1; // tick on 1 us
- TIM4->CR1 = TIM_CR1_CEN; // enable
- TIM4->ARR = 30-1; // 33.3 kbps
+ register_set(&(TIM4->PSC), (48-1), 0xFFFFU); // Tick on 1 us
+ register_set(&(TIM4->CR1), TIM_CR1_CEN, 0x3FU); // Enable
+ register_set(&(TIM4->ARR), (30-1), 0xFFFFU); // 33.3 kbps
// in case it's disabled
NVIC_EnableIRQ(TIM4_IRQn);
// run the interrupt
- TIM4->DIER = TIM_DIER_UIE; // update interrupt
+ register_set(&(TIM4->DIER), TIM_DIER_UIE, 0x5F5FU); // Update interrupt
TIM4->SR = 0;
}
@@ -171,9 +176,9 @@ void reset_gmlan_switch_timeout(void) {
void set_bitbanged_gmlan(int val) {
if (val != 0) {
- GPIOB->ODR |= (1U << 13);
+ register_set_bits(&(GPIOB->ODR), (1U << 13));
} else {
- GPIOB->ODR &= ~(1U << 13);
+ register_clear_bits(&(GPIOB->ODR), (1U << 13));
}
}
@@ -187,7 +192,7 @@ int gmlan_fail_count = 0;
#define REQUIRED_SILENT_TIME 10
#define MAX_FAIL_COUNT 10
-void TIM4_IRQHandler(void) {
+void TIM4_IRQ_Handler(void) {
if (gmlan_alt_mode == BITBANG) {
if ((TIM4->SR & TIM_SR_UIF) && (gmlan_sendmax != -1)) {
int read = get_gpio_input(GPIOB, 12);
@@ -231,12 +236,11 @@ void TIM4_IRQHandler(void) {
if ((gmlan_sending == gmlan_sendmax) || (gmlan_fail_count == MAX_FAIL_COUNT)) {
set_bitbanged_gmlan(1); // recessive
set_gpio_mode(GPIOB, 13, MODE_INPUT);
- TIM4->DIER = 0; // no update interrupt
- TIM4->CR1 = 0; // disable timer
+ register_clear_bits(&(TIM4->DIER), TIM_DIER_UIE); // No update interrupt
+ register_set(&(TIM4->CR1), 0U, 0x3FU); // Disable timer
gmlan_sendmax = -1; // exit
}
}
- TIM4->SR = 0;
} else if (gmlan_alt_mode == GPIO_SWITCH) {
if ((TIM4->SR & TIM_SR_UIF) && (gmlan_switch_below_timeout != -1)) {
if ((can_timeout_counter == 0) && gmlan_switch_timeout_enable) {
@@ -259,10 +263,10 @@ void TIM4_IRQHandler(void) {
}
}
}
- TIM4->SR = 0;
} else {
- puts("invalid gmlan_alt_mode\n");
+ // Invalid GMLAN mode. Do not put a print statement here, way too fast to keep up with
}
+ TIM4->SR = 0;
}
bool bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
@@ -279,6 +283,7 @@ bool bitbang_gmlan(CAN_FIFOMailBox_TypeDef *to_bang) {
set_bitbanged_gmlan(1); // recessive
set_gpio_mode(GPIOB, 13, MODE_OUTPUT);
+ // 33kbps
setup_timer4();
}
return gmlan_send_ok;
diff --git a/panda/board/drivers/harness.h b/panda/board/drivers/harness.h
index 17520a4bab8055..4aeb41fe6300b0 100644
--- a/panda/board/drivers/harness.h
+++ b/panda/board/drivers/harness.h
@@ -8,14 +8,14 @@ uint8_t car_harness_status = 0U;
struct harness_configuration {
const bool has_harness;
- GPIO_TypeDef *GPIO_SBU1;
+ GPIO_TypeDef *GPIO_SBU1;
GPIO_TypeDef *GPIO_SBU2;
- GPIO_TypeDef *GPIO_relay_normal;
- GPIO_TypeDef *GPIO_relay_flipped;
+ GPIO_TypeDef *GPIO_relay_SBU1;
+ GPIO_TypeDef *GPIO_relay_SBU2;
uint8_t pin_SBU1;
uint8_t pin_SBU2;
- uint8_t pin_relay_normal;
- uint8_t pin_relay_flipped;
+ uint8_t pin_relay_SBU1;
+ uint8_t pin_relay_SBU2;
uint8_t adc_channel_SBU1;
uint8_t adc_channel_SBU2;
};
@@ -30,9 +30,9 @@ void set_intercept_relay(bool intercept) {
}
if(car_harness_status == HARNESS_STATUS_NORMAL){
- set_gpio_output(current_board->harness_config->GPIO_relay_normal, current_board->harness_config->pin_relay_normal, !intercept);
+ set_gpio_output(current_board->harness_config->GPIO_relay_SBU2, current_board->harness_config->pin_relay_SBU2, !intercept);
} else {
- set_gpio_output(current_board->harness_config->GPIO_relay_flipped, current_board->harness_config->pin_relay_flipped, !intercept);
+ set_gpio_output(current_board->harness_config->GPIO_relay_SBU1, current_board->harness_config->pin_relay_SBU1, !intercept);
}
}
}
@@ -41,10 +41,10 @@ bool harness_check_ignition(void) {
bool ret = false;
switch(car_harness_status){
case HARNESS_STATUS_NORMAL:
- ret = !get_gpio_input(current_board->harness_config->GPIO_SBU2, current_board->harness_config->pin_SBU2);
+ ret = !get_gpio_input(current_board->harness_config->GPIO_SBU1, current_board->harness_config->pin_SBU1);
break;
case HARNESS_STATUS_FLIPPED:
- ret = !get_gpio_input(current_board->harness_config->GPIO_SBU1, current_board->harness_config->pin_SBU1);
+ ret = !get_gpio_input(current_board->harness_config->GPIO_SBU2, current_board->harness_config->pin_SBU2);
break;
default:
break;
@@ -52,28 +52,6 @@ bool harness_check_ignition(void) {
return ret;
}
-// TODO: refactor to use harness config
-void harness_setup_ignition_interrupts(void){
- if(car_harness_status == HARNESS_STATUS_NORMAL){
- SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI3_PC;
- EXTI->IMR |= (1U << 3);
- EXTI->RTSR |= (1U << 3);
- EXTI->FTSR |= (1U << 3);
- puts("setup interrupts: normal\n");
- } else if(car_harness_status == HARNESS_STATUS_FLIPPED) {
- SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI0_PC;
- EXTI->IMR |= (1U << 0);
- EXTI->RTSR |= (1U << 0);
- EXTI->FTSR |= (1U << 0);
- NVIC_EnableIRQ(EXTI1_IRQn);
- puts("setup interrupts: flipped\n");
- } else {
- puts("tried to setup ignition interrupts without harness connected\n");
- }
- NVIC_EnableIRQ(EXTI0_IRQn);
- NVIC_EnableIRQ(EXTI3_IRQn);
-}
-
uint8_t harness_detect_orientation(void) {
uint8_t ret = HARNESS_STATUS_NC;
@@ -84,11 +62,11 @@ uint8_t harness_detect_orientation(void) {
// Detect connection and orientation
if((sbu1_voltage < HARNESS_CONNECTED_THRESHOLD) || (sbu2_voltage < HARNESS_CONNECTED_THRESHOLD)){
if (sbu1_voltage < sbu2_voltage) {
- // orientation normal
- ret = HARNESS_STATUS_NORMAL;
- } else {
- // orientation flipped
+ // orientation flipped (PANDA_SBU1->HARNESS_SBU1(relay), PANDA_SBU2->HARNESS_SBU2(ign))
ret = HARNESS_STATUS_FLIPPED;
+ } else {
+ // orientation normal (PANDA_SBU2->HARNESS_SBU1(relay), PANDA_SBU1->HARNESS_SBU2(ign))
+ ret = HARNESS_STATUS_NORMAL;
}
}
#endif
@@ -112,19 +90,9 @@ void harness_init(void) {
set_gpio_mode(current_board->harness_config->GPIO_SBU1, current_board->harness_config->pin_SBU1, MODE_INPUT);
set_gpio_mode(current_board->harness_config->GPIO_SBU2, current_board->harness_config->pin_SBU2, MODE_INPUT);
- // now we have orientation, set pin ignition detection
- if(car_harness_status == HARNESS_STATUS_NORMAL){
- set_gpio_mode(current_board->harness_config->GPIO_SBU2, current_board->harness_config->pin_SBU2, MODE_INPUT);
- } else {
- set_gpio_mode(current_board->harness_config->GPIO_SBU1, current_board->harness_config->pin_SBU1, MODE_INPUT);
- }
-
// keep busses connected by default
set_intercept_relay(false);
-
- // setup ignition interrupts
- harness_setup_ignition_interrupts();
} else {
puts("failed to detect car harness!\n");
}
-}
\ No newline at end of file
+}
diff --git a/panda/board/drivers/interrupts.h b/panda/board/drivers/interrupts.h
new file mode 100644
index 00000000000000..f15c441ab04dfe
--- /dev/null
+++ b/panda/board/drivers/interrupts.h
@@ -0,0 +1,164 @@
+typedef struct interrupt {
+ IRQn_Type irq_type;
+ void (*handler)(void);
+ uint32_t call_counter;
+ uint32_t max_call_rate; // Call rate is defined as the amount of calls each second
+ uint32_t call_rate_fault;
+} interrupt;
+
+void unused_interrupt_handler(void) {
+ // Something is wrong if this handler is called!
+ puts("Unused interrupt handler called!\n");
+ fault_occurred(FAULT_UNUSED_INTERRUPT_HANDLED);
+}
+
+#define NUM_INTERRUPTS 102U // There are 102 external interrupt sources (see stm32f413.h)
+interrupt interrupts[NUM_INTERRUPTS];
+
+#define REGISTER_INTERRUPT(irq_num, func_ptr, call_rate, rate_fault) \
+ interrupts[irq_num].irq_type = irq_num; \
+ interrupts[irq_num].handler = func_ptr; \
+ interrupts[irq_num].call_counter = 0U; \
+ interrupts[irq_num].max_call_rate = call_rate; \
+ interrupts[irq_num].call_rate_fault = rate_fault;
+
+bool check_interrupt_rate = false;
+
+void handle_interrupt(IRQn_Type irq_type){
+ interrupts[irq_type].call_counter++;
+ interrupts[irq_type].handler();
+
+ // Check that the interrupts don't fire too often
+ if(check_interrupt_rate && (interrupts[irq_type].call_counter > interrupts[irq_type].max_call_rate)){
+ puts("Interrupt 0x"); puth(irq_type); puts(" fired too often (0x"); puth(interrupts[irq_type].call_counter); puts("/s)!\n");
+ fault_occurred(interrupts[irq_type].call_rate_fault);
+ }
+}
+
+// Reset interrupt counter every second
+void TIM6_DAC_IRQ_Handler(void) {
+ if (TIM6->SR != 0) {
+ for(uint16_t i=0U; iSR = 0;
+}
+
+void init_interrupts(bool check_rate_limit){
+ check_interrupt_rate = check_rate_limit;
+
+ for(uint16_t i=0U; iAPB1ENR), RCC_APB1ENR_TIM6EN); // Enable interrupt timer peripheral
+ REGISTER_INTERRUPT(TIM6_DAC_IRQn, TIM6_DAC_IRQ_Handler, 1, FAULT_INTERRUPT_RATE_INTERRUPTS)
+ register_set(&(TIM6->PSC), (732-1), 0xFFFFU);
+ register_set(&(TIM6->DIER), TIM_DIER_UIE, 0x5F5FU);
+ register_set(&(TIM6->CR1), TIM_CR1_CEN, 0x3FU);
+ TIM6->SR = 0;
+ NVIC_EnableIRQ(TIM6_DAC_IRQn);
+}
+
+// ********************* Bare interrupt handlers *********************
+// Only implemented the STM32F413 interrupts for now, the STM32F203 specific ones do not fall into the scope of SIL2
+
+void WWDG_IRQHandler(void) {handle_interrupt(WWDG_IRQn);}
+void PVD_IRQHandler(void) {handle_interrupt(PVD_IRQn);}
+void TAMP_STAMP_IRQHandler(void) {handle_interrupt(TAMP_STAMP_IRQn);}
+void RTC_WKUP_IRQHandler(void) {handle_interrupt(RTC_WKUP_IRQn);}
+void FLASH_IRQHandler(void) {handle_interrupt(FLASH_IRQn);}
+void RCC_IRQHandler(void) {handle_interrupt(RCC_IRQn);}
+void EXTI0_IRQHandler(void) {handle_interrupt(EXTI0_IRQn);}
+void EXTI1_IRQHandler(void) {handle_interrupt(EXTI1_IRQn);}
+void EXTI2_IRQHandler(void) {handle_interrupt(EXTI2_IRQn);}
+void EXTI3_IRQHandler(void) {handle_interrupt(EXTI3_IRQn);}
+void EXTI4_IRQHandler(void) {handle_interrupt(EXTI4_IRQn);}
+void DMA1_Stream0_IRQHandler(void) {handle_interrupt(DMA1_Stream0_IRQn);}
+void DMA1_Stream1_IRQHandler(void) {handle_interrupt(DMA1_Stream1_IRQn);}
+void DMA1_Stream2_IRQHandler(void) {handle_interrupt(DMA1_Stream2_IRQn);}
+void DMA1_Stream3_IRQHandler(void) {handle_interrupt(DMA1_Stream3_IRQn);}
+void DMA1_Stream4_IRQHandler(void) {handle_interrupt(DMA1_Stream4_IRQn);}
+void DMA1_Stream5_IRQHandler(void) {handle_interrupt(DMA1_Stream5_IRQn);}
+void DMA1_Stream6_IRQHandler(void) {handle_interrupt(DMA1_Stream6_IRQn);}
+void ADC_IRQHandler(void) {handle_interrupt(ADC_IRQn);}
+void CAN1_TX_IRQHandler(void) {handle_interrupt(CAN1_TX_IRQn);}
+void CAN1_RX0_IRQHandler(void) {handle_interrupt(CAN1_RX0_IRQn);}
+void CAN1_RX1_IRQHandler(void) {handle_interrupt(CAN1_RX1_IRQn);}
+void CAN1_SCE_IRQHandler(void) {handle_interrupt(CAN1_SCE_IRQn);}
+void EXTI9_5_IRQHandler(void) {handle_interrupt(EXTI9_5_IRQn);}
+void TIM1_BRK_TIM9_IRQHandler(void) {handle_interrupt(TIM1_BRK_TIM9_IRQn);}
+void TIM1_UP_TIM10_IRQHandler(void) {handle_interrupt(TIM1_UP_TIM10_IRQn);}
+void TIM1_TRG_COM_TIM11_IRQHandler(void) {handle_interrupt(TIM1_TRG_COM_TIM11_IRQn);}
+void TIM1_CC_IRQHandler(void) {handle_interrupt(TIM1_CC_IRQn);}
+void TIM2_IRQHandler(void) {handle_interrupt(TIM2_IRQn);}
+void TIM3_IRQHandler(void) {handle_interrupt(TIM3_IRQn);}
+void TIM4_IRQHandler(void) {handle_interrupt(TIM4_IRQn);}
+void I2C1_EV_IRQHandler(void) {handle_interrupt(I2C1_EV_IRQn);}
+void I2C1_ER_IRQHandler(void) {handle_interrupt(I2C1_ER_IRQn);}
+void I2C2_EV_IRQHandler(void) {handle_interrupt(I2C2_EV_IRQn);}
+void I2C2_ER_IRQHandler(void) {handle_interrupt(I2C2_ER_IRQn);}
+void SPI1_IRQHandler(void) {handle_interrupt(SPI1_IRQn);}
+void SPI2_IRQHandler(void) {handle_interrupt(SPI2_IRQn);}
+void USART1_IRQHandler(void) {handle_interrupt(USART1_IRQn);}
+void USART2_IRQHandler(void) {handle_interrupt(USART2_IRQn);}
+void USART3_IRQHandler(void) {handle_interrupt(USART3_IRQn);}
+void EXTI15_10_IRQHandler(void) {handle_interrupt(EXTI15_10_IRQn);}
+void RTC_Alarm_IRQHandler(void) {handle_interrupt(RTC_Alarm_IRQn);}
+void OTG_FS_WKUP_IRQHandler(void) {handle_interrupt(OTG_FS_WKUP_IRQn);}
+void TIM8_BRK_TIM12_IRQHandler(void) {handle_interrupt(TIM8_BRK_TIM12_IRQn);}
+void TIM8_UP_TIM13_IRQHandler(void) {handle_interrupt(TIM8_UP_TIM13_IRQn);}
+void TIM8_TRG_COM_TIM14_IRQHandler(void) {handle_interrupt(TIM8_TRG_COM_TIM14_IRQn);}
+void TIM8_CC_IRQHandler(void) {handle_interrupt(TIM8_CC_IRQn);}
+void DMA1_Stream7_IRQHandler(void) {handle_interrupt(DMA1_Stream7_IRQn);}
+void FSMC_IRQHandler(void) {handle_interrupt(FSMC_IRQn);}
+void SDIO_IRQHandler(void) {handle_interrupt(SDIO_IRQn);}
+void TIM5_IRQHandler(void) {handle_interrupt(TIM5_IRQn);}
+void SPI3_IRQHandler(void) {handle_interrupt(SPI3_IRQn);}
+void UART4_IRQHandler(void) {handle_interrupt(UART4_IRQn);}
+void UART5_IRQHandler(void) {handle_interrupt(UART5_IRQn);}
+void TIM6_DAC_IRQHandler(void) {handle_interrupt(TIM6_DAC_IRQn);}
+void TIM7_IRQHandler(void) {handle_interrupt(TIM7_IRQn);}
+void DMA2_Stream0_IRQHandler(void) {handle_interrupt(DMA2_Stream0_IRQn);}
+void DMA2_Stream1_IRQHandler(void) {handle_interrupt(DMA2_Stream1_IRQn);}
+void DMA2_Stream2_IRQHandler(void) {handle_interrupt(DMA2_Stream2_IRQn);}
+void DMA2_Stream3_IRQHandler(void) {handle_interrupt(DMA2_Stream3_IRQn);}
+void DMA2_Stream4_IRQHandler(void) {handle_interrupt(DMA2_Stream4_IRQn);}
+void CAN2_TX_IRQHandler(void) {handle_interrupt(CAN2_TX_IRQn);}
+void CAN2_RX0_IRQHandler(void) {handle_interrupt(CAN2_RX0_IRQn);}
+void CAN2_RX1_IRQHandler(void) {handle_interrupt(CAN2_RX1_IRQn);}
+void CAN2_SCE_IRQHandler(void) {handle_interrupt(CAN2_SCE_IRQn);}
+void OTG_FS_IRQHandler(void) {handle_interrupt(OTG_FS_IRQn);}
+void DMA2_Stream5_IRQHandler(void) {handle_interrupt(DMA2_Stream5_IRQn);}
+void DMA2_Stream6_IRQHandler(void) {handle_interrupt(DMA2_Stream6_IRQn);}
+void DMA2_Stream7_IRQHandler(void) {handle_interrupt(DMA2_Stream7_IRQn);}
+void USART6_IRQHandler(void) {handle_interrupt(USART6_IRQn);}
+void I2C3_EV_IRQHandler(void) {handle_interrupt(I2C3_EV_IRQn);}
+void I2C3_ER_IRQHandler(void) {handle_interrupt(I2C3_ER_IRQn);}
+#ifdef STM32F4
+ void DFSDM1_FLT0_IRQHandler(void) {handle_interrupt(DFSDM1_FLT0_IRQn);}
+ void DFSDM1_FLT1_IRQHandler(void) {handle_interrupt(DFSDM1_FLT1_IRQn);}
+ void CAN3_TX_IRQHandler(void) {handle_interrupt(CAN3_TX_IRQn);}
+ void CAN3_RX0_IRQHandler(void) {handle_interrupt(CAN3_RX0_IRQn);}
+ void CAN3_RX1_IRQHandler(void) {handle_interrupt(CAN3_RX1_IRQn);}
+ void CAN3_SCE_IRQHandler(void) {handle_interrupt(CAN3_SCE_IRQn);}
+ void RNG_IRQHandler(void) {handle_interrupt(RNG_IRQn);}
+ void FPU_IRQHandler(void) {handle_interrupt(FPU_IRQn);}
+ void UART7_IRQHandler(void) {handle_interrupt(UART7_IRQn);}
+ void UART8_IRQHandler(void) {handle_interrupt(UART8_IRQn);}
+ void SPI4_IRQHandler(void) {handle_interrupt(SPI4_IRQn);}
+ void SPI5_IRQHandler(void) {handle_interrupt(SPI5_IRQn);}
+ void SAI1_IRQHandler(void) {handle_interrupt(SAI1_IRQn);}
+ void UART9_IRQHandler(void) {handle_interrupt(UART9_IRQn);}
+ void UART10_IRQHandler(void) {handle_interrupt(UART10_IRQn);}
+ void QUADSPI_IRQHandler(void) {handle_interrupt(QUADSPI_IRQn);}
+ void FMPI2C1_EV_IRQHandler(void) {handle_interrupt(FMPI2C1_EV_IRQn);}
+ void FMPI2C1_ER_IRQHandler(void) {handle_interrupt(FMPI2C1_ER_IRQn);}
+ void LPTIM1_IRQHandler(void) {handle_interrupt(LPTIM1_IRQn);}
+ void DFSDM2_FLT0_IRQHandler(void) {handle_interrupt(DFSDM2_FLT0_IRQn);}
+ void DFSDM2_FLT1_IRQHandler(void) {handle_interrupt(DFSDM2_FLT1_IRQn);}
+ void DFSDM2_FLT2_IRQHandler(void) {handle_interrupt(DFSDM2_FLT2_IRQn);}
+ void DFSDM2_FLT3_IRQHandler(void) {handle_interrupt(DFSDM2_FLT3_IRQn);}
+#endif
\ No newline at end of file
diff --git a/panda/board/drivers/kline_init.h b/panda/board/drivers/kline_init.h
new file mode 100644
index 00000000000000..a8a859cba7704e
--- /dev/null
+++ b/panda/board/drivers/kline_init.h
@@ -0,0 +1,119 @@
+void TIM5_IRQ_Handler(void);
+
+void setup_timer5(void) {
+ // register interrupt
+ REGISTER_INTERRUPT(TIM5_IRQn, TIM5_IRQ_Handler, 1050000U, FAULT_INTERRUPT_RATE_KLINE_INIT)
+
+ // setup
+ register_set(&(TIM5->PSC), (48-1), 0xFFFFU); // Tick on 1 us
+ register_set(&(TIM5->CR1), TIM_CR1_CEN, 0x3FU); // Enable
+ register_set(&(TIM5->ARR), (5000-1), 0xFFFFFFFFU); // Reset every 5 ms
+
+ // in case it's disabled
+ NVIC_EnableIRQ(TIM5_IRQn);
+
+ // run the interrupt
+ register_set(&(TIM5->DIER), TIM_DIER_UIE, 0x5F5FU); // Update interrupt
+ TIM5->SR = 0;
+}
+
+bool k_init = false;
+bool l_init = false;
+void setup_kline(bool bitbang) {
+ if (bitbang) {
+ if (k_init) {
+ set_gpio_output(GPIOC, 12, true);
+ }
+ if (l_init) {
+ set_gpio_output(GPIOC, 10, true);
+ }
+ } else {
+ if (k_init) {
+ set_gpio_mode(GPIOC, 12, MODE_ALTERNATE);
+ }
+ if (l_init) {
+ set_gpio_mode(GPIOC, 10, MODE_ALTERNATE);
+ }
+ }
+}
+
+void set_bitbanged_kline(bool marking) {
+ // tickle needs to be super fast (so logic level doesn't change)
+ ENTER_CRITICAL();
+ if (k_init) {
+ register_set_bits(&(GPIOC->ODR), (1U << 12));
+ if (!marking) {
+ register_clear_bits(&(GPIOC->ODR), (1U << 12));
+ }
+ }
+ if (l_init) {
+ register_set_bits(&(GPIOC->ODR), (1U << 10));
+ if (!marking) {
+ register_clear_bits(&(GPIOC->ODR), (1U << 10));
+ }
+ }
+ EXIT_CRITICAL();
+ // blink blue LED each time line is pulled low
+ current_board->set_led(LED_BLUE, marking);
+}
+
+uint16_t kline_data = 0;
+uint16_t kline_data_len = 0;
+uint16_t kline_bit_count = 0;
+uint16_t kline_tick_count = 0;
+uint16_t kline_ticks_per_bit = 0;
+
+void TIM5_IRQ_Handler(void) {
+ if ((TIM5->SR & TIM_SR_UIF) && (kline_data != 0U)) {
+ if (kline_bit_count < kline_data_len) {
+ bool marking = (kline_data & (1U << kline_bit_count)) != 0U;
+ set_bitbanged_kline(marking);
+ } else {
+ register_clear_bits(&(TIM5->DIER), TIM_DIER_UIE); // No update interrupt
+ register_set(&(TIM5->CR1), 0U, 0x3FU); // Disable timer
+ setup_kline(false);
+ kline_data = 0U;
+ USB_WritePacket(NULL, 0, 0); // required call (so send nothing)
+ USBx_OUTEP(0)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
+ }
+ kline_tick_count++;
+ if ((kline_tick_count % kline_ticks_per_bit) == 0U) {
+ kline_bit_count++;
+ }
+ }
+ TIM5->SR = 0;
+}
+
+bool bitbang_five_baud_addr(bool k, bool l, uint8_t addr) {
+ bool result = false;
+ if (kline_data == 0U) {
+ k_init = k;
+ l_init = l;
+ kline_data = (addr << 1) + 0x200U; // add start/stop bits
+ kline_data_len = 10U;
+ kline_bit_count = 0;
+ kline_tick_count = 0;
+ kline_ticks_per_bit = 40U; // 200ms == 5bps
+ setup_kline(true);
+ setup_timer5();
+ result = true;
+ }
+ return result;
+}
+
+bool bitbang_wakeup(bool k, bool l) {
+ bool result = false;
+ if (kline_data == 0U) {
+ k_init = k;
+ l_init = l;
+ kline_data = 2U; // low then high
+ kline_data_len = 2U;
+ kline_bit_count = 0;
+ kline_tick_count = 0;
+ kline_ticks_per_bit = 5U; // 25ms == 40bps
+ setup_kline(true);
+ setup_timer5();
+ result = true;
+ }
+ return result;
+}
diff --git a/panda/board/drivers/lin.h b/panda/board/drivers/lin.h
deleted file mode 100644
index 6f9106af3728d0..00000000000000
--- a/panda/board/drivers/lin.h
+++ /dev/null
@@ -1,175 +0,0 @@
-//--------------------------------------------------------------
-// LIN Defines
-//--------------------------------------------------------------
-#define LIN_SYNC_DATA 0x55 // SyncField (do not change)
-#define LIN_MAX_DATA 8 // max 8 databytes
-
-
-//--------------------------------------------------------------
-// LIN error messages
-//--------------------------------------------------------------
-typedef enum {
- LIN_OK = 0, // no error
- LIN_WRONG_LEN, // wrong number of data
- LIN_RX_EMPTY, // no frame received
- LIN_WRONG_CRC // Checksum wrong
-}LIN_ERR_t;
-
-//--------------------------------------------------------------
-// LIN frame Struct
-//--------------------------------------------------------------
-typedef struct {
- uint8_t has_response; // set to 1 if message expects a response; else set to 0
- uint8_t frame_id; // ID number of the frame
- uint8_t data_len; // number of data bytes
- uint8_t data[LIN_MAX_DATA]; // data
-}LIN_FRAME_t;
-
-uint8_t p_LIN_makeChecksum(LIN_FRAME_t *frame);
-void USART_SendBreak(uart_ring *u);
-
-
-// --------------------------------------------------------------
-// sends data via LIN interface
-// frame:
-// frame_id = Unique ID [0x00 to 0xFF]
-// data_len = length of data to be sent
-// data [] = data to be sent
-//
-// return_value:
-// LIN_OK = Frame has been sent
-// LIN_WRONG_LEN = invalid data length
-// --------------------------------------------------------------
-LIN_ERR_t LIN_SendData(uart_ring *LIN_UART, LIN_FRAME_t *frame)
-{
- uint8_t checksum,n;
-
- // check the length
- if((frame -> data_len < 1) || (frame -> data_len > LIN_MAX_DATA)) {
- return(LIN_WRONG_LEN);
- }
-
- // calculate checksum
- checksum=p_LIN_makeChecksum(frame);
-
- //------------------------
- // Break-Field
- //------------------------
- USART_SendBreak(LIN_UART);
-
- //------------------------
- // Sync-Field
- //------------------------
- putc(LIN_UART, LIN_SYNC_DATA);
-
- //------------------------
- // ID-Field
- //------------------------
- putc(LIN_UART, frame->frame_id);
-
- //------------------------
- // Data-Field [1...n]
- //------------------------
- for(n=0; n < frame -> data_len; n++) {
- putc(LIN_UART, frame -> data[n]);
- }
-
- //------------------------
- // CRC-Field
- //------------------------
- putc(LIN_UART, checksum);
-
- return(LIN_OK);
-}
-
-
-// --------------------------------------------------------------
-// receives data via LIN interface
-// frame:
-// frame_id = Unique ID [0x00 to 0xFF]
-// data_len = number of data to be received
-// return:
-// data [] = data received (if LIN_OK)
-//
-// return_value:
-// LIN_OK = Frame was received
-// LIN_WRONG_LEN = wrong number of data
-// LIN_RX_EMPTY = no frame received
-// LIN_WRONG_CRC = Checksum wrong
-// --------------------------------------------------------------
-LIN_ERR_t LIN_SendReceiveFrame(uart_ring *LIN_UART, LIN_FRAME_t *frame)
-{
- // check the length
- if((frame -> data_len < 1) || (frame -> data_len > LIN_MAX_DATA)) {
- return(LIN_WRONG_LEN);
- }
-
- //-------------------------------
- // Break-Field
- //-------------------------------
- USART_SendBreak(LIN_UART);
-
- //-------------------------------
- // Sync-Field
- //-------------------------------
- putc(LIN_UART, LIN_SYNC_DATA);
-
- //-------------------------------
- // ID-Field
- //-------------------------------
- putc(LIN_UART, frame->frame_id);
-
- //now wait for the slave device to respond with the data
-
- return(LIN_OK);
-}
-
-LIN_ERR_t LIN_ReceiveData(uart_ring *LIN_UART, LIN_FRAME_t *frame)
-{
- //-------------------------------
- // copy received data
- //-------------------------------
-
- //TODO: Get receive working. Do I need to add a small delay here?
-
- uint8_t *resp = 0;
- int resp_len = 0;
-
- while ((resp_len < frame -> data_len) && getc(LIN_UART, (char*)&resp[resp_len])) {
- ++resp_len;
- frame->data[resp_len]=resp[resp_len];
- }
-
- return(LIN_OK);
-}
-
-void USART_SendBreak(uart_ring *u)
-{
- SET_BIT(u -> uart -> CR1, USART_CR1_SBK);
-}
-
-// --------------------------------------------------------------
-// internal function
-// Calculate checksum over all data
-// (classic-mode = inverted modulo256 sum)
-//
-// ret_value = checksum
-//--------------------------------------------------------------
-uint8_t p_LIN_makeChecksum(LIN_FRAME_t *frame)
-{
- uint8_t ret_value=0, n;
- uint16_t dummy;
-
- // calculate checksum
- dummy = 0;
- for(n = 0; n < frame -> data_len; n++) {
- dummy += frame -> data[n];
- if (dummy > 0xFF) {
- dummy -= 0xFF;
- }
- }
- ret_value = (uint8_t)(dummy);
- ret_value ^= 0xFF;
-
- return(ret_value);
-}
diff --git a/panda/board/drivers/llcan.h b/panda/board/drivers/llcan.h
index 0a698d4e8d9b93..68ca242bdefd9b 100644
--- a/panda/board/drivers/llcan.h
+++ b/panda/board/drivers/llcan.h
@@ -11,83 +11,127 @@
#define GET_BUS(msg) (((msg)->RDTR >> 4) & 0xFF)
#define GET_LEN(msg) ((msg)->RDTR & 0xF)
#define GET_ADDR(msg) ((((msg)->RIR & 4) != 0) ? ((msg)->RIR >> 3) : ((msg)->RIR >> 21))
-#define GET_BYTE(msg, b) (((int)(b) > 3) ? (((msg)->RDHR >> (8U * ((unsigned int)(b) % 4U))) & 0XFFU) : (((msg)->RDLR >> (8U * (unsigned int)(b))) & 0xFFU))
+#define GET_BYTE(msg, b) (((int)(b) > 3) ? (((msg)->RDHR >> (8U * ((unsigned int)(b) % 4U))) & 0xFFU) : (((msg)->RDLR >> (8U * (unsigned int)(b))) & 0xFFU))
#define GET_BYTES_04(msg) ((msg)->RDLR)
#define GET_BYTES_48(msg) ((msg)->RDHR)
+#define GET_FLAG(value, mask) (((__typeof__(mask))param & mask) == mask)
+
+#define CAN_INIT_TIMEOUT_MS 500U
+#define CAN_NAME_FROM_CANIF(CAN_DEV) (((CAN_DEV)==CAN1) ? "CAN1" : (((CAN_DEV) == CAN2) ? "CAN2" : "CAN3"))
void puts(const char *a);
bool llcan_set_speed(CAN_TypeDef *CAN_obj, uint32_t speed, bool loopback, bool silent) {
- // initialization mode
- CAN_obj->MCR = CAN_MCR_TTCM | CAN_MCR_INRQ;
- while((CAN_obj->MSR & CAN_MSR_INAK) != CAN_MSR_INAK);
-
- // set time quanta from defines
- CAN_obj->BTR = (CAN_BTR_TS1_0 * (CAN_SEQ1-1)) |
- (CAN_BTR_TS2_0 * (CAN_SEQ2-1)) |
- (can_speed_to_prescaler(speed) - 1U);
+ bool ret = true;
- // silent loopback mode for debugging
- if (loopback) {
- CAN_obj->BTR |= CAN_BTR_SILM | CAN_BTR_LBKM;
- }
- if (silent) {
- CAN_obj->BTR |= CAN_BTR_SILM;
+ // initialization mode
+ register_set(&(CAN_obj->MCR), CAN_MCR_TTCM | CAN_MCR_INRQ, 0x180FFU);
+ uint32_t timeout_counter = 0U;
+ while((CAN_obj->MSR & CAN_MSR_INAK) != CAN_MSR_INAK){
+ // Delay for about 1ms
+ delay(10000);
+ timeout_counter++;
+
+ if(timeout_counter >= CAN_INIT_TIMEOUT_MS){
+ puts(CAN_NAME_FROM_CANIF(CAN_obj)); puts(" set_speed timed out (1)!\n");
+ ret = false;
+ break;
+ }
}
- // reset
- // cppcheck-suppress redundantAssignment ; it's a register
- CAN_obj->MCR = CAN_MCR_TTCM | CAN_MCR_ABOM;
-
- #define CAN_TIMEOUT 1000000
- int tmp = 0;
- bool ret = false;
- while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) && (tmp < CAN_TIMEOUT)) tmp++;
- if (tmp < CAN_TIMEOUT) {
- ret = true;
+ if(ret){
+ // set time quanta from defines
+ register_set(&(CAN_obj->BTR), ((CAN_BTR_TS1_0 * (CAN_SEQ1-1)) |
+ (CAN_BTR_TS2_0 * (CAN_SEQ2-1)) |
+ (can_speed_to_prescaler(speed) - 1U)), 0xC37F03FFU);
+
+ // silent loopback mode for debugging
+ if (loopback) {
+ register_set_bits(&(CAN_obj->BTR), CAN_BTR_SILM | CAN_BTR_LBKM);
+ }
+ if (silent) {
+ register_set_bits(&(CAN_obj->BTR), CAN_BTR_SILM);
+ }
+
+ // reset
+ register_set(&(CAN_obj->MCR), CAN_MCR_TTCM | CAN_MCR_ABOM, 0x180FFU);
+
+ timeout_counter = 0U;
+ while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)) {
+ // Delay for about 1ms
+ delay(10000);
+ timeout_counter++;
+
+ if(timeout_counter >= CAN_INIT_TIMEOUT_MS){
+ puts(CAN_NAME_FROM_CANIF(CAN_obj)); puts(" set_speed timed out (2)!\n");
+ ret = false;
+ break;
+ }
+ }
}
return ret;
}
-void llcan_init(CAN_TypeDef *CAN_obj) {
- // accept all filter
- CAN_obj->FMR |= CAN_FMR_FINIT;
-
- // no mask
- CAN_obj->sFilterRegister[0].FR1 = 0;
- CAN_obj->sFilterRegister[0].FR2 = 0;
- CAN_obj->sFilterRegister[14].FR1 = 0;
- CAN_obj->sFilterRegister[14].FR2 = 0;
- CAN_obj->FA1R |= 1U | (1U << 14);
-
- CAN_obj->FMR &= ~(CAN_FMR_FINIT);
-
- // enable certain CAN interrupts
- CAN_obj->IER |= CAN_IER_TMEIE | CAN_IER_FMPIE0 | CAN_IER_WKUIE;
-
- if (CAN_obj == CAN1) {
- NVIC_EnableIRQ(CAN1_TX_IRQn);
- NVIC_EnableIRQ(CAN1_RX0_IRQn);
- NVIC_EnableIRQ(CAN1_SCE_IRQn);
- } else if (CAN_obj == CAN2) {
- NVIC_EnableIRQ(CAN2_TX_IRQn);
- NVIC_EnableIRQ(CAN2_RX0_IRQn);
- NVIC_EnableIRQ(CAN2_SCE_IRQn);
-#ifdef CAN3
- } else if (CAN_obj == CAN3) {
- NVIC_EnableIRQ(CAN3_TX_IRQn);
- NVIC_EnableIRQ(CAN3_RX0_IRQn);
- NVIC_EnableIRQ(CAN3_SCE_IRQn);
-#endif
- } else {
- puts("Invalid CAN: initialization failed\n");
+bool llcan_init(CAN_TypeDef *CAN_obj) {
+ bool ret = true;
+
+ // Enter init mode
+ register_set_bits(&(CAN_obj->FMR), CAN_FMR_FINIT);
+
+ // Wait for INAK bit to be set
+ uint32_t timeout_counter = 0U;
+ while(((CAN_obj->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)) {
+ // Delay for about 1ms
+ delay(10000);
+ timeout_counter++;
+
+ if(timeout_counter >= CAN_INIT_TIMEOUT_MS){
+ puts(CAN_NAME_FROM_CANIF(CAN_obj)); puts(" initialization timed out!\n");
+ ret = false;
+ break;
+ }
}
+
+ if(ret){
+ // no mask
+ // For some weird reason some of these registers do not want to set properly on CAN2 and CAN3. Probably something to do with the single/dual mode and their different filters.
+ CAN_obj->sFilterRegister[0].FR1 = 0U;
+ CAN_obj->sFilterRegister[0].FR2 = 0U;
+ CAN_obj->sFilterRegister[14].FR1 = 0U;
+ CAN_obj->sFilterRegister[14].FR2 = 0U;
+ CAN_obj->FA1R |= 1U | (1U << 14);
+
+ // Exit init mode, do not wait
+ register_clear_bits(&(CAN_obj->FMR), CAN_FMR_FINIT);
+
+ // enable certain CAN interrupts
+ register_set_bits(&(CAN_obj->IER), CAN_IER_TMEIE | CAN_IER_FMPIE0 | CAN_IER_WKUIE);
+
+ if (CAN_obj == CAN1) {
+ NVIC_EnableIRQ(CAN1_TX_IRQn);
+ NVIC_EnableIRQ(CAN1_RX0_IRQn);
+ NVIC_EnableIRQ(CAN1_SCE_IRQn);
+ } else if (CAN_obj == CAN2) {
+ NVIC_EnableIRQ(CAN2_TX_IRQn);
+ NVIC_EnableIRQ(CAN2_RX0_IRQn);
+ NVIC_EnableIRQ(CAN2_SCE_IRQn);
+ #ifdef CAN3
+ } else if (CAN_obj == CAN3) {
+ NVIC_EnableIRQ(CAN3_TX_IRQn);
+ NVIC_EnableIRQ(CAN3_RX0_IRQn);
+ NVIC_EnableIRQ(CAN3_SCE_IRQn);
+ #endif
+ } else {
+ puts("Invalid CAN: initialization failed\n");
+ }
+ }
+ return ret;
}
void llcan_clear_send(CAN_TypeDef *CAN_obj) {
CAN_obj->TSR |= CAN_TSR_ABRQ0;
- CAN_obj->MSR &= ~(CAN_MSR_ERRI);
+ register_clear_bits(&(CAN_obj->MSR), CAN_MSR_ERRI);
// cppcheck-suppress selfAssignment ; needed to clear the register
CAN_obj->MSR = CAN_obj->MSR;
}
diff --git a/panda/board/drivers/llgpio.h b/panda/board/drivers/llgpio.h
index a89c8a8e2d5dcf..0bd58c3b8a5316 100644
--- a/panda/board/drivers/llgpio.h
+++ b/panda/board/drivers/llgpio.h
@@ -11,42 +11,52 @@
#define OUTPUT_TYPE_OPEN_DRAIN 1U
void set_gpio_mode(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int mode) {
+ ENTER_CRITICAL();
uint32_t tmp = GPIO->MODER;
tmp &= ~(3U << (pin * 2U));
tmp |= (mode << (pin * 2U));
- GPIO->MODER = tmp;
+ register_set(&(GPIO->MODER), tmp, 0xFFFFFFFFU);
+ EXIT_CRITICAL();
}
void set_gpio_output(GPIO_TypeDef *GPIO, unsigned int pin, bool enabled) {
+ ENTER_CRITICAL();
if (enabled) {
- GPIO->ODR |= (1U << pin);
+ register_set_bits(&(GPIO->ODR), (1U << pin));
} else {
- GPIO->ODR &= ~(1U << pin);
+ register_clear_bits(&(GPIO->ODR), (1U << pin));
}
set_gpio_mode(GPIO, pin, MODE_OUTPUT);
+ EXIT_CRITICAL();
}
void set_gpio_output_type(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int output_type){
+ ENTER_CRITICAL();
if(output_type == OUTPUT_TYPE_OPEN_DRAIN) {
- GPIO->OTYPER |= (1U << pin);
+ register_set_bits(&(GPIO->OTYPER), (1U << pin));
} else {
- GPIO->OTYPER &= ~(1U << pin);
+ register_clear_bits(&(GPIO->OTYPER), (1U << pin));
}
+ EXIT_CRITICAL();
}
void set_gpio_alternate(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int mode) {
+ ENTER_CRITICAL();
uint32_t tmp = GPIO->AFR[pin >> 3U];
tmp &= ~(0xFU << ((pin & 7U) * 4U));
tmp |= mode << ((pin & 7U) * 4U);
- GPIO->AFR[pin >> 3] = tmp;
+ register_set(&(GPIO->AFR[pin >> 3]), tmp, 0xFFFFFFFFU);
set_gpio_mode(GPIO, pin, MODE_ALTERNATE);
+ EXIT_CRITICAL();
}
void set_gpio_pullup(GPIO_TypeDef *GPIO, unsigned int pin, unsigned int mode) {
+ ENTER_CRITICAL();
uint32_t tmp = GPIO->PUPDR;
tmp &= ~(3U << (pin * 2U));
tmp |= (mode << (pin * 2U));
- GPIO->PUPDR = tmp;
+ register_set(&(GPIO->PUPDR), tmp, 0xFFFFFFFFU);
+ EXIT_CRITICAL();
}
int get_gpio_input(GPIO_TypeDef *GPIO, unsigned int pin) {
diff --git a/panda/board/drivers/pwm.h b/panda/board/drivers/pwm.h
new file mode 100644
index 00000000000000..c3709200c1ce1e
--- /dev/null
+++ b/panda/board/drivers/pwm.h
@@ -0,0 +1,56 @@
+#define PWM_COUNTER_OVERFLOW 2000U // To get ~50kHz
+
+// TODO: Implement for 32-bit timers
+
+void pwm_init(TIM_TypeDef *TIM, uint8_t channel){
+ // Enable timer and auto-reload
+ register_set(&(TIM->CR1), TIM_CR1_CEN | TIM_CR1_ARPE, 0x3FU);
+
+ // Set channel as PWM mode 1 and enable output
+ switch(channel){
+ case 1U:
+ register_set_bits(&(TIM->CCMR1), (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1PE));
+ register_set_bits(&(TIM->CCER), TIM_CCER_CC1E);
+ break;
+ case 2U:
+ register_set_bits(&(TIM->CCMR1), (TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE));
+ register_set_bits(&(TIM->CCER), TIM_CCER_CC2E);
+ break;
+ case 3U:
+ register_set_bits(&(TIM->CCMR2), (TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3PE));
+ register_set_bits(&(TIM->CCER), TIM_CCER_CC3E);
+ break;
+ case 4U:
+ register_set_bits(&(TIM->CCMR2), (TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4PE));
+ register_set_bits(&(TIM->CCER), TIM_CCER_CC4E);
+ break;
+ default:
+ break;
+ }
+
+ // Set max counter value
+ register_set(&(TIM->ARR), PWM_COUNTER_OVERFLOW, 0xFFFFU);
+
+ // Update registers and clear counter
+ TIM->EGR |= TIM_EGR_UG;
+}
+
+void pwm_set(TIM_TypeDef *TIM, uint8_t channel, uint8_t percentage){
+ uint16_t comp_value = (((uint16_t) percentage * PWM_COUNTER_OVERFLOW) / 100U);
+ switch(channel){
+ case 1U:
+ register_set(&(TIM->CCR1), comp_value, 0xFFFFU);
+ break;
+ case 2U:
+ register_set(&(TIM->CCR2), comp_value, 0xFFFFU);
+ break;
+ case 3U:
+ register_set(&(TIM->CCR3), comp_value, 0xFFFFU);
+ break;
+ case 4U:
+ register_set(&(TIM->CCR4), comp_value, 0xFFFFU);
+ break;
+ default:
+ break;
+ }
+}
\ No newline at end of file
diff --git a/panda/board/drivers/registers.h b/panda/board/drivers/registers.h
new file mode 100644
index 00000000000000..76748295d9f7be
--- /dev/null
+++ b/panda/board/drivers/registers.h
@@ -0,0 +1,81 @@
+
+typedef struct reg {
+ volatile uint32_t *address;
+ uint32_t value;
+ uint32_t check_mask;
+} reg;
+
+// 10 bit hash with 23 as a prime
+#define REGISTER_MAP_SIZE 0x3FFU
+#define HASHING_PRIME 23U
+#define CHECK_COLLISION(hash, addr) (((uint32_t) register_map[hash].address != 0U) && (register_map[hash].address != addr))
+
+reg register_map[REGISTER_MAP_SIZE];
+
+// Hash spread in first and second iterations seems to be reasonable.
+// See: tests/development/register_hashmap_spread.py
+// Also, check the collision warnings in the debug output, and minimize those.
+uint16_t hash_addr(uint32_t input){
+ return (((input >> 16U) ^ ((((input + 1U) & 0xFFFFU) * HASHING_PRIME) & 0xFFFFU)) & REGISTER_MAP_SIZE);
+}
+
+// Do not put bits in the check mask that get changed by the hardware
+void register_set(volatile uint32_t *addr, uint32_t val, uint32_t mask){
+ ENTER_CRITICAL()
+ // Set bits in register that are also in the mask
+ (*addr) = ((*addr) & (~mask)) | (val & mask);
+
+ // Add these values to the map
+ uint16_t hash = hash_addr((uint32_t) addr);
+ uint16_t tries = REGISTER_MAP_SIZE;
+ while(CHECK_COLLISION(hash, addr) && (tries > 0U)) { hash = hash_addr((uint32_t) hash); tries--;}
+ if (tries != 0U){
+ register_map[hash].address = addr;
+ register_map[hash].value = (register_map[hash].value & (~mask)) | (val & mask);
+ register_map[hash].check_mask |= mask;
+ } else {
+ #ifdef DEBUG_FAULTS
+ puts("Hash collision: address 0x"); puth((uint32_t) addr); puts("!\n");
+ #endif
+ }
+ EXIT_CRITICAL()
+}
+
+// Set individual bits. Also add them to the check_mask.
+// Do not use this to change bits that get reset by the hardware
+void register_set_bits(volatile uint32_t *addr, uint32_t val) {
+ return register_set(addr, val, val);
+}
+
+// Clear individual bits. Also add them to the check_mask.
+// Do not use this to clear bits that get set by the hardware
+void register_clear_bits(volatile uint32_t *addr, uint32_t val) {
+ return register_set(addr, (~val), val);
+}
+
+// To be called periodically
+void check_registers(void){
+ for(uint16_t i=0U; i> 4U) * 10U) + (value & 0x0FU);
+}
+
+void rtc_init(void){
+ if(board_has_rtc()){
+ // Initialize RTC module and clock if not done already.
+ if((RCC->BDCR & RCC_BDCR_MASK) != RCC_BDCR_OPTIONS){
+ puts("Initializing RTC\n");
+ // Reset backup domain
+ register_set_bits(&(RCC->BDCR), RCC_BDCR_BDRST);
+
+ // Disable write protection
+ register_set_bits(&(PWR->CR), PWR_CR_DBP);
+
+ // Clear backup domain reset
+ register_clear_bits(&(RCC->BDCR), RCC_BDCR_BDRST);
+
+ // Set RTC options
+ register_set(&(RCC->BDCR), RCC_BDCR_OPTIONS, RCC_BDCR_MASK);
+
+ // Enable write protection
+ register_clear_bits(&(PWR->CR), PWR_CR_DBP);
+ }
+ }
+}
+
+void rtc_set_time(timestamp_t time){
+ if(board_has_rtc()){
+ puts("Setting RTC time\n");
+
+ // Disable write protection
+ register_set_bits(&(PWR->CR), PWR_CR_DBP);
+ RTC->WPR = 0xCA;
+ RTC->WPR = 0x53;
+
+ // Enable initialization mode
+ register_set_bits(&(RTC->ISR), RTC_ISR_INIT);
+ while((RTC->ISR & RTC_ISR_INITF) == 0){}
+
+ // Set time
+ RTC->TR = (to_bcd(time.hour) << RTC_TR_HU_Pos) | (to_bcd(time.minute) << RTC_TR_MNU_Pos) | (to_bcd(time.second) << RTC_TR_SU_Pos);
+ RTC->DR = (to_bcd(time.year - YEAR_OFFSET) << RTC_DR_YU_Pos) | (time.weekday << RTC_DR_WDU_Pos) | (to_bcd(time.month) << RTC_DR_MU_Pos) | (to_bcd(time.day) << RTC_DR_DU_Pos);
+
+ // Set options
+ register_set(&(RTC->CR), 0U, 0xFCFFFFU);
+
+ // Disable initalization mode
+ register_clear_bits(&(RTC->ISR), RTC_ISR_INIT);
+
+ // Wait for synchronization
+ while((RTC->ISR & RTC_ISR_RSF) == 0){}
+
+ // Re-enable write protection
+ RTC->WPR = 0x00;
+ register_clear_bits(&(PWR->CR), PWR_CR_DBP);
+ }
+}
+
+timestamp_t rtc_get_time(void){
+ timestamp_t result;
+ // Init with zero values in case there is no RTC running
+ result.year = 0U;
+ result.month = 0U;
+ result.day = 0U;
+ result.weekday = 0U;
+ result.hour = 0U;
+ result.minute = 0U;
+ result.second = 0U;
+
+ if(board_has_rtc()){
+ // Wait until the register sync flag is set
+ while((RTC->ISR & RTC_ISR_RSF) == 0){}
+
+ // Read time and date registers. Since our HSE > 7*LSE, this should be fine.
+ uint32_t time = RTC->TR;
+ uint32_t date = RTC->DR;
+
+ // Parse values
+ result.year = from_bcd((date & (RTC_DR_YT | RTC_DR_YU)) >> RTC_DR_YU_Pos) + YEAR_OFFSET;
+ result.month = from_bcd((date & (RTC_DR_MT | RTC_DR_MU)) >> RTC_DR_MU_Pos);
+ result.day = from_bcd((date & (RTC_DR_DT | RTC_DR_DU)) >> RTC_DR_DU_Pos);
+ result.weekday = ((date & RTC_DR_WDU) >> RTC_DR_WDU_Pos);
+ result.hour = from_bcd((time & (RTC_TR_HT | RTC_TR_HU)) >> RTC_TR_HU_Pos);
+ result.minute = from_bcd((time & (RTC_TR_MNT | RTC_TR_MNU)) >> RTC_TR_MNU_Pos);
+ result.second = from_bcd((time & (RTC_TR_ST | RTC_TR_SU)) >> RTC_TR_SU_Pos);
+ }
+ return result;
+}
\ No newline at end of file
diff --git a/panda/board/drivers/spi.h b/panda/board/drivers/spi.h
index 26690984de7bb8..29963b6bdfce77 100644
--- a/panda/board/drivers/spi.h
+++ b/panda/board/drivers/spi.h
@@ -10,45 +10,22 @@ uint8_t spi_buf[SPI_BUF_SIZE];
int spi_buf_count = 0;
int spi_total_count = 0;
-void spi_init(void) {
- //puts("SPI init\n");
- SPI1->CR1 = SPI_CR1_SPE;
-
- // enable SPI interrupts
- //SPI1->CR2 = SPI_CR2_RXNEIE | SPI_CR2_ERRIE | SPI_CR2_TXEIE;
- SPI1->CR2 = SPI_CR2_RXNEIE;
-
- NVIC_EnableIRQ(DMA2_Stream2_IRQn);
- NVIC_EnableIRQ(DMA2_Stream3_IRQn);
- //NVIC_EnableIRQ(SPI1_IRQn);
-
- // reset handshake back to pull up
- set_gpio_mode(GPIOB, 0, MODE_INPUT);
- set_gpio_pullup(GPIOB, 0, PULL_UP);
-
- // setup interrupt on falling edge of SPI enable (on PA4)
- SYSCFG->EXTICR[2] = SYSCFG_EXTICR2_EXTI4_PA;
- EXTI->IMR |= (1U << 4);
- EXTI->FTSR |= (1U << 4);
- NVIC_EnableIRQ(EXTI4_IRQn);
-}
-
void spi_tx_dma(void *addr, int len) {
// disable DMA
- SPI1->CR2 &= ~SPI_CR2_TXDMAEN;
- DMA2_Stream3->CR &= ~DMA_SxCR_EN;
+ register_clear_bits(&(SPI1->CR2), SPI_CR2_TXDMAEN);
+ register_clear_bits(&(DMA2_Stream3->CR), DMA_SxCR_EN);
// DMA2, stream 3, channel 3
- DMA2_Stream3->M0AR = (uint32_t)addr;
+ register_set(&(DMA2_Stream3->M0AR), (uint32_t)addr, 0xFFFFFFFFU);
DMA2_Stream3->NDTR = len;
- DMA2_Stream3->PAR = (uint32_t)&(SPI1->DR);
+ register_set(&(DMA2_Stream3->PAR), (uint32_t)&(SPI1->DR), 0xFFFFFFFFU);
// channel3, increment memory, memory -> periph, enable
- DMA2_Stream3->CR = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0 | DMA_SxCR_EN;
+ register_set(&(DMA2_Stream3->CR), (DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0 | DMA_SxCR_EN), 0x1E077EFEU);
delay(0);
- DMA2_Stream3->CR |= DMA_SxCR_TCIE;
+ register_set_bits(&(DMA2_Stream3->CR), DMA_SxCR_TCIE);
- SPI1->CR2 |= SPI_CR2_TXDMAEN;
+ register_set_bits(&(SPI1->CR2), SPI_CR2_TXDMAEN);
// signal data is ready by driving low
// esp must be configured as input by this point
@@ -57,33 +34,32 @@ void spi_tx_dma(void *addr, int len) {
void spi_rx_dma(void *addr, int len) {
// disable DMA
- SPI1->CR2 &= ~SPI_CR2_RXDMAEN;
- DMA2_Stream2->CR &= ~DMA_SxCR_EN;
+ register_clear_bits(&(SPI1->CR2), SPI_CR2_RXDMAEN);
+ register_clear_bits(&(DMA2_Stream2->CR), DMA_SxCR_EN);
// drain the bus
volatile uint8_t dat = SPI1->DR;
(void)dat;
// DMA2, stream 2, channel 3
- DMA2_Stream2->M0AR = (uint32_t)addr;
+ register_set(&(DMA2_Stream2->M0AR), (uint32_t)addr, 0xFFFFFFFFU);
DMA2_Stream2->NDTR = len;
- DMA2_Stream2->PAR = (uint32_t)&(SPI1->DR);
+ register_set(&(DMA2_Stream2->PAR), (uint32_t)&(SPI1->DR), 0xFFFFFFFFU);
// channel3, increment memory, periph -> memory, enable
- DMA2_Stream2->CR = DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 | DMA_SxCR_MINC | DMA_SxCR_EN;
+ register_set(&(DMA2_Stream2->CR), (DMA_SxCR_CHSEL_1 | DMA_SxCR_CHSEL_0 | DMA_SxCR_MINC | DMA_SxCR_EN), 0x1E077EFEU);
delay(0);
- DMA2_Stream2->CR |= DMA_SxCR_TCIE;
+ register_set_bits(&(DMA2_Stream2->CR), DMA_SxCR_TCIE);
- SPI1->CR2 |= SPI_CR2_RXDMAEN;
+ register_set_bits(&(SPI1->CR2), SPI_CR2_RXDMAEN);
}
// ***************************** SPI IRQs *****************************
-
// can't go on the stack cause it's DMAed
uint8_t spi_tx_buf[0x44];
// SPI RX
-void DMA2_Stream2_IRQHandler(void) {
+void DMA2_Stream2_IRQ_Handler(void) {
int *resp_len = (int*)spi_tx_buf;
(void)memset(spi_tx_buf, 0xaa, 0x44);
*resp_len = spi_cb_rx(spi_buf, 0x14, spi_tx_buf+4);
@@ -99,7 +75,7 @@ void DMA2_Stream2_IRQHandler(void) {
}
// SPI TX
-void DMA2_Stream3_IRQHandler(void) {
+void DMA2_Stream3_IRQ_Handler(void) {
#ifdef DEBUG_SPI
puts("SPI handshake\n");
#endif
@@ -112,7 +88,7 @@ void DMA2_Stream3_IRQHandler(void) {
DMA2->LIFCR = DMA_LIFCR_CTCIF3;
}
-void EXTI4_IRQHandler(void) {
+void EXTI4_IRQ_Handler(void) {
volatile unsigned int pr = EXTI->PR & (1U << 4);
#ifdef DEBUG_SPI
puts("exti4\n");
@@ -125,3 +101,31 @@ void EXTI4_IRQHandler(void) {
EXTI->PR = pr;
}
+// ***************************** SPI init *****************************
+void spi_init(void) {
+ // Max SPI clock the ESP can produce is 80MHz. At buffer size of 256 bytes, that's a max of about 40k buffers per second
+ REGISTER_INTERRUPT(DMA2_Stream2_IRQn, DMA2_Stream2_IRQ_Handler, 50000U, FAULT_INTERRUPT_RATE_SPI_DMA)
+ REGISTER_INTERRUPT(DMA2_Stream3_IRQn, DMA2_Stream3_IRQ_Handler, 50000U, FAULT_INTERRUPT_RATE_SPI_DMA)
+ REGISTER_INTERRUPT(EXTI4_IRQn, EXTI4_IRQ_Handler, 50000U, FAULT_INTERRUPT_RATE_SPI_CS) // TODO: Figure out if this is a reasonable limit
+
+ //puts("SPI init\n");
+ register_set(&(SPI1->CR1), SPI_CR1_SPE, 0xFFFFU);
+
+ // enable SPI interrupts
+ //SPI1->CR2 = SPI_CR2_RXNEIE | SPI_CR2_ERRIE | SPI_CR2_TXEIE;
+ register_set(&(SPI1->CR2), SPI_CR2_RXNEIE, 0xF7U);
+
+ NVIC_EnableIRQ(DMA2_Stream2_IRQn);
+ NVIC_EnableIRQ(DMA2_Stream3_IRQn);
+ //NVIC_EnableIRQ(SPI1_IRQn);
+
+ // reset handshake back to pull up
+ set_gpio_mode(GPIOB, 0, MODE_INPUT);
+ set_gpio_pullup(GPIOB, 0, PULL_UP);
+
+ // setup interrupt on falling edge of SPI enable (on PA4)
+ register_set(&(SYSCFG->EXTICR[2]), SYSCFG_EXTICR2_EXTI4_PA, 0xFFFFU);
+ register_set_bits(&(EXTI->IMR), (1U << 4));
+ register_set_bits(&(EXTI->FTSR), (1U << 4));
+ NVIC_EnableIRQ(EXTI4_IRQn);
+}
\ No newline at end of file
diff --git a/panda/board/drivers/timer.h b/panda/board/drivers/timer.h
index a14b619e4b81e3..d7aa7e8811093a 100644
--- a/panda/board/drivers/timer.h
+++ b/panda/board/drivers/timer.h
@@ -1,7 +1,7 @@
void timer_init(TIM_TypeDef *TIM, int psc) {
- TIM->PSC = psc-1;
- TIM->DIER = TIM_DIER_UIE;
- TIM->CR1 = TIM_CR1_CEN;
+ register_set(&(TIM->PSC), (psc-1), 0xFFFFU);
+ register_set(&(TIM->DIER), TIM_DIER_UIE, 0x5F5FU);
+ register_set(&(TIM->CR1), TIM_CR1_CEN, 0x3FU);
TIM->SR = 0;
}
diff --git a/panda/board/drivers/uart.h b/panda/board/drivers/uart.h
index 5c5452483d0479..e4f23ead011911 100644
--- a/panda/board/drivers/uart.h
+++ b/panda/board/drivers/uart.h
@@ -1,18 +1,43 @@
// IRQs: USART1, USART2, USART3, UART5
-#define FIFO_SIZE 0x400U
+// ***************************** Definitions *****************************
+#define FIFO_SIZE_INT 0x400U
+#define FIFO_SIZE_DMA 0x1000U
+
typedef struct uart_ring {
volatile uint16_t w_ptr_tx;
volatile uint16_t r_ptr_tx;
- uint8_t elems_tx[FIFO_SIZE];
+ uint8_t *elems_tx;
+ uint32_t tx_fifo_size;
volatile uint16_t w_ptr_rx;
volatile uint16_t r_ptr_rx;
- uint8_t elems_rx[FIFO_SIZE];
+ uint8_t *elems_rx;
+ uint32_t rx_fifo_size;
USART_TypeDef *uart;
void (*callback)(struct uart_ring*);
+ bool dma_rx;
} uart_ring;
-void uart_init(USART_TypeDef *u, int baud);
+#define UART_BUFFER(x, size_rx, size_tx, uart_ptr, callback_ptr, rx_dma) \
+ uint8_t elems_rx_##x[size_rx]; \
+ uint8_t elems_tx_##x[size_tx]; \
+ uart_ring uart_ring_##x = { \
+ .w_ptr_tx = 0, \
+ .r_ptr_tx = 0, \
+ .elems_tx = ((uint8_t *)&elems_tx_##x), \
+ .tx_fifo_size = size_tx, \
+ .w_ptr_rx = 0, \
+ .r_ptr_rx = 0, \
+ .elems_rx = ((uint8_t *)&elems_rx_##x), \
+ .rx_fifo_size = size_rx, \
+ .uart = uart_ptr, \
+ .callback = callback_ptr, \
+ .dma_rx = rx_dma \
+ };
+
+
+// ***************************** Function prototypes *****************************
+void uart_init(uart_ring *q, int baud);
bool getc(uart_ring *q, char *elem);
bool putc(uart_ring *q, char elem);
@@ -21,48 +46,35 @@ void puts(const char *a);
void puth(unsigned int i);
void hexdump(const void *a, int l);
+void debug_ring_callback(uart_ring *ring);
-// ***************************** serial port queues *****************************
+// ******************************** UART buffers ********************************
-// esp = USART1
-uart_ring esp_ring = { .w_ptr_tx = 0, .r_ptr_tx = 0,
- .w_ptr_rx = 0, .r_ptr_rx = 0,
- .uart = USART1,
- .callback = NULL};
+// gps = USART1
+UART_BUFFER(gps, FIFO_SIZE_DMA, FIFO_SIZE_INT, USART1, NULL, true)
// lin1, K-LINE = UART5
// lin2, L-LINE = USART3
-uart_ring lin1_ring = { .w_ptr_tx = 0, .r_ptr_tx = 0,
- .w_ptr_rx = 0, .r_ptr_rx = 0,
- .uart = UART5,
- .callback = NULL};
-uart_ring lin2_ring = { .w_ptr_tx = 0, .r_ptr_tx = 0,
- .w_ptr_rx = 0, .r_ptr_rx = 0,
- .uart = USART3,
- .callback = NULL};
+UART_BUFFER(lin1, FIFO_SIZE_INT, FIFO_SIZE_INT, UART5, NULL, false)
+UART_BUFFER(lin2, FIFO_SIZE_INT, FIFO_SIZE_INT, USART3, NULL, false)
// debug = USART2
-void debug_ring_callback(uart_ring *ring);
-uart_ring debug_ring = { .w_ptr_tx = 0, .r_ptr_tx = 0,
- .w_ptr_rx = 0, .r_ptr_rx = 0,
- .uart = USART2,
- .callback = debug_ring_callback};
-
+UART_BUFFER(debug, FIFO_SIZE_INT, FIFO_SIZE_INT, USART2, debug_ring_callback, false)
uart_ring *get_ring_by_number(int a) {
uart_ring *ring = NULL;
switch(a) {
case 0:
- ring = &debug_ring;
+ ring = &uart_ring_debug;
break;
case 1:
- ring = &esp_ring;
+ ring = &uart_ring_gps;
break;
case 2:
- ring = &lin1_ring;
+ ring = &uart_ring_lin1;
break;
case 3:
- ring = &lin2_ring;
+ ring = &uart_ring_lin2;
break;
default:
ring = NULL;
@@ -71,63 +83,249 @@ uart_ring *get_ring_by_number(int a) {
return ring;
}
-// ***************************** serial port *****************************
-
-void uart_ring_process(uart_ring *q) {
- enter_critical_section();
- // TODO: check if external serial is connected
- int sr = q->uart->SR;
+// ***************************** Interrupt handlers *****************************
+void uart_tx_ring(uart_ring *q){
+ ENTER_CRITICAL();
+ // Send out next byte of TX buffer
if (q->w_ptr_tx != q->r_ptr_tx) {
- if ((sr & USART_SR_TXE) != 0) {
- q->uart->DR = q->elems_tx[q->r_ptr_tx];
- q->r_ptr_tx = (q->r_ptr_tx + 1U) % FIFO_SIZE;
+ // Only send if transmit register is empty (aka last byte has been sent)
+ if ((q->uart->SR & USART_SR_TXE) != 0) {
+ q->uart->DR = q->elems_tx[q->r_ptr_tx]; // This clears TXE
+ q->r_ptr_tx = (q->r_ptr_tx + 1U) % q->tx_fifo_size;
+ }
+
+ // Enable TXE interrupt if there is still data to be sent
+ if(q->r_ptr_tx != q->w_ptr_tx){
+ q->uart->CR1 |= USART_CR1_TXEIE;
+ } else {
+ q->uart->CR1 &= ~USART_CR1_TXEIE;
}
- // there could be more to send
- q->uart->CR1 |= USART_CR1_TXEIE;
- } else {
- // nothing to send
- q->uart->CR1 &= ~USART_CR1_TXEIE;
}
+ EXIT_CRITICAL();
+}
- if ((sr & USART_SR_RXNE) || (sr & USART_SR_ORE)) {
- uint8_t c = q->uart->DR; // TODO: can drop packets
- if (q != &esp_ring) {
- uint16_t next_w_ptr = (q->w_ptr_rx + 1U) % FIFO_SIZE;
- if (next_w_ptr != q->r_ptr_rx) {
- q->elems_rx[q->w_ptr_rx] = c;
- q->w_ptr_rx = next_w_ptr;
- if (q->callback != NULL) {
- q->callback(q);
- }
+void uart_rx_ring(uart_ring *q){
+ // Do not read out directly if DMA enabled
+ if (q->dma_rx == false) {
+ ENTER_CRITICAL();
+
+ // Read out RX buffer
+ uint8_t c = q->uart->DR; // This read after reading SR clears a bunch of interrupts
+
+ uint16_t next_w_ptr = (q->w_ptr_rx + 1U) % q->rx_fifo_size;
+ // Do not overwrite buffer data
+ if (next_w_ptr != q->r_ptr_rx) {
+ q->elems_rx[q->w_ptr_rx] = c;
+ q->w_ptr_rx = next_w_ptr;
+ if (q->callback != NULL) {
+ q->callback(q);
}
}
+
+ EXIT_CRITICAL();
}
+}
+
+// This function should be called on:
+// * Half-transfer DMA interrupt
+// * Full-transfer DMA interrupt
+// * UART IDLE detection
+uint32_t prev_w_index = 0;
+void dma_pointer_handler(uart_ring *q, uint32_t dma_ndtr) {
+ ENTER_CRITICAL();
+ uint32_t w_index = (q->rx_fifo_size - dma_ndtr);
+
+ // Check for new data
+ if (w_index != prev_w_index){
+ // Check for overflow
+ if (
+ ((prev_w_index < q->r_ptr_rx) && (q->r_ptr_rx <= w_index)) || // No rollover
+ ((w_index < prev_w_index) && ((q->r_ptr_rx <= w_index) || (prev_w_index < q->r_ptr_rx))) // Rollover
+ ){
+ // We lost data. Set the new read pointer to the oldest byte still available
+ q->r_ptr_rx = (w_index + 1U) % q->rx_fifo_size;
+ }
- if ((sr & USART_SR_ORE) != 0) {
- // set dropped packet flag?
+ // Set write pointer
+ q->w_ptr_rx = w_index;
}
- exit_critical_section();
+ prev_w_index = w_index;
+ EXIT_CRITICAL();
}
-// interrupt boilerplate
+// This read after reading SR clears all error interrupts. We don't want compiler warnings, nor optimizations
+#define UART_READ_DR(uart) volatile uint8_t t = (uart)->DR; UNUSED(t);
+
+void uart_interrupt_handler(uart_ring *q) {
+ ENTER_CRITICAL();
-void USART1_IRQHandler(void) { uart_ring_process(&esp_ring); }
-void USART2_IRQHandler(void) { uart_ring_process(&debug_ring); }
-void USART3_IRQHandler(void) { uart_ring_process(&lin2_ring); }
-void UART5_IRQHandler(void) { uart_ring_process(&lin1_ring); }
+ // Read UART status. This is also the first step necessary in clearing most interrupts
+ uint32_t status = q->uart->SR;
+
+ // If RXNE is set, perform a read. This clears RXNE, ORE, IDLE, NF and FE
+ if((status & USART_SR_RXNE) != 0U){
+ uart_rx_ring(q);
+ }
+
+ // Detect errors and clear them
+ uint32_t err = (status & USART_SR_ORE) | (status & USART_SR_NE) | (status & USART_SR_FE) | (status & USART_SR_PE);
+ if(err != 0U){
+ #ifdef DEBUG_UART
+ puts("Encountered UART error: "); puth(err); puts("\n");
+ #endif
+ UART_READ_DR(q->uart)
+ }
+ // Send if necessary
+ uart_tx_ring(q);
+
+ // Run DMA pointer handler if the line is idle
+ if(q->dma_rx && (status & USART_SR_IDLE)){
+ // Reset IDLE flag
+ UART_READ_DR(q->uart)
+
+ if(q == &uart_ring_gps){
+ dma_pointer_handler(&uart_ring_gps, DMA2_Stream5->NDTR);
+ } else {
+ #ifdef DEBUG_UART
+ puts("No IDLE dma_pointer_handler implemented for this UART.");
+ #endif
+ }
+ }
+
+ EXIT_CRITICAL();
+}
+
+void USART1_IRQ_Handler(void) { uart_interrupt_handler(&uart_ring_gps); }
+void USART2_IRQ_Handler(void) { uart_interrupt_handler(&uart_ring_debug); }
+void USART3_IRQ_Handler(void) { uart_interrupt_handler(&uart_ring_lin2); }
+void UART5_IRQ_Handler(void) { uart_interrupt_handler(&uart_ring_lin1); }
+
+void DMA2_Stream5_IRQ_Handler(void) {
+ ENTER_CRITICAL();
+
+ // Handle errors
+ if((DMA2->HISR & DMA_HISR_TEIF5) || (DMA2->HISR & DMA_HISR_DMEIF5) || (DMA2->HISR & DMA_HISR_FEIF5)){
+ #ifdef DEBUG_UART
+ puts("Encountered UART DMA error. Clearing and restarting DMA...\n");
+ #endif
+
+ // Clear flags
+ DMA2->HIFCR = DMA_HIFCR_CTEIF5 | DMA_HIFCR_CDMEIF5 | DMA_HIFCR_CFEIF5;
+
+ // Re-enable the DMA if necessary
+ DMA2_Stream5->CR |= DMA_SxCR_EN;
+ }
+
+ // Re-calculate write pointer and reset flags
+ dma_pointer_handler(&uart_ring_gps, DMA2_Stream5->NDTR);
+ DMA2->HIFCR = DMA_HIFCR_CTCIF5 | DMA_HIFCR_CHTIF5;
+
+ EXIT_CRITICAL();
+}
+
+// ***************************** Hardware setup *****************************
+
+void dma_rx_init(uart_ring *q) {
+ // Initialization is UART-dependent
+ if(q == &uart_ring_gps){
+ // DMA2, stream 5, channel 4
+
+ // Disable FIFO mode (enable direct)
+ DMA2_Stream5->FCR &= ~DMA_SxFCR_DMDIS;
+
+ // Setup addresses
+ DMA2_Stream5->PAR = (uint32_t)&(USART1->DR); // Source
+ DMA2_Stream5->M0AR = (uint32_t)q->elems_rx; // Destination
+ DMA2_Stream5->NDTR = q->rx_fifo_size; // Number of bytes to copy
+
+ // Circular, Increment memory, byte size, periph -> memory, enable
+ // Transfer complete, half transfer, transfer error and direct mode error interrupt enable
+ DMA2_Stream5->CR = DMA_SxCR_CHSEL_2 | DMA_SxCR_MINC | DMA_SxCR_CIRC | DMA_SxCR_HTIE | DMA_SxCR_TCIE | DMA_SxCR_TEIE | DMA_SxCR_DMEIE | DMA_SxCR_EN;
+
+ // Enable DMA receiver in UART
+ q->uart->CR3 |= USART_CR3_DMAR;
+
+ // Enable UART IDLE interrupt
+ q->uart->CR1 |= USART_CR1_IDLEIE;
+
+ // Enable interrupt
+ NVIC_EnableIRQ(DMA2_Stream5_IRQn);
+ } else {
+ puts("Tried to initialize RX DMA for an unsupported UART\n");
+ }
+}
+
+#define __DIV(_PCLK_, _BAUD_) (((_PCLK_) * 25U) / (4U * (_BAUD_)))
+#define __DIVMANT(_PCLK_, _BAUD_) (__DIV((_PCLK_), (_BAUD_)) / 100U)
+#define __DIVFRAQ(_PCLK_, _BAUD_) ((((__DIV((_PCLK_), (_BAUD_)) - (__DIVMANT((_PCLK_), (_BAUD_)) * 100U)) * 16U) + 50U) / 100U)
+#define __USART_BRR(_PCLK_, _BAUD_) ((__DIVMANT((_PCLK_), (_BAUD_)) << 4) | (__DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0FU))
+
+void uart_set_baud(USART_TypeDef *u, unsigned int baud) {
+ if (u == USART1) {
+ // USART1 is on APB2
+ u->BRR = __USART_BRR(48000000U, baud);
+ } else {
+ u->BRR = __USART_BRR(24000000U, baud);
+ }
+}
+
+void uart_init(uart_ring *q, int baud) {
+ // Register interrupts (max data rate: 115200 baud)
+ if(q->uart == USART1){
+ REGISTER_INTERRUPT(USART1_IRQn, USART1_IRQ_Handler, 150000U, FAULT_INTERRUPT_RATE_UART_1)
+ } else if (q->uart == USART2){
+ REGISTER_INTERRUPT(USART2_IRQn, USART2_IRQ_Handler, 150000U, FAULT_INTERRUPT_RATE_UART_2)
+ } else if (q->uart == USART3){
+ REGISTER_INTERRUPT(USART3_IRQn, USART3_IRQ_Handler, 150000U, FAULT_INTERRUPT_RATE_UART_3)
+ } else if (q->uart == UART5){
+ REGISTER_INTERRUPT(UART5_IRQn, UART5_IRQ_Handler, 150000U, FAULT_INTERRUPT_RATE_UART_5)
+ } else {
+ // UART not used. Skip registering interrupts
+ }
+ if(q->dma_rx){
+ REGISTER_INTERRUPT(DMA2_Stream5_IRQn, DMA2_Stream5_IRQ_Handler, 100U, FAULT_INTERRUPT_RATE_UART_DMA) // Called twice per buffer
+ }
+
+ // Set baud and enable peripheral with TX and RX mode
+ uart_set_baud(q->uart, baud);
+ q->uart->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE;
+ if ((q->uart == USART2) || (q->uart == USART3) || (q->uart == UART5)) {
+ q->uart->CR1 |= USART_CR1_RXNEIE;
+ }
+
+ // Enable UART interrupts
+ if(q->uart == USART1){
+ NVIC_EnableIRQ(USART1_IRQn);
+ } else if (q->uart == USART2){
+ NVIC_EnableIRQ(USART2_IRQn);
+ } else if (q->uart == USART3){
+ NVIC_EnableIRQ(USART3_IRQn);
+ } else if (q->uart == UART5){
+ NVIC_EnableIRQ(UART5_IRQn);
+ } else {
+ // UART not used. Skip enabling interrupts
+ }
+
+ // Initialise RX DMA if used
+ if(q->dma_rx){
+ dma_rx_init(q);
+ }
+}
+
+// ************************* Low-level buffer functions *************************
bool getc(uart_ring *q, char *elem) {
bool ret = false;
- enter_critical_section();
+ ENTER_CRITICAL();
if (q->w_ptr_rx != q->r_ptr_rx) {
if (elem != NULL) *elem = q->elems_rx[q->r_ptr_rx];
- q->r_ptr_rx = (q->r_ptr_rx + 1U) % FIFO_SIZE;
+ q->r_ptr_rx = (q->r_ptr_rx + 1U) % q->rx_fifo_size;
ret = true;
}
- exit_critical_section();
+ EXIT_CRITICAL();
return ret;
}
@@ -136,14 +334,14 @@ bool injectc(uart_ring *q, char elem) {
int ret = false;
uint16_t next_w_ptr;
- enter_critical_section();
- next_w_ptr = (q->w_ptr_rx + 1U) % FIFO_SIZE;
+ ENTER_CRITICAL();
+ next_w_ptr = (q->w_ptr_rx + 1U) % q->tx_fifo_size;
if (next_w_ptr != q->r_ptr_rx) {
q->elems_rx[q->w_ptr_rx] = elem;
q->w_ptr_rx = next_w_ptr;
ret = true;
}
- exit_critical_section();
+ EXIT_CRITICAL();
return ret;
}
@@ -152,20 +350,22 @@ bool putc(uart_ring *q, char elem) {
bool ret = false;
uint16_t next_w_ptr;
- enter_critical_section();
- next_w_ptr = (q->w_ptr_tx + 1U) % FIFO_SIZE;
+ ENTER_CRITICAL();
+ next_w_ptr = (q->w_ptr_tx + 1U) % q->tx_fifo_size;
if (next_w_ptr != q->r_ptr_tx) {
q->elems_tx[q->w_ptr_tx] = elem;
q->w_ptr_tx = next_w_ptr;
ret = true;
}
- exit_critical_section();
+ EXIT_CRITICAL();
- uart_ring_process(q);
+ uart_tx_ring(q);
return ret;
}
+// Seems dangerous to use (might lock CPU if called with interrupts disabled f.e.)
+// TODO: Remove? Not used anyways
void uart_flush(uart_ring *q) {
while (q->w_ptr_tx != q->r_ptr_tx) {
__WFI();
@@ -175,7 +375,7 @@ void uart_flush(uart_ring *q) {
void uart_flush_sync(uart_ring *q) {
// empty the TX buffer
while (q->w_ptr_tx != q->r_ptr_tx) {
- uart_ring_process(q);
+ uart_tx_ring(q);
}
}
@@ -185,127 +385,23 @@ void uart_send_break(uart_ring *u) {
}
void clear_uart_buff(uart_ring *q) {
- enter_critical_section();
+ ENTER_CRITICAL();
q->w_ptr_tx = 0;
q->r_ptr_tx = 0;
q->w_ptr_rx = 0;
q->r_ptr_rx = 0;
- exit_critical_section();
-}
-
-// ***************************** start UART code *****************************
-
-#define __DIV(_PCLK_, _BAUD_) (((_PCLK_) * 25U) / (4U * (_BAUD_)))
-#define __DIVMANT(_PCLK_, _BAUD_) (__DIV((_PCLK_), (_BAUD_)) / 100U)
-#define __DIVFRAQ(_PCLK_, _BAUD_) ((((__DIV((_PCLK_), (_BAUD_)) - (__DIVMANT((_PCLK_), (_BAUD_)) * 100U)) * 16U) + 50U) / 100U)
-#define __USART_BRR(_PCLK_, _BAUD_) ((__DIVMANT((_PCLK_), (_BAUD_)) << 4) | (__DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0FU))
-
-void uart_set_baud(USART_TypeDef *u, unsigned int baud) {
- if (u == USART1) {
- // USART1 is on APB2
- u->BRR = __USART_BRR(48000000U, baud);
- } else {
- u->BRR = __USART_BRR(24000000U, baud);
- }
-}
-
-#define USART1_DMA_LEN 0x20
-char usart1_dma[USART1_DMA_LEN];
-
-void uart_dma_drain(void) {
- uart_ring *q = &esp_ring;
-
- enter_critical_section();
-
- if ((DMA2->HISR & DMA_HISR_TCIF5) || (DMA2->HISR & DMA_HISR_HTIF5) || (DMA2_Stream5->NDTR != USART1_DMA_LEN)) {
- // disable DMA
- q->uart->CR3 &= ~USART_CR3_DMAR;
- DMA2_Stream5->CR &= ~DMA_SxCR_EN;
- while ((DMA2_Stream5->CR & DMA_SxCR_EN) != 0);
-
- unsigned int i;
- for (i = 0; i < (USART1_DMA_LEN - DMA2_Stream5->NDTR); i++) {
- char c = usart1_dma[i];
- uint16_t next_w_ptr = (q->w_ptr_rx + 1U) % FIFO_SIZE;
- if (next_w_ptr != q->r_ptr_rx) {
- q->elems_rx[q->w_ptr_rx] = c;
- q->w_ptr_rx = next_w_ptr;
- }
- }
-
- // reset DMA len
- DMA2_Stream5->NDTR = USART1_DMA_LEN;
-
- // clear interrupts
- DMA2->HIFCR = DMA_HIFCR_CTCIF5 | DMA_HIFCR_CHTIF5;
- //DMA2->HIFCR = DMA_HIFCR_CTEIF5 | DMA_HIFCR_CDMEIF5 | DMA_HIFCR_CFEIF5;
-
- // enable DMA
- DMA2_Stream5->CR |= DMA_SxCR_EN;
- q->uart->CR3 |= USART_CR3_DMAR;
- }
-
- exit_critical_section();
-}
-
-void DMA2_Stream5_IRQHandler(void) {
- //set_led(LED_BLUE, 1);
- uart_dma_drain();
- //set_led(LED_BLUE, 0);
-}
-
-void uart_init(USART_TypeDef *u, int baud) {
- // enable uart and tx+rx mode
- u->CR1 = USART_CR1_UE;
- uart_set_baud(u, baud);
-
- u->CR1 |= USART_CR1_TE | USART_CR1_RE;
- //u->CR2 = USART_CR2_STOP_0 | USART_CR2_STOP_1;
- //u->CR2 = USART_CR2_STOP_0;
- // ** UART is ready to work **
-
- // enable interrupts
- if (u != USART1) {
- u->CR1 |= USART_CR1_RXNEIE;
- }
-
- if (u == USART1) {
- // DMA2, stream 2, channel 3
- DMA2_Stream5->M0AR = (uint32_t)usart1_dma;
- DMA2_Stream5->NDTR = USART1_DMA_LEN;
- DMA2_Stream5->PAR = (uint32_t)&(USART1->DR);
-
- // channel4, increment memory, periph -> memory, enable
- DMA2_Stream5->CR = DMA_SxCR_CHSEL_2 | DMA_SxCR_MINC | DMA_SxCR_HTIE | DMA_SxCR_TCIE | DMA_SxCR_EN;
-
- // this one uses DMA receiver
- u->CR3 = USART_CR3_DMAR;
-
- NVIC_EnableIRQ(DMA2_Stream5_IRQn);
- NVIC_EnableIRQ(USART1_IRQn);
- } else if (u == USART2) {
- NVIC_EnableIRQ(USART2_IRQn);
- } else if (u == USART3) {
- NVIC_EnableIRQ(USART3_IRQn);
- } else if (u == UART5) {
- NVIC_EnableIRQ(UART5_IRQn);
- } else {
- // USART type undefined, skip
- }
+ EXIT_CRITICAL();
}
+// ************************ High-level debug functions **********************
void putch(const char a) {
if (has_external_debug_serial) {
- /*while ((debug_ring.uart->SR & USART_SR_TXE) == 0);
- debug_ring.uart->DR = a;*/
-
// assuming debugging is important if there's external serial connected
- while (!putc(&debug_ring, a));
+ while (!putc(&uart_ring_debug, a));
- //putc(&debug_ring, a);
} else {
// misra-c2012-17.7: serial debug function, ok to ignore output
- (void)injectc(&debug_ring, a);
+ (void)injectc(&uart_ring_debug, a);
}
}
@@ -327,7 +423,7 @@ void putui(uint32_t i) {
idx--;
i_copy /= 10;
} while (i_copy != 0U);
- puts(str + idx + 1U);
+ puts(&str[idx + 1U]);
}
void puth(unsigned int i) {
@@ -345,10 +441,12 @@ void puth2(unsigned int i) {
}
void hexdump(const void *a, int l) {
- for (int i=0; i < l; i++) {
- if ((i != 0) && ((i & 0xf) == 0)) puts("\n");
- puth2(((const unsigned char*)a)[i]);
- puts(" ");
+ if (a != NULL) {
+ for (int i=0; i < l; i++) {
+ if ((i != 0) && ((i & 0xf) == 0)) puts("\n");
+ puth2(((const unsigned char*)a)[i]);
+ puts(" ");
+ }
}
puts("\n");
}
diff --git a/panda/board/drivers/uja1023.h b/panda/board/drivers/uja1023.h
deleted file mode 100644
index fcf8c120f5c533..00000000000000
--- a/panda/board/drivers/uja1023.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-This driver configures the NXP UJA1023 chip on revB tesla giraffe
-for output on startup and then allows the user to set the output
-pins via set_uja1023_output_bits() and set_uja1023_output_buffer()
-
-Set UJA1023 output pins. Bits = pins
-P0 = bit 0
-P1 = bit 1
-...
-P7 = bit 7
-0b10101010 = P0 off, P1 on, P2 off, P3 on, P4 off, P5 on, P6 off, P7 on
-
-Examples:
-set bit 5:
-set_uja1023_output_bits(1 << 5); //turn on any pins that = 1, leave all other pins alone
-
-clear bit 5:
-clear_uja1023_output_bits(1 << 5); //turn off any pins that = 1, leave all other pins alone
-
-Or set the whole buffer at once:
-set_uja1023_output_buffer(0xFF); //turn all output pins on
-set_uja1023_output_buffer(0x00); //turn all output pins off
-*/
-
-#define TICKS_PER_FRAME 2000 //1s = 33000
-
-#ifdef PANDA
-int lin_send_timer = TICKS_PER_FRAME;
-
-LIN_FRAME_t assign_id_frame, io_cfg_1_frame, io_cfg_2_frame, io_cfg_3_frame, io_cfg_4_frame, px_req_frame, frame_to_send, frame_to_receive;
-
-
-int initial_loop_num = 0;
-
-
-void UJA_TIM5_IRQHandler(void) {
- if (TIM5->SR & TIM_SR_UIF) {
- if (lin_send_timer == 0) {
- //send every 1s
- lin_send_timer = TICKS_PER_FRAME;
- if (initial_loop_num <= 3) {
- switch(initial_loop_num) {
- case 0 :
- frame_to_send = assign_id_frame;
- puts("UJA1023 init stage 0\n");
- break;
- case 1 :
- frame_to_send = io_cfg_1_frame;
- puts("UJA1023 init stage 1\n");
- break;
- case 2 :
- frame_to_send = io_cfg_2_frame;
- puts("UJA1023 init stage 2\n");
- break;
- case 3 :
- frame_to_send = io_cfg_3_frame;
- puts("UJA1023 init stage 3\n");
- break;
- }
- initial_loop_num++;
- }
- else {
-
- /*
- if (px_req_frame.data[0] == 0x02) {
- px_req_frame.data[0] = 0x00;
- }
- else {
- px_req_frame.data[0] = 0x02;
- }
- */
- frame_to_send = px_req_frame;
- }
- LIN_SendData(&lin2_ring, &frame_to_send);
- /*
- puts("Set UJA to output: ");
- puth(px_req_frame.data[0]);
- puts("\n");
- */
-
-
- } //if counter = 0
-
- if (lin_send_timer == (TICKS_PER_FRAME / 10) && frame_to_send.has_response) {
- //send empty header to slave
- LIN_SendReceiveFrame(&lin2_ring, &frame_to_receive);
- }
-
- if (lin_send_timer == ((TICKS_PER_FRAME / 10) * 2) && frame_to_send.has_response) {
- LIN_ReceiveData(&lin2_ring, &frame_to_receive);
- puts("Received Lin frame: ");
-
- /*
- for(int n=0; n < frame_to_receive.data_len; n++) {
- puth(frame_to_receive.data[n]);
- }
- */
- puts("\n");
- }
-
- lin_send_timer--;
- } //interrupt
- TIM5->SR = 0;
-}
-
-void uja1023_init(void) {
- //make receive frame
- //LIN_FRAME_t frame_to_receive;
- frame_to_receive.data_len = 8;
- frame_to_receive.frame_id = 0x7D; //Response PID, 0x7D = 2 bit parity + 0x3C raw ID
-
- //make frame for Assign frame ID
- //LIN_FRAME_t assign_id_frame;
- assign_id_frame.has_response = 1;
- assign_id_frame.data_len = 8;
- assign_id_frame.frame_id = 0x3C; //0x3C is for diagnostic frames
- assign_id_frame.data[0] = 0x60; //D0, iniital node address, set to 0x60 default
- assign_id_frame.data[1] = 0x06; //D1, protocol control info (PCI); should be 0x06
- assign_id_frame.data[2] = 0xB1; //D2, service id (SID); should be 0xB4
- assign_id_frame.data[3] = 0x11; //D3, supplier ID low byte; should be 0x11
- assign_id_frame.data[4] = 0x00; //D4, supplier ID high byte; should be 0x00
- assign_id_frame.data[5] = 0x00; //D5, function id low byte; should be 0x00
- assign_id_frame.data[6] = 0x00; //D6, function id high byte; should be 0x00
- assign_id_frame.data[7] = 0x04; //D7, slave node address (NAD). 0x04 means ID(PxReq) = 04, ID(PxResp) = 05
-
- //make frame for io_cfg_1; configure Px pins for push pull level output
- //LIN_FRAME_t io_cfg_1_frame;
- io_cfg_1_frame.has_response = 1;
- io_cfg_1_frame.data_len = 8;
- io_cfg_1_frame.frame_id = 0x3C; //0x3C is for diagnostic frames
- io_cfg_1_frame.data[0] = 0x60; //D0, slave node address (NAD) (default 0x60)
- io_cfg_1_frame.data[1] = 0x06; //D1, protocol control info (PCI); should be 0x06
- io_cfg_1_frame.data[2] = 0xB4; //D2, service id (SID); should be 0xB4
- io_cfg_1_frame.data[3] = 0x00; //D3, bits 7-6 are 00 for first cfg block. Bits 5-0 are for IM/INH, RxDL, ADCIN cfg. D3 default is 0x00
- io_cfg_1_frame.data[4] = 0xFF; //D4, High side enable (HSE). Set to 0xFF for High side driver or push pull
- io_cfg_1_frame.data[5] = 0x00; //D4, Low side enable (LSE). Set to 0xFF for Low side driver or push pull
- io_cfg_1_frame.data[6] = 0x00; //D6, Output mode (low byte) (OM0). Set to 0x00 for level output
- io_cfg_1_frame.data[7] = 0x00; //D7, Output mode (high byte) (OM1). Set to 0x00 for level output
-
- //make frame for io_cfg_2; defaults
- //LIN_FRAME_t io_cfg_2_frame;
- io_cfg_2_frame.has_response = 1;
- io_cfg_2_frame.data_len = 8;
- io_cfg_2_frame.frame_id = 0x3C; //0x3C is for diagnostic frames
- io_cfg_2_frame.data[0] = 0x60; //D0, slave node address (NAD) (default 0x60)
- io_cfg_2_frame.data[1] = 0x06; //D1, protocol control info (PCI); should be 0x06
- io_cfg_2_frame.data[2] = 0xB4; //D2, service id (SID); should be 0xB4
- io_cfg_2_frame.data[3] = 0x40; //D3, bits 7-6 are 01 for second cfg block. Bits 5-0 are for LSLP, TxDL, SMC, SMW, SM. D3 default is 0x40 (every bit 0 except for 7-6)
- io_cfg_2_frame.data[4] = 0x00; //D4, Capture Mode (low byte) CM0. Set to 0x00 for no capture
- io_cfg_2_frame.data[5] = 0x00; //D5, Capture Mode (high byte) CM1. Set to 0x00 for no capture
- io_cfg_2_frame.data[6] = 0x00; //D6, Threshold select TH2 TH1. Default 0x00
- io_cfg_2_frame.data[7] = 0x00; //D7, Local Wake up pin mask LWM. Default 0x00
-
- //make frame for io_cfg_3; set LH value, classic checksum, and LIN speeds up to 20kbps
- //LIN_FRAME_t io_cfg_3_frame;
- io_cfg_3_frame.has_response = 1;
- io_cfg_3_frame.data_len = 8;
- io_cfg_3_frame.frame_id = 0x3C; //0x3C is for diagnostic frames
- io_cfg_3_frame.data[0] = 0x60; //D0, slave node address (NAD) (default 0x60)
- io_cfg_3_frame.data[1] = 0x04; //D1, protocol control info (PCI); should be 0x04
- io_cfg_3_frame.data[2] = 0xB4; //D2, service id (SID); should be 0xB4
- io_cfg_3_frame.data[3] = 0x80; //D3, bits 7-6 are 10 for third cfg block. Bits 5-0 are for LSC and ECC (classic vs enhanced checksum). D3 default is 0x80 (every bit 0 except for 7-6)
- io_cfg_3_frame.data[4] = 0x00; //D4, Limp home mode output value. This is the value the output pins will go to if the bus times out or another error occurs
- io_cfg_3_frame.data[5] = 0x10; //D5, PWM initial value; shouldn't matter but is 0x10 per datasheet example
- io_cfg_3_frame.data[6] = 0xFF; //D6, Not used, set to 0xFF
- io_cfg_3_frame.data[7] = 0xFF; //D7, Not used, set to 0xFF
-
-
- //make frame for io_cfg_4; diagnostic data frame
- //LIN_FRAME_t io_cfg_4_frame;
- io_cfg_4_frame.has_response = 1;
- io_cfg_4_frame.data_len = 8;
- io_cfg_4_frame.frame_id = 0x3C; //0x3C is for diagnostic frames
- io_cfg_4_frame.data[0] = 0x60; //D0, slave node address (NAD) (default 0x60)
- io_cfg_4_frame.data[1] = 0x02; //D1, protocol control info (PCI); should be 0x02
- io_cfg_4_frame.data[2] = 0xB4; //D2, service id (SID); should be 0xB4
- io_cfg_4_frame.data[3] = 0xC0; //D3, bits 7-6 are 11 for fourth cfg block. Bits 5-0 are unused and should be set to 0; should be 0xC0
- io_cfg_4_frame.data[4] = 0xFF; //D4, Not used, set to 0xFF
- io_cfg_4_frame.data[5] = 0xFF; //D5, Not used, set to 0xFF
- io_cfg_4_frame.data[6] = 0xFF; //D6, Not used, set to 0xFF
- io_cfg_4_frame.data[7] = 0xFF; //D7, Not used, set to 0xFF
-
-
- //make frame for PxReq frame (this is what sets the UJA1023's output pins)
- //LIN_FRAME_t px_req_frame;
- px_req_frame.has_response = 0;
- px_req_frame.data_len = 2;
- px_req_frame.frame_id = 0xC4; //PID, 0xC4 = 2 bit parity + 0x04 raw ID
- px_req_frame.data[0] = 0x00; //D0, bit 7 = P7, bit 6 = P6 ... bit 0 = P0. 0x02 would set P1 to on
- px_req_frame.data[1] = 0x80; //D1, PWM Value; shouldn't matter but is 0x80 per datasheet example
-
- // setup
- TIM5->PSC = 48-1; // tick on 1 us
- TIM5->CR1 = TIM_CR1_CEN; // enable
- TIM5->ARR = 30-1; // 33.3 kbps
-
- // in case it's disabled
- NVIC_EnableIRQ(TIM5_IRQn);
-
- // run the interrupt
- TIM5->DIER = TIM_DIER_UIE; // update interrupt
- TIM5->SR = 0;
-
- initial_loop_num = 0;
-
-}
-
-//turn on any pins that = 1, leave all other pins alone
-void set_uja1023_output_bits(uint8_t to_set) {
- px_req_frame.data[0] |= to_set;
-}
-
-//turn off any pins that = 1, leave all other pins alone
-void clear_uja1023_output_bits(uint8_t to_clear) {
- px_req_frame.data[0] &= ~to_clear;
-}
-
-//Set the whole Px output buffer at once:
-void set_uja1023_output_buffer(uint8_t to_set) {
- px_req_frame.data[0] = to_set;
-}
-
-#endif
-
diff --git a/panda/board/drivers/usb.h b/panda/board/drivers/usb.h
index e55906d89eb8a2..e85af95af587c3 100644
--- a/panda/board/drivers/usb.h
+++ b/panda/board/drivers/usb.h
@@ -23,12 +23,18 @@ typedef union _USB_Setup {
}
USB_Setup_TypeDef;
+#define MAX_CAN_MSGS_PER_BULK_TRANSFER 4U
+
+bool usb_eopf_detected = false;
+
void usb_init(void);
int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired);
int usb_cb_ep1_in(void *usbdata, int len, bool hardwired);
void usb_cb_ep2_out(void *usbdata, int len, bool hardwired);
void usb_cb_ep3_out(void *usbdata, int len, bool hardwired);
+void usb_cb_ep3_out_complete(void);
void usb_cb_enumeration_complete(void);
+void usb_outep3_resume_if_paused(void);
// **** supporting defines ****
@@ -281,15 +287,8 @@ uint8_t binary_object_store_desc[] = {
// BOS header
BINARY_OBJECT_STORE_DESCRIPTOR_LENGTH, // bLength, this is only the length of the header
BINARY_OBJECT_STORE_DESCRIPTOR, // bDescriptorType
- 0x40, 0x00, // wTotalLength (LSB, MSB)
- 0x03, // bNumDeviceCaps (USB 2.0 + WebUSB + WinUSB)
-
- // -------------------------------------------------
- // USB 2.0 extension descriptor
- 0x07, // bLength, Descriptor size
- 0x10, // bDescriptorType, Device Capability Descriptor Type
- 0x02, // bDevCapabilityType, USB 2.0 extension capability type
- 0x00, 0x00, 0x00, 0x00, // bmAttributes, LIBUSB_BM_LPM_SUPPORT = 2 and its the only option
+ 0x39, 0x00, // wTotalLength (LSB, MSB)
+ 0x02, // bNumDeviceCaps (WebUSB + WinUSB)
// -------------------------------------------------
// WebUSB descriptor
@@ -387,6 +386,7 @@ USB_Setup_TypeDef setup;
uint8_t usbdata[0x100];
uint8_t* ep0_txdata = NULL;
uint16_t ep0_txlen = 0;
+bool outep3_processing = false;
// Store the current interface alt setting.
int current_int0_alt_setting = 0;
@@ -439,7 +439,7 @@ void USB_WritePacket_EP0(uint8_t *src, uint16_t len) {
USB_WritePacket(src, wplen, 0);
if (wplen < len) {
- ep0_txdata = src + wplen;
+ ep0_txdata = &src[wplen];
ep0_txlen = len - wplen;
USBx_DEVICE->DIEPEMPMSK |= 1;
} else {
@@ -662,81 +662,15 @@ void usb_setup(void) {
break;
default:
resp_len = usb_cb_control_msg(&setup, resp, 1);
- USB_WritePacket(resp, MIN(resp_len, setup.b.wLength.w), 0);
- USBx_OUTEP(0)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
+ // response pending if -1 was returned
+ if (resp_len != -1) {
+ USB_WritePacket(resp, MIN(resp_len, setup.b.wLength.w), 0);
+ USBx_OUTEP(0)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
+ }
}
}
-void usb_init(void) {
- // full speed PHY, do reset and remove power down
- /*puth(USBx->GRSTCTL);
- puts(" resetting PHY\n");*/
- while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0);
- //puts("AHB idle\n");
-
- // reset PHY here
- USBx->GRSTCTL |= USB_OTG_GRSTCTL_CSRST;
- while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_CSRST) == USB_OTG_GRSTCTL_CSRST);
- //puts("reset done\n");
-
- // internal PHY, force device mode
- USBx->GUSBCFG = USB_OTG_GUSBCFG_PHYSEL | USB_OTG_GUSBCFG_FDMOD;
-
- // slowest timings
- USBx->GUSBCFG |= ((USBD_FS_TRDT_VALUE << 10) & USB_OTG_GUSBCFG_TRDT);
-
- // power up the PHY
-#ifdef STM32F4
- USBx->GCCFG = USB_OTG_GCCFG_PWRDWN;
-
- //USBx->GCCFG |= USB_OTG_GCCFG_VBDEN | USB_OTG_GCCFG_SDEN |USB_OTG_GCCFG_PDEN | USB_OTG_GCCFG_DCDEN;
-
- /* B-peripheral session valid override enable*/
- USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
- USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
-#else
- USBx->GCCFG = USB_OTG_GCCFG_PWRDWN | USB_OTG_GCCFG_NOVBUSSENS;
-#endif
-
- // be a device, slowest timings
- //USBx->GUSBCFG = USB_OTG_GUSBCFG_FDMOD | USB_OTG_GUSBCFG_PHYSEL | USB_OTG_GUSBCFG_TRDT | USB_OTG_GUSBCFG_TOCAL;
- //USBx->GUSBCFG |= (uint32_t)((USBD_FS_TRDT_VALUE << 10) & USB_OTG_GUSBCFG_TRDT);
- //USBx->GUSBCFG = USB_OTG_GUSBCFG_PHYSEL | USB_OTG_GUSBCFG_TRDT | USB_OTG_GUSBCFG_TOCAL;
-
- // **** for debugging, doesn't seem to work ****
- //USBx->GUSBCFG |= USB_OTG_GUSBCFG_CTXPKT;
-
- // reset PHY clock
- USBx_PCGCCTL = 0;
-
- // enable the fancy OTG things
- // DCFG_FRAME_INTERVAL_80 is 0
- //USBx->GUSBCFG |= USB_OTG_GUSBCFG_HNPCAP | USB_OTG_GUSBCFG_SRPCAP;
- USBx_DEVICE->DCFG |= USB_OTG_SPEED_FULL | USB_OTG_DCFG_NZLSOHSK;
-
- //USBx_DEVICE->DCFG = USB_OTG_DCFG_NZLSOHSK | USB_OTG_DCFG_DSPD;
- //USBx_DEVICE->DCFG = USB_OTG_DCFG_DSPD;
- // clear pending interrupts
- USBx->GINTSTS = 0xBFFFFFFFU;
-
- // setup USB interrupts
- // all interrupts except TXFIFO EMPTY
- //USBx->GINTMSK = 0xFFFFFFFF & ~(USB_OTG_GINTMSK_NPTXFEM | USB_OTG_GINTMSK_PTXFEM | USB_OTG_GINTSTS_SOF | USB_OTG_GINTSTS_EOPF);
- //USBx->GINTMSK = 0xFFFFFFFF & ~(USB_OTG_GINTMSK_NPTXFEM | USB_OTG_GINTMSK_PTXFEM);
- USBx->GINTMSK = USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_ENUMDNEM | USB_OTG_GINTMSK_OTGINT |
- USB_OTG_GINTMSK_RXFLVLM | USB_OTG_GINTMSK_GONAKEFFM | USB_OTG_GINTMSK_GINAKEFFM |
- USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTMSK_IEPINT | USB_OTG_GINTMSK_USBSUSPM |
- USB_OTG_GINTMSK_CIDSCHGM | USB_OTG_GINTMSK_SRQIM | USB_OTG_GINTMSK_MMISM;
-
- USBx->GAHBCFG = USB_OTG_GAHBCFG_GINT;
-
- // DCTL startup value is 2 on new chip, 0 on old chip
- USBx_DEVICE->DCTL = 0;
-
- // enable the IRQ
- NVIC_EnableIRQ(OTG_FS_IRQn);
-}
// ***************************** USB port *****************************
@@ -767,6 +701,10 @@ void usb_irqhandler(void) {
puts("ESUSP detected\n");
}
+ if ((gintsts & USB_OTG_GINTSTS_EOPF) != 0) {
+ usb_eopf_detected = true;
+ }
+
if ((gintsts & USB_OTG_GINTSTS_USBRST) != 0) {
puts("USB reset\n");
usb_reset();
@@ -820,6 +758,7 @@ void usb_irqhandler(void) {
}
if (endpoint == 3) {
+ outep3_processing = true;
usb_cb_ep3_out(usbdata, len, 1);
}
} else if (status == STS_SETUP_UPDT) {
@@ -892,15 +831,17 @@ void usb_irqhandler(void) {
#ifdef DEBUG_USB
puts(" OUT3 PACKET XFRC\n");
#endif
- USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
- USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
+ // NAK cleared by process_can (if tx buffers have room)
+ outep3_processing = false;
+ usb_cb_ep3_out_complete();
} else if ((USBx_OUTEP(3)->DOEPINT & 0x2000) != 0) {
#ifdef DEBUG_USB
puts(" OUT3 PACKET WTF\n");
#endif
// if NAK was set trigger this, unknown interrupt
- USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
- USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
+ // TODO: why was this here? fires when TX buffers when we can't clear NAK
+ // USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
+ // USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_CNAK;
} else if ((USBx_OUTEP(3)->DOEPINT) != 0) {
puts("OUTEP3 error ");
puth(USBx_OUTEP(3)->DOEPINT);
@@ -985,7 +926,7 @@ void usb_irqhandler(void) {
if ((ep0_txlen != 0U) && ((USBx_INEP(0)->DTXFSTS & USB_OTG_DTXFSTS_INEPTFSAV) >= 0x40U)) {
uint16_t len = MIN(ep0_txlen, 0x40);
USB_WritePacket(ep0_txdata, len, 0);
- ep0_txdata += len;
+ ep0_txdata = &ep0_txdata[len];
ep0_txlen -= len;
if (ep0_txlen == 0U) {
ep0_txdata = NULL;
@@ -1008,7 +949,16 @@ void usb_irqhandler(void) {
//USBx->GINTMSK = 0xFFFFFFFF & ~(USB_OTG_GINTMSK_NPTXFEM | USB_OTG_GINTMSK_PTXFEM | USB_OTG_GINTSTS_SOF | USB_OTG_GINTSTS_EOPF);
}
-void OTG_FS_IRQHandler(void) {
+void usb_outep3_resume_if_paused() {
+ ENTER_CRITICAL();
+ if (!outep3_processing && (USBx_OUTEP(3)->DOEPCTL & USB_OTG_DOEPCTL_NAKSTS) != 0) {
+ USBx_OUTEP(3)->DOEPTSIZ = (1U << 19) | 0x40U;
+ USBx_OUTEP(3)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
+ }
+ EXIT_CRITICAL();
+}
+
+void OTG_FS_IRQ_Handler(void) {
NVIC_DisableIRQ(OTG_FS_IRQn);
//__disable_irq();
usb_irqhandler();
@@ -1016,3 +966,89 @@ void OTG_FS_IRQHandler(void) {
NVIC_EnableIRQ(OTG_FS_IRQn);
}
+bool usb_enumerated(void) {
+ // This relies on the USB being suspended after no activity for 3ms.
+ // Seems pretty stable in combination with the EOPF to reject noise.
+ bool ret = false;
+ if(!(USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS)){
+ // Check to see if an end of periodic frame is detected
+ ret = usb_eopf_detected;
+ }
+ usb_eopf_detected = false;
+ return ret;
+}
+
+// ***************************** USB init *****************************
+
+void usb_init(void) {
+ REGISTER_INTERRUPT(OTG_FS_IRQn, OTG_FS_IRQ_Handler, 1500000U, FAULT_INTERRUPT_RATE_USB) //TODO: Find out a better rate limit for USB. Now it's the 1.5MB/s rate
+
+ // full speed PHY, do reset and remove power down
+ /*puth(USBx->GRSTCTL);
+ puts(" resetting PHY\n");*/
+ while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0);
+ //puts("AHB idle\n");
+
+ // reset PHY here
+ USBx->GRSTCTL |= USB_OTG_GRSTCTL_CSRST;
+ while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_CSRST) == USB_OTG_GRSTCTL_CSRST);
+ //puts("reset done\n");
+
+ // internal PHY, force device mode
+ USBx->GUSBCFG = USB_OTG_GUSBCFG_PHYSEL | USB_OTG_GUSBCFG_FDMOD;
+
+ // slowest timings
+ USBx->GUSBCFG |= ((USBD_FS_TRDT_VALUE << 10) & USB_OTG_GUSBCFG_TRDT);
+
+ // power up the PHY
+#ifdef STM32F4
+ USBx->GCCFG = USB_OTG_GCCFG_PWRDWN;
+
+ //USBx->GCCFG |= USB_OTG_GCCFG_VBDEN | USB_OTG_GCCFG_SDEN |USB_OTG_GCCFG_PDEN | USB_OTG_GCCFG_DCDEN;
+
+ /* B-peripheral session valid override enable*/
+ USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL;
+ USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN;
+#else
+ USBx->GCCFG = USB_OTG_GCCFG_PWRDWN | USB_OTG_GCCFG_NOVBUSSENS;
+#endif
+
+ // be a device, slowest timings
+ //USBx->GUSBCFG = USB_OTG_GUSBCFG_FDMOD | USB_OTG_GUSBCFG_PHYSEL | USB_OTG_GUSBCFG_TRDT | USB_OTG_GUSBCFG_TOCAL;
+ //USBx->GUSBCFG |= (uint32_t)((USBD_FS_TRDT_VALUE << 10) & USB_OTG_GUSBCFG_TRDT);
+ //USBx->GUSBCFG = USB_OTG_GUSBCFG_PHYSEL | USB_OTG_GUSBCFG_TRDT | USB_OTG_GUSBCFG_TOCAL;
+
+ // **** for debugging, doesn't seem to work ****
+ //USBx->GUSBCFG |= USB_OTG_GUSBCFG_CTXPKT;
+
+ // reset PHY clock
+ USBx_PCGCCTL = 0;
+
+ // enable the fancy OTG things
+ // DCFG_FRAME_INTERVAL_80 is 0
+ //USBx->GUSBCFG |= USB_OTG_GUSBCFG_HNPCAP | USB_OTG_GUSBCFG_SRPCAP;
+ USBx_DEVICE->DCFG |= USB_OTG_SPEED_FULL | USB_OTG_DCFG_NZLSOHSK;
+
+ //USBx_DEVICE->DCFG = USB_OTG_DCFG_NZLSOHSK | USB_OTG_DCFG_DSPD;
+ //USBx_DEVICE->DCFG = USB_OTG_DCFG_DSPD;
+
+ // clear pending interrupts
+ USBx->GINTSTS = 0xBFFFFFFFU;
+
+ // setup USB interrupts
+ // all interrupts except TXFIFO EMPTY
+ //USBx->GINTMSK = 0xFFFFFFFF & ~(USB_OTG_GINTMSK_NPTXFEM | USB_OTG_GINTMSK_PTXFEM | USB_OTG_GINTSTS_SOF | USB_OTG_GINTSTS_EOPF);
+ //USBx->GINTMSK = 0xFFFFFFFF & ~(USB_OTG_GINTMSK_NPTXFEM | USB_OTG_GINTMSK_PTXFEM);
+ USBx->GINTMSK = USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_ENUMDNEM | USB_OTG_GINTMSK_OTGINT |
+ USB_OTG_GINTMSK_RXFLVLM | USB_OTG_GINTMSK_GONAKEFFM | USB_OTG_GINTMSK_GINAKEFFM |
+ USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTMSK_IEPINT | USB_OTG_GINTMSK_USBSUSPM |
+ USB_OTG_GINTMSK_CIDSCHGM | USB_OTG_GINTMSK_SRQIM | USB_OTG_GINTMSK_MMISM | USB_OTG_GINTMSK_EOPFM;
+
+ USBx->GAHBCFG = USB_OTG_GAHBCFG_GINT;
+
+ // DCTL startup value is 2 on new chip, 0 on old chip
+ USBx_DEVICE->DCTL = 0;
+
+ // enable the IRQ
+ NVIC_EnableIRQ(OTG_FS_IRQn);
+}
\ No newline at end of file
diff --git a/panda/board/faults.h b/panda/board/faults.h
new file mode 100644
index 00000000000000..0825586d1683d2
--- /dev/null
+++ b/panda/board/faults.h
@@ -0,0 +1,52 @@
+#define FAULT_STATUS_NONE 0U
+#define FAULT_STATUS_TEMPORARY 1U
+#define FAULT_STATUS_PERMANENT 2U
+
+// Fault types
+#define FAULT_RELAY_MALFUNCTION (1U << 0)
+#define FAULT_UNUSED_INTERRUPT_HANDLED (1U << 1)
+#define FAULT_INTERRUPT_RATE_CAN_1 (1U << 2)
+#define FAULT_INTERRUPT_RATE_CAN_2 (1U << 3)
+#define FAULT_INTERRUPT_RATE_CAN_3 (1U << 4)
+#define FAULT_INTERRUPT_RATE_TACH (1U << 5)
+#define FAULT_INTERRUPT_RATE_GMLAN (1U << 6)
+#define FAULT_INTERRUPT_RATE_INTERRUPTS (1U << 7)
+#define FAULT_INTERRUPT_RATE_SPI_DMA (1U << 8)
+#define FAULT_INTERRUPT_RATE_SPI_CS (1U << 9)
+#define FAULT_INTERRUPT_RATE_UART_1 (1U << 10)
+#define FAULT_INTERRUPT_RATE_UART_2 (1U << 11)
+#define FAULT_INTERRUPT_RATE_UART_3 (1U << 12)
+#define FAULT_INTERRUPT_RATE_UART_5 (1U << 13)
+#define FAULT_INTERRUPT_RATE_UART_DMA (1U << 14)
+#define FAULT_INTERRUPT_RATE_USB (1U << 15)
+#define FAULT_INTERRUPT_RATE_TIM1 (1U << 16)
+#define FAULT_INTERRUPT_RATE_TIM3 (1U << 17)
+#define FAULT_REGISTER_DIVERGENT (1U << 18)
+#define FAULT_INTERRUPT_RATE_KLINE_INIT (1U << 19)
+#define FAULT_INTERRUPT_RATE_CLOCK_SOURCE (1U << 20)
+#define FAULT_INTERRUPT_RATE_TIM9 (1U << 21)
+
+// Permanent faults
+#define PERMANENT_FAULTS 0U
+
+uint8_t fault_status = FAULT_STATUS_NONE;
+uint32_t faults = 0U;
+
+void fault_occurred(uint32_t fault) {
+ faults |= fault;
+ if((PERMANENT_FAULTS & fault) != 0U){
+ puts("Permanent fault occurred: 0x"); puth(fault); puts("\n");
+ fault_status = FAULT_STATUS_PERMANENT;
+ } else {
+ puts("Temporary fault occurred: 0x"); puth(fault); puts("\n");
+ fault_status = FAULT_STATUS_TEMPORARY;
+ }
+}
+
+void fault_recovered(uint32_t fault) {
+ if((PERMANENT_FAULTS & fault) == 0U){
+ faults &= ~fault;
+ } else {
+ puts("Cannot recover from a permanent fault!\n");
+ }
+}
\ No newline at end of file
diff --git a/panda/board/get_sdk.sh b/panda/board/get_sdk.sh
index 7b8d1f9154c0ac..84964244ed02b3 100755
--- a/panda/board/get_sdk.sh
+++ b/panda/board/get_sdk.sh
@@ -1,3 +1,3 @@
#!/bin/bash
sudo apt-get install gcc-arm-none-eabi python-pip
-sudo pip2 install libusb1 pycrypto requests
+sudo pip install libusb1 pycryptodome requests
diff --git a/panda/board/get_sdk_mac.sh b/panda/board/get_sdk_mac.sh
index a6f641dce12116..2daba2a141d7a7 100755
--- a/panda/board/get_sdk_mac.sh
+++ b/panda/board/get_sdk_mac.sh
@@ -1,5 +1,7 @@
#!/bin/bash
# Need formula for gcc
+sudo easy_install pip
+/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap ArmMbed/homebrew-formulae
brew install python dfu-util arm-none-eabi-gcc
-pip2 install libusb1 pycrypto requests
+pip install --user libusb1 pycryptodome requests
diff --git a/panda/board/gpio.h b/panda/board/gpio.h
index 1acf0288ad8d1f..b50de50c333640 100644
--- a/panda/board/gpio.h
+++ b/panda/board/gpio.h
@@ -20,6 +20,15 @@ void jump_to_bootloader(void) {
}
void early(void) {
+ // Reset global critical depth
+ global_critical_depth = 0;
+
+ // Init register and interrupt tables
+ init_registers();
+
+ // neccesary for DFU flashing on a non-power cycled white panda
+ enable_interrupts();
+
// after it's been in the bootloader, things are initted differently, so we reset
if ((enter_bootloader_mode != BOOT_NORMAL) &&
(enter_bootloader_mode != ENTER_BOOTLOADER_MAGIC) &&
@@ -53,22 +62,11 @@ void early(void) {
detect_configuration();
detect_board_type();
- #ifdef PANDA
- // enable the ESP, disable ESP boot mode
- // dont disable on grey panda
- current_board->set_esp_gps_mode(ESP_GPS_ENABLED);
- #endif
-
-
if (enter_bootloader_mode == ENTER_BOOTLOADER_MAGIC) {
#ifdef PANDA
- current_board->set_esp_gps_mode(ESP_GPS_DISABLED);
+ current_board->set_gps_mode(GPS_DISABLED);
#endif
current_board->set_led(LED_GREEN, 1);
jump_to_bootloader();
}
-
- if (is_entering_bootmode) {
- enter_bootloader_mode = ENTER_SOFTLOADER_MAGIC;
- }
-}
\ No newline at end of file
+}
diff --git a/panda/board/inc/cmsis_compiler.h b/panda/board/inc/cmsis_compiler.h
new file mode 100644
index 00000000000000..d0f39eef67ed91
--- /dev/null
+++ b/panda/board/inc/cmsis_compiler.h
@@ -0,0 +1,284 @@
+/**************************************************************************//**
+ * @file cmsis_compiler.h
+ * @brief CMSIS compiler generic header file
+ * @version V5.1.0
+ * @date 09. October 2018
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __CMSIS_COMPILER_H
+#define __CMSIS_COMPILER_H
+
+#include
+
+/*
+ * Arm Compiler 4/5
+ */
+#if defined ( __CC_ARM )
+ #include "cmsis_armcc.h"
+
+
+/*
+ * Arm Compiler 6.6 LTM (armclang)
+ */
+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100)
+ #include "cmsis_armclang_ltm.h"
+
+ /*
+ * Arm Compiler above 6.10.1 (armclang)
+ */
+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+ #include "cmsis_armclang.h"
+
+
+/*
+ * GNU Compiler
+ */
+#elif defined ( __GNUC__ )
+ #include "cmsis_gcc.h"
+
+
+/*
+ * IAR Compiler
+ */
+#elif defined ( __ICCARM__ )
+ #include
+
+
+/*
+ * TI Arm Compiler
+ */
+#elif defined ( __TI_ARM__ )
+ #include
+
+ #ifndef __ASM
+ #define __ASM __asm
+ #endif
+ #ifndef __INLINE
+ #define __INLINE inline
+ #endif
+ #ifndef __STATIC_INLINE
+ #define __STATIC_INLINE static inline
+ #endif
+ #ifndef __STATIC_FORCEINLINE
+ #define __STATIC_FORCEINLINE __STATIC_INLINE
+ #endif
+ #ifndef __NO_RETURN
+ #define __NO_RETURN __attribute__((noreturn))
+ #endif
+ #ifndef __USED
+ #define __USED __attribute__((used))
+ #endif
+ #ifndef __WEAK
+ #define __WEAK __attribute__((weak))
+ #endif
+ #ifndef __PACKED
+ #define __PACKED __attribute__((packed))
+ #endif
+ #ifndef __PACKED_STRUCT
+ #define __PACKED_STRUCT struct __attribute__((packed))
+ #endif
+ #ifndef __PACKED_UNION
+ #define __PACKED_UNION union __attribute__((packed))
+ #endif
+ #ifndef __UNALIGNED_UINT32 /* deprecated */
+ struct __attribute__((packed)) T_UINT32 { uint32_t v; };
+ #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
+ #endif
+ #ifndef __UNALIGNED_UINT16_WRITE
+ __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
+ #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
+ #endif
+ #ifndef __UNALIGNED_UINT16_READ
+ __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
+ #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
+ #endif
+ #ifndef __UNALIGNED_UINT32_WRITE
+ __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
+ #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
+ #endif
+ #ifndef __UNALIGNED_UINT32_READ
+ __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
+ #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
+ #endif
+ #ifndef __ALIGNED
+ #define __ALIGNED(x) __attribute__((aligned(x)))
+ #endif
+ #ifndef __RESTRICT
+ #define __RESTRICT __restrict
+ #endif
+ #ifndef __COMPILER_BARRIER
+ #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
+ #define __COMPILER_BARRIER() (void)0
+ #endif
+
+
+/*
+ * TASKING Compiler
+ */
+#elif defined ( __TASKING__ )
+ /*
+ * The CMSIS functions have been implemented as intrinsics in the compiler.
+ * Please use "carm -?i" to get an up to date list of all intrinsics,
+ * Including the CMSIS ones.
+ */
+
+ #ifndef __ASM
+ #define __ASM __asm
+ #endif
+ #ifndef __INLINE
+ #define __INLINE inline
+ #endif
+ #ifndef __STATIC_INLINE
+ #define __STATIC_INLINE static inline
+ #endif
+ #ifndef __STATIC_FORCEINLINE
+ #define __STATIC_FORCEINLINE __STATIC_INLINE
+ #endif
+ #ifndef __NO_RETURN
+ #define __NO_RETURN __attribute__((noreturn))
+ #endif
+ #ifndef __USED
+ #define __USED __attribute__((used))
+ #endif
+ #ifndef __WEAK
+ #define __WEAK __attribute__((weak))
+ #endif
+ #ifndef __PACKED
+ #define __PACKED __packed__
+ #endif
+ #ifndef __PACKED_STRUCT
+ #define __PACKED_STRUCT struct __packed__
+ #endif
+ #ifndef __PACKED_UNION
+ #define __PACKED_UNION union __packed__
+ #endif
+ #ifndef __UNALIGNED_UINT32 /* deprecated */
+ struct __packed__ T_UINT32 { uint32_t v; };
+ #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
+ #endif
+ #ifndef __UNALIGNED_UINT16_WRITE
+ __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
+ #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
+ #endif
+ #ifndef __UNALIGNED_UINT16_READ
+ __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
+ #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
+ #endif
+ #ifndef __UNALIGNED_UINT32_WRITE
+ __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
+ #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
+ #endif
+ #ifndef __UNALIGNED_UINT32_READ
+ __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
+ #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
+ #endif
+ #ifndef __ALIGNED
+ #define __ALIGNED(x) __align(x)
+ #endif
+ #ifndef __RESTRICT
+ #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
+ #define __RESTRICT
+ #endif
+ #ifndef __COMPILER_BARRIER
+ #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
+ #define __COMPILER_BARRIER() (void)0
+ #endif
+
+
+/*
+ * COSMIC Compiler
+ */
+#elif defined ( __CSMC__ )
+ #include
+
+ #ifndef __ASM
+ #define __ASM _asm
+ #endif
+ #ifndef __INLINE
+ #define __INLINE inline
+ #endif
+ #ifndef __STATIC_INLINE
+ #define __STATIC_INLINE static inline
+ #endif
+ #ifndef __STATIC_FORCEINLINE
+ #define __STATIC_FORCEINLINE __STATIC_INLINE
+ #endif
+ #ifndef __NO_RETURN
+ // NO RETURN is automatically detected hence no warning here
+ #define __NO_RETURN
+ #endif
+ #ifndef __USED
+ #warning No compiler specific solution for __USED. __USED is ignored.
+ #define __USED
+ #endif
+ #ifndef __WEAK
+ #define __WEAK __weak
+ #endif
+ #ifndef __PACKED
+ #define __PACKED @packed
+ #endif
+ #ifndef __PACKED_STRUCT
+ #define __PACKED_STRUCT @packed struct
+ #endif
+ #ifndef __PACKED_UNION
+ #define __PACKED_UNION @packed union
+ #endif
+ #ifndef __UNALIGNED_UINT32 /* deprecated */
+ @packed struct T_UINT32 { uint32_t v; };
+ #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
+ #endif
+ #ifndef __UNALIGNED_UINT16_WRITE
+ __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
+ #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
+ #endif
+ #ifndef __UNALIGNED_UINT16_READ
+ __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
+ #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
+ #endif
+ #ifndef __UNALIGNED_UINT32_WRITE
+ __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
+ #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
+ #endif
+ #ifndef __UNALIGNED_UINT32_READ
+ __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
+ #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
+ #endif
+ #ifndef __ALIGNED
+ #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
+ #define __ALIGNED(x)
+ #endif
+ #ifndef __RESTRICT
+ #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
+ #define __RESTRICT
+ #endif
+ #ifndef __COMPILER_BARRIER
+ #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
+ #define __COMPILER_BARRIER() (void)0
+ #endif
+
+
+#else
+ #error Unknown compiler.
+#endif
+
+
+#endif /* __CMSIS_COMPILER_H */
+
+
diff --git a/panda/board/inc/cmsis_gcc.h b/panda/board/inc/cmsis_gcc.h
index bb89fbba9e4000..2f68473f64e216 100644
--- a/panda/board/inc/cmsis_gcc.h
+++ b/panda/board/inc/cmsis_gcc.h
@@ -1,48 +1,186 @@
/**************************************************************************//**
* @file cmsis_gcc.h
- * @brief CMSIS Cortex-M Core Function/Instruction Header File
- * @version V4.30
- * @date 20. October 2015
+ * @brief CMSIS compiler GCC header file
+ * @version V5.2.0
+ * @date 08. May 2019
******************************************************************************/
-/* Copyright (c) 2009 - 2015 ARM LIMITED
-
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of ARM nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
- *
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- ---------------------------------------------------------------------------*/
-
+/*
+ * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#ifndef __CMSIS_GCC_H
#define __CMSIS_GCC_H
/* ignore some GCC warnings */
-#if defined ( __GNUC__ )
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsign-conversion"
#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wunused-parameter"
+
+/* Fallback for __has_builtin */
+#ifndef __has_builtin
+ #define __has_builtin(x) (0)
+#endif
+
+/* CMSIS compiler specific defines */
+#ifndef __ASM
+ #define __ASM __asm
+#endif
+#ifndef __INLINE
+ #define __INLINE inline
+#endif
+#ifndef __STATIC_INLINE
+ #define __STATIC_INLINE static inline
+#endif
+#ifndef __STATIC_FORCEINLINE
+ #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline
+#endif
+#ifndef __NO_RETURN
+ #define __NO_RETURN __attribute__((__noreturn__))
+#endif
+#ifndef __USED
+ #define __USED __attribute__((used))
+#endif
+#ifndef __WEAK
+ #define __WEAK __attribute__((weak))
+#endif
+#ifndef __PACKED
+ #define __PACKED __attribute__((packed, aligned(1)))
+#endif
+#ifndef __PACKED_STRUCT
+ #define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))
+#endif
+#ifndef __PACKED_UNION
+ #define __PACKED_UNION union __attribute__((packed, aligned(1)))
+#endif
+#ifndef __UNALIGNED_UINT32 /* deprecated */
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpacked"
+ #pragma GCC diagnostic ignored "-Wattributes"
+ struct __attribute__((packed)) T_UINT32 { uint32_t v; };
+ #pragma GCC diagnostic pop
+ #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
+#endif
+#ifndef __UNALIGNED_UINT16_WRITE
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpacked"
+ #pragma GCC diagnostic ignored "-Wattributes"
+ __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
+ #pragma GCC diagnostic pop
+ #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
+#endif
+#ifndef __UNALIGNED_UINT16_READ
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpacked"
+ #pragma GCC diagnostic ignored "-Wattributes"
+ __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
+ #pragma GCC diagnostic pop
+ #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
+#endif
+#ifndef __UNALIGNED_UINT32_WRITE
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpacked"
+ #pragma GCC diagnostic ignored "-Wattributes"
+ __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
+ #pragma GCC diagnostic pop
+ #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
+#endif
+#ifndef __UNALIGNED_UINT32_READ
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wpacked"
+ #pragma GCC diagnostic ignored "-Wattributes"
+ __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
+ #pragma GCC diagnostic pop
+ #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
+#endif
+#ifndef __ALIGNED
+ #define __ALIGNED(x) __attribute__((aligned(x)))
+#endif
+#ifndef __RESTRICT
+ #define __RESTRICT __restrict
+#endif
+#ifndef __COMPILER_BARRIER
+ #define __COMPILER_BARRIER() __ASM volatile("":::"memory")
+#endif
+
+/* ######################### Startup and Lowlevel Init ######################## */
+
+#ifndef __PROGRAM_START
+
+/**
+ \brief Initializes data and bss sections
+ \details This default implementations initialized all data and additional bss
+ sections relying on .copy.table and .zero.table specified properly
+ in the used linker script.
+
+ */
+__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void)
+{
+ extern void _start(void) __NO_RETURN;
+
+ typedef struct {
+ uint32_t const* src;
+ uint32_t* dest;
+ uint32_t wlen;
+ } __copy_table_t;
+
+ typedef struct {
+ uint32_t* dest;
+ uint32_t wlen;
+ } __zero_table_t;
+
+ extern const __copy_table_t __copy_table_start__;
+ extern const __copy_table_t __copy_table_end__;
+ extern const __zero_table_t __zero_table_start__;
+ extern const __zero_table_t __zero_table_end__;
+
+ for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) {
+ for(uint32_t i=0u; iwlen; ++i) {
+ pTable->dest[i] = pTable->src[i];
+ }
+ }
+
+ for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) {
+ for(uint32_t i=0u; iwlen; ++i) {
+ pTable->dest[i] = 0u;
+ }
+ }
+
+ _start();
+}
+
+#define __PROGRAM_START __cmsis_start
#endif
+#ifndef __INITIAL_SP
+#define __INITIAL_SP __StackTop
+#endif
+
+#ifndef __STACK_LIMIT
+#define __STACK_LIMIT __StackLimit
+#endif
+
+#ifndef __VECTOR_TABLE
+#define __VECTOR_TABLE __Vectors
+#endif
+
+#ifndef __VECTOR_TABLE_ATTRIBUTE
+#define __VECTOR_TABLE_ATTRIBUTE __attribute((used, section(".vectors")))
+#endif
/* ########################### Core Function Access ########################### */
/** \ingroup CMSIS_Core_FunctionInterface
@@ -55,7 +193,7 @@
\details Enables IRQ interrupts by clearing the I-bit in the CPSR.
Can only be executed in Privileged modes.
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
+__STATIC_FORCEINLINE void __enable_irq(void)
{
__ASM volatile ("cpsie i" : : : "memory");
}
@@ -64,9 +202,9 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
/**
\brief Disable IRQ Interrupts
\details Disables IRQ interrupts by setting the I-bit in the CPSR.
- Can only be executed in Privileged modes.
+ Can only be executed in Privileged modes.
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
+__STATIC_FORCEINLINE void __disable_irq(void)
{
__ASM volatile ("cpsid i" : : : "memory");
}
@@ -77,7 +215,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
\details Returns the content of the Control Register.
\return Control Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void)
+__STATIC_FORCEINLINE uint32_t __get_CONTROL(void)
{
uint32_t result;
@@ -86,23 +224,52 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void)
}
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Control Register (non-secure)
+ \details Returns the content of the non-secure Control Register when in secure mode.
+ \return non-secure Control Register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void)
+{
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, control_ns" : "=r" (result) );
+ return(result);
+}
+#endif
+
+
/**
\brief Set Control Register
\details Writes the given value to the Control Register.
\param [in] control Control Register value to set
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control)
+__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control)
{
__ASM volatile ("MSR control, %0" : : "r" (control) : "memory");
}
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Control Register (non-secure)
+ \details Writes the given value to the non-secure Control Register when in secure state.
+ \param [in] control Control Register value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control)
+{
+ __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory");
+}
+#endif
+
+
/**
\brief Get IPSR Register
\details Returns the content of the IPSR Register.
\return IPSR Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void)
+__STATIC_FORCEINLINE uint32_t __get_IPSR(void)
{
uint32_t result;
@@ -116,7 +283,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void)
\details Returns the content of the APSR Register.
\return APSR Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void)
+__STATIC_FORCEINLINE uint32_t __get_APSR(void)
{
uint32_t result;
@@ -128,10 +295,9 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void)
/**
\brief Get xPSR Register
\details Returns the content of the xPSR Register.
-
- \return xPSR Register value
+ \return xPSR Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void)
+__STATIC_FORCEINLINE uint32_t __get_xPSR(void)
{
uint32_t result;
@@ -145,13 +311,29 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void)
\details Returns the current value of the Process Stack Pointer (PSP).
\return PSP Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void)
+__STATIC_FORCEINLINE uint32_t __get_PSP(void)
+{
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, psp" : "=r" (result) );
+ return(result);
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Process Stack Pointer (non-secure)
+ \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.
+ \return PSP Register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void)
{
- register uint32_t result;
+ uint32_t result;
- __ASM volatile ("MRS %0, psp\n" : "=r" (result) );
+ __ASM volatile ("MRS %0, psp_ns" : "=r" (result) );
return(result);
}
+#endif
/**
@@ -159,10 +341,23 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void)
\details Assigns the given value to the Process Stack Pointer (PSP).
\param [in] topOfProcStack Process Stack Pointer value to set
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
+__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack)
+{
+ __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : );
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Process Stack Pointer (non-secure)
+ \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.
+ \param [in] topOfProcStack Process Stack Pointer value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack)
{
- __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
+ __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : );
}
+#endif
/**
@@ -170,39 +365,110 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOf
\details Returns the current value of the Main Stack Pointer (MSP).
\return MSP Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void)
+__STATIC_FORCEINLINE uint32_t __get_MSP(void)
+{
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, msp" : "=r" (result) );
+ return(result);
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Main Stack Pointer (non-secure)
+ \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.
+ \return MSP Register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void)
{
- register uint32_t result;
+ uint32_t result;
- __ASM volatile ("MRS %0, msp\n" : "=r" (result) );
+ __ASM volatile ("MRS %0, msp_ns" : "=r" (result) );
return(result);
}
+#endif
/**
\brief Set Main Stack Pointer
\details Assigns the given value to the Main Stack Pointer (MSP).
+ \param [in] topOfMainStack Main Stack Pointer value to set
+ */
+__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack)
+{
+ __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : );
+}
+
- \param [in] topOfMainStack Main Stack Pointer value to set
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Main Stack Pointer (non-secure)
+ \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.
+ \param [in] topOfMainStack Main Stack Pointer value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack)
+{
+ __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : );
+}
+#endif
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Stack Pointer (non-secure)
+ \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.
+ \return SP Register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
+__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void)
{
- __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp");
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, sp_ns" : "=r" (result) );
+ return(result);
}
+/**
+ \brief Set Stack Pointer (non-secure)
+ \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.
+ \param [in] topOfStack Stack Pointer value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack)
+{
+ __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : );
+}
+#endif
+
+
/**
\brief Get Priority Mask
\details Returns the current state of the priority mask bit from the Priority Mask Register.
\return Priority Mask value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void)
+__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void)
+{
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ return(result);
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Priority Mask (non-secure)
+ \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.
+ \return Priority Mask value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void)
{
uint32_t result;
- __ASM volatile ("MRS %0, primask" : "=r" (result) );
+ __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory");
return(result);
}
+#endif
/**
@@ -210,20 +476,34 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void)
\details Assigns the given value to the Priority Mask Register.
\param [in] priMask Priority Mask
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
+__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask)
{
__ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
}
-#if (__CORTEX_M >= 0x03U)
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Priority Mask (non-secure)
+ \details Assigns the given value to the non-secure Priority Mask Register when in secure state.
+ \param [in] priMask Priority Mask
+ */
+__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask)
+{
+ __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory");
+}
+#endif
+
+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
/**
\brief Enable FIQ
\details Enables FIQ interrupts by clearing the F-bit in the CPSR.
Can only be executed in Privileged modes.
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void)
+__STATIC_FORCEINLINE void __enable_fault_irq(void)
{
__ASM volatile ("cpsie f" : : : "memory");
}
@@ -234,7 +514,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void)
\details Disables FIQ interrupts by setting the F-bit in the CPSR.
Can only be executed in Privileged modes.
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void)
+__STATIC_FORCEINLINE void __disable_fault_irq(void)
{
__ASM volatile ("cpsid f" : : : "memory");
}
@@ -245,7 +525,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void
\details Returns the current value of the Base Priority register.
\return Base Priority register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void)
+__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void)
{
uint32_t result;
@@ -254,15 +534,44 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void)
}
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Base Priority (non-secure)
+ \details Returns the current value of the non-secure Base Priority register when in secure state.
+ \return Base Priority register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void)
+{
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) );
+ return(result);
+}
+#endif
+
+
/**
\brief Set Base Priority
\details Assigns the given value to the Base Priority register.
\param [in] basePri Base Priority value to set
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value)
+__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri)
+{
+ __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory");
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Base Priority (non-secure)
+ \details Assigns the given value to the non-secure Base Priority register when in secure state.
+ \param [in] basePri Base Priority value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri)
{
- __ASM volatile ("MSR basepri, %0" : : "r" (value) : "memory");
+ __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory");
}
+#endif
/**
@@ -271,9 +580,9 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t v
or the new value increases the BASEPRI priority level.
\param [in] basePri Base Priority value to set
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value)
+__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri)
{
- __ASM volatile ("MSR basepri_max, %0" : : "r" (value) : "memory");
+ __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory");
}
@@ -282,7 +591,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI_MAX(uint32
\details Returns the current value of the Fault Mask register.
\return Fault Mask register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void)
+__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void)
{
uint32_t result;
@@ -291,38 +600,253 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void
}
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Fault Mask (non-secure)
+ \details Returns the current value of the non-secure Fault Mask register when in secure state.
+ \return Fault Mask register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void)
+{
+ uint32_t result;
+
+ __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) );
+ return(result);
+}
+#endif
+
+
/**
\brief Set Fault Mask
\details Assigns the given value to the Fault Mask register.
\param [in] faultMask Fault Mask value to set
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)
+__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask)
{
__ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory");
}
-#endif /* (__CORTEX_M >= 0x03U) */
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Fault Mask (non-secure)
+ \details Assigns the given value to the non-secure Fault Mask register when in secure state.
+ \param [in] faultMask Fault Mask value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask)
+{
+ __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory");
+}
+#endif
+
+#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */
+
+
+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
+ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) )
+
+/**
+ \brief Get Process Stack Pointer Limit
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence zero is returned always in non-secure
+ mode.
+
+ \details Returns the current value of the Process Stack Pointer Limit (PSPLIM).
+ \return PSPLIM Register value
+ */
+__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
+ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
+ // without main extensions, the non-secure PSPLIM is RAZ/WI
+ return 0U;
+#else
+ uint32_t result;
+ __ASM volatile ("MRS %0, psplim" : "=r" (result) );
+ return result;
+#endif
+}
+
+#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Process Stack Pointer Limit (non-secure)
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence zero is returned always.
+
+ \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.
+ \return PSPLIM Register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))
+ // without main extensions, the non-secure PSPLIM is RAZ/WI
+ return 0U;
+#else
+ uint32_t result;
+ __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) );
+ return result;
+#endif
+}
+#endif
+
+
+/**
+ \brief Set Process Stack Pointer Limit
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence the write is silently ignored in non-secure
+ mode.
+
+ \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).
+ \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set
+ */
+__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
+ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
+ // without main extensions, the non-secure PSPLIM is RAZ/WI
+ (void)ProcStackPtrLimit;
+#else
+ __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit));
+#endif
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Process Stack Pointer (non-secure)
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence the write is silently ignored.
+
+ \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.
+ \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))
+ // without main extensions, the non-secure PSPLIM is RAZ/WI
+ (void)ProcStackPtrLimit;
+#else
+ __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit));
+#endif
+}
+#endif
+
+
+/**
+ \brief Get Main Stack Pointer Limit
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence zero is returned always in non-secure
+ mode.
+
+ \details Returns the current value of the Main Stack Pointer Limit (MSPLIM).
+ \return MSPLIM Register value
+ */
+__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
+ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
+ // without main extensions, the non-secure MSPLIM is RAZ/WI
+ return 0U;
+#else
+ uint32_t result;
+ __ASM volatile ("MRS %0, msplim" : "=r" (result) );
+ return result;
+#endif
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Get Main Stack Pointer Limit (non-secure)
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence zero is returned always.
+
+ \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.
+ \return MSPLIM Register value
+ */
+__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))
+ // without main extensions, the non-secure MSPLIM is RAZ/WI
+ return 0U;
+#else
+ uint32_t result;
+ __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) );
+ return result;
+#endif
+}
+#endif
+
+
+/**
+ \brief Set Main Stack Pointer Limit
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence the write is silently ignored in non-secure
+ mode.
+
+ \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).
+ \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set
+ */
+__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \
+ (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
+ // without main extensions, the non-secure MSPLIM is RAZ/WI
+ (void)MainStackPtrLimit;
+#else
+ __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit));
+#endif
+}
+
+
+#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
+/**
+ \brief Set Main Stack Pointer Limit (non-secure)
+ Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure
+ Stack Pointer Limit register hence the write is silently ignored.
+
+ \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.
+ \param [in] MainStackPtrLimit Main Stack Pointer value to set
+ */
+__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)
+{
+#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)))
+ // without main extensions, the non-secure MSPLIM is RAZ/WI
+ (void)MainStackPtrLimit;
+#else
+ __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit));
+#endif
+}
+#endif
+
+#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
+ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */
-#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U)
/**
\brief Get FPSCR
\details Returns the current value of the Floating Point Status/Control register.
\return Floating Point Status/Control register value
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void)
-{
-#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)
+__STATIC_FORCEINLINE uint32_t __get_FPSCR(void)
+{
+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
+ (defined (__FPU_USED ) && (__FPU_USED == 1U)) )
+#if __has_builtin(__builtin_arm_get_fpscr)
+// Re-enable using built-in when GCC has been fixed
+// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2)
+ /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */
+ return __builtin_arm_get_fpscr();
+#else
uint32_t result;
- /* Empty asm statement works as a scheduling barrier */
- __ASM volatile ("");
__ASM volatile ("VMRS %0, fpscr" : "=r" (result) );
- __ASM volatile ("");
return(result);
+#endif
#else
- return(0);
+ return(0U);
#endif
}
@@ -332,19 +856,23 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void)
\details Assigns the given value to the Floating Point Status/Control register.
\param [in] fpscr Floating Point Status/Control value to set
*/
-__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
-{
-#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)
- /* Empty asm statement works as a scheduling barrier */
- __ASM volatile ("");
- __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc");
- __ASM volatile ("");
+__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr)
+{
+#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
+ (defined (__FPU_USED ) && (__FPU_USED == 1U)) )
+#if __has_builtin(__builtin_arm_set_fpscr)
+// Re-enable using built-in when GCC has been fixed
+// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2)
+ /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */
+ __builtin_arm_set_fpscr(fpscr);
+#else
+ __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory");
+#endif
+#else
+ (void)fpscr;
#endif
}
-#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */
-
-
/*@} end of CMSIS_Core_RegAccFunctions */
@@ -360,9 +888,11 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fps
* Otherwise, use general registers, specified by constraint "r" */
#if defined (__thumb__) && !defined (__thumb2__)
#define __CMSIS_GCC_OUT_REG(r) "=l" (r)
+#define __CMSIS_GCC_RW_REG(r) "+l" (r)
#define __CMSIS_GCC_USE_REG(r) "l" (r)
#else
#define __CMSIS_GCC_OUT_REG(r) "=r" (r)
+#define __CMSIS_GCC_RW_REG(r) "+r" (r)
#define __CMSIS_GCC_USE_REG(r) "r" (r)
#endif
@@ -370,41 +900,28 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fps
\brief No Operation
\details No Operation does nothing. This instruction can be used for code alignment purposes.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __NOP(void)
-{
- __ASM volatile ("nop");
-}
-
+#define __NOP() __ASM volatile ("nop")
/**
\brief Wait For Interrupt
\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __WFI(void)
-{
- __ASM volatile ("wfi");
-}
+#define __WFI() __ASM volatile ("wfi")
/**
\brief Wait For Event
\details Wait For Event is a hint instruction that permits the processor to enter
- a low-power state until one of a number of events occurs.
+ a low-power state until one of a number of events occurs.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __WFE(void)
-{
- __ASM volatile ("wfe");
-}
+#define __WFE() __ASM volatile ("wfe")
/**
\brief Send Event
\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __SEV(void)
-{
- __ASM volatile ("sev");
-}
+#define __SEV() __ASM volatile ("sev")
/**
@@ -413,7 +930,7 @@ __attribute__((always_inline)) __STATIC_INLINE void __SEV(void)
so that all instructions following the ISB are fetched from cache or memory,
after the instruction has been completed.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __ISB(void)
+__STATIC_FORCEINLINE void __ISB(void)
{
__ASM volatile ("isb 0xF":::"memory");
}
@@ -424,7 +941,7 @@ __attribute__((always_inline)) __STATIC_INLINE void __ISB(void)
\details Acts as a special kind of Data Memory Barrier.
It completes when all explicit memory accesses before this instruction complete.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __DSB(void)
+__STATIC_FORCEINLINE void __DSB(void)
{
__ASM volatile ("dsb 0xF":::"memory");
}
@@ -435,7 +952,7 @@ __attribute__((always_inline)) __STATIC_INLINE void __DSB(void)
\details Ensures the apparent order of the explicit memory operations before
and after the instruction, without ensuring their completion.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __DMB(void)
+__STATIC_FORCEINLINE void __DMB(void)
{
__ASM volatile ("dmb 0xF":::"memory");
}
@@ -443,11 +960,11 @@ __attribute__((always_inline)) __STATIC_INLINE void __DMB(void)
/**
\brief Reverse byte order (32 bit)
- \details Reverses the byte order in integer value.
+ \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.
\param [in] value Value to reverse
\return Reversed value
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV(uint32_t value)
+__STATIC_FORCEINLINE uint32_t __REV(uint32_t value)
{
#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
return __builtin_bswap32(value);
@@ -455,41 +972,41 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __REV(uint32_t value)
uint32_t result;
__ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
- return(result);
+ return result;
#endif
}
/**
\brief Reverse byte order (16 bit)
- \details Reverses the byte order in two unsigned short values.
+ \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.
\param [in] value Value to reverse
\return Reversed value
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value)
+__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value)
{
uint32_t result;
__ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
- return(result);
+ return result;
}
/**
- \brief Reverse byte order in signed short value
- \details Reverses the byte order in a signed short value with sign extension to integer.
+ \brief Reverse byte order (16 bit)
+ \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.
\param [in] value Value to reverse
\return Reversed value
*/
-__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value)
+__STATIC_FORCEINLINE int16_t __REVSH(int16_t value)
{
#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
- return (short)__builtin_bswap16(value);
+ return (int16_t)__builtin_bswap16(value);
#else
- int32_t result;
+ int16_t result;
__ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
- return(result);
+ return result;
#endif
}
@@ -497,12 +1014,17 @@ __attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value)
/**
\brief Rotate Right in unsigned value (32 bit)
\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
- \param [in] value Value to rotate
- \param [in] value Number of Bits to rotate
+ \param [in] op1 Value to rotate
+ \param [in] op2 Number of Bits to rotate
\return Rotated value
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2)
{
+ op2 %= 32U;
+ if (op2 == 0U)
+ {
+ return op1;
+ }
return (op1 >> op2) | (op1 << (32U - op2));
}
@@ -523,17 +1045,19 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint
\param [in] value Value to reverse
\return Reversed value
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
+__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value)
{
uint32_t result;
-#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)
+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
__ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
#else
- int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */
+ uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */
result = value; /* r will be reversed bits of v; first get LSB of v */
- for (value >>= 1U; value; value >>= 1U)
+ for (value >>= 1U; value != 0U; value >>= 1U)
{
result <<= 1U;
result |= value & 1U;
@@ -541,7 +1065,7 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
}
result <<= s; /* shift when v's highest bits are zero */
#endif
- return(result);
+ return result;
}
@@ -551,18 +1075,36 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
\param [in] value Value to count the leading zeros
\return number of leading zeros in value
*/
-#define __CLZ __builtin_clz
-
+__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value)
+{
+ /* Even though __builtin_clz produces a CLZ instruction on ARM, formally
+ __builtin_clz(0) is undefined behaviour, so handle this case specially.
+ This guarantees ARM-compatible results if happening to compile on a non-ARM
+ target, and ensures the compiler doesn't decide to activate any
+ optimisations using the logic "value was passed to __builtin_clz, so it
+ is non-zero".
+ ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
+ single CLZ instruction.
+ */
+ if (value == 0U)
+ {
+ return 32U;
+ }
+ return __builtin_clz(value);
+}
-#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)
+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
+ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) )
/**
\brief LDR Exclusive (8 bit)
\details Executes a exclusive LDR instruction for 8 bit value.
\param [in] ptr Pointer to data
\return value of type uint8_t at (*ptr)
*/
-__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr)
+__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr)
{
uint32_t result;
@@ -584,7 +1126,7 @@ __attribute__((always_inline)) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t
\param [in] ptr Pointer to data
\return value of type uint16_t at (*ptr)
*/
-__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr)
+__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr)
{
uint32_t result;
@@ -606,7 +1148,7 @@ __attribute__((always_inline)) __STATIC_INLINE uint16_t __LDREXH(volatile uint16
\param [in] ptr Pointer to data
\return value of type uint32_t at (*ptr)
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr)
+__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)
{
uint32_t result;
@@ -623,7 +1165,7 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __LDREXW(volatile uint32
\return 0 Function succeeded
\return 1 Function failed
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
+__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
{
uint32_t result;
@@ -640,7 +1182,7 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXB(uint8_t value,
\return 0 Function succeeded
\return 1 Function failed
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
+__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
{
uint32_t result;
@@ -657,7 +1199,7 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXH(uint16_t value,
\return 0 Function succeeded
\return 1 Function failed
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
+__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
{
uint32_t result;
@@ -670,22 +1212,31 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXW(uint32_t value,
\brief Remove the exclusive lock
\details Removes the exclusive lock which is created by LDREX.
*/
-__attribute__((always_inline)) __STATIC_INLINE void __CLREX(void)
+__STATIC_FORCEINLINE void __CLREX(void)
{
__ASM volatile ("clrex" ::: "memory");
}
+#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
+ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */
+
+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
/**
\brief Signed Saturate
\details Saturates a signed value.
- \param [in] value Value to be saturated
- \param [in] sat Bit position to saturate to (1..32)
+ \param [in] ARG1 Value to be saturated
+ \param [in] ARG2 Bit position to saturate to (1..32)
\return Saturated value
*/
#define __SSAT(ARG1,ARG2) \
+__extension__ \
({ \
- uint32_t __RES, __ARG1 = (ARG1); \
+ int32_t __RES, __ARG1 = (ARG1); \
__ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
__RES; \
})
@@ -694,11 +1245,12 @@ __attribute__((always_inline)) __STATIC_INLINE void __CLREX(void)
/**
\brief Unsigned Saturate
\details Saturates an unsigned value.
- \param [in] value Value to be saturated
- \param [in] sat Bit position to saturate to (0..31)
+ \param [in] ARG1 Value to be saturated
+ \param [in] ARG2 Bit position to saturate to (0..31)
\return Saturated value
*/
#define __USAT(ARG1,ARG2) \
+ __extension__ \
({ \
uint32_t __RES, __ARG1 = (ARG1); \
__ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
@@ -713,7 +1265,7 @@ __attribute__((always_inline)) __STATIC_INLINE void __CLREX(void)
\param [in] value Value to rotate
\return Rotated value
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value)
+__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value)
{
uint32_t result;
@@ -728,17 +1280,17 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value)
\param [in] ptr Pointer to data
\return value of type uint8_t at (*ptr)
*/
-__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr)
+__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr)
{
uint32_t result;
#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
- __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*addr) );
+ __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) );
#else
/* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not
accepted by assembler. So has to use following less efficient pattern.
*/
- __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (addr) : "memory" );
+ __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" );
#endif
return ((uint8_t) result); /* Add explicit type cast here */
}
@@ -750,17 +1302,17 @@ __attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t
\param [in] ptr Pointer to data
\return value of type uint16_t at (*ptr)
*/
-__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr)
+__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr)
{
uint32_t result;
#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
- __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*addr) );
+ __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) );
#else
/* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not
accepted by assembler. So has to use following less efficient pattern.
*/
- __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (addr) : "memory" );
+ __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" );
#endif
return ((uint16_t) result); /* Add explicit type cast here */
}
@@ -772,11 +1324,11 @@ __attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_
\param [in] ptr Pointer to data
\return value of type uint32_t at (*ptr)
*/
-__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr)
+__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr)
{
uint32_t result;
- __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*addr) );
+ __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) );
return(result);
}
@@ -787,9 +1339,9 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t
\param [in] value Value to store
\param [in] ptr Pointer to location
*/
-__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr)
+__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr)
{
- __ASM volatile ("strbt %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) );
+ __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );
}
@@ -799,9 +1351,9 @@ __attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volat
\param [in] value Value to store
\param [in] ptr Pointer to location
*/
-__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr)
+__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr)
{
- __ASM volatile ("strht %1, %0" : "=Q" (*addr) : "r" ((uint32_t)value) );
+ __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );
}
@@ -811,12 +1363,249 @@ __attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, vola
\param [in] value Value to store
\param [in] ptr Pointer to location
*/
-__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr)
+__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr)
+{
+ __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) );
+}
+
+#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */
+
+/**
+ \brief Signed Saturate
+ \details Saturates a signed value.
+ \param [in] value Value to be saturated
+ \param [in] sat Bit position to saturate to (1..32)
+ \return Saturated value
+ */
+__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat)
+{
+ if ((sat >= 1U) && (sat <= 32U))
+ {
+ const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);
+ const int32_t min = -1 - max ;
+ if (val > max)
+ {
+ return max;
+ }
+ else if (val < min)
+ {
+ return min;
+ }
+ }
+ return val;
+}
+
+/**
+ \brief Unsigned Saturate
+ \details Saturates an unsigned value.
+ \param [in] value Value to be saturated
+ \param [in] sat Bit position to saturate to (0..31)
+ \return Saturated value
+ */
+__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat)
+{
+ if (sat <= 31U)
+ {
+ const uint32_t max = ((1U << sat) - 1U);
+ if (val > (int32_t)max)
+ {
+ return max;
+ }
+ else if (val < 0)
+ {
+ return 0U;
+ }
+ }
+ return (uint32_t)val;
+}
+
+#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */
+
+
+#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
+ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) )
+/**
+ \brief Load-Acquire (8 bit)
+ \details Executes a LDAB instruction for 8 bit value.
+ \param [in] ptr Pointer to data
+ \return value of type uint8_t at (*ptr)
+ */
+__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr)
{
- __ASM volatile ("strt %1, %0" : "=Q" (*addr) : "r" (value) );
+ uint32_t result;
+
+ __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) );
+ return ((uint8_t) result);
}
-#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */
+
+/**
+ \brief Load-Acquire (16 bit)
+ \details Executes a LDAH instruction for 16 bit values.
+ \param [in] ptr Pointer to data
+ \return value of type uint16_t at (*ptr)
+ */
+__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) );
+ return ((uint16_t) result);
+}
+
+
+/**
+ \brief Load-Acquire (32 bit)
+ \details Executes a LDA instruction for 32 bit values.
+ \param [in] ptr Pointer to data
+ \return value of type uint32_t at (*ptr)
+ */
+__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) );
+ return(result);
+}
+
+
+/**
+ \brief Store-Release (8 bit)
+ \details Executes a STLB instruction for 8 bit values.
+ \param [in] value Value to store
+ \param [in] ptr Pointer to location
+ */
+__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr)
+{
+ __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );
+}
+
+
+/**
+ \brief Store-Release (16 bit)
+ \details Executes a STLH instruction for 16 bit values.
+ \param [in] value Value to store
+ \param [in] ptr Pointer to location
+ */
+__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr)
+{
+ __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );
+}
+
+
+/**
+ \brief Store-Release (32 bit)
+ \details Executes a STL instruction for 32 bit values.
+ \param [in] value Value to store
+ \param [in] ptr Pointer to location
+ */
+__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr)
+{
+ __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) );
+}
+
+
+/**
+ \brief Load-Acquire Exclusive (8 bit)
+ \details Executes a LDAB exclusive instruction for 8 bit value.
+ \param [in] ptr Pointer to data
+ \return value of type uint8_t at (*ptr)
+ */
+__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) );
+ return ((uint8_t) result);
+}
+
+
+/**
+ \brief Load-Acquire Exclusive (16 bit)
+ \details Executes a LDAH exclusive instruction for 16 bit values.
+ \param [in] ptr Pointer to data
+ \return value of type uint16_t at (*ptr)
+ */
+__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) );
+ return ((uint16_t) result);
+}
+
+
+/**
+ \brief Load-Acquire Exclusive (32 bit)
+ \details Executes a LDA exclusive instruction for 32 bit values.
+ \param [in] ptr Pointer to data
+ \return value of type uint32_t at (*ptr)
+ */
+__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) );
+ return(result);
+}
+
+
+/**
+ \brief Store-Release Exclusive (8 bit)
+ \details Executes a STLB exclusive instruction for 8 bit values.
+ \param [in] value Value to store
+ \param [in] ptr Pointer to location
+ \return 0 Function succeeded
+ \return 1 Function failed
+ */
+__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) );
+ return(result);
+}
+
+
+/**
+ \brief Store-Release Exclusive (16 bit)
+ \details Executes a STLH exclusive instruction for 16 bit values.
+ \param [in] value Value to store
+ \param [in] ptr Pointer to location
+ \return 0 Function succeeded
+ \return 1 Function failed
+ */
+__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) );
+ return(result);
+}
+
+
+/**
+ \brief Store-Release Exclusive (32 bit)
+ \details Executes a STL exclusive instruction for 32 bit values.
+ \param [in] value Value to store
+ \param [in] ptr Pointer to location
+ \return 0 Function succeeded
+ \return 1 Function failed
+ */
+__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr)
+{
+ uint32_t result;
+
+ __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) );
+ return(result);
+}
+
+#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
+ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */
/*@}*/ /* end of group CMSIS_Core_InstructionInterface */
@@ -827,9 +1616,9 @@ __attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volat
@{
*/
-#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */
+#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -837,7 +1626,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -845,7 +1634,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -853,7 +1642,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -861,7 +1650,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -869,7 +1658,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -878,7 +1667,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -886,7 +1675,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -894,7 +1683,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -902,7 +1691,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -910,7 +1699,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -918,7 +1707,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -927,7 +1716,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -935,7 +1724,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -943,7 +1732,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -951,7 +1740,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -959,7 +1748,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -967,7 +1756,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -975,7 +1764,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -983,7 +1772,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -991,7 +1780,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -999,7 +1788,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1007,7 +1796,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1015,7 +1804,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1023,7 +1812,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1031,7 +1820,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1039,7 +1828,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1047,7 +1836,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1055,7 +1844,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1063,7 +1852,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1071,7 +1860,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1079,7 +1868,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1087,7 +1876,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1095,7 +1884,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1103,7 +1892,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1111,7 +1900,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1119,7 +1908,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1127,7 +1916,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3)
+__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3)
{
uint32_t result;
@@ -1149,7 +1938,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op
__RES; \
})
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1)
+__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1)
{
uint32_t result;
@@ -1157,7 +1946,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1165,7 +1954,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1)
+__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1)
{
uint32_t result;
@@ -1173,7 +1962,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1181,7 +1970,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1189,7 +1978,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1197,7 +1986,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)
+__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)
{
uint32_t result;
@@ -1205,7 +1994,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)
+__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)
{
uint32_t result;
@@ -1213,7 +2002,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc)
+__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc)
{
union llreg_u{
uint32_t w32[2];
@@ -1230,7 +2019,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALD (uint32_t o
return(llr.w64);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc)
+__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc)
{
union llreg_u{
uint32_t w32[2];
@@ -1247,7 +2036,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALDX (uint32_t
return(llr.w64);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1255,7 +2044,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1263,7 +2052,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3)
+__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3)
{
uint32_t result;
@@ -1271,7 +2060,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3)
+__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3)
{
uint32_t result;
@@ -1279,7 +2068,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t o
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc)
+__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc)
{
union llreg_u{
uint32_t w32[2];
@@ -1296,7 +2085,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLD (uint32_t o
return(llr.w64);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc)
+__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc)
{
union llreg_u{
uint32_t w32[2];
@@ -1313,7 +2102,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLDX (uint32_t
return(llr.w64);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2)
+__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2)
{
uint32_t result;
@@ -1321,7 +2110,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QADD( int32_t op1, int32_t op2)
+__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2)
{
int32_t result;
@@ -1329,7 +2118,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QADD( int32_t op1,
return(result);
}
-__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QSUB( int32_t op1, int32_t op2)
+__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2)
{
int32_t result;
@@ -1337,6 +2126,7 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QSUB( int32_t op1,
return(result);
}
+#if 0
#define __PKHBT(ARG1,ARG2,ARG3) \
({ \
uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \
@@ -1353,8 +2143,15 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __QSUB( int32_t op1,
__ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \
__RES; \
})
+#endif
+
+#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \
+ ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) )
-__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)
+#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \
+ ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) )
+
+__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)
{
int32_t result;
@@ -1362,12 +2159,11 @@ __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1
return(result);
}
-#endif /* (__CORTEX_M >= 0x04) */
+#endif /* (__ARM_FEATURE_DSP == 1) */
/*@} end of group CMSIS_SIMD_intrinsics */
-#if defined ( __GNUC__ )
#pragma GCC diagnostic pop
-#endif
#endif /* __CMSIS_GCC_H */
+
diff --git a/panda/board/inc/cmsis_version.h b/panda/board/inc/cmsis_version.h
new file mode 100644
index 00000000000000..bf57cf3e805348
--- /dev/null
+++ b/panda/board/inc/cmsis_version.h
@@ -0,0 +1,40 @@
+/**************************************************************************//**
+ * @file cmsis_version.h
+ * @brief CMSIS Core(M) Version definitions
+ * @version V5.0.3
+ * @date 24. June 2019
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2019 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined ( __ICCARM__ )
+ #pragma system_include /* treat file as system include file for MISRA check */
+#elif defined (__clang__)
+ #pragma clang system_header /* treat file as system include file */
+#endif
+
+#ifndef __CMSIS_VERSION_H
+#define __CMSIS_VERSION_H
+
+/* CMSIS Version definitions */
+#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */
+#define __CM_CMSIS_VERSION_SUB ( 3U) /*!< [15:0] CMSIS Core(M) sub version */
+#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \
+ __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */
+#endif
+
diff --git a/panda/board/inc/core_cm3.h b/panda/board/inc/core_cm3.h
index b4ac4c7b05a799..0918c5eb4c827b 100644
--- a/panda/board/inc/core_cm3.h
+++ b/panda/board/inc/core_cm3.h
@@ -1,40 +1,30 @@
/**************************************************************************//**
* @file core_cm3.h
* @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File
- * @version V4.30
- * @date 20. October 2015
+ * @version V5.1.0
+ * @date 13. March 2019
******************************************************************************/
-/* Copyright (c) 2009 - 2015 ARM LIMITED
-
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of ARM nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
- *
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- ---------------------------------------------------------------------------*/
-
+/*
+ * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma system_include /* treat file as system include file for MISRA check */
+#elif defined (__clang__)
#pragma clang system_header /* treat file as system include file */
#endif
@@ -70,53 +60,15 @@
@{
*/
+#include "cmsis_version.h"
+
/* CMSIS CM3 definitions */
-#define __CM3_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */
-#define __CM3_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */
+#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */
+#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */
#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \
- __CM3_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */
-
-#define __CORTEX_M (0x03U) /*!< Cortex-M Core */
-
-
-#if defined ( __CC_ARM )
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
- #define __STATIC_INLINE static __inline
-
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
- #define __STATIC_INLINE static __inline
-
-#elif defined ( __GNUC__ )
- #define __ASM __asm /*!< asm keyword for GNU Compiler */
- #define __INLINE inline /*!< inline keyword for GNU Compiler */
- #define __STATIC_INLINE static inline
-
-#elif defined ( __ICCARM__ )
- #define __ASM __asm /*!< asm keyword for IAR Compiler */
- #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
- #define __STATIC_INLINE static inline
-
-#elif defined ( __TMS470__ )
- #define __ASM __asm /*!< asm keyword for TI CCS Compiler */
- #define __STATIC_INLINE static inline
-
-#elif defined ( __TASKING__ )
- #define __ASM __asm /*!< asm keyword for TASKING Compiler */
- #define __INLINE inline /*!< inline keyword for TASKING Compiler */
- #define __STATIC_INLINE static inline
-
-#elif defined ( __CSMC__ )
- #define __packed
- #define __ASM _asm /*!< asm keyword for COSMIC Compiler */
- #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */
- #define __STATIC_INLINE static inline
+ __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */
-#else
- #error Unknown compiler
-#endif
+#define __CORTEX_M (3U) /*!< Cortex-M Core */
/** __FPU_USED indicates whether an FPU is used or not.
This core does not support an FPU at all
@@ -128,8 +80,8 @@
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
#endif
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #if defined __ARM_PCS_VFP
+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #if defined __ARM_FP
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
#endif
@@ -143,7 +95,7 @@
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
#endif
-#elif defined ( __TMS470__ )
+#elif defined ( __TI_ARM__ )
#if defined __TI_VFP_SUPPORT__
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
#endif
@@ -160,8 +112,8 @@
#endif
-#include "core_cmInstr.h" /* Core Instruction Access */
-#include "core_cmFunc.h" /* Core Function Access */
+#include "cmsis_compiler.h" /* CMSIS compiler specific defines */
+
#ifdef __cplusplus
}
@@ -191,7 +143,7 @@
#endif
#ifndef __NVIC_PRIO_BITS
- #define __NVIC_PRIO_BITS 4U
+ #define __NVIC_PRIO_BITS 3U
#warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
#endif
@@ -308,9 +260,11 @@ typedef union
struct
{
uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
- uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */
- uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */
- uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */
+ uint32_t _reserved0:1; /*!< bit: 9 Reserved */
+ uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */
+ uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */
+ uint32_t T:1; /*!< bit: 24 Thumb bit */
+ uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */
uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
uint32_t C:1; /*!< bit: 29 Carry condition code flag */
@@ -336,12 +290,15 @@ typedef union
#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */
#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */
-#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */
-#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */
+#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */
+#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */
#define xPSR_T_Pos 24U /*!< xPSR: T Position */
#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */
+#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */
+#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */
+
#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */
#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */
@@ -385,7 +342,7 @@ typedef struct
__IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
uint32_t RESERVED0[24U];
__IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
- uint32_t RSERVED1[24U];
+ uint32_t RESERVED1[24U];
__IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
uint32_t RESERVED2[24U];
__IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
@@ -487,7 +444,7 @@ typedef struct
#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */
/* SCB Vector Table Offset Register Definitions */
-#if (__CM3_REV < 0x0201U) /* core r2p1 */
+#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */
#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */
#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */
@@ -602,6 +559,60 @@ typedef struct
#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */
#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */
+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */
+#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */
+#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */
+
+#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */
+#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */
+
+#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */
+#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */
+
+#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */
+#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */
+
+#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */
+#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */
+
+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */
+#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */
+#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */
+
+#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */
+#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */
+
+#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */
+#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */
+
+#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */
+#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */
+
+#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */
+#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */
+
+#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */
+#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */
+
+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */
+#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */
+#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */
+
+#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */
+#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */
+
+#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */
+#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */
+
+#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */
+#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */
+
+#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */
+#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */
+
+#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */
+#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */
+
/* SCB Hard Fault Status Register Definitions */
#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */
#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */
@@ -645,7 +656,7 @@ typedef struct
{
uint32_t RESERVED0[1U];
__IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */
-#if ((defined __CM3_REV) && (__CM3_REV >= 0x200U))
+#if defined (__CM3_REV) && (__CM3_REV >= 0x200U)
__IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */
#else
uint32_t RESERVED1[1U];
@@ -657,6 +668,12 @@ typedef struct
#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */
/* Auxiliary Control Register Definitions */
+#if defined (__CM3_REV) && (__CM3_REV >= 0x200U)
+#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */
+#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */
+
+#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */
+#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */
#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */
#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */
@@ -666,6 +683,7 @@ typedef struct
#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */
#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */
+#endif
/*@} end of group CMSIS_SCnotSCB */
@@ -746,10 +764,7 @@ typedef struct
__IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */
uint32_t RESERVED2[15U];
__IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */
- uint32_t RESERVED3[29U];
- __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */
- __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */
- __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */
+ uint32_t RESERVED3[32U];
uint32_t RESERVED4[43U];
__OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */
__IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */
@@ -770,7 +785,7 @@ typedef struct
/* ITM Trace Privilege Register Definitions */
#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */
-#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */
+#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */
/* ITM Trace Control Register Definitions */
#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */
@@ -800,18 +815,6 @@ typedef struct
#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */
#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */
-/* ITM Integration Write Register Definitions */
-#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */
-#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */
-
-/* ITM Integration Read Register Definitions */
-#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */
-#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */
-
-/* ITM Integration Mode Control Register Definitions */
-#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */
-#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */
-
/* ITM Lock Status Register Definitions */
#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */
#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */
@@ -984,7 +987,7 @@ typedef struct
*/
typedef struct
{
- __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */
+ __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */
__IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */
uint32_t RESERVED0[2U];
__IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */
@@ -995,7 +998,7 @@ typedef struct
__IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */
__IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */
uint32_t RESERVED3[759U];
- __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */
+ __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */
__IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */
__IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */
uint32_t RESERVED4[1U];
@@ -1044,13 +1047,13 @@ typedef struct
/* TPI Integration ETM Data Register Definitions (FIFO0) */
#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */
-#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */
+#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */
#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */
#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */
#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */
-#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */
+#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */
#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */
#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */
@@ -1065,18 +1068,21 @@ typedef struct
#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */
/* TPI ITATBCTR2 Register Definitions */
-#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */
-#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */
+#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */
+#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */
+
+#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */
+#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */
/* TPI Integration ITM Data Register Definitions (FIFO1) */
#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */
-#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */
+#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */
#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */
#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */
#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */
-#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */
+#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */
#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */
#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */
@@ -1091,12 +1097,15 @@ typedef struct
#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */
/* TPI ITATBCTR0 Register Definitions */
-#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */
-#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */
+#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */
+#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */
+
+#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */
+#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */
/* TPI Integration Mode Control Register Definitions */
#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */
-#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */
+#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */
/* TPI DEVID Register Definitions */
#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */
@@ -1118,16 +1127,16 @@ typedef struct
#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */
/* TPI DEVTYPE Register Definitions */
-#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */
-#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */
-
-#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */
+#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */
#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */
+#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */
+#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */
+
/*@}*/ /* end of group CMSIS_TPI */
-#if (__MPU_PRESENT == 1U)
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
/**
\ingroup CMSIS_core_register
\defgroup CMSIS_MPU Memory Protection Unit (MPU)
@@ -1153,6 +1162,8 @@ typedef struct
__IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */
} MPU_Type;
+#define MPU_TYPE_RALIASES 4U
+
/* MPU Type Register Definitions */
#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */
#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */
@@ -1337,18 +1348,18 @@ typedef struct
/**
\brief Mask and shift a bit field value for use in a register bit range.
\param[in] field Name of the register bit field.
- \param[in] value Value of the bit field.
+ \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type.
\return Masked and shifted value.
*/
-#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk)
+#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
/**
\brief Mask and shift a register value to extract a bit filed value.
\param[in] field Name of the register bit field.
- \param[in] value Value of register.
+ \param[in] value Value of register. This parameter is interpreted as an uint32_t type.
\return Masked and shifted bit field value.
*/
-#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos)
+#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
/*@} end of group CMSIS_core_bitfield */
@@ -1360,7 +1371,7 @@ typedef struct
@{
*/
-/* Memory mapping of Cortex-M3 Hardware */
+/* Memory mapping of Core Hardware */
#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */
#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */
#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */
@@ -1379,7 +1390,7 @@ typedef struct
#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */
#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */
-#if (__MPU_PRESENT == 1U)
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
#define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */
#define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */
#endif
@@ -1410,6 +1421,45 @@ typedef struct
@{
*/
+#ifdef CMSIS_NVIC_VIRTUAL
+ #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
+ #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
+ #endif
+ #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
+#else
+ #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
+ #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
+ #define NVIC_EnableIRQ __NVIC_EnableIRQ
+ #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ
+ #define NVIC_DisableIRQ __NVIC_DisableIRQ
+ #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ
+ #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ
+ #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ
+ #define NVIC_GetActive __NVIC_GetActive
+ #define NVIC_SetPriority __NVIC_SetPriority
+ #define NVIC_GetPriority __NVIC_GetPriority
+ #define NVIC_SystemReset __NVIC_SystemReset
+#endif /* CMSIS_NVIC_VIRTUAL */
+
+#ifdef CMSIS_VECTAB_VIRTUAL
+ #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
+ #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
+ #endif
+ #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
+#else
+ #define NVIC_SetVector __NVIC_SetVector
+ #define NVIC_GetVector __NVIC_GetVector
+#endif /* (CMSIS_VECTAB_VIRTUAL) */
+
+#define NVIC_USER_IRQ_OFFSET 16
+
+
+/* The following EXC_RETURN values are saved the LR on exception entry */
+#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */
+#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */
+#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */
+
+
/**
\brief Set Priority Grouping
\details Sets the priority grouping field using the required unlock sequence.
@@ -1419,7 +1469,7 @@ typedef struct
priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
\param [in] PriorityGroup Priority grouping field.
*/
-__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
{
uint32_t reg_value;
uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
@@ -1428,7 +1478,7 @@ __STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
reg_value = (reg_value |
((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
- (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */
+ (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
SCB->AIRCR = reg_value;
}
@@ -1438,121 +1488,180 @@ __STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
\details Reads the priority grouping field from the NVIC Interrupt Controller.
\return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).
*/
-__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void)
+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)
{
return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
}
/**
- \brief Enable External Interrupt
- \details Enables a device-specific interrupt in the NVIC interrupt controller.
- \param [in] IRQn External interrupt number. Value cannot be negative.
+ \brief Enable Interrupt
+ \details Enables a device specific interrupt in the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
+ */
+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
+{
+ if ((int32_t)(IRQn) >= 0)
+ {
+ __COMPILER_BARRIER();
+ NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ __COMPILER_BARRIER();
+ }
+}
+
+
+/**
+ \brief Get Interrupt Enable status
+ \details Returns a device specific interrupt enable status from the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \return 0 Interrupt is not enabled.
+ \return 1 Interrupt is enabled.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
{
- NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ }
+ else
+ {
+ return(0U);
+ }
}
/**
- \brief Disable External Interrupt
- \details Disables a device-specific interrupt in the NVIC interrupt controller.
- \param [in] IRQn External interrupt number. Value cannot be negative.
+ \brief Disable Interrupt
+ \details Disables a device specific interrupt in the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
{
- NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ __DSB();
+ __ISB();
+ }
}
/**
\brief Get Pending Interrupt
- \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.
- \param [in] IRQn Interrupt number.
+ \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.
+ \param [in] IRQn Device specific interrupt number.
\return 0 Interrupt status is not pending.
\return 1 Interrupt status is pending.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
{
- return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ }
+ else
+ {
+ return(0U);
+ }
}
/**
\brief Set Pending Interrupt
- \details Sets the pending bit of an external interrupt.
- \param [in] IRQn Interrupt number. Value cannot be negative.
+ \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
{
- NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ }
}
/**
\brief Clear Pending Interrupt
- \details Clears the pending bit of an external interrupt.
- \param [in] IRQn External interrupt number. Value cannot be negative.
+ \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
{
- NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ }
}
/**
\brief Get Active Interrupt
- \details Reads the active register in NVIC and returns the active bit.
- \param [in] IRQn Interrupt number.
+ \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.
+ \param [in] IRQn Device specific interrupt number.
\return 0 Interrupt status is not active.
\return 1 Interrupt status is active.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)
{
- return((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ }
+ else
+ {
+ return(0U);
+ }
}
/**
\brief Set Interrupt Priority
- \details Sets the priority of an interrupt.
- \note The priority cannot be set for every core interrupt.
+ \details Sets the priority of a device specific interrupt or a processor exception.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
\param [in] IRQn Interrupt number.
\param [in] priority Priority to set.
+ \note The priority cannot be set for every processor exception.
*/
-__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
- if ((int32_t)(IRQn) < 0)
+ if ((int32_t)(IRQn) >= 0)
{
- SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
}
else
{
- NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
}
}
/**
\brief Get Interrupt Priority
- \details Reads the priority of an interrupt.
- The interrupt number can be positive to specify an external (device specific) interrupt,
- or negative to specify an internal (core) interrupt.
+ \details Reads the priority of a device specific interrupt or a processor exception.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
\param [in] IRQn Interrupt number.
\return Interrupt Priority.
Value is aligned automatically to the implemented priority bits of the microcontroller.
*/
-__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
{
- if ((int32_t)(IRQn) < 0)
+ if ((int32_t)(IRQn) >= 0)
{
- return(((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));
+ return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));
}
else
{
- return(((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));
+ return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));
}
}
@@ -1609,11 +1718,43 @@ __STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr
}
+/**
+ \brief Set Interrupt Vector
+ \details Sets an interrupt vector in SRAM based interrupt vector table.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
+ VTOR must been relocated to SRAM before.
+ \param [in] IRQn Interrupt number
+ \param [in] vector Address of interrupt handler function
+ */
+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
+{
+ uint32_t vectors = (uint32_t )SCB->VTOR;
+ (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
+ /* ARM Application Note 321 states that the M3 does not require the architectural barrier */
+}
+
+
+/**
+ \brief Get Interrupt Vector
+ \details Reads an interrupt vector from interrupt vector table.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
+ \param [in] IRQn Interrupt number.
+ \return Address of interrupt handler function
+ */
+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
+{
+ uint32_t vectors = (uint32_t )SCB->VTOR;
+ return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4));
+}
+
+
/**
\brief System Reset
\details Initiates a system reset request to reset the MCU.
*/
-__STATIC_INLINE void NVIC_SystemReset(void)
+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
{
__DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */
@@ -1630,6 +1771,39 @@ __STATIC_INLINE void NVIC_SystemReset(void)
/*@} end of CMSIS_Core_NVICFunctions */
+/* ########################## MPU functions #################################### */
+
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
+
+#include "mpu_armv7.h"
+
+#endif
+
+
+/* ########################## FPU functions #################################### */
+/**
+ \ingroup CMSIS_Core_FunctionInterface
+ \defgroup CMSIS_Core_FpuFunctions FPU Functions
+ \brief Function that provides FPU type.
+ @{
+ */
+
+/**
+ \brief get FPU type
+ \details returns the FPU type
+ \returns
+ - \b 0: No FPU
+ - \b 1: Single precision FPU
+ - \b 2: Double + Single precision FPU
+ */
+__STATIC_INLINE uint32_t SCB_GetFPUType(void)
+{
+ return 0U; /* No FPU */
+}
+
+
+/*@} end of CMSIS_Core_FpuFunctions */
+
/* ################################## SysTick function ############################################ */
@@ -1640,7 +1814,7 @@ __STATIC_INLINE void NVIC_SystemReset(void)
@{
*/
-#if (__Vendor_SysTickConfig == 0U)
+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
/**
\brief System Tick Configuration
@@ -1683,8 +1857,8 @@ __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
@{
*/
-extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */
-#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */
+extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */
+#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */
/**
@@ -1761,3 +1935,4 @@ __STATIC_INLINE int32_t ITM_CheckChar (void)
#endif /* __CORE_CM3_H_DEPENDANT */
#endif /* __CMSIS_GENERIC */
+
diff --git a/panda/board/inc/core_cm4.h b/panda/board/inc/core_cm4.h
index dc840ebf222138..0d40081a385dc1 100644
--- a/panda/board/inc/core_cm4.h
+++ b/panda/board/inc/core_cm4.h
@@ -1,40 +1,30 @@
/**************************************************************************//**
* @file core_cm4.h
* @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File
- * @version V4.30
- * @date 20. October 2015
+ * @version V5.1.0
+ * @date 13. March 2019
******************************************************************************/
-/* Copyright (c) 2009 - 2015 ARM LIMITED
-
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of ARM nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
- *
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- ---------------------------------------------------------------------------*/
-
+/*
+ * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #pragma system_include /* treat file as system include file for MISRA check */
+#elif defined (__clang__)
#pragma clang system_header /* treat file as system include file */
#endif
@@ -70,60 +60,22 @@
@{
*/
-/* CMSIS CM4 definitions */
-#define __CM4_CMSIS_VERSION_MAIN (0x04U) /*!< [31:16] CMSIS HAL main version */
-#define __CM4_CMSIS_VERSION_SUB (0x1EU) /*!< [15:0] CMSIS HAL sub version */
-#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \
- __CM4_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */
-
-#define __CORTEX_M (0x04U) /*!< Cortex-M Core */
-
-
-#if defined ( __CC_ARM )
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
- #define __STATIC_INLINE static __inline
-
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #define __ASM __asm /*!< asm keyword for ARM Compiler */
- #define __INLINE __inline /*!< inline keyword for ARM Compiler */
- #define __STATIC_INLINE static __inline
-
-#elif defined ( __GNUC__ )
- #define __ASM __asm /*!< asm keyword for GNU Compiler */
- #define __INLINE inline /*!< inline keyword for GNU Compiler */
- #define __STATIC_INLINE static inline
+#include "cmsis_version.h"
-#elif defined ( __ICCARM__ )
- #define __ASM __asm /*!< asm keyword for IAR Compiler */
- #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
- #define __STATIC_INLINE static inline
-
-#elif defined ( __TMS470__ )
- #define __ASM __asm /*!< asm keyword for TI CCS Compiler */
- #define __STATIC_INLINE static inline
-
-#elif defined ( __TASKING__ )
- #define __ASM __asm /*!< asm keyword for TASKING Compiler */
- #define __INLINE inline /*!< inline keyword for TASKING Compiler */
- #define __STATIC_INLINE static inline
+/* CMSIS CM4 definitions */
+#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */
+#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */
+#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \
+ __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */
-#elif defined ( __CSMC__ )
- #define __packed
- #define __ASM _asm /*!< asm keyword for COSMIC Compiler */
- #define __INLINE inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */
- #define __STATIC_INLINE static inline
-
-#else
- #error Unknown compiler
-#endif
+#define __CORTEX_M (4U) /*!< Cortex-M Core */
/** __FPU_USED indicates whether an FPU is used or not.
For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.
*/
#if defined ( __CC_ARM )
#if defined __TARGET_FPU_VFP
- #if (__FPU_PRESENT == 1U)
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -133,9 +85,9 @@
#define __FPU_USED 0U
#endif
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #if defined __ARM_PCS_VFP
- #if (__FPU_PRESENT == 1)
+#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
+ #if defined __ARM_FP
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -147,7 +99,7 @@
#elif defined ( __GNUC__ )
#if defined (__VFP_FP__) && !defined(__SOFTFP__)
- #if (__FPU_PRESENT == 1U)
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -159,7 +111,7 @@
#elif defined ( __ICCARM__ )
#if defined __ARMVFP__
- #if (__FPU_PRESENT == 1U)
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -169,9 +121,9 @@
#define __FPU_USED 0U
#endif
-#elif defined ( __TMS470__ )
+#elif defined ( __TI_ARM__ )
#if defined __TI_VFP_SUPPORT__
- #if (__FPU_PRESENT == 1U)
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -183,7 +135,7 @@
#elif defined ( __TASKING__ )
#if defined __FPU_VFP__
- #if (__FPU_PRESENT == 1U)
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -195,7 +147,7 @@
#elif defined ( __CSMC__ )
#if ( __CSMC__ & 0x400U)
- #if (__FPU_PRESENT == 1U)
+ #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
#define __FPU_USED 1U
#else
#error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
@@ -207,9 +159,8 @@
#endif
-#include "core_cmInstr.h" /* Core Instruction Access */
-#include "core_cmFunc.h" /* Core Function Access */
-#include "core_cmSimd.h" /* Compiler specific SIMD Intrinsics */
+#include "cmsis_compiler.h" /* CMSIS compiler specific defines */
+
#ifdef __cplusplus
}
@@ -244,7 +195,7 @@
#endif
#ifndef __NVIC_PRIO_BITS
- #define __NVIC_PRIO_BITS 4U
+ #define __NVIC_PRIO_BITS 3U
#warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
#endif
@@ -367,11 +318,12 @@ typedef union
struct
{
uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
- uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */
+ uint32_t _reserved0:1; /*!< bit: 9 Reserved */
+ uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */
uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */
- uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */
- uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */
+ uint32_t T:1; /*!< bit: 24 Thumb bit */
+ uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */
uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
uint32_t C:1; /*!< bit: 29 Carry condition code flag */
@@ -397,8 +349,8 @@ typedef union
#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */
#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */
-#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */
-#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */
+#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */
+#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */
#define xPSR_T_Pos 24U /*!< xPSR: T Position */
#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */
@@ -406,6 +358,9 @@ typedef union
#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */
#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */
+#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */
+#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */
+
#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */
#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */
@@ -453,7 +408,7 @@ typedef struct
__IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
uint32_t RESERVED0[24U];
__IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
- uint32_t RSERVED1[24U];
+ uint32_t RESERVED1[24U];
__IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
uint32_t RESERVED2[24U];
__IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
@@ -662,6 +617,66 @@ typedef struct
#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */
#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */
+/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */
+#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */
+#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */
+
+#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */
+#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */
+
+#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */
+#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */
+
+#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */
+#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */
+
+#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */
+#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */
+
+#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */
+#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */
+
+/* BusFault Status Register (part of SCB Configurable Fault Status Register) */
+#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */
+#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */
+
+#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */
+#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */
+
+#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */
+#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */
+
+#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */
+#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */
+
+#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */
+#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */
+
+#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */
+#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */
+
+#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */
+#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */
+
+/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */
+#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */
+#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */
+
+#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */
+#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */
+
+#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */
+#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */
+
+#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */
+#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */
+
+#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */
+#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */
+
+#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */
+#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */
+
/* SCB Hard Fault Status Register Definitions */
#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */
#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */
@@ -807,10 +822,7 @@ typedef struct
__IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */
uint32_t RESERVED2[15U];
__IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */
- uint32_t RESERVED3[29U];
- __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */
- __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */
- __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */
+ uint32_t RESERVED3[32U];
uint32_t RESERVED4[43U];
__OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */
__IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */
@@ -831,7 +843,7 @@ typedef struct
/* ITM Trace Privilege Register Definitions */
#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */
-#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */
+#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */
/* ITM Trace Control Register Definitions */
#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */
@@ -861,18 +873,6 @@ typedef struct
#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */
#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */
-/* ITM Integration Write Register Definitions */
-#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */
-#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */
-
-/* ITM Integration Read Register Definitions */
-#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */
-#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */
-
-/* ITM Integration Mode Control Register Definitions */
-#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */
-#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */
-
/* ITM Lock Status Register Definitions */
#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */
#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */
@@ -1045,7 +1045,7 @@ typedef struct
*/
typedef struct
{
- __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */
+ __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */
__IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */
uint32_t RESERVED0[2U];
__IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */
@@ -1056,7 +1056,7 @@ typedef struct
__IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */
__IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */
uint32_t RESERVED3[759U];
- __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */
+ __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */
__IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */
__IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */
uint32_t RESERVED4[1U];
@@ -1105,13 +1105,13 @@ typedef struct
/* TPI Integration ETM Data Register Definitions (FIFO0) */
#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */
-#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */
+#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */
#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */
#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */
#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */
-#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */
+#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */
#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */
#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */
@@ -1126,18 +1126,21 @@ typedef struct
#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */
/* TPI ITATBCTR2 Register Definitions */
-#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */
-#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */
+#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */
+#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */
+
+#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */
+#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */
/* TPI Integration ITM Data Register Definitions (FIFO1) */
#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */
-#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */
+#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */
#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */
#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */
#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */
-#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */
+#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */
#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */
#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */
@@ -1152,12 +1155,15 @@ typedef struct
#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */
/* TPI ITATBCTR0 Register Definitions */
-#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */
-#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */
+#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */
+#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */
+
+#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */
+#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */
/* TPI Integration Mode Control Register Definitions */
#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */
-#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */
+#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */
/* TPI DEVID Register Definitions */
#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */
@@ -1179,16 +1185,16 @@ typedef struct
#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */
/* TPI DEVTYPE Register Definitions */
-#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */
-#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */
-
-#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */
+#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */
#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */
+#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */
+#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */
+
/*@}*/ /* end of group CMSIS_TPI */
-#if (__MPU_PRESENT == 1U)
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
/**
\ingroup CMSIS_core_register
\defgroup CMSIS_MPU Memory Protection Unit (MPU)
@@ -1214,6 +1220,8 @@ typedef struct
__IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */
} MPU_Type;
+#define MPU_TYPE_RALIASES 4U
+
/* MPU Type Register Definitions */
#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */
#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */
@@ -1280,10 +1288,9 @@ typedef struct
#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */
/*@} end of group CMSIS_MPU */
-#endif
+#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */
-#if (__FPU_PRESENT == 1U)
/**
\ingroup CMSIS_core_register
\defgroup CMSIS_FPU Floating Point Unit (FPU)
@@ -1302,6 +1309,7 @@ typedef struct
__IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */
__IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */
__IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */
+ __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */
} FPU_Type;
/* Floating-Point Context Control Register Definitions */
@@ -1387,8 +1395,12 @@ typedef struct
#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */
#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */
+/* Media and FP Feature Register 2 Definitions */
+
+#define FPU_MVFR2_VFP_Misc_Pos 4U /*!< MVFR2: VFP Misc bits Position */
+#define FPU_MVFR2_VFP_Misc_Msk (0xFUL << FPU_MVFR2_VFP_Misc_Pos) /*!< MVFR2: VFP Misc bits Mask */
+
/*@} end of group CMSIS_FPU */
-#endif
/**
@@ -1506,18 +1518,18 @@ typedef struct
/**
\brief Mask and shift a bit field value for use in a register bit range.
\param[in] field Name of the register bit field.
- \param[in] value Value of the bit field.
+ \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type.
\return Masked and shifted value.
*/
-#define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk)
+#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
/**
\brief Mask and shift a register value to extract a bit filed value.
\param[in] field Name of the register bit field.
- \param[in] value Value of register.
+ \param[in] value Value of register. This parameter is interpreted as an uint32_t type.
\return Masked and shifted bit field value.
*/
-#define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos)
+#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
/*@} end of group CMSIS_core_bitfield */
@@ -1529,7 +1541,7 @@ typedef struct
@{
*/
-/* Memory mapping of Cortex-M4 Hardware */
+/* Memory mapping of Core Hardware */
#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */
#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */
#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */
@@ -1548,15 +1560,13 @@ typedef struct
#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */
#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */
-#if (__MPU_PRESENT == 1U)
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
#define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */
#define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */
#endif
-#if (__FPU_PRESENT == 1U)
- #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */
- #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */
-#endif
+#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */
+#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */
/*@} */
@@ -1584,6 +1594,48 @@ typedef struct
@{
*/
+#ifdef CMSIS_NVIC_VIRTUAL
+ #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
+ #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
+ #endif
+ #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
+#else
+ #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
+ #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
+ #define NVIC_EnableIRQ __NVIC_EnableIRQ
+ #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ
+ #define NVIC_DisableIRQ __NVIC_DisableIRQ
+ #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ
+ #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ
+ #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ
+ #define NVIC_GetActive __NVIC_GetActive
+ #define NVIC_SetPriority __NVIC_SetPriority
+ #define NVIC_GetPriority __NVIC_GetPriority
+ #define NVIC_SystemReset __NVIC_SystemReset
+#endif /* CMSIS_NVIC_VIRTUAL */
+
+#ifdef CMSIS_VECTAB_VIRTUAL
+ #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
+ #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
+ #endif
+ #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
+#else
+ #define NVIC_SetVector __NVIC_SetVector
+ #define NVIC_GetVector __NVIC_GetVector
+#endif /* (CMSIS_VECTAB_VIRTUAL) */
+
+#define NVIC_USER_IRQ_OFFSET 16
+
+
+/* The following EXC_RETURN values are saved the LR on exception entry */
+#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */
+#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */
+#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */
+#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */
+#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */
+#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */
+
+
/**
\brief Set Priority Grouping
\details Sets the priority grouping field using the required unlock sequence.
@@ -1593,7 +1645,7 @@ typedef struct
priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
\param [in] PriorityGroup Priority grouping field.
*/
-__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
{
uint32_t reg_value;
uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
@@ -1602,7 +1654,7 @@ __STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
reg_value = (reg_value |
((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
- (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */
+ (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
SCB->AIRCR = reg_value;
}
@@ -1612,121 +1664,180 @@ __STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
\details Reads the priority grouping field from the NVIC Interrupt Controller.
\return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).
*/
-__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void)
+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)
{
return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
}
/**
- \brief Enable External Interrupt
- \details Enables a device-specific interrupt in the NVIC interrupt controller.
- \param [in] IRQn External interrupt number. Value cannot be negative.
+ \brief Enable Interrupt
+ \details Enables a device specific interrupt in the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
+ */
+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
+{
+ if ((int32_t)(IRQn) >= 0)
+ {
+ __COMPILER_BARRIER();
+ NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ __COMPILER_BARRIER();
+ }
+}
+
+
+/**
+ \brief Get Interrupt Enable status
+ \details Returns a device specific interrupt enable status from the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \return 0 Interrupt is not enabled.
+ \return 1 Interrupt is enabled.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
{
- NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ }
+ else
+ {
+ return(0U);
+ }
}
/**
- \brief Disable External Interrupt
- \details Disables a device-specific interrupt in the NVIC interrupt controller.
- \param [in] IRQn External interrupt number. Value cannot be negative.
+ \brief Disable Interrupt
+ \details Disables a device specific interrupt in the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
{
- NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ __DSB();
+ __ISB();
+ }
}
/**
\brief Get Pending Interrupt
- \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.
- \param [in] IRQn Interrupt number.
+ \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.
+ \param [in] IRQn Device specific interrupt number.
\return 0 Interrupt status is not pending.
\return 1 Interrupt status is pending.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
{
- return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ }
+ else
+ {
+ return(0U);
+ }
}
/**
\brief Set Pending Interrupt
- \details Sets the pending bit of an external interrupt.
- \param [in] IRQn Interrupt number. Value cannot be negative.
+ \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
{
- NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ }
}
/**
\brief Clear Pending Interrupt
- \details Clears the pending bit of an external interrupt.
- \param [in] IRQn External interrupt number. Value cannot be negative.
+ \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
{
- NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ }
}
/**
\brief Get Active Interrupt
- \details Reads the active register in NVIC and returns the active bit.
- \param [in] IRQn Interrupt number.
+ \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.
+ \param [in] IRQn Device specific interrupt number.
\return 0 Interrupt status is not active.
\return 1 Interrupt status is active.
+ \note IRQn must not be negative.
*/
-__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)
{
- return((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ if ((int32_t)(IRQn) >= 0)
+ {
+ return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
+ }
+ else
+ {
+ return(0U);
+ }
}
/**
\brief Set Interrupt Priority
- \details Sets the priority of an interrupt.
- \note The priority cannot be set for every core interrupt.
+ \details Sets the priority of a device specific interrupt or a processor exception.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
\param [in] IRQn Interrupt number.
\param [in] priority Priority to set.
+ \note The priority cannot be set for every processor exception.
*/
-__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
- if ((int32_t)(IRQn) < 0)
+ if ((int32_t)(IRQn) >= 0)
{
- SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
}
else
{
- NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
}
}
/**
\brief Get Interrupt Priority
- \details Reads the priority of an interrupt.
- The interrupt number can be positive to specify an external (device specific) interrupt,
- or negative to specify an internal (core) interrupt.
+ \details Reads the priority of a device specific interrupt or a processor exception.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
\param [in] IRQn Interrupt number.
\return Interrupt Priority.
Value is aligned automatically to the implemented priority bits of the microcontroller.
*/
-__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
+__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
{
- if ((int32_t)(IRQn) < 0)
+ if ((int32_t)(IRQn) >= 0)
{
- return(((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));
+ return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));
}
else
{
- return(((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));
+ return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));
}
}
@@ -1783,11 +1894,43 @@ __STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGr
}
+/**
+ \brief Set Interrupt Vector
+ \details Sets an interrupt vector in SRAM based interrupt vector table.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
+ VTOR must been relocated to SRAM before.
+ \param [in] IRQn Interrupt number
+ \param [in] vector Address of interrupt handler function
+ */
+__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
+{
+ uint32_t vectors = (uint32_t )SCB->VTOR;
+ (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector;
+ /* ARM Application Note 321 states that the M4 does not require the architectural barrier */
+}
+
+
+/**
+ \brief Get Interrupt Vector
+ \details Reads an interrupt vector from interrupt vector table.
+ The interrupt number can be positive to specify a device specific interrupt,
+ or negative to specify a processor exception.
+ \param [in] IRQn Interrupt number.
+ \return Address of interrupt handler function
+ */
+__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
+{
+ uint32_t vectors = (uint32_t )SCB->VTOR;
+ return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4));
+}
+
+
/**
\brief System Reset
\details Initiates a system reset request to reset the MCU.
*/
-__STATIC_INLINE void NVIC_SystemReset(void)
+__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
{
__DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */
@@ -1805,6 +1948,50 @@ __STATIC_INLINE void NVIC_SystemReset(void)
/*@} end of CMSIS_Core_NVICFunctions */
+/* ########################## MPU functions #################################### */
+
+#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
+
+#include "mpu_armv7.h"
+
+#endif
+
+
+/* ########################## FPU functions #################################### */
+/**
+ \ingroup CMSIS_Core_FunctionInterface
+ \defgroup CMSIS_Core_FpuFunctions FPU Functions
+ \brief Function that provides FPU type.
+ @{
+ */
+
+/**
+ \brief get FPU type
+ \details returns the FPU type
+ \returns
+ - \b 0: No FPU
+ - \b 1: Single precision FPU
+ - \b 2: Double + Single precision FPU
+ */
+__STATIC_INLINE uint32_t SCB_GetFPUType(void)
+{
+ uint32_t mvfr0;
+
+ mvfr0 = FPU->MVFR0;
+ if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U)
+ {
+ return 1U; /* Single precision FPU */
+ }
+ else
+ {
+ return 0U; /* No FPU */
+ }
+}
+
+
+/*@} end of CMSIS_Core_FpuFunctions */
+
+
/* ################################## SysTick function ############################################ */
/**
@@ -1814,7 +2001,7 @@ __STATIC_INLINE void NVIC_SystemReset(void)
@{
*/
-#if (__Vendor_SysTickConfig == 0U)
+#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
/**
\brief System Tick Configuration
@@ -1857,8 +2044,8 @@ __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
@{
*/
-extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */
-#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */
+extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */
+#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */
/**
@@ -1935,3 +2122,4 @@ __STATIC_INLINE int32_t ITM_CheckChar (void)
#endif /* __CORE_CM4_H_DEPENDANT */
#endif /* __CMSIS_GENERIC */
+
diff --git a/panda/board/inc/core_cmFunc.h b/panda/board/inc/core_cmFunc.h
deleted file mode 100644
index 652a48af07a93d..00000000000000
--- a/panda/board/inc/core_cmFunc.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**************************************************************************//**
- * @file core_cmFunc.h
- * @brief CMSIS Cortex-M Core Function Access Header File
- * @version V4.30
- * @date 20. October 2015
- ******************************************************************************/
-/* Copyright (c) 2009 - 2015 ARM LIMITED
-
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of ARM nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
- *
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- ---------------------------------------------------------------------------*/
-
-
-#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #pragma clang system_header /* treat file as system include file */
-#endif
-
-#ifndef __CORE_CMFUNC_H
-#define __CORE_CMFUNC_H
-
-
-/* ########################### Core Function Access ########################### */
-/** \ingroup CMSIS_Core_FunctionInterface
- \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
- @{
-*/
-
-/*------------------ RealView Compiler -----------------*/
-#if defined ( __CC_ARM )
- #include "cmsis_armcc.h"
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #include "cmsis_armcc_V6.h"
-
-/*------------------ GNU Compiler ----------------------*/
-#elif defined ( __GNUC__ )
- #include "cmsis_gcc.h"
-
-/*------------------ ICC Compiler ----------------------*/
-#elif defined ( __ICCARM__ )
- #include
-
-/*------------------ TI CCS Compiler -------------------*/
-#elif defined ( __TMS470__ )
- #include
-
-/*------------------ TASKING Compiler ------------------*/
-#elif defined ( __TASKING__ )
- /*
- * The CMSIS functions have been implemented as intrinsics in the compiler.
- * Please use "carm -?i" to get an up to date list of all intrinsics,
- * Including the CMSIS ones.
- */
-
-/*------------------ COSMIC Compiler -------------------*/
-#elif defined ( __CSMC__ )
- #include
-
-#endif
-
-/*@} end of CMSIS_Core_RegAccFunctions */
-
-#endif /* __CORE_CMFUNC_H */
diff --git a/panda/board/inc/core_cmInstr.h b/panda/board/inc/core_cmInstr.h
deleted file mode 100644
index f474b0e6f362c7..00000000000000
--- a/panda/board/inc/core_cmInstr.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**************************************************************************//**
- * @file core_cmInstr.h
- * @brief CMSIS Cortex-M Core Instruction Access Header File
- * @version V4.30
- * @date 20. October 2015
- ******************************************************************************/
-/* Copyright (c) 2009 - 2015 ARM LIMITED
-
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of ARM nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
- *
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- ---------------------------------------------------------------------------*/
-
-
-#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #pragma clang system_header /* treat file as system include file */
-#endif
-
-#ifndef __CORE_CMINSTR_H
-#define __CORE_CMINSTR_H
-
-
-/* ########################## Core Instruction Access ######################### */
-/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
- Access to dedicated instructions
- @{
-*/
-
-/*------------------ RealView Compiler -----------------*/
-#if defined ( __CC_ARM )
- #include "cmsis_armcc.h"
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #include "cmsis_armcc_V6.h"
-
-/*------------------ GNU Compiler ----------------------*/
-#elif defined ( __GNUC__ )
- #include "cmsis_gcc.h"
-
-/*------------------ ICC Compiler ----------------------*/
-#elif defined ( __ICCARM__ )
- #include
-
-/*------------------ TI CCS Compiler -------------------*/
-#elif defined ( __TMS470__ )
- #include
-
-/*------------------ TASKING Compiler ------------------*/
-#elif defined ( __TASKING__ )
- /*
- * The CMSIS functions have been implemented as intrinsics in the compiler.
- * Please use "carm -?i" to get an up to date list of all intrinsics,
- * Including the CMSIS ones.
- */
-
-/*------------------ COSMIC Compiler -------------------*/
-#elif defined ( __CSMC__ )
- #include
-
-#endif
-
-/*@}*/ /* end of group CMSIS_Core_InstructionInterface */
-
-#endif /* __CORE_CMINSTR_H */
diff --git a/panda/board/inc/core_cmSimd.h b/panda/board/inc/core_cmSimd.h
deleted file mode 100644
index 66bf5c2a725b6d..00000000000000
--- a/panda/board/inc/core_cmSimd.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/**************************************************************************//**
- * @file core_cmSimd.h
- * @brief CMSIS Cortex-M SIMD Header File
- * @version V4.30
- * @date 20. October 2015
- ******************************************************************************/
-/* Copyright (c) 2009 - 2015 ARM LIMITED
-
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- - Neither the name of ARM nor the names of its contributors may be used
- to endorse or promote products derived from this software without
- specific prior written permission.
- *
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- ---------------------------------------------------------------------------*/
-
-
-#if defined ( __ICCARM__ )
- #pragma system_include /* treat file as system include file for MISRA check */
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #pragma clang system_header /* treat file as system include file */
-#endif
-
-#ifndef __CORE_CMSIMD_H
-#define __CORE_CMSIMD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/* ################### Compiler specific Intrinsics ########################### */
-/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
- Access to dedicated SIMD instructions
- @{
-*/
-
-/*------------------ RealView Compiler -----------------*/
-#if defined ( __CC_ARM )
- #include "cmsis_armcc.h"
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
- #include "cmsis_armcc_V6.h"
-
-/*------------------ GNU Compiler ----------------------*/
-#elif defined ( __GNUC__ )
- #include "cmsis_gcc.h"
-
-/*------------------ ICC Compiler ----------------------*/
-#elif defined ( __ICCARM__ )
- #include
-
-/*------------------ TI CCS Compiler -------------------*/
-#elif defined ( __TMS470__ )
- #include
-
-/*------------------ TASKING Compiler ------------------*/
-#elif defined ( __TASKING__ )
- /*
- * The CMSIS functions have been implemented as intrinsics in the compiler.
- * Please use "carm -?i" to get an up to date list of all intrinsics,
- * Including the CMSIS ones.
- */
-
-/*------------------ COSMIC Compiler -------------------*/
-#elif defined ( __CSMC__ )
- #include
-
-#endif
-
-/*@} end of group CMSIS_SIMD_intrinsics */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CORE_CMSIMD_H */
diff --git a/panda/board/inc/mpu_armv7.h b/panda/board/inc/mpu_armv7.h
new file mode 100644
index 00000000000000..e72cc4623db517
--- /dev/null
+++ b/panda/board/inc/mpu_armv7.h
@@ -0,0 +1,273 @@
+/******************************************************************************
+ * @file mpu_armv7.h
+ * @brief CMSIS MPU API for Armv7-M MPU
+ * @version V5.1.0
+ * @date 08. March 2019
+ ******************************************************************************/
+/*
+ * Copyright (c) 2017-2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined ( __ICCARM__ )
+ #pragma system_include /* treat file as system include file for MISRA check */
+#elif defined (__clang__)
+ #pragma clang system_header /* treat file as system include file */
+#endif
+
+#ifndef ARM_MPU_ARMV7_H
+#define ARM_MPU_ARMV7_H
+
+#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes
+#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes
+#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes
+#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes
+#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes
+#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte
+#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes
+#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes
+#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes
+#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes
+#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes
+#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes
+#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes
+#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes
+#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes
+#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte
+#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes
+#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes
+#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes
+#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes
+#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes
+#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes
+#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes
+#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes
+#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes
+#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte
+#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes
+#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes
+
+#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access
+#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only
+#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only
+#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access
+#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only
+#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access
+
+/** MPU Region Base Address Register Value
+*
+* \param Region The region to be configured, number 0 to 15.
+* \param BaseAddress The base address for the region.
+*/
+#define ARM_MPU_RBAR(Region, BaseAddress) \
+ (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \
+ ((Region) & MPU_RBAR_REGION_Msk) | \
+ (MPU_RBAR_VALID_Msk))
+
+/**
+* MPU Memory Access Attributes
+*
+* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
+* \param IsShareable Region is shareable between multiple bus masters.
+* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache.
+* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
+*/
+#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \
+ ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \
+ (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \
+ (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \
+ (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk))
+
+/**
+* MPU Region Attribute and Size Register Value
+*
+* \param DisableExec Instruction access disable bit, 1= disable instruction fetches.
+* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode.
+* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_.
+* \param SubRegionDisable Sub-region disable field.
+* \param Size Region size of the region to be configured, for example 4K, 8K.
+*/
+#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \
+ ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \
+ (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \
+ (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \
+ (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \
+ (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \
+ (((MPU_RASR_ENABLE_Msk))))
+
+/**
+* MPU Region Attribute and Size Register Value
+*
+* \param DisableExec Instruction access disable bit, 1= disable instruction fetches.
+* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode.
+* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
+* \param IsShareable Region is shareable between multiple bus masters.
+* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache.
+* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
+* \param SubRegionDisable Sub-region disable field.
+* \param Size Region size of the region to be configured, for example 4K, 8K.
+*/
+#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \
+ ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size)
+
+/**
+* MPU Memory Access Attribute for strongly ordered memory.
+* - TEX: 000b
+* - Shareable
+* - Non-cacheable
+* - Non-bufferable
+*/
+#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U)
+
+/**
+* MPU Memory Access Attribute for device memory.
+* - TEX: 000b (if shareable) or 010b (if non-shareable)
+* - Shareable or non-shareable
+* - Non-cacheable
+* - Bufferable (if shareable) or non-bufferable (if non-shareable)
+*
+* \param IsShareable Configures the device memory as shareable or non-shareable.
+*/
+#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U))
+
+/**
+* MPU Memory Access Attribute for normal memory.
+* - TEX: 1BBb (reflecting outer cacheability rules)
+* - Shareable or non-shareable
+* - Cacheable or non-cacheable (reflecting inner cacheability rules)
+* - Bufferable or non-bufferable (reflecting inner cacheability rules)
+*
+* \param OuterCp Configures the outer cache policy.
+* \param InnerCp Configures the inner cache policy.
+* \param IsShareable Configures the memory as shareable or non-shareable.
+*/
+#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U))
+
+/**
+* MPU Memory Access Attribute non-cacheable policy.
+*/
+#define ARM_MPU_CACHEP_NOCACHE 0U
+
+/**
+* MPU Memory Access Attribute write-back, write and read allocate policy.
+*/
+#define ARM_MPU_CACHEP_WB_WRA 1U
+
+/**
+* MPU Memory Access Attribute write-through, no write allocate policy.
+*/
+#define ARM_MPU_CACHEP_WT_NWA 2U
+
+/**
+* MPU Memory Access Attribute write-back, no write allocate policy.
+*/
+#define ARM_MPU_CACHEP_WB_NWA 3U
+
+
+/**
+* Struct for a single MPU Region
+*/
+typedef struct {
+ uint32_t RBAR; //!< The region base address register value (RBAR)
+ uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR
+} ARM_MPU_Region_t;
+
+/** Enable the MPU.
+* \param MPU_Control Default access permissions for unconfigured regions.
+*/
+__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)
+{
+ MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
+#ifdef SCB_SHCSR_MEMFAULTENA_Msk
+ SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
+#endif
+ __DSB();
+ __ISB();
+}
+
+/** Disable the MPU.
+*/
+__STATIC_INLINE void ARM_MPU_Disable(void)
+{
+ __DMB();
+#ifdef SCB_SHCSR_MEMFAULTENA_Msk
+ SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
+#endif
+ MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;
+}
+
+/** Clear and disable the given MPU region.
+* \param rnr Region number to be cleared.
+*/
+__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)
+{
+ MPU->RNR = rnr;
+ MPU->RASR = 0U;
+}
+
+/** Configure an MPU region.
+* \param rbar Value for RBAR register.
+* \param rsar Value for RSAR register.
+*/
+__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr)
+{
+ MPU->RBAR = rbar;
+ MPU->RASR = rasr;
+}
+
+/** Configure the given MPU region.
+* \param rnr Region number to be configured.
+* \param rbar Value for RBAR register.
+* \param rsar Value for RSAR register.
+*/
+__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr)
+{
+ MPU->RNR = rnr;
+ MPU->RBAR = rbar;
+ MPU->RASR = rasr;
+}
+
+/** Memcopy with strictly ordered memory access, e.g. for register targets.
+* \param dst Destination data is copied to.
+* \param src Source data is copied from.
+* \param len Amount of data words to be copied.
+*/
+__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)
+{
+ uint32_t i;
+ for (i = 0U; i < len; ++i)
+ {
+ dst[i] = src[i];
+ }
+}
+
+/** Load the given number of MPU regions from a table.
+* \param table Pointer to the MPU configuration table.
+* \param cnt Amount of regions to be configured.
+*/
+__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt)
+{
+ const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;
+ while (cnt > MPU_TYPE_RALIASES) {
+ ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize);
+ table += MPU_TYPE_RALIASES;
+ cnt -= MPU_TYPE_RALIASES;
+ }
+ ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize);
+}
+
+#endif
+
diff --git a/panda/board/inc/stm32f413xx.h b/panda/board/inc/stm32f413xx.h
index 0fd9f4c387d405..0962a8def1a3a6 100644
--- a/panda/board/inc/stm32f413xx.h
+++ b/panda/board/inc/stm32f413xx.h
@@ -141,6 +141,7 @@ typedef enum
TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */
TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare global interrupt */
DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */
+ FSMC_IRQn = 48, /*!< FSMC global Interrupt */
SDIO_IRQn = 49, /*!< SDIO global Interrupt */
TIM5_IRQn = 50, /*!< TIM5 global Interrupt */
SPI3_IRQn = 51, /*!< SPI3 global Interrupt */
diff --git a/panda/board/libc.h b/panda/board/libc.h
index 83adb9c09663e8..c731dad93d83a0 100644
--- a/panda/board/libc.h
+++ b/panda/board/libc.h
@@ -1,7 +1,7 @@
// **** libc ****
-void delay(int a) {
- volatile int i;
+void delay(uint32_t a) {
+ volatile uint32_t i;
for (i = 0; i < a; i++);
}
@@ -40,26 +40,3 @@ int memcmp(const void * ptr1, const void * ptr2, unsigned int num) {
return ret;
}
-// ********************* IRQ helpers *********************
-
-int interrupts_enabled = 0;
-void enable_interrupts(void) {
- interrupts_enabled = 1;
- __enable_irq();
-}
-
-int critical_depth = 0;
-void enter_critical_section(void) {
- __disable_irq();
- // this is safe because interrupts are disabled
- critical_depth += 1;
-}
-
-void exit_critical_section(void) {
- // this is safe because interrupts are disabled
- critical_depth -= 1;
- if ((critical_depth == 0) && interrupts_enabled) {
- __enable_irq();
- }
-}
-
diff --git a/panda/board/main.c b/panda/board/main.c
index 410c54a58a8d72..4893c15c8dd4f2 100644
--- a/panda/board/main.c
+++ b/panda/board/main.c
@@ -1,29 +1,35 @@
-//#define EON
+//#define EON
//#define PANDA
// ********************* Includes *********************
#include "config.h"
#include "obj/gitversion.h"
+#include "main_declarations.h"
+#include "critical.h"
+
#include "libc.h"
#include "provision.h"
+#include "faults.h"
-#include "main_declarations.h"
+#include "drivers/registers.h"
+#include "drivers/interrupts.h"
#include "drivers/llcan.h"
#include "drivers/llgpio.h"
#include "drivers/adc.h"
+#include "drivers/pwm.h"
#include "board.h"
#include "drivers/uart.h"
#include "drivers/usb.h"
#include "drivers/gmlan_alt.h"
+#include "drivers/kline_init.h"
#include "drivers/timer.h"
#include "drivers/clock.h"
#include "gpio.h"
-#include "drivers/lin.h"
#ifndef EON
#include "drivers/spi.h"
@@ -34,18 +40,49 @@
#include "drivers/can.h"
+uint16_t prev_safety_mode = 0;
+extern int _app_start[0xc000]; // Only first 3 sectors of size 0x4000 are used
+
+struct __attribute__((packed)) health_t {
+ uint32_t uptime_pkt;
+ uint32_t voltage_pkt;
+ uint32_t current_pkt;
+ uint32_t can_rx_errs_pkt;
+ uint32_t can_send_errs_pkt;
+ uint32_t can_fwd_errs_pkt;
+ uint32_t gmlan_send_errs_pkt;
+ uint32_t faults_pkt;
+ uint8_t ignition_line_pkt;
+ uint8_t ignition_can_pkt;
+ uint8_t controls_allowed_pkt;
+ uint8_t gas_interceptor_detected_pkt;
+ uint8_t car_harness_status_pkt;
+ uint8_t usb_power_mode_pkt;
+ uint8_t safety_mode_pkt;
+ uint8_t fault_status_pkt;
+ uint8_t power_save_enabled_pkt;
+};
+
+
// ********************* Serial debugging *********************
+bool check_started(void) {
+ return current_board->check_ignition() || ignition_can;
+}
+
void debug_ring_callback(uart_ring *ring) {
char rcv;
while (getc(ring, &rcv)) {
(void)putc(ring, rcv); // misra-c2012-17.7: cast to void is ok: debug function
- // jump to DFU flash
- if (rcv == 'z') {
- enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
- NVIC_SystemReset();
- }
+ // only allow bootloader entry on debug builds
+ #ifdef ALLOW_DEBUG
+ // jump to DFU flash
+ if (rcv == 'z') {
+ enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
+ NVIC_SystemReset();
+ }
+ #endif
// normal reset
if (rcv == 'x') {
@@ -68,145 +105,107 @@ void debug_ring_callback(uart_ring *ring) {
}
}
-// ***************************** started logic *****************************
-void started_interrupt_handler(uint8_t interrupt_line) {
- volatile unsigned int pr = EXTI->PR & (1U << interrupt_line);
- if ((pr & (1U << interrupt_line)) != 0U) {
- #ifdef DEBUG
- puts("got started interrupt\n");
- #endif
-
- // jenky debounce
- delay(100000);
-
- // set power savings mode here
- int power_save_state = current_board->check_ignition() ? POWER_SAVE_STATUS_DISABLED : POWER_SAVE_STATUS_ENABLED;
- set_power_save_state(power_save_state);
- }
- EXTI->PR = (1U << interrupt_line);
-}
-
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void EXTI0_IRQHandler(void) {
- started_interrupt_handler(0);
-}
-
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void EXTI1_IRQHandler(void) {
- started_interrupt_handler(1);
-}
-
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void EXTI3_IRQHandler(void) {
- started_interrupt_handler(3);
-}
-
-void started_interrupt_init(void) {
- SYSCFG->EXTICR[1] = SYSCFG_EXTICR1_EXTI1_PA;
- EXTI->IMR |= (1U << 1);
- EXTI->RTSR |= (1U << 1);
- EXTI->FTSR |= (1U << 1);
- NVIC_EnableIRQ(EXTI1_IRQn);
-}
-
// ****************************** safety mode ******************************
// this is the only way to leave silent mode
void set_safety_mode(uint16_t mode, int16_t param) {
- int err = safety_set_mode(mode, param);
+ //BB to prevent any changes to safety
+ UNUSED(mode);
+ UNUSED(param);
+}
+
+// this is the only way to leave silent mode
+void set_safety_mode2(uint16_t mode, int16_t param) {
+ if (prev_safety_mode == mode) {
+ return;
+ }
+ //BB we had this now they changed it to below: int err = safety_set_mode2(mode, param);
+ uint16_t mode_copy = mode;
+ int err = set_safety_hooks2(mode_copy, param);
if (err == -1) {
- puts("Error: safety set mode failed\n");
- } else {
- if (mode == SAFETY_NOOUTPUT) {
+ puts("Error: safety set mode failed. Falling back to SILENT\n");
+ mode_copy = SAFETY_SILENT;
+ err = set_safety_hooks2(mode_copy, 0);
+ if (err == -1) {
+ puts("Error: Failed setting SILENT mode. Hanging\n");
+ while (true) {
+ // TERMINAL ERROR: we can't continue if SILENT safety mode isn't succesfully set
+ }
+ }
+ }
+ switch (mode_copy) {
+ case SAFETY_SILENT:
+ set_intercept_relay(false);
+ if (board_has_obd()) {
+ current_board->set_can_mode(CAN_MODE_NORMAL);
+ }
can_silent = ALL_CAN_SILENT;
- } else {
+ break;
+ case SAFETY_NOOUTPUT:
+ set_intercept_relay(false);
+ if (board_has_obd()) {
+ current_board->set_can_mode(CAN_MODE_NORMAL);
+ }
can_silent = ALL_CAN_LIVE;
- }
-
- switch (mode) {
- case SAFETY_NOOUTPUT:
- set_intercept_relay(false);
- if(hw_type == HW_TYPE_BLACK_PANDA){
- current_board->set_can_mode(CAN_MODE_NORMAL);
- }
- break;
- case SAFETY_ELM327:
- set_intercept_relay(false);
- if(hw_type == HW_TYPE_BLACK_PANDA){
- current_board->set_can_mode(CAN_MODE_OBD_CAN2);
- }
- break;
- default:
- set_intercept_relay(true);
- if(hw_type == HW_TYPE_BLACK_PANDA){
- current_board->set_can_mode(CAN_MODE_NORMAL);
- }
- break;
- }
- if (safety_ignition_hook() != -1) {
- // if the ignition hook depends on something other than the started GPIO
- // we have to disable power savings (fix for GM and Tesla)
- set_power_save_state(POWER_SAVE_STATUS_DISABLED);
- } else {
- // power mode is already POWER_SAVE_STATUS_DISABLED and CAN TXs are active
- }
- can_init_all();
+ break;
+ case SAFETY_ELM327:
+ set_intercept_relay(false);
+ heartbeat_counter = 0U;
+ if (board_has_obd()) {
+ current_board->set_can_mode(CAN_MODE_OBD_CAN2);
+ }
+ can_silent = ALL_CAN_LIVE;
+ break;
+ default:
+ set_intercept_relay(true);
+ heartbeat_counter = 0U;
+ if (board_has_obd()) {
+ current_board->set_can_mode(CAN_MODE_NORMAL);
+ }
+ can_silent = ALL_CAN_LIVE;
+ break;
}
+ prev_safety_mode = mode;
+ can_init_all();
}
// ***************************** USB port *****************************
int get_health_pkt(void *dat) {
- struct __attribute__((packed)) {
- uint32_t voltage_pkt;
- uint32_t current_pkt;
- uint32_t can_send_errs_pkt;
- uint32_t can_fwd_errs_pkt;
- uint32_t gmlan_send_errs_pkt;
- uint8_t started_pkt;
- uint8_t controls_allowed_pkt;
- uint8_t gas_interceptor_detected_pkt;
- uint8_t car_harness_status_pkt;
- } *health = dat;
-
- //Voltage will be measured in mv. 5000 = 5V
- uint32_t voltage = adc_get(ADCCHAN_VOLTAGE);
-
- // REVC has a 10, 1 (1/11) voltage divider
- // Here is the calculation for the scale (s)
- // ADCV = VIN_S * (1/11) * (4095/3.3)
- // RETVAL = ADCV * s = VIN_S*1000
- // s = 1000/((4095/3.3)*(1/11)) = 8.8623046875
-
- // Avoid needing floating point math
- health->voltage_pkt = (voltage * 8862U) / 1000U;
-
- // No current sense on panda black
- if(hw_type != HW_TYPE_BLACK_PANDA){
- health->current_pkt = adc_get(ADCCHAN_CURRENT);
- } else {
- health->current_pkt = 0;
- }
+ COMPILE_TIME_ASSERT(sizeof(struct health_t) <= MAX_RESP_LEN);
+ struct health_t * health = (struct health_t*)dat;
- int safety_ignition = safety_ignition_hook();
- if (safety_ignition < 0) {
- //Use the GPIO pin to determine ignition
- health->started_pkt = 1; // (uint8_t)(current_board->check_ignition());
- } else {
- //Current safety hooks want to determine ignition (ex: GM)
- health->started_pkt = safety_ignition;
- }
+ health->uptime_pkt = uptime_cnt;
+ health->voltage_pkt = adc_get_voltage();
+ health->current_pkt = current_board->read_current();
+
+ //Use the GPIO pin to determine ignition or use a CAN based logic
+ health->ignition_line_pkt = (uint8_t)(current_board->check_ignition());
+ health->ignition_can_pkt = (uint8_t)(ignition_can);
health->controls_allowed_pkt = controls_allowed;
health->gas_interceptor_detected_pkt = gas_interceptor_detected;
+ health->can_rx_errs_pkt = can_rx_errs;
health->can_send_errs_pkt = can_send_errs;
health->can_fwd_errs_pkt = can_fwd_errs;
health->gmlan_send_errs_pkt = gmlan_send_errs;
health->car_harness_status_pkt = car_harness_status;
-
+ health->usb_power_mode_pkt = usb_power_mode;
+ health->safety_mode_pkt = (uint8_t)(current_safety_mode);
+ health->power_save_enabled_pkt = (uint8_t)(power_save_status == POWER_SAVE_STATUS_ENABLED);
+
+ health->fault_status_pkt = fault_status;
+ health->faults_pkt = faults;
+
return sizeof(*health);
}
+int get_rtc_pkt(void *dat) {
+ timestamp_t t = rtc_get_time();
+ (void)memcpy(dat, &t, sizeof(t));
+ return sizeof(t);
+}
+
int usb_cb_ep1_in(void *usbdata, int len, bool hardwired) {
UNUSED(hardwired);
CAN_FIFOMailBox_TypeDef *reply = (CAN_FIFOMailBox_TypeDef *)usbdata;
@@ -223,7 +222,7 @@ void usb_cb_ep2_out(void *usbdata, int len, bool hardwired) {
uint8_t *usbdata8 = (uint8_t *)usbdata;
uart_ring *ur = get_ring_by_number(usbdata8[0]);
if ((len != 0) && (ur != NULL)) {
- if ((usbdata8[0] < 2U) || safety_tx_lin_hook(usbdata8[0] - 2U, usbdata8 + 1, len - 1)) {
+ if ((usbdata8[0] < 2U) || safety_tx_lin_hook(usbdata8[0] - 2U, &usbdata8[1], len - 1)) {
for (int i = 1; i < len; i++) {
while (!putc(ur, usbdata8[i])) {
// wait
@@ -246,7 +245,13 @@ void usb_cb_ep3_out(void *usbdata, int len, bool hardwired) {
to_push.RIR = d32[dpkt];
uint8_t bus_number = (to_push.RDTR >> 4) & CAN_BUS_NUM_MASK;
- can_send(&to_push, bus_number);
+ can_send(&to_push, bus_number, false);
+ }
+}
+
+void usb_cb_ep3_out_complete() {
+ if (can_tx_check_min_slots_free(MAX_CAN_MSGS_PER_BULK_TRANSFER)) {
+ usb_outep3_resume_if_paused();
}
}
@@ -258,8 +263,72 @@ void usb_cb_enumeration_complete() {
int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired) {
unsigned int resp_len = 0;
uart_ring *ur = NULL;
- int i;
+ timestamp_t t;
switch (setup->b.bRequest) {
+ // **** 0xa0: get rtc time
+ case 0xa0:
+ resp_len = get_rtc_pkt(resp);
+ break;
+ // **** 0xa1: set rtc year
+ case 0xa1:
+ t = rtc_get_time();
+ t.year = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xa2: set rtc month
+ case 0xa2:
+ t = rtc_get_time();
+ t.month = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xa3: set rtc day
+ case 0xa3:
+ t = rtc_get_time();
+ t.day = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xa4: set rtc weekday
+ case 0xa4:
+ t = rtc_get_time();
+ t.weekday = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xa5: set rtc hour
+ case 0xa5:
+ t = rtc_get_time();
+ t.hour = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xa6: set rtc minute
+ case 0xa6:
+ t = rtc_get_time();
+ t.minute = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xa7: set rtc second
+ case 0xa7:
+ t = rtc_get_time();
+ t.second = setup->b.wValue.w;
+ rtc_set_time(t);
+ break;
+ // **** 0xb0: set IR power
+ case 0xb0:
+ current_board->set_ir_power(setup->b.wValue.w);
+ break;
+ // **** 0xb1: set fan power
+ case 0xb1:
+ current_board->set_fan_power(setup->b.wValue.w);
+ break;
+ // **** 0xb2: get fan rpm
+ case 0xb2:
+ resp[0] = (fan_rpm & 0x00FFU);
+ resp[1] = ((fan_rpm & 0xFF00U) >> 8U);
+ resp_len = 2;
+ break;
+ // **** 0xb3: set phone power
+ case 0xb3:
+ current_board->set_phone_power(setup->b.wValue.w > 0U);
+ break;
// **** 0xc0: get CAN debug info
case 0xc0:
puts("can tx: "); puth(can_tx_cnt);
@@ -290,11 +359,14 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
// so it's blocked over wifi
switch (setup->b.wValue.w) {
case 0:
- if (hardwired) {
- puts("-> entering bootloader\n");
- enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
- NVIC_SystemReset();
- }
+ // only allow bootloader entry on debug builds
+ #ifdef ALLOW_DEBUG
+ if (hardwired) {
+ puts("-> entering bootloader\n");
+ enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
+ NVIC_SystemReset();
+ }
+ #endif
break;
case 1:
puts("-> entering softloader\n");
@@ -310,6 +382,24 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
case 0xd2:
resp_len = get_health_pkt(resp);
break;
+ // **** 0xd3: get first 64 bytes of signature
+ case 0xd3:
+ {
+ resp_len = 64;
+ char * code = (char*)_app_start;
+ int code_len = _app_start[0];
+ (void)memcpy(resp, &code[code_len], resp_len);
+ }
+ break;
+ // **** 0xd4: get second 64 bytes of signature
+ case 0xd4:
+ {
+ resp_len = 64;
+ char * code = (char*)_app_start;
+ int code_len = _app_start[0];
+ (void)memcpy(resp, &code[code_len + 64], resp_len);
+ }
+ break;
// **** 0xd6: get version
case 0xd6:
COMPILE_TIME_ASSERT(sizeof(gitversion) <= MAX_RESP_LEN);
@@ -323,35 +413,35 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
// **** 0xd9: set ESP power
case 0xd9:
if (setup->b.wValue.w == 1U) {
- current_board->set_esp_gps_mode(ESP_GPS_ENABLED);
+ current_board->set_gps_mode(GPS_ENABLED);
} else if (setup->b.wValue.w == 2U) {
- current_board->set_esp_gps_mode(ESP_GPS_BOOTMODE);
+ current_board->set_gps_mode(GPS_BOOTMODE);
} else {
- current_board->set_esp_gps_mode(ESP_GPS_DISABLED);
+ current_board->set_gps_mode(GPS_DISABLED);
}
break;
// **** 0xda: reset ESP, with optional boot mode
case 0xda:
- current_board->set_esp_gps_mode(ESP_GPS_DISABLED);
+ current_board->set_gps_mode(GPS_DISABLED);
delay(1000000);
if (setup->b.wValue.w == 1U) {
- current_board->set_esp_gps_mode(ESP_GPS_BOOTMODE);
+ current_board->set_gps_mode(GPS_BOOTMODE);
} else {
- current_board->set_esp_gps_mode(ESP_GPS_ENABLED);
+ current_board->set_gps_mode(GPS_ENABLED);
}
delay(1000000);
- current_board->set_esp_gps_mode(ESP_GPS_ENABLED);
+ current_board->set_gps_mode(GPS_ENABLED);
break;
// **** 0xdb: set GMLAN (white/grey) or OBD CAN (black) multiplexing mode
case 0xdb:
- if(hw_type == HW_TYPE_BLACK_PANDA){
+ if(board_has_obd()){
if (setup->b.wValue.w == 1U) {
// Enable OBD CAN
current_board->set_can_mode(CAN_MODE_OBD_CAN2);
} else {
// Disable OBD CAN
current_board->set_can_mode(CAN_MODE_NORMAL);
- }
+ }
} else {
if (setup->b.wValue.w == 1U) {
// GMLAN ON
@@ -367,12 +457,14 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
}
}
break;
-
+
// **** 0xdc: set safety mode
case 0xdc:
// Blocked over WiFi.
- // Allow NOOUTPUT and ELM security mode to be set over wifi.
- if (hardwired || (setup->b.wValue.w == SAFETY_NOOUTPUT) || (setup->b.wValue.w == SAFETY_ELM327)) {
+ // Allow SILENT, NOOUTPUT and ELM security mode to be set over wifi.
+ if (hardwired || (setup->b.wValue.w == SAFETY_SILENT) ||
+ (setup->b.wValue.w == SAFETY_NOOUTPUT) ||
+ (setup->b.wValue.w == SAFETY_ELM327)) {
set_safety_mode(setup->b.wValue.w, (uint16_t) setup->b.wIndex.w);
}
break;
@@ -394,12 +486,19 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
if (setup->b.wValue.w < BUS_MAX) {
can_speed[setup->b.wValue.w] = setup->b.wIndex.w;
can_init(CAN_NUM_FROM_BUS_NUM(setup->b.wValue.w));
+ /* Tesla branch commented out:
+ bool ret = can_init(CAN_NUM_FROM_BUS_NUM(setup->b.wValue.w));
+ UNUSED(ret);
}
break;
- // **** 0xdf: set long controls allowed
+ // **** 0xdf: set unsafe mode
case 0xdf:
- if (hardwired) {
- long_controls_allowed = setup->b.wValue.w & 1U;
+ // you can only set this if you are in a non car safety mode
+ if ((current_safety_mode == SAFETY_SILENT) ||
+ (current_safety_mode == SAFETY_NOOUTPUT) ||
+ (current_safety_mode == SAFETY_ELM327)) {
+ unsafe_mode = setup->b.wValue.w;
+ */
}
break;
// **** 0xe0: uart read
@@ -408,9 +507,12 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
if (!ur) {
break;
}
- if (ur == &esp_ring) {
- uart_dma_drain();
+
+ // TODO: Remove this again and fix boardd code to hande the message bursts instead of single chars
+ if (ur == &uart_ring_gps) {
+ dma_pointer_handler(ur, DMA2_Stream5->NDTR);
}
+
// read
while ((resp_len < MIN(setup->b.wLength.w, MAX_RESP_LEN)) &&
getc(ur, (char*)&resp[resp_len])) {
@@ -465,49 +567,21 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
break;
// **** 0xe6: set USB power
case 0xe6:
- if (setup->b.wValue.w == 1U) {
- puts("user setting CDP mode\n");
- current_board->set_usb_power_mode(USB_POWER_CDP);
- } else if (setup->b.wValue.w == 2U) {
- puts("user setting DCP mode\n");
- current_board->set_usb_power_mode(USB_POWER_DCP);
- } else {
- puts("user setting CLIENT mode\n");
- current_board->set_usb_power_mode(USB_POWER_CLIENT);
- }
+ current_board->set_usb_power_mode(setup->b.wValue.w);
+ break;
+ // **** 0xe7: set power save state
+ case 0xe7:
+ set_power_save_state(setup->b.wValue.w);
break;
- // **** 0xf0: do k-line wValue pulse on uart2 for Acura
+ // **** 0xf0: k-line/l-line wake-up pulse for KWP2000 fast initialization
case 0xf0:
- if (setup->b.wValue.w == 1U) {
- GPIOC->ODR &= ~(1U << 10);
- GPIOC->MODER &= ~GPIO_MODER_MODER10_1;
- GPIOC->MODER |= GPIO_MODER_MODER10_0;
- } else {
- GPIOC->ODR &= ~(1U << 12);
- GPIOC->MODER &= ~GPIO_MODER_MODER12_1;
- GPIOC->MODER |= GPIO_MODER_MODER12_0;
- }
-
- for (i = 0; i < 80; i++) {
- delay(8000);
- if (setup->b.wValue.w == 1U) {
- GPIOC->ODR |= (1U << 10);
- GPIOC->ODR &= ~(1U << 10);
- } else {
- GPIOC->ODR |= (1U << 12);
- GPIOC->ODR &= ~(1U << 12);
+ if(board_has_lin()) {
+ bool k = (setup->b.wValue.w == 0U) || (setup->b.wValue.w == 2U);
+ bool l = (setup->b.wValue.w == 1U) || (setup->b.wValue.w == 2U);
+ if (bitbang_wakeup(k, l)) {
+ resp_len = -1; // do not clear NAK yet (wait for bit banging to finish)
}
}
-
- if (setup->b.wValue.w == 1U) {
- GPIOC->MODER &= ~GPIO_MODER_MODER10_0;
- GPIOC->MODER |= GPIO_MODER_MODER10_1;
- } else {
- GPIOC->MODER &= ~GPIO_MODER_MODER12_0;
- GPIOC->MODER |= GPIO_MODER_MODER12_1;
- }
-
- delay(140 * 9000);
break;
// **** 0xf1: Clear CAN ring buffer.
case 0xf1:
@@ -537,6 +611,25 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
heartbeat_counter = 0U;
break;
}
+ // **** 0xf4: k-line/l-line 5 baud initialization
+ case 0xf4:
+ if(board_has_lin()) {
+ bool k = (setup->b.wValue.w == 0U) || (setup->b.wValue.w == 2U);
+ bool l = (setup->b.wValue.w == 1U) || (setup->b.wValue.w == 2U);
+ uint8_t five_baud_addr = (setup->b.wIndex.w & 0xFFU);
+ if (bitbang_five_baud_addr(k, l, five_baud_addr)) {
+ resp_len = -1; // do not clear NAK yet (wait for bit banging to finish)
+ }
+ }
+ break;
+ // **** 0xf5: set clock source mode
+ case 0xf5:
+ current_board->set_clock_source_mode(setup->b.wValue.w);
+ break;
+ // **** 0xf6: set siren enabled
+ case 0xf6:
+ siren_enabled = (setup->b.wValue.w != 0U);
+ break;
default:
puts("NO HANDLER ");
puth(setup->b.bRequest);
@@ -590,65 +683,118 @@ void __attribute__ ((noinline)) enable_fpu(void) {
SCB->CPACR |= ((3UL << (10U * 2U)) | (3UL << (11U * 2U)));
}
-uint64_t tcnt = 0;
+// go into SILENT when the EON does not send a heartbeat for this amount of seconds.
+#define EON_HEARTBEAT_IGNITION_CNT_ON 5U
+#define EON_HEARTBEAT_IGNITION_CNT_OFF 2U
-// go into NOOUTPUT when the EON does not send a heartbeat for this amount of seconds.
-#define EON_HEARTBEAT_THRESHOLD_IGNITION_ON 5U
-#define EON_HEARTBEAT_THRESHOLD_IGNITION_OFF 2U
+// called at 8Hz
+uint8_t loop_counter = 0U;
+void TIM1_BRK_TIM9_IRQ_Handler(void) {
+ if (TIM9->SR != 0) {
+ // siren
+ current_board->set_siren((loop_counter & 1U) && siren_enabled);
-// called once per second
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void TIM3_IRQHandler(void) {
- if (TIM3->SR != 0) {
- can_live = pending_can_live;
+ // decimated to 1Hz
+ if(loop_counter == 0U){
+ can_live = pending_can_live;
- current_board->usb_power_mode_tick(tcnt);
+ current_board->usb_power_mode_tick(uptime_cnt);
- //puth(usart1_dma); puts(" "); puth(DMA2_Stream5->M0AR); puts(" "); puth(DMA2_Stream5->NDTR); puts("\n");
+ //puth(usart1_dma); puts(" "); puth(DMA2_Stream5->M0AR); puts(" "); puth(DMA2_Stream5->NDTR); puts("\n");
- // reset this every 16th pass
- if ((tcnt & 0xFU) == 0U) {
- pending_can_live = 0;
- }
- #ifdef DEBUG
- //TODO: re-enable
- //puts("** blink ");
- //puth(can_rx_q.r_ptr); puts(" "); puth(can_rx_q.w_ptr); puts(" ");
- //puth(can_tx1_q.r_ptr); puts(" "); puth(can_tx1_q.w_ptr); puts(" ");
- //puth(can_tx2_q.r_ptr); puts(" "); puth(can_tx2_q.w_ptr); puts("\n");
- #endif
+ // reset this every 16th pass
+ if ((uptime_cnt & 0xFU) == 0U) {
+ pending_can_live = 0;
+ }
+ #ifdef DEBUG
+ puts("** blink ");
+ puth(can_rx_q.r_ptr); puts(" "); puth(can_rx_q.w_ptr); puts(" ");
+ puth(can_tx1_q.r_ptr); puts(" "); puth(can_tx1_q.w_ptr); puts(" ");
+ puth(can_tx2_q.r_ptr); puts(" "); puth(can_tx2_q.w_ptr); puts("\n");
+ #endif
+
+ // Tick drivers
+ fan_tick();
+
+ // set green LED to be controls allowed
+ current_board->set_led(LED_GREEN, controls_allowed);
+
+ // turn off the blue LED, turned on by CAN
+ // unless we are in power saving mode
+ current_board->set_led(LED_BLUE, (uptime_cnt & 1U) && (power_save_status == POWER_SAVE_STATUS_ENABLED));
+
+ // increase heartbeat counter and cap it at the uint32 limit
+ if (heartbeat_counter < __UINT32_MAX__) {
+ heartbeat_counter += 1U;
+ }
- // set green LED to be controls allowed
- current_board->set_led(LED_GREEN, controls_allowed);
+ //BB we do not want to disable safety mode when on tesla
+ /*
+ #ifdef EON
+ // check heartbeat counter if we are running EON code.
+ // if the heartbeat has been gone for a while, go to SILENT safety mode and enter power save
+ if (heartbeat_counter >= (check_started() ? EON_HEARTBEAT_IGNITION_CNT_ON : EON_HEARTBEAT_IGNITION_CNT_OFF)) {
+ puts("EON hasn't sent a heartbeat for 0x");
+ puth(heartbeat_counter);
+ puts(" seconds. Safety is set to SILENT mode.\n");
+ if (current_safety_mode != SAFETY_SILENT) {
+ set_safety_mode(SAFETY_SILENT, 0U);
+ }
+ if (power_save_status != POWER_SAVE_STATUS_ENABLED) {
+ set_power_save_state(POWER_SAVE_STATUS_ENABLED);
+ }
- // turn off the blue LED, turned on by CAN
- // unless we are in power saving mode
- current_board->set_led(LED_BLUE, (tcnt & 1U) && (power_save_status == POWER_SAVE_STATUS_ENABLED));
+ // Also disable IR when the heartbeat goes missing
+ current_board->set_ir_power(0U);
- // increase heartbeat counter and cap it at the uint32 limit
- if (heartbeat_counter < __UINT32_MAX__) {
- heartbeat_counter += 1U;
- }
+ // If enumerated but no heartbeat (phone up, boardd not running), turn the fan on to cool the device
+ if(usb_enumerated()){
+ current_board->set_fan_power(50U);
+ } else {
+ current_board->set_fan_power(0U);
+ }
+ }
- // check heartbeat counter if we are running EON code. If the heartbeat has been gone for a while, go to NOOUTPUT safety mode.
- //BB we do not want to disable safety mode when on tesla
- /*
- #ifdef EON
- if (heartbeat_counter >= (current_board->check_ignition() ? EON_HEARTBEAT_THRESHOLD_IGNITION_ON : EON_HEARTBEAT_THRESHOLD_IGNITION_OFF)) {
- puts("EON hasn't sent a heartbeat for 0x"); puth(heartbeat_counter); puts(" seconds. Safety is set to NOOUTPUT mode.\n");
- set_safety_mode(SAFETY_NOOUTPUT, 0U);
- }
- #endif
+ // enter CDP mode when car starts to ensure we are charging a turned off EON
+ if (check_started() && (usb_power_mode != USB_POWER_CDP)) {
+ current_board->set_usb_power_mode(USB_POWER_CDP);
+ }
+ #endif
*/
- // on to the next one
- tcnt += 1U;
+
+ // check registers
+ check_registers();
+
+ // set ignition_can to false after 2s of no CAN seen
+ if (ignition_can_cnt > 2U) {
+ ignition_can = false;
+ };
+
+ // on to the next one
+ uptime_cnt += 1U;
+ safety_mode_cnt += 1U;
+ ignition_can_cnt += 1U;
+
+ // synchronous safety check
+ safety_tick(current_hooks);
+ }
+
+ loop_counter++;
+ loop_counter %= 8U;
}
- TIM3->SR = 0;
+ TIM9->SR = 0;
}
+#define MAX_FADE 8192U
int main(void) {
+ // Init interrupt table
+ init_interrupts(true);
+
+ // 8Hz timer
+ REGISTER_INTERRUPT(TIM1_BRK_TIM9_IRQn, TIM1_BRK_TIM9_IRQ_Handler, 10U, FAULT_INTERRUPT_RATE_TIM9)
+
// shouldn't have interrupts here, but just in case
- __disable_irq();
+ disable_interrupts();
// init early devices
clock_init();
@@ -656,7 +802,7 @@ int main(void) {
detect_configuration();
detect_board_type();
adc_init();
-
+
// print hello
puts("\n\n\n************************ MAIN START ************************\n");
@@ -669,7 +815,6 @@ int main(void) {
puts("Config:\n");
puts(" Board type: "); puts(current_board->board_type); puts("\n");
puts(has_external_debug_serial ? " Real serial\n" : " USB serial\n");
- puts(is_entering_bootmode ? " ESP wants bootmode\n" : " No bootmode\n");
// init board
current_board->init();
@@ -681,22 +826,21 @@ int main(void) {
if (has_external_debug_serial) {
// WEIRDNESS: without this gate around the UART, it would "crash", but only if the ESP is enabled
// assuming it's because the lines were left floating and spurious noise was on them
- uart_init(USART2, 115200);
+ uart_init(&uart_ring_debug, 115200);
}
if (board_has_gps()) {
- uart_init(USART1, 9600);
+ uart_init(&uart_ring_gps, 9600);
} else {
// enable ESP uart
- uart_init(USART1, 115200);
+ uart_init(&uart_ring_gps, 115200);
}
- // there is no LIN on panda black
- if(hw_type != HW_TYPE_BLACK_PANDA){
+ if(board_has_lin()){
// enable LIN
- uart_init(UART5, 10400);
+ uart_init(&uart_ring_lin1, 10400);
UART5->CR2 |= USART_CR2_LINEN;
- uart_init(USART3, 10400);
+ uart_init(&uart_ring_lin2, 10400);
USART3->CR2 |= USART_CR2_LINEN;
}
@@ -708,41 +852,20 @@ int main(void) {
TIM2->EGR = TIM_EGR_UG;
// use TIM2->CNT to read
- // default to silent mode to prevent issues with Ford
- // hardcode a specific safety mode if you want to force the panda to be in a specific mode
- int err = safety_set_mode(SAFETY_NOOUTPUT, 0);
- if (err == -1) {
- puts("Failed to set safety mode\n");
- while (true) {
- // if SAFETY_NOOUTPUT isn't succesfully set, we can't continue
- }
- }
- can_silent = ALL_CAN_SILENT;
- can_init_all();
+ // init to SILENT and can silent
+ //set_safety_mode(SAFETY_SILENT, 0);
+ set_safety_mode2(SAFETY_TESLA, 0);
+
+ // enable CAN TXs
+ current_board->enable_can_transceivers(true);
#ifndef EON
spi_init();
#endif
-#ifdef EON
- // have to save power
- if (hw_type == HW_TYPE_WHITE_PANDA) {
- current_board->set_esp_gps_mode(ESP_GPS_DISABLED);
- }
- // only enter power save after the first cycle
- /*if (current_board->check_ignition()) {
- set_power_save_state(POWER_SAVE_STATUS_ENABLED);
- }*/
-
- if (hw_type != HW_TYPE_BLACK_PANDA) {
- // interrupt on started line
- started_interrupt_init();
- }
-#endif
-
- // 48mhz / 65536 ~= 732 / 732 = 1
- timer_init(TIM3, 732);
- NVIC_EnableIRQ(TIM3_IRQn);
+ // 8hz
+ timer_init(TIM9, 183);
+ NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
#ifdef DEBUG
puts("DEBUG ENABLED\n");
@@ -758,19 +881,34 @@ int main(void) {
for (cnt=0;;cnt++) {
if (power_save_status == POWER_SAVE_STATUS_DISABLED) {
- int div_mode = ((usb_power_mode == USB_POWER_DCP) ? 4 : 1);
-
- // useful for debugging, fade breaks = panda is overloaded
- for (int div_mode_loop = 0; div_mode_loop < div_mode; div_mode_loop++) {
- for (int fade = 0; fade < 1024; fade += 8) {
- for (int i = 0; i < (128/div_mode); i++) {
- current_board->set_led(LED_RED, 1);
- if (fade < 512) { delay(fade); } else { delay(1024-fade); }
- current_board->set_led(LED_RED, 0);
- if (fade < 512) { delay(512-fade); } else { delay(fade-512); }
- }
+ #ifdef DEBUG_FAULTS
+ if(fault_status == FAULT_STATUS_NONE){
+ #endif
+ uint32_t div_mode = ((usb_power_mode == USB_POWER_DCP) ? 4U : 1U);
+
+ // useful for debugging, fade breaks = panda is overloaded
+ for(uint32_t fade = 0U; fade < MAX_FADE; fade += div_mode){
+ current_board->set_led(LED_RED, true);
+ delay(fade >> 4);
+ current_board->set_led(LED_RED, false);
+ delay((MAX_FADE - fade) >> 4);
}
- }
+
+ for(uint32_t fade = MAX_FADE; fade > 0U; fade -= div_mode){
+ current_board->set_led(LED_RED, true);
+ delay(fade >> 4);
+ current_board->set_led(LED_RED, false);
+ delay((MAX_FADE - fade) >> 4);
+ }
+
+ #ifdef DEBUG_FAULTS
+ } else {
+ current_board->set_led(LED_RED, 1);
+ delay(512000U);
+ current_board->set_led(LED_RED, 0);
+ delay(512000U);
+ }
+ #endif
} else {
__WFI();
}
diff --git a/panda/board/main_declarations.h b/panda/board/main_declarations.h
index 8929e9ac0e0cd9..7fa2c4bbb3f8f9 100644
--- a/panda/board/main_declarations.h
+++ b/panda/board/main_declarations.h
@@ -11,4 +11,6 @@ void can_set_obd(uint8_t harness_orientation, bool obd);
uint8_t hw_type = 0;
const board *current_board;
bool is_enumerated = 0;
-uint32_t heartbeat_counter = 0;
\ No newline at end of file
+uint32_t heartbeat_counter = 0;
+uint32_t uptime_cnt = 0;
+bool siren_enabled = false;
diff --git a/panda/board/pedal/Makefile b/panda/board/pedal/Makefile
index 7ce6dd07684da5..e8d5c646836ce2 100644
--- a/panda/board/pedal/Makefile
+++ b/panda/board/pedal/Makefile
@@ -21,12 +21,16 @@ CFLAGS += "-DALLOW_DEBUG"
canflash: obj/$(PROJ_NAME).bin
../../tests/pedal/enter_canloader.py $<
+canflash2: obj/$(PROJ_NAME).bin
+ ../../tests/pedal/enter_canloader_can2.py $<
+
+
usbflash: obj/$(PROJ_NAME).bin
../../tests/pedal/enter_canloader.py; sleep 0.5
PYTHONPATH=../../ python -c "from python import Panda; p = [x for x in [Panda(x) for x in Panda.list()] if x.bootstub]; assert(len(p)==1); p[0].flash('obj/$(PROJ_NAME).bin', reconnect=False)"
recover: obj/bootstub.bin obj/$(PROJ_NAME).bin
- ../../tests/pedal/enter_canloader.py --recover; sleep 0.5
+ ../../tests/pedal/enter_canloader_tesla.py --recover; sleep 0.5
$(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08004000 -D obj/$(PROJ_NAME).bin
$(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08000000:leave -D obj/bootstub.bin
@@ -61,7 +65,7 @@ obj/$(PROJ_NAME).bin: obj/$(STARTUP_FILE).o obj/main.o
obj/bootstub.bin: obj/$(STARTUP_FILE).o obj/bootstub.o obj/sha.o obj/rsa.o
$(CC) $(CFLAGS) -o obj/bootstub.$(PROJ_NAME).elf $^
$(OBJCOPY) -v -O binary obj/bootstub.$(PROJ_NAME).elf $@
-
+
clean:
rm -f obj/*
diff --git a/panda/board/pedal/main.c b/panda/board/pedal/main.c
index 194370fa389ce1..932684eb54039a 100644
--- a/panda/board/pedal/main.c
+++ b/panda/board/pedal/main.c
@@ -3,7 +3,11 @@
#include "libc.h"
#include "main_declarations.h"
+#include "critical.h"
+#include "faults.h"
+#include "drivers/registers.h"
+#include "drivers/interrupts.h"
#include "drivers/llcan.h"
#include "drivers/llgpio.h"
#include "drivers/adc.h"
@@ -15,6 +19,7 @@
#include "drivers/timer.h"
#include "gpio.h"
+#include "crc.h"
#define CAN CAN1
@@ -55,22 +60,23 @@ void debug_ring_callback(uart_ring *ring) {
}
}
-int usb_cb_ep1_in(uint8_t *usbdata, int len, bool hardwired) {
+int usb_cb_ep1_in(void *usbdata, int len, bool hardwired) {
UNUSED(usbdata);
UNUSED(len);
UNUSED(hardwired);
return 0;
}
-void usb_cb_ep2_out(uint8_t *usbdata, int len, bool hardwired) {
+void usb_cb_ep2_out(void *usbdata, int len, bool hardwired) {
UNUSED(usbdata);
UNUSED(len);
UNUSED(hardwired);
}
-void usb_cb_ep3_out(uint8_t *usbdata, int len, bool hardwired) {
+void usb_cb_ep3_out(void *usbdata, int len, bool hardwired) {
UNUSED(usbdata);
UNUSED(len);
UNUSED(hardwired);
}
+void usb_cb_ep3_out_complete(void) {}
void usb_cb_enumeration_complete(void) {}
int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired) {
@@ -84,9 +90,6 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
if (!ur) {
break;
}
- if (ur == &esp_ring) {
- uart_dma_drain();
- }
// read
while ((resp_len < MIN(setup->b.wLength.w, MAX_RESP_LEN)) &&
getc(ur, (char*)&resp[resp_len])) {
@@ -106,34 +109,27 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
// ***************************** pedal can checksum *****************************
-uint8_t pedal_checksum(uint8_t *dat, int len) {
- uint8_t crc = 0xFF;
- uint8_t poly = 0xD5; // standard crc8
- int i, j;
- for (i = len - 1; i >= 0; i--) {
- crc ^= dat[i];
- for (j = 0; j < 8; j++) {
- if ((crc & 0x80U) != 0U) {
- crc = (uint8_t)((crc << 1) ^ poly);
- }
- else {
- crc <<= 1;
- }
- }
+
+// ***************************** tesla can checksum *****************************
+uint8_t tesla_can_cksum(uint8_t *dat, int len, int addr) {
+ int i;
+ uint8_t s = 0;
+ s += ((addr)&0xFF) + ((addr>>8)&0xFF);
+ for (i = 0; i < len; i++) {
+ s = (s + dat[i]) & 0xFF;
}
- return crc;
+ return s;
}
// ***************************** can port *****************************
// addresses to be used on CAN
-#define CAN_GAS_INPUT 0x200
-#define CAN_GAS_OUTPUT 0x201U
+#define CAN_GAS_INPUT 0x551U
+#define CAN_GAS_OUTPUT 0x552U
#define CAN_GAS_SIZE 6
#define COUNTER_CYCLE 0xFU
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void CAN1_TX_IRQHandler(void) {
+void CAN1_TX_IRQ_Handler(void) {
// clear interrupt
CAN->TSR |= CAN_TSR_RQCP0;
}
@@ -155,8 +151,9 @@ uint32_t current_index = 0;
#define FAULT_INVALID 6U
uint8_t state = FAULT_STARTUP;
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void CAN1_RX0_IRQHandler(void) {
+const uint8_t crc_poly = 0xD5; // standard crc8
+
+void CAN1_RX0_IRQ_Handler(void) {
while ((CAN->RF0R & CAN_RF0R_FMP0) != 0) {
#ifdef DEBUG
puts("CAN RX\n");
@@ -174,6 +171,7 @@ void CAN1_RX0_IRQHandler(void) {
} else {
puts("Failed entering Softloader or Bootloader\n");
}
+ return;
}
// normal packet
@@ -185,7 +183,7 @@ void CAN1_RX0_IRQHandler(void) {
uint16_t value_1 = (dat[2] << 8) | dat[3];
bool enable = ((dat[4] >> 7) & 1U) != 0U;
uint8_t index = dat[4] & COUNTER_CYCLE;
- if (pedal_checksum(dat, CAN_GAS_SIZE - 1) == dat[5]) {
+ if (tesla_can_cksum(dat, CAN_GAS_SIZE - 1,CAN_GAS_INPUT) == dat[5]) {
if (((current_index + 1U) & COUNTER_CYCLE) == index) {
#ifdef DEBUG
puts("setting gas ");
@@ -219,8 +217,7 @@ void CAN1_RX0_IRQHandler(void) {
}
}
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void CAN1_SCE_IRQHandler(void) {
+void CAN1_SCE_IRQ_Handler(void) {
state = FAULT_SCE;
llcan_clear_send(CAN);
}
@@ -231,8 +228,7 @@ unsigned int pkt_idx = 0;
int led_value = 0;
-// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
-void TIM3_IRQHandler(void) {
+void TIM3_IRQ_Handler(void) {
#ifdef DEBUG
puth(TIM3->CNT);
puts(" ");
@@ -250,7 +246,7 @@ void TIM3_IRQHandler(void) {
dat[2] = (pdl1 >> 8) & 0xFFU;
dat[3] = (pdl1 >> 0) & 0xFFU;
dat[4] = ((state & 0xFU) << 4) | pkt_idx;
- dat[5] = pedal_checksum(dat, CAN_GAS_SIZE - 1);
+ dat[5] = tesla_can_cksum(dat, CAN_GAS_SIZE - 1,CAN_GAS_OUTPUT);
CAN->sTxMailBox[0].TDLR = dat[0] | (dat[1] << 8) | (dat[2] << 16) | (dat[3] << 24);
CAN->sTxMailBox[0].TDHR = dat[4] | (dat[5] << 8);
CAN->sTxMailBox[0].TDTR = 6; // len of packet is 5
@@ -288,8 +284,16 @@ void pedal(void) {
// write the pedal to the DAC
if (state == NO_FAULT) {
- dac_set(0, MAX(gas_set_0, pdl0));
- dac_set(1, MAX(gas_set_1, pdl1));
+ if (pdl0 > 500) {
+ dac_set(0, MAX(gas_set_0, pdl0));
+ dac_set(1, MAX(gas_set_1, pdl1));
+ } else if (gas_set_0 > 0) {
+ dac_set(0, gas_set_0);
+ dac_set(1, gas_set_1);
+ } else {
+ dac_set(0, pdl0);
+ dac_set(1, pdl1);
+ }
} else {
dac_set(0, pdl0);
dac_set(1, pdl1);
@@ -299,7 +303,17 @@ void pedal(void) {
}
int main(void) {
- __disable_irq();
+ // Init interrupt table
+ init_interrupts(true);
+
+ REGISTER_INTERRUPT(CAN1_TX_IRQn, CAN1_TX_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN1_RX0_IRQn, CAN1_RX0_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN1_SCE_IRQn, CAN1_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+
+ // Should run at around 732Hz (see init below)
+ REGISTER_INTERRUPT(TIM3_IRQn, TIM3_IRQ_Handler, 1000U, FAULT_INTERRUPT_RATE_TIM3)
+
+ disable_interrupts();
// init devices
clock_init();
@@ -307,6 +321,9 @@ int main(void) {
detect_configuration();
detect_board_type();
+ // init board
+ current_board->init();
+
#ifdef PEDAL_USB
// enable USB
usb_init();
@@ -322,7 +339,8 @@ int main(void) {
puts("Failed to set llcan speed");
}
- llcan_init(CAN1);
+ bool ret = llcan_init(CAN1);
+ UNUSED(ret);
// 48mhz / 65536 ~= 732
timer_init(TIM3, 15);
@@ -331,7 +349,7 @@ int main(void) {
watchdog_init();
puts("**** INTERRUPTS ON ****\n");
- __enable_irq();
+ enable_interrupts();
// main pedal loop
while (1) {
diff --git a/panda/board/pedal_tesla/Makefile b/panda/board/pedal_tesla/Makefile
index c49f7aa33aa44a..938d57426a0ca0 100644
--- a/panda/board/pedal_tesla/Makefile
+++ b/panda/board/pedal_tesla/Makefile
@@ -1,5 +1,8 @@
# :set noet
PROJ_NAME = comma
+OUT = obj
+
+
CFLAGS = -O2 -Wall -std=gnu11 -DPEDAL
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m3
@@ -17,51 +20,66 @@ DFU_UTIL = "dfu-util"
# pedal only uses the debug cert
CERT = ../../certs/debug
CFLAGS += "-DALLOW_DEBUG"
+$(shell mkdir -p $(OUT))
+$(shell tmux kill-session -t comma)
-canflash: obj/$(PROJ_NAME).bin
- ../../tests/pedal/enter_canloader_tesla.py $<
+canflash: $(OUT)/$(PROJ_NAME).bin
+ ../../tests/pedal/enter_canloader.py $<
-usbflash: obj/$(PROJ_NAME).bin
+usbflash: $(OUT)/$(PROJ_NAME).bin
../../tests/pedal/enter_canloader_tesla.py; sleep 0.5
- PYTHONPATH=../../ python -c "from python import Panda; p = [x for x in [Panda(x) for x in Panda.list()] if x.bootstub]; assert(len(p)==1); p[0].flash('obj/$(PROJ_NAME).bin', reconnect=False)"
+ PYTHONPATH=../../ python -c "from python import Panda; p = [x for x in [Panda(x) for x in Panda.list()] if x.bootstub]; assert(len(p)==1); p[0].flash('$(OUT)/$(PROJ_NAME).bin', reconnect=False)"
-recover: obj/bootstub.bin obj/$(PROJ_NAME).bin
+recover: $(OUT)/bootstub.bin $(OUT)/$(PROJ_NAME).bin
../../tests/pedal/enter_canloader_tesla.py --recover; sleep 0.5
- $(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08004000 -D obj/$(PROJ_NAME).bin
- $(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08000000:leave -D obj/bootstub.bin
+ $(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08004000 -D $(OUT)/$(PROJ_NAME).bin
+ $(DFU_UTIL) -d 0483:df11 -a 0 -s 0x08000000:leave -D $(OUT)/bootstub.bin
+
+tesla: $(OUT)/$(PROJ_NAME).bin
+ ../../tests/pedal/enter_canloader_tesla.py $<
+
+can2: $(OUT)/$(PROJ_NAME).bin
+ ../../tests/pedal/enter_canloader_can2.py $<
+
+tesla2: $(OUT)/$(PROJ_NAME).bin
+ ../../tests/pedal/enter_canloader_tesla2.py $<
+
include ../../common/version.mk
-obj/cert.h: ../../crypto/getcertheader.py
+
+$(OUT)/cert.h: ../../crypto/getcertheader.py
../../crypto/getcertheader.py ../../certs/debug.pub ../../certs/release.pub > $@
-obj/main.o: main.c ../*.h
- mkdir -p obj
+$(OUT)/main.o: main.c ../*.h
+ mkdir -p $(OUT)
$(CC) $(CFLAGS) -o $@ -c $<
-obj/bootstub.o: ../bootstub.c ../*.h obj/gitversion.h obj/cert.h
- mkdir -p obj
- mkdir -p ../obj
- cp obj/gitversion.h ../obj/gitversion.h
- cp obj/cert.h ../obj/cert.h
+$(OUT)/bootstub.o: ../bootstub.c ../*.h $(OUT)/gitversion.h $(OUT)/cert.h
+ mkdir -p $(OUT)
+ mkdir -p ../$(OUT)
+ cp $(OUT)/gitversion.h ../$(OUT)/gitversion.h
+ cp $(OUT)/cert.h ../$(OUT)/cert.h
$(CC) $(CFLAGS) -o $@ -c $<
-obj/$(STARTUP_FILE).o: ../$(STARTUP_FILE).s
+$(OUT)/$(STARTUP_FILE).o: ../$(STARTUP_FILE).s
$(CC) $(CFLAGS) -o $@ -c $<
-obj/%.o: ../../crypto/%.c
+$(OUT)/%.o: ../../crypto/%.c
$(CC) $(CFLAGS) -o $@ -c $<
-obj/$(PROJ_NAME).bin: obj/$(STARTUP_FILE).o obj/main.o
+$(OUT)/$(PROJ_NAME).bin: $(OUT)/$(STARTUP_FILE).o $(OUT)/main.o
# hack
- $(CC) -Wl,--section-start,.isr_vector=0x8004000 $(CFLAGS) -o obj/$(PROJ_NAME).elf $^
- $(OBJCOPY) -v -O binary obj/$(PROJ_NAME).elf obj/code.bin
- SETLEN=1 ../../crypto/sign.py obj/code.bin $@ $(CERT)
+ $(CC) -Wl,--section-start,.isr_vector=0x8004000 $(CFLAGS) -o $(OUT)/$(PROJ_NAME).elf $^
+ $(OBJCOPY) -v -O binary $(OUT)/$(PROJ_NAME).elf $(OUT)/code.bin
+ SETLEN=1 ../../crypto/sign.py $(OUT)/code.bin $@ $(CERT)
+
+$(OUT)/bootstub.bin: $(OUT)/$(STARTUP_FILE).o $(OUT)/bootstub.o $(OUT)/sha.o $(OUT)/rsa.o
+ $(CC) $(CFLAGS) -o $(OUT)/bootstub.$(PROJ_NAME).elf $^
+ $(OBJCOPY) -v -O binary $(OUT)/bootstub.$(PROJ_NAME).elf $@
+
-obj/bootstub.bin: obj/$(STARTUP_FILE).o obj/bootstub.o obj/sha.o obj/rsa.o
- $(CC) $(CFLAGS) -o obj/bootstub.$(PROJ_NAME).elf $^
- $(OBJCOPY) -v -O binary obj/bootstub.$(PROJ_NAME).elf $@
clean:
- rm -f obj/*
+ rm -f $(OUT)/*
diff --git a/panda/board/pedal_tesla/main.c b/panda/board/pedal_tesla/main.c
index d211d439e6bef9..5c7f4ba0402b08 100644
--- a/panda/board/pedal_tesla/main.c
+++ b/panda/board/pedal_tesla/main.c
@@ -1,95 +1,150 @@
-//#define DEBUG
-//#define CAN_LOOPBACK_MODE
-//#define USE_INTERNAL_OSC
-
+// ********************* Includes *********************
#include "../config.h"
+#include "libc.h"
+
+#include "main_declarations.h"
-//#include "drivers/drivers.h"
+#include "drivers/llcan.h"
#include "drivers/llgpio.h"
-#include "gpio.h"
+#include "drivers/adc.h"
-#define CUSTOM_CAN_INTERRUPTS
+#include "board.h"
-#include "libc.h"
-#include "safety.h"
-#include "drivers/adc.h"
-#include "drivers/uart.h"
+#include "drivers/clock.h"
#include "drivers/dac.h"
-#include "drivers/can.h"
#include "drivers/timer.h"
+#include "gpio.h"
+
#define CAN CAN1
//#define PEDAL_USB
#ifdef PEDAL_USB
+ #include "drivers/uart.h"
#include "drivers/usb.h"
+#else
+ // no serial either
+ void puts(const char *a) {
+ UNUSED(a);
+ }
+ void puth(unsigned int i) {
+ UNUSED(i);
+ }
+ void puth2(unsigned int i) {
+ UNUSED(i);
+ }
#endif
#define ENTER_BOOTLOADER_MAGIC 0xdeadbeef
uint32_t enter_bootloader_mode;
-void __initialize_hardware_early() {
+// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
+void __initialize_hardware_early(void) {
early();
}
// ********************* serial debugging *********************
+#ifdef PEDAL_USB
+
void debug_ring_callback(uart_ring *ring) {
char rcv;
- while (getc(ring, &rcv)) {
- putc(ring, rcv);
+ while (getc(ring, &rcv) != 0) {
+ (void)putc(ring, rcv);
}
}
-#ifdef PEDAL_USB
-
-int usb_cb_ep1_in(uint8_t *usbdata, int len, int hardwired) { return 0; }
-void usb_cb_ep2_out(uint8_t *usbdata, int len, int hardwired) {}
-void usb_cb_ep3_out(uint8_t *usbdata, int len, int hardwired) {}
-void usb_cb_enumeration_complete() {}
+int usb_cb_ep1_in(uint8_t *usbdata, int len, bool hardwired) {
+ UNUSED(usbdata);
+ UNUSED(len);
+ UNUSED(hardwired);
+ return 0;
+}
+void usb_cb_ep2_out(uint8_t *usbdata, int len, bool hardwired) {
+ UNUSED(usbdata);
+ UNUSED(len);
+ UNUSED(hardwired);
+}
+void usb_cb_ep3_out(uint8_t *usbdata, int len, bool hardwired) {
+ UNUSED(usbdata);
+ UNUSED(len);
+ UNUSED(hardwired);
+}
+void usb_cb_enumeration_complete(void) {}
-int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, int hardwired) {
- int resp_len = 0;
+int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired) {
+ UNUSED(hardwired);
+ unsigned int resp_len = 0;
uart_ring *ur = NULL;
switch (setup->b.bRequest) {
// **** 0xe0: uart read
case 0xe0:
ur = get_ring_by_number(setup->b.wValue.w);
- if (!ur) break;
- if (ur == &esp_ring) uart_dma_drain();
+ if (!ur) {
+ break;
+ }
+ if (ur == &esp_ring) {
+ uart_dma_drain();
+ }
// read
- while ((resp_len < min(setup->b.wLength.w, MAX_RESP_LEN)) &&
+ while ((resp_len < MIN(setup->b.wLength.w, MAX_RESP_LEN)) &&
getc(ur, (char*)&resp[resp_len])) {
++resp_len;
}
break;
+ default:
+ puts("NO HANDLER ");
+ puth(setup->b.bRequest);
+ puts("\n");
+ break;
}
return resp_len;
}
#endif
-// ***************************** tesla pedal checksum *****************************
-int can_cksum(uint8_t *dat, int len, int addr) {
+// ***************************** pedal can checksum *****************************
+
+uint8_t pedal_checksum(uint8_t *dat, int len) {
+ uint8_t crc = 0xFF;
+ uint8_t poly = 0xD5; // standard crc8
+ int i, j;
+ for (i = len - 1; i >= 0; i--) {
+ crc ^= dat[i];
+ for (j = 0; j < 8; j++) {
+ if ((crc & 0x80U) != 0U) {
+ crc = (uint8_t)((crc << 1) ^ poly);
+ }
+ else {
+ crc <<= 1;
+ }
+ }
+ }
+ return crc;
+}
+
+// ***************************** tesla can checksum *****************************
+uint8_t tesla_can_cksum(uint8_t *dat, int len, int addr) {
int i;
- int s = 0;
+ uint8_t s = 0;
s += ((addr)&0xFF) + ((addr>>8)&0xFF);
for (i = 0; i < len; i++) {
s = (s + dat[i]) & 0xFF;
- }
- return s;
+ }
+ return s;
}
// ***************************** can port *****************************
// addresses to be used on CAN
-#define CAN_GAS_INPUT 0x551
-#define CAN_GAS_OUTPUT 0x552
+#define CAN_GAS_INPUT 0x551U
+#define CAN_GAS_OUTPUT 0x552U
#define CAN_GAS_SIZE 6
-#define COUNTER_CYCLE 0xF
+#define COUNTER_CYCLE 0xFU
-void CAN1_TX_IRQHandler() {
+// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
+void CAN1_TX_IRQHandler(void) {
// clear interrupt
CAN->TSR |= CAN_TSR_RQCP0;
}
@@ -98,49 +153,54 @@ void CAN1_TX_IRQHandler() {
uint16_t gas_set_0 = 0;
uint16_t gas_set_1 = 0;
-#define MAX_TIMEOUT 10
+#define MAX_TIMEOUT 10U
uint32_t timeout = 0;
uint32_t current_index = 0;
-#define NO_FAULT 0
-#define FAULT_BAD_CHECKSUM 1
-#define FAULT_SEND 2
-#define FAULT_SCE 3
-#define FAULT_STARTUP 4
-#define FAULT_TIMEOUT 5
-#define FAULT_INVALID 6
+#define NO_FAULT 0U
+#define FAULT_BAD_CHECKSUM 1U
+#define FAULT_SEND 2U
+#define FAULT_SCE 3U
+#define FAULT_STARTUP 4U
+#define FAULT_TIMEOUT 5U
+#define FAULT_INVALID 6U
uint8_t state = FAULT_STARTUP;
-void CAN1_RX0_IRQHandler() {
- while (CAN->RF0R & CAN_RF0R_FMP0) {
+// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
+void CAN1_RX0_IRQHandler(void) {
+ while ((CAN->RF0R & CAN_RF0R_FMP0) != 0) {
#ifdef DEBUG
puts("CAN RX\n");
#endif
- uint32_t address = CAN->sFIFOMailBox[0].RIR>>21;
+ int address = CAN->sFIFOMailBox[0].RIR >> 21;
if (address == CAN_GAS_INPUT) {
// softloader entry
- if (CAN->sFIFOMailBox[0].RDLR == 0xdeadface) {
- if (CAN->sFIFOMailBox[0].RDHR == 0x0ab00b1e) {
+ if (GET_BYTES_04(&CAN->sFIFOMailBox[0]) == 0xdeadface) {
+ if (GET_BYTES_48(&CAN->sFIFOMailBox[0]) == 0x0ab00b1e) {
enter_bootloader_mode = ENTER_SOFTLOADER_MAGIC;
NVIC_SystemReset();
- } else if (CAN->sFIFOMailBox[0].RDHR == 0x02b00b1e) {
+ } else if (GET_BYTES_48(&CAN->sFIFOMailBox[0]) == 0x02b00b1e) {
enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
NVIC_SystemReset();
+ } else {
+ puts("Failed entering Softloader or Bootloader\n");
}
}
// normal packet
- uint8_t *dat = (uint8_t *)&CAN->sFIFOMailBox[0].RDLR;
- uint8_t *dat2 = (uint8_t *)&CAN->sFIFOMailBox[0].RDHR;
+ uint8_t dat[8];
+ for (int i=0; i<8; i++) {
+ dat[i] = GET_BYTE(&CAN->sFIFOMailBox[0], i);
+ }
uint16_t value_0 = (dat[0] << 8) | dat[1];
uint16_t value_1 = (dat[2] << 8) | dat[3];
- uint8_t enable = (dat2[0] >> 7) & 1;
- uint8_t index = (dat2[0] ) & 0xF;
- if (can_cksum(dat, 5, CAN_GAS_INPUT) == (dat2[1] & 0xFF)) {
- if (((current_index+1)&0xF) == index) {
+ bool enable = ((dat[4] >> 7) & 1U) != 0U;
+ uint8_t index = dat[4] & COUNTER_CYCLE;
+ if (tesla_can_cksum(dat, CAN_GAS_SIZE - 1,CAN_GAS_INPUT) == dat[5]) {
+ if (((current_index + 1U) & COUNTER_CYCLE) == index) {
#ifdef DEBUG
puts("setting gas ");
- puth(value);
+ puth(value_0);
puts("\n");
#endif
if (enable) {
@@ -148,12 +208,13 @@ void CAN1_RX0_IRQHandler() {
gas_set_1 = value_1;
} else {
// clear the fault state if values are 0
- if (value_0 == 0 && value_1 == 0) {
+ if ((value_0 == 0U) && (value_1 == 0U)) {
state = NO_FAULT;
} else {
state = FAULT_INVALID;
}
- gas_set_0 = gas_set_1 = 0;
+ gas_set_0 = 0;
+ gas_set_1 = 0;
}
// clear the timeout
timeout = 0;
@@ -169,17 +230,20 @@ void CAN1_RX0_IRQHandler() {
}
}
-void CAN1_SCE_IRQHandler() {
+// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
+void CAN1_SCE_IRQHandler(void) {
state = FAULT_SCE;
- can_sce(CAN);
+ llcan_clear_send(CAN);
}
-int pdl0 = 0, pdl1 = 0;
-int pkt_idx = 0;
+uint32_t pdl0 = 0;
+uint32_t pdl1 = 0;
+unsigned int pkt_idx = 0;
int led_value = 0;
-void TIM3_IRQHandler() {
+// cppcheck-suppress unusedFunction ; used in headers not included in cppcheck
+void TIM3_IRQHandler(void) {
#ifdef DEBUG
puth(TIM3->CNT);
puts(" ");
@@ -192,18 +256,18 @@ void TIM3_IRQHandler() {
// check timer for sending the user pedal and clearing the CAN
if ((CAN->TSR & CAN_TSR_TME0) == CAN_TSR_TME0) {
uint8_t dat[8];
- dat[0] = (pdl0>>8)&0xFF;
- dat[1] = (pdl0>>0)&0xFF;
- dat[2] = (pdl1>>8)&0xFF;
- dat[3] = (pdl1>>0)&0xFF;
- dat[4] = ((state<<0) | (pkt_idx<<4))&0xFF;
- dat[5] = can_cksum(dat, 5, CAN_GAS_OUTPUT);
- CAN->sTxMailBox[0].TDLR = dat[0] | (dat[1]<<8) | (dat[2]<<16) | (dat[3]<<24);
- CAN->sTxMailBox[0].TDHR = dat[4] | (dat[5]<<8);
+ dat[0] = (pdl0 >> 8) & 0xFFU;
+ dat[1] = (pdl0 >> 0) & 0xFFU;
+ dat[2] = (pdl1 >> 8) & 0xFFU;
+ dat[3] = (pdl1 >> 0) & 0xFFU;
+ dat[4] = ((state & 0xFU) << 4) | pkt_idx;
+ dat[5] = tesla_can_cksum(dat, CAN_GAS_SIZE - 1,CAN_GAS_OUTPUT);
+ CAN->sTxMailBox[0].TDLR = dat[0] | (dat[1] << 8) | (dat[2] << 16) | (dat[3] << 24);
+ CAN->sTxMailBox[0].TDHR = dat[4] | (dat[5] << 8);
CAN->sTxMailBox[0].TDTR = 6; // len of packet is 5
- CAN->sTxMailBox[0].TIR = (CAN_GAS_OUTPUT << 21) | 1;
+ CAN->sTxMailBox[0].TIR = (CAN_GAS_OUTPUT << 21) | 1U;
++pkt_idx;
- pkt_idx &= 0xF;
+ pkt_idx &= COUNTER_CYCLE;
} else {
// old can packet hasn't sent!
state = FAULT_SEND;
@@ -213,7 +277,7 @@ void TIM3_IRQHandler() {
}
// blink the LED
- set_led(LED_GREEN, led_value);
+ current_board->set_led(LED_GREEN, led_value);
led_value = !led_value;
TIM3->SR = 0;
@@ -222,13 +286,13 @@ void TIM3_IRQHandler() {
if (timeout == MAX_TIMEOUT) {
state = FAULT_TIMEOUT;
} else {
- timeout += 1;
+ timeout += 1U;
}
}
// ***************************** main code *****************************
-void pedal() {
+void pedal(void) {
// read/write
pdl0 = adc_get(ADCCHAN_ACCEL0);
pdl1 = adc_get(ADCCHAN_ACCEL1);
@@ -236,8 +300,8 @@ void pedal() {
// write the pedal to the DAC
if (state == NO_FAULT) {
if (pdl0 > 500) {
- dac_set(0, max(gas_set_0, pdl0));
- dac_set(1, max(gas_set_1, pdl1));
+ dac_set(0, MAX(gas_set_0, pdl0));
+ dac_set(1, MAX(gas_set_1, pdl1));
} else if (gas_set_0 > 0) {
dac_set(0, gas_set_0);
dac_set(1, gas_set_1);
@@ -250,17 +314,17 @@ void pedal() {
dac_set(1, pdl1);
}
- // feed the watchdog
- IWDG->KR = 0xAAAA;
+ watchdog_feed();
}
-int main() {
+int main(void) {
__disable_irq();
// init devices
clock_init();
- periph_init();
- gpio_init();
+ peripherals_init();
+ detect_configuration();
+ detect_board_type();
#ifdef PEDAL_USB
// enable USB
@@ -272,19 +336,18 @@ int main() {
adc_init();
// init can
- can_silent = ALL_CAN_LIVE;
- can_init(0);
+ bool llcan_speed_set = llcan_set_speed(CAN1, 5000, false, false);
+ if (!llcan_speed_set) {
+ puts("Failed to set llcan speed");
+ }
+
+ llcan_init(CAN1);
// 48mhz / 65536 ~= 732
timer_init(TIM3, 15);
NVIC_EnableIRQ(TIM3_IRQn);
- // setup watchdog
- IWDG->KR = 0x5555;
- IWDG->PR = 0; // divider /4
- // 0 = 0.125 ms, let's have a 50ms watchdog
- IWDG->RLR = 400 - 1;
- IWDG->KR = 0xCCCC;
+ watchdog_init();
puts("**** INTERRUPTS ON ****\n");
__enable_irq();
@@ -296,4 +359,3 @@ int main() {
return 0;
}
-
diff --git a/panda/board/pedal_tesla/main_declarations.h b/panda/board/pedal_tesla/main_declarations.h
new file mode 100644
index 00000000000000..9a40f8ae3af447
--- /dev/null
+++ b/panda/board/pedal_tesla/main_declarations.h
@@ -0,0 +1,11 @@
+// ******************** Prototypes ********************
+void puts(const char *a);
+void puth(unsigned int i);
+void puth2(unsigned int i);
+typedef struct board board;
+typedef struct harness_configuration harness_configuration;
+
+// ********************* Globals **********************
+uint8_t hw_type = 0;
+const board *current_board;
+bool is_enumerated = 0;
\ No newline at end of file
diff --git a/panda/board/power_saving.h b/panda/board/power_saving.h
index 94ebbb53cf9a0a..9805411470ec69 100644
--- a/panda/board/power_saving.h
+++ b/panda/board/power_saving.h
@@ -1,4 +1,7 @@
-#define POWER_SAVE_STATUS_DISABLED 0
+// WARNING: To stay in compliance with the SIL2 rules laid out in STM UM1840, we should never implement any of the available hardware low power modes.
+// See rule: CoU_3
+
+#define POWER_SAVE_STATUS_DISABLED 1
#define POWER_SAVE_STATUS_ENABLED 1
int power_save_status = POWER_SAVE_STATUS_DISABLED;
@@ -25,19 +28,32 @@ void set_power_save_state(int state) {
enable = true;
}
- // Switch CAN transcievers
- current_board->enable_can_transcievers(enable);
+ current_board->enable_can_transceivers(enable);
+
+ // Switch EPS/GPS
+ if (enable) {
+ current_board->set_gps_mode(GPS_ENABLED);
+ } else {
+ current_board->set_gps_mode(GPS_DISABLED);
+ }
- if(hw_type != HW_TYPE_BLACK_PANDA){
+ if(board_has_gmlan()){
// turn on GMLAN
set_gpio_output(GPIOB, 14, enable);
set_gpio_output(GPIOB, 15, enable);
+ }
- // turn on LIN
+ if(board_has_lin()){
+ // turn on LIN
set_gpio_output(GPIOB, 7, enable);
set_gpio_output(GPIOA, 14, enable);
}
+ // Switch off IR when in power saving
+ if(!enable){
+ current_board->set_ir_power(0U);
+ }
+
power_save_status = state;
}
}
diff --git a/panda/board/provision.h b/panda/board/provision.h
index 9091322f1a1091..0b09d8ff8be337 100644
--- a/panda/board/provision.h
+++ b/panda/board/provision.h
@@ -11,3 +11,9 @@ void get_provision_chunk(uint8_t *resp) {
}
}
+uint8_t chunk[PROVISION_CHUNK_LEN];
+bool is_provisioned(void) {
+ (void)memcpy(chunk, (uint8_t *)0x1fff79e0, PROVISION_CHUNK_LEN);
+ return (memcmp(chunk, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", 0x20) != 0);
+}
+
diff --git a/panda/board/safety.h b/panda/board/safety.h
index d56f640a3e00b4..5ec8a639cdecd5 100644
--- a/panda/board/safety.h
+++ b/panda/board/safety.h
@@ -4,21 +4,47 @@
#include "safety/safety_defaults.h"
#include "safety/safety_honda.h"
#include "safety/safety_toyota.h"
-#include "safety/safety_toyota_ipas.h"
#include "safety/safety_tesla.h"
#include "safety/safety_gm_ascm.h"
#include "safety/safety_gm.h"
#include "safety/safety_ford.h"
-#include "safety/safety_cadillac.h"
#include "safety/safety_hyundai.h"
#include "safety/safety_chrysler.h"
#include "safety/safety_subaru.h"
+#include "safety/safety_mazda.h"
+#include "safety/safety_nissan.h"
+#include "safety/safety_volkswagen.h"
#include "safety/safety_elm327.h"
+// from cereal.car.CarParams.SafetyModel
+#define SAFETY_SILENT 0U
+#define SAFETY_HONDA_NIDEC 1U
+#define SAFETY_TOYOTA 2U
+#define SAFETY_ELM327 3U
+#define SAFETY_GM 4U
+#define SAFETY_HONDA_BOSCH_GIRAFFE 5U
+#define SAFETY_FORD 6U
+#define SAFETY_HYUNDAI 8U
+#define SAFETY_CHRYSLER 9U
+#define SAFETY_TESLA 10U
+#define SAFETY_SUBARU 11U
+#define SAFETY_MAZDA 13U
+#define SAFETY_NISSAN 14U
+#define SAFETY_VOLKSWAGEN_MQB 15U
+#define SAFETY_ALLOUTPUT 17U
+#define SAFETY_GM_ASCM 18U
+#define SAFETY_NOOUTPUT 19U
+#define SAFETY_HONDA_BOSCH_HARNESS 20U
+#define SAFETY_VOLKSWAGEN_PQ 21U
+#define SAFETY_SUBARU_LEGACY 22U
+#define SAFETY_HYUNDAI_LEGACY 23U
+#define SAFETY_HYUNDAI_COMMUNITY 24U
+
+uint16_t current_safety_mode = SAFETY_SILENT;
const safety_hooks *current_hooks = &nooutput_hooks;
-void safety_rx_hook(CAN_FIFOMailBox_TypeDef *to_push){
- current_hooks->rx(to_push);
+int safety_rx_hook(CAN_FIFOMailBox_TypeDef *to_push){
+ return current_hooks->rx(to_push);
}
int safety_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
@@ -29,68 +55,265 @@ int safety_tx_lin_hook(int lin_num, uint8_t *data, int len){
return current_hooks->tx_lin(lin_num, data, len);
}
-// -1 = Disabled (Use GPIO to determine ignition)
-// 0 = Off (not started)
-// 1 = On (started)
-int safety_ignition_hook() {
- return current_hooks->ignition();
-}
int safety_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
return current_hooks->fwd(bus_num, to_fwd);
}
+// Given a CRC-8 poly, generate a static lookup table to use with a fast CRC-8
+// algorithm. Called at init time for safety modes using CRC-8.
+void gen_crc_lookup_table(uint8_t poly, uint8_t crc_lut[]) {
+ for (int i = 0; i < 256; i++) {
+ uint8_t crc = i;
+ for (int j = 0; j < 8; j++) {
+ if ((crc & 0x80U) != 0U)
+ crc = (uint8_t)((crc << 1) ^ poly);
+ else
+ crc <<= 1;
+ }
+ crc_lut[i] = crc;
+ }
+}
+
+bool msg_allowed(CAN_FIFOMailBox_TypeDef *to_send, const CanMsg msg_list[], int len) {
+ int addr = GET_ADDR(to_send);
+ int bus = GET_BUS(to_send);
+ int length = GET_LEN(to_send);
+
+ bool allowed = false;
+ for (int i = 0; i < len; i++) {
+ if ((addr == msg_list[i].addr) && (bus == msg_list[i].bus) && (length == msg_list[i].len)) {
+ allowed = true;
+ break;
+ }
+ }
+ return allowed;
+}
+
+// compute the time elapsed (in microseconds) from 2 counter samples
+// case where ts < ts_last is ok: overflow is properly re-casted into uint32_t
+uint32_t get_ts_elapsed(uint32_t ts, uint32_t ts_last) {
+ return ts - ts_last;
+}
+
+int get_addr_check_index(CAN_FIFOMailBox_TypeDef *to_push, AddrCheckStruct addr_list[], const int len) {
+ int bus = GET_BUS(to_push);
+ int addr = GET_ADDR(to_push);
+ int length = GET_LEN(to_push);
+
+ int index = -1;
+ for (int i = 0; i < len; i++) {
+ // if multiple msgs are allowed, determine which one is present on the bus
+ if (!addr_list[i].msg_seen) {
+ for (uint8_t j = 0U; addr_list[i].msg[j].addr != 0; j++) {
+ if ((addr == addr_list[i].msg[j].addr) && (bus == addr_list[i].msg[j].bus) &&
+ (length == addr_list[i].msg[j].len)) {
+ addr_list[i].index = j;
+ addr_list[i].msg_seen = true;
+ break;
+ }
+ }
+ }
+
+ int idx = addr_list[i].index;
+ if ((addr == addr_list[i].msg[idx].addr) && (bus == addr_list[i].msg[idx].bus) &&
+ (length == addr_list[i].msg[idx].len)) {
+ index = i;
+ break;
+ }
+ }
+ return index;
+}
+
+// 1Hz safety function called by main. Now just a check for lagging safety messages
+void safety_tick(const safety_hooks *hooks) {
+ uint32_t ts = TIM2->CNT;
+ if (hooks->addr_check != NULL) {
+ for (int i=0; i < hooks->addr_check_len; i++) {
+ uint32_t elapsed_time = get_ts_elapsed(ts, hooks->addr_check[i].last_timestamp);
+ // lag threshold is max of: 1s and MAX_MISSED_MSGS * expected timestep.
+ // Quite conservative to not risk false triggers.
+ // 2s of lag is worse case, since the function is called at 1Hz
+ bool lagging = elapsed_time > MAX(hooks->addr_check[i].msg[hooks->addr_check[i].index].expected_timestep * MAX_MISSED_MSGS, 1e6);
+ hooks->addr_check[i].lagging = lagging;
+ if (lagging) {
+ controls_allowed = 0;
+ }
+ }
+ }
+}
+
+void update_counter(AddrCheckStruct addr_list[], int index, uint8_t counter) {
+ if (index != -1) {
+ uint8_t expected_counter = (addr_list[index].last_counter + 1U) % (addr_list[index].msg[addr_list[index].index].max_counter + 1U);
+ addr_list[index].wrong_counters += (expected_counter == counter) ? -1 : 1;
+ addr_list[index].wrong_counters = MAX(MIN(addr_list[index].wrong_counters, MAX_WRONG_COUNTERS), 0);
+ addr_list[index].last_counter = counter;
+ }
+}
+
+bool is_msg_valid(AddrCheckStruct addr_list[], int index) {
+ bool valid = true;
+ if (index != -1) {
+ if ((!addr_list[index].valid_checksum) || (addr_list[index].wrong_counters >= MAX_WRONG_COUNTERS)) {
+ valid = false;
+ controls_allowed = 0;
+ }
+ }
+ return valid;
+}
+
+void update_addr_timestamp(AddrCheckStruct addr_list[], int index) {
+ if (index != -1) {
+ uint32_t ts = TIM2->CNT;
+ addr_list[index].last_timestamp = ts;
+ }
+}
+
+bool addr_safety_check(CAN_FIFOMailBox_TypeDef *to_push,
+ AddrCheckStruct *rx_checks,
+ const int rx_checks_len,
+ uint8_t (*get_checksum)(CAN_FIFOMailBox_TypeDef *to_push),
+ uint8_t (*compute_checksum)(CAN_FIFOMailBox_TypeDef *to_push),
+ uint8_t (*get_counter)(CAN_FIFOMailBox_TypeDef *to_push)) {
+
+ int index = get_addr_check_index(to_push, rx_checks, rx_checks_len);
+ update_addr_timestamp(rx_checks, index);
+
+ if (index != -1) {
+ // checksum check
+ if ((get_checksum != NULL) && (compute_checksum != NULL) && rx_checks[index].msg[rx_checks[index].index].check_checksum) {
+ uint8_t checksum = get_checksum(to_push);
+ uint8_t checksum_comp = compute_checksum(to_push);
+ rx_checks[index].valid_checksum = checksum_comp == checksum;
+ } else {
+ rx_checks[index].valid_checksum = true;
+ }
+
+ // counter check (max_counter == 0 means skip check)
+ if ((get_counter != NULL) && (rx_checks[index].msg[rx_checks[index].index].max_counter > 0U)) {
+ uint8_t counter = get_counter(to_push);
+ update_counter(rx_checks, index, counter);
+ } else {
+ rx_checks[index].wrong_counters = 0U;
+ }
+ }
+ return is_msg_valid(rx_checks, index);
+}
+
+void generic_rx_checks(bool stock_ecu_detected) {
+ // exit controls on rising edge of gas press
+ if (gas_pressed && !gas_pressed_prev && !(unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS)) {
+ controls_allowed = 0;
+ }
+ gas_pressed_prev = gas_pressed;
+
+ // exit controls on rising edge of brake press
+ if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
+ controls_allowed = 0;
+ }
+ brake_pressed_prev = brake_pressed;
+
+ // check if stock ECU is on bus broken by car harness
+ if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && stock_ecu_detected) {
+ relay_malfunction_set();
+ }
+}
+
+void relay_malfunction_set(void) {
+ relay_malfunction = true;
+ fault_occurred(FAULT_RELAY_MALFUNCTION);
+}
+
+void relay_malfunction_reset(void) {
+ relay_malfunction = false;
+ fault_recovered(FAULT_RELAY_MALFUNCTION);
+}
+
typedef struct {
uint16_t id;
const safety_hooks *hooks;
} safety_hook_config;
-#define SAFETY_NOOUTPUT 0U
-#define SAFETY_HONDA 1U
-#define SAFETY_TOYOTA 2U
-#define SAFETY_GM 3U
-#define SAFETY_HONDA_BOSCH 4U
-#define SAFETY_FORD 5U
-#define SAFETY_CADILLAC 6U
-#define SAFETY_HYUNDAI 7U
-#define SAFETY_TESLA 8U
-#define SAFETY_CHRYSLER 9U
-#define SAFETY_SUBARU 10U
-#define SAFETY_GM_ASCM 0x1334U
-#define SAFETY_TOYOTA_IPAS 0x1335U
-#define SAFETY_ALLOUTPUT 0x1337U
-#define SAFETY_ELM327 0xE327U
-
const safety_hook_config safety_hook_registry[] = {
- {SAFETY_NOOUTPUT, &nooutput_hooks},
- {SAFETY_HONDA, &honda_hooks},
- {SAFETY_HONDA_BOSCH, &honda_bosch_hooks},
+ {SAFETY_SILENT, &nooutput_hooks},
+ {SAFETY_HONDA_NIDEC, &honda_nidec_hooks},
{SAFETY_TOYOTA, &toyota_hooks},
+ {SAFETY_ELM327, &elm327_hooks},
{SAFETY_GM, &gm_hooks},
- {SAFETY_FORD, &ford_hooks},
- {SAFETY_CADILLAC, &cadillac_hooks},
+ {SAFETY_HONDA_BOSCH_GIRAFFE, &honda_bosch_giraffe_hooks},
+ {SAFETY_HONDA_BOSCH_HARNESS, &honda_bosch_harness_hooks},
{SAFETY_HYUNDAI, &hyundai_hooks},
{SAFETY_CHRYSLER, &chrysler_hooks},
{SAFETY_SUBARU, &subaru_hooks},
- {SAFETY_TOYOTA_IPAS, &toyota_ipas_hooks},
- {SAFETY_GM_ASCM, &gm_ascm_hooks},
+ {SAFETY_VOLKSWAGEN_MQB, &volkswagen_mqb_hooks},
+ {SAFETY_NISSAN, &nissan_hooks},
+ {SAFETY_NOOUTPUT, &nooutput_hooks},
+ {SAFETY_HYUNDAI_LEGACY, &hyundai_legacy_hooks},
+#ifdef ALLOW_DEBUG
+ {SAFETY_MAZDA, &mazda_hooks},
+ {SAFETY_SUBARU_LEGACY, &subaru_legacy_hooks},
+ {SAFETY_VOLKSWAGEN_PQ, &volkswagen_pq_hooks},
{SAFETY_TESLA, &tesla_hooks},
{SAFETY_ALLOUTPUT, &alloutput_hooks},
- {SAFETY_ELM327, &elm327_hooks},
+ {SAFETY_GM_ASCM, &gm_ascm_hooks},
+ {SAFETY_FORD, &ford_hooks},
+#endif
};
int current_safety = -1;
-int safety_set_mode(uint16_t mode, int16_t param) {
- int set_status = -1; // not set
- int hook_config_count = sizeof(safety_hook_registry) / sizeof(safety_hook_config);
+int set_safety_hooks(uint16_t mode, int16_t param) {
+ //BB prevent resetting if already in the correct mode
+ UNUSED(mode);
+ UNUSED(param);
+ return 1;
+}
+
+int set_safety_hooks2(uint16_t mode, int16_t param) {
+ // reset state set by safety mode
+ safety_mode_cnt = 0U; // reset safety mode timer
+
//BB prevent resetting if already in the correct mode
if ((mode > 0) && (current_safety == mode)) {
return 1;
}
+
+ relay_malfunction = false;
+ gas_interceptor_detected = false;
+ gas_interceptor_prev = 0;
+ gas_pressed = false;
+ gas_pressed_prev = false;
+ brake_pressed = false;
+ brake_pressed_prev = false;
+ cruise_engaged_prev = false;
+ vehicle_speed = 0;
+ vehicle_moving = false;
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_angle_last = 0;
+ desired_angle_last = 0;
+ ts_last = 0;
+
+ torque_meas.max = 0;
+ torque_meas.max = 0;
+ torque_driver.min = 0;
+ torque_driver.max = 0;
+ angle_meas.min = 0;
+ angle_meas.max = 0;
+
+ int set_status = -1; // not set
+ int hook_config_count = sizeof(safety_hook_registry) / sizeof(safety_hook_config);
+
for (int i = 0; i < hook_config_count; i++) {
if (safety_hook_registry[i].id == mode) {
current_hooks = safety_hook_registry[i].hooks;
- set_status = 0; // set
- break;
+ current_safety_mode = safety_hook_registry[i].id;
+ set_status = 0; // set
+ }
+
+ // reset message index and seen flags in addr struct
+ for (int j = 0; j < safety_hook_registry[i].hooks->addr_check_len; j++) {
+ safety_hook_registry[i].hooks->addr_check[j].index = 0;
+ safety_hook_registry[i].hooks->addr_check[j].msg_seen = false;
}
}
if ((set_status == 0) && (current_hooks->init != NULL)) {
@@ -99,12 +322,6 @@ int safety_set_mode(uint16_t mode, int16_t param) {
return set_status;
}
-// compute the time elapsed (in microseconds) from 2 counter samples
-// case where ts < ts_last is ok: overflow is properly re-casted into uint32_t
-uint32_t get_ts_elapsed(uint32_t ts, uint32_t ts_last) {
- return ts - ts_last;
-}
-
// convert a trimmed integer to signed 32 bit int
int to_signed(int d, int bits) {
int d_signed = d;
@@ -207,7 +424,7 @@ float interpolate(struct lookup_t xy, float x) {
float y0 = xy.y[i];
float dx = xy.x[i+1] - x0;
float dy = xy.y[i+1] - y0;
- // dx should not be zero as xy.x is supposed ot be monotonic
+ // dx should not be zero as xy.x is supposed to be monotonic
if (dx <= 0.) {
dx = 0.0001;
}
diff --git a/panda/board/safety/safety_cadillac.h b/panda/board/safety/safety_cadillac.h
deleted file mode 100644
index ef63360955fe7f..00000000000000
--- a/panda/board/safety/safety_cadillac.h
+++ /dev/null
@@ -1,135 +0,0 @@
-#define CADILLAC_TORQUE_MSG_N 4 // 4 torque messages: 0x151, 0x152, 0x153, 0x154
-
-const int CADILLAC_MAX_STEER = 150; // 1s
-// real time torque limit to prevent controls spamming
-// the real time limit is 1500/sec
-const int CADILLAC_MAX_RT_DELTA = 75; // max delta torque allowed for real time checks
-const uint32_t CADILLAC_RT_INTERVAL = 250000; // 250ms between real time checks
-const int CADILLAC_MAX_RATE_UP = 2;
-const int CADILLAC_MAX_RATE_DOWN = 5;
-const int CADILLAC_DRIVER_TORQUE_ALLOWANCE = 50;
-const int CADILLAC_DRIVER_TORQUE_FACTOR = 4;
-
-bool cadillac_ign = 0;
-int cadillac_cruise_engaged_last = 0;
-int cadillac_rt_torque_last = 0;
-const int cadillac_torque_msgs_n = 4;
-int cadillac_desired_torque_last[CADILLAC_TORQUE_MSG_N] = {0};
-uint32_t cadillac_ts_last = 0;
-bool cadillac_supercruise_on = 0;
-struct sample_t cadillac_torque_driver; // last few driver torques measured
-
-int cadillac_get_torque_idx(int addr, int array_size) {
- return MIN(MAX(addr - 0x151, 0), array_size); // 0x151 is id 0, 0x152 is id 1 and so on...
-}
-
-static void cadillac_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int bus = GET_BUS(to_push);
- int addr = GET_ADDR(to_push);
-
- if (addr == 356) {
- int torque_driver_new = ((GET_BYTE(to_push, 0) & 0x7U) << 8) | (GET_BYTE(to_push, 1));
-
- torque_driver_new = to_signed(torque_driver_new, 11);
- // update array of samples
- update_sample(&cadillac_torque_driver, torque_driver_new);
- }
-
- // this message isn't all zeros when ignition is on
- if ((addr == 0x160) && (bus == 0)) {
- cadillac_ign = GET_BYTES_04(to_push) != 0;
- }
-
- // enter controls on rising edge of ACC, exit controls on ACC off
- if ((addr == 0x370) && (bus == 0)) {
- int cruise_engaged = GET_BYTE(to_push, 2) & 0x80; // bit 23
- if (cruise_engaged && !cadillac_cruise_engaged_last) {
- controls_allowed = 1;
- }
- if (!cruise_engaged) {
- controls_allowed = 0;
- }
- cadillac_cruise_engaged_last = cruise_engaged;
- }
-
- // know supercruise mode and block openpilot msgs if on
- if ((addr == 0x152) || (addr == 0x154)) {
- cadillac_supercruise_on = (GET_BYTE(to_push, 4) & 0x10) != 0;
- }
-}
-
-static int cadillac_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
- int tx = 1;
- int addr = GET_ADDR(to_send);
-
- // steer cmd checks
- if ((addr == 0x151) || (addr == 0x152) || (addr == 0x153) || (addr == 0x154)) {
- int desired_torque = ((GET_BYTE(to_send, 0) & 0x3f) << 8) | GET_BYTE(to_send, 1);
- int violation = 0;
- uint32_t ts = TIM2->CNT;
- int idx = cadillac_get_torque_idx(addr, CADILLAC_TORQUE_MSG_N);
- desired_torque = to_signed(desired_torque, 14);
-
- if (controls_allowed) {
-
- // *** global torque limit check ***
- violation |= max_limit_check(desired_torque, CADILLAC_MAX_STEER, -CADILLAC_MAX_STEER);
-
- // *** torque rate limit check ***
- int desired_torque_last = cadillac_desired_torque_last[idx];
- violation |= driver_limit_check(desired_torque, desired_torque_last, &cadillac_torque_driver,
- CADILLAC_MAX_STEER, CADILLAC_MAX_RATE_UP, CADILLAC_MAX_RATE_DOWN,
- CADILLAC_DRIVER_TORQUE_ALLOWANCE, CADILLAC_DRIVER_TORQUE_FACTOR);
-
- // used next time
- cadillac_desired_torque_last[idx] = desired_torque;
-
- // *** torque real time rate limit check ***
- violation |= rt_rate_limit_check(desired_torque, cadillac_rt_torque_last, CADILLAC_MAX_RT_DELTA);
-
- // every RT_INTERVAL set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, cadillac_ts_last);
- if (ts_elapsed > CADILLAC_RT_INTERVAL) {
- cadillac_rt_torque_last = desired_torque;
- cadillac_ts_last = ts;
- }
- }
-
- // no torque if controls is not allowed
- if (!controls_allowed && (desired_torque != 0)) {
- violation = 1;
- }
-
- // reset to 0 if either controls is not allowed or there's a violation
- if (violation || !controls_allowed) {
- cadillac_desired_torque_last[idx] = 0;
- cadillac_rt_torque_last = 0;
- cadillac_ts_last = ts;
- }
-
- if (violation || cadillac_supercruise_on) {
- tx = 0;
- }
-
- }
- return tx;
-}
-
-static void cadillac_init(int16_t param) {
- UNUSED(param);
- controls_allowed = 0;
- cadillac_ign = 0;
-}
-
-static int cadillac_ign_hook(void) {
- return cadillac_ign;
-}
-
-const safety_hooks cadillac_hooks = {
- .init = cadillac_init,
- .rx = cadillac_rx_hook,
- .tx = cadillac_tx_hook,
- .tx_lin = nooutput_tx_lin_hook,
- .ignition = cadillac_ign_hook,
- .fwd = default_fwd_hook,
-};
diff --git a/panda/board/safety/safety_chrysler.h b/panda/board/safety/safety_chrysler.h
index e608785739b109..044485cb6bc03d 100644
--- a/panda/board/safety/safety_chrysler.h
+++ b/panda/board/safety/safety_chrysler.h
@@ -4,55 +4,130 @@ const uint32_t CHRYSLER_RT_INTERVAL = 250000; // 250ms between real time checks
const int CHRYSLER_MAX_RATE_UP = 3;
const int CHRYSLER_MAX_RATE_DOWN = 3;
const int CHRYSLER_MAX_TORQUE_ERROR = 80; // max torque cmd in excess of torque motor
+const int CHRYSLER_GAS_THRSLD = 30; // 7% more than 2m/s
+const int CHRYSLER_STANDSTILL_THRSLD = 10; // about 1m/s
+const CanMsg CHRYSLER_TX_MSGS[] = {{571, 0, 3}, {658, 0, 6}, {678, 0, 8}};
+
+AddrCheckStruct chrysler_rx_checks[] = {
+ {.msg = {{544, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 10000U}}},
+ {.msg = {{514, 0, 8, .check_checksum = false, .max_counter = 0U, .expected_timestep = 10000U}}},
+ {.msg = {{500, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{308, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{320, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+};
+const int CHRYSLER_RX_CHECK_LEN = sizeof(chrysler_rx_checks) / sizeof(chrysler_rx_checks[0]);
-bool chrysler_camera_detected = 0; // is giraffe switch 2 high?
-int chrysler_rt_torque_last = 0;
-int chrysler_desired_torque_last = 0;
-int chrysler_cruise_engaged_last = 0;
-uint32_t chrysler_ts_last = 0;
-struct sample_t chrysler_torque_meas; // last few torques measured
+static uint8_t chrysler_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int checksum_byte = GET_LEN(to_push) - 1;
+ return (uint8_t)(GET_BYTE(to_push, checksum_byte));
+}
-static void chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int bus = GET_BUS(to_push);
- int addr = GET_ADDR(to_push);
+static uint8_t chrysler_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ /* This function does not want the checksum byte in the input data.
+ jeep chrysler canbus checksum from http://illmatics.com/Remote%20Car%20Hacking.pdf */
+ uint8_t checksum = 0xFF;
+ int len = GET_LEN(to_push);
+ for (int j = 0; j < (len - 1); j++) {
+ uint8_t shift = 0x80;
+ uint8_t curr = (uint8_t)GET_BYTE(to_push, j);
+ for (int i=0; i<8; i++) {
+ uint8_t bit_sum = curr & shift;
+ uint8_t temp_chk = checksum & 0x80U;
+ if (bit_sum != 0U) {
+ bit_sum = 0x1C;
+ if (temp_chk != 0U) {
+ bit_sum = 1;
+ }
+ checksum = checksum << 1;
+ temp_chk = checksum | 1U;
+ bit_sum ^= temp_chk;
+ } else {
+ if (temp_chk != 0U) {
+ bit_sum = 0x1D;
+ }
+ checksum = checksum << 1;
+ bit_sum ^= checksum;
+ }
+ checksum = bit_sum;
+ shift = shift >> 1;
+ }
+ }
+ return ~checksum;
+}
+
+static uint8_t chrysler_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
+ // Well defined counter only for 8 bytes messages
+ return (uint8_t)(GET_BYTE(to_push, 6) >> 4);
+}
- // Measured eps torque
- if (addr == 544) {
- int torque_meas_new = ((GET_BYTE(to_push, 4) & 0x7U) << 8) + GET_BYTE(to_push, 5) - 1024U;
+static int chrysler_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- // update array of samples
- update_sample(&chrysler_torque_meas, torque_meas_new);
- }
+ bool valid = addr_safety_check(to_push, chrysler_rx_checks, CHRYSLER_RX_CHECK_LEN,
+ chrysler_get_checksum, chrysler_compute_checksum,
+ chrysler_get_counter);
- // enter controls on rising edge of ACC, exit controls on ACC off
- if (addr == 0x1F4) {
- int cruise_engaged = ((GET_BYTE(to_push, 2) & 0x38) >> 3) == 7;
- if (cruise_engaged && !chrysler_cruise_engaged_last) {
- controls_allowed = 1;
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
+
+ // Measured eps torque
+ if (addr == 544) {
+ int torque_meas_new = ((GET_BYTE(to_push, 4) & 0x7U) << 8) + GET_BYTE(to_push, 5) - 1024U;
+
+ // update array of samples
+ update_sample(&torque_meas, torque_meas_new);
}
- if (!cruise_engaged) {
- controls_allowed = 0;
+
+ // enter controls on rising edge of ACC, exit controls on ACC off
+ if (addr == 500) {
+ int cruise_engaged = ((GET_BYTE(to_push, 2) & 0x38) >> 3) == 7;
+ if (cruise_engaged && !cruise_engaged_prev) {
+ controls_allowed = 1;
+ }
+ if (!cruise_engaged) {
+ controls_allowed = 0;
+ }
+ cruise_engaged_prev = cruise_engaged;
+ }
+
+ // update speed
+ if (addr == 514) {
+ int speed_l = (GET_BYTE(to_push, 0) << 4) + (GET_BYTE(to_push, 1) >> 4);
+ int speed_r = (GET_BYTE(to_push, 2) << 4) + (GET_BYTE(to_push, 3) >> 4);
+ vehicle_speed = (speed_l + speed_r) / 2;
+ vehicle_moving = (int)vehicle_speed > CHRYSLER_STANDSTILL_THRSLD;
}
- chrysler_cruise_engaged_last = cruise_engaged;
- }
- // check if stock camera ECU is still online
- if ((bus == 0) && (addr == 0x292)) {
- chrysler_camera_detected = 1;
- controls_allowed = 0;
+ // exit controls on rising edge of gas press
+ if (addr == 308) {
+ gas_pressed = ((GET_BYTE(to_push, 5) & 0x7F) != 0) && ((int)vehicle_speed > CHRYSLER_GAS_THRSLD);
+ }
+
+ // exit controls on rising edge of brake press
+ if (addr == 320) {
+ brake_pressed = (GET_BYTE(to_push, 0) & 0x7) == 5;
+ if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
+ controls_allowed = 0;
+ }
+ brake_pressed_prev = brake_pressed;
+ }
+
+ generic_rx_checks((addr == 0x292));
}
+ return valid;
}
static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int tx = 1;
+ int addr = GET_ADDR(to_send);
- // If camera is on bus 0, then nothing can be sent
- if (chrysler_camera_detected) {
+ if (!msg_allowed(to_send, CHRYSLER_TX_MSGS, sizeof(CHRYSLER_TX_MSGS) / sizeof(CHRYSLER_TX_MSGS[0]))) {
tx = 0;
}
- int addr = GET_ADDR(to_send);
+ if (relay_malfunction) {
+ tx = 0;
+ }
// LKA STEER
if (addr == 0x292) {
@@ -66,20 +141,20 @@ static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, CHRYSLER_MAX_STEER, -CHRYSLER_MAX_STEER);
// *** torque rate limit check ***
- violation |= dist_to_meas_check(desired_torque, chrysler_desired_torque_last,
- &chrysler_torque_meas, CHRYSLER_MAX_RATE_UP, CHRYSLER_MAX_RATE_DOWN, CHRYSLER_MAX_TORQUE_ERROR);
+ violation |= dist_to_meas_check(desired_torque, desired_torque_last,
+ &torque_meas, CHRYSLER_MAX_RATE_UP, CHRYSLER_MAX_RATE_DOWN, CHRYSLER_MAX_TORQUE_ERROR);
// used next time
- chrysler_desired_torque_last = desired_torque;
+ desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
- violation |= rt_rate_limit_check(desired_torque, chrysler_rt_torque_last, CHRYSLER_MAX_RT_DELTA);
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, CHRYSLER_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, chrysler_ts_last);
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > CHRYSLER_RT_INTERVAL) {
- chrysler_rt_torque_last = desired_torque;
- chrysler_ts_last = ts;
+ rt_torque_last = desired_torque;
+ ts_last = ts;
}
}
@@ -90,9 +165,9 @@ static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
- chrysler_desired_torque_last = 0;
- chrysler_rt_torque_last = 0;
- chrysler_ts_last = ts;
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
}
if (violation) {
@@ -100,42 +175,41 @@ static int chrysler_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
}
}
- // FORCE CANCEL: safety check only relevant when spamming the cancel button.
- // ensuring that only the cancel button press is sent when controls are off.
- // This avoids unintended engagements while still allowing resume spam
- // TODO: fix bug preventing the button msg to be fwd'd on bus 2
+ // FORCE CANCEL: only the cancel button press is allowed
+ if (addr == 571) {
+ if ((GET_BYTE(to_send, 0) != 1) || ((GET_BYTE(to_send, 1) & 1) == 1)) {
+ tx = 0;
+ }
+ }
- // 1 allows the message through
return tx;
}
-static void chrysler_init(int16_t param) {
- UNUSED(param);
- controls_allowed = 0;
- chrysler_camera_detected = 0;
-}
-
static int chrysler_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
int bus_fwd = -1;
int addr = GET_ADDR(to_fwd);
- // forward CAN 0 -> 2 so stock LKAS camera sees messages
- if ((bus_num == 0) && !chrysler_camera_detected) {
- bus_fwd = 2;
- }
- // forward all messages from camera except LKAS_COMMAND and LKAS_HUD
- if ((bus_num == 2) && !chrysler_camera_detected && (addr != 658) && (addr != 678)) {
- bus_fwd = 0;
+
+ if (!relay_malfunction) {
+ // forward CAN 0 -> 2 so stock LKAS camera sees messages
+ if (bus_num == 0) {
+ bus_fwd = 2;
+ }
+ // forward all messages from camera except LKAS_COMMAND and LKAS_HUD
+ if ((bus_num == 2) && (addr != 658) && (addr != 678)) {
+ bus_fwd = 0;
+ }
}
return bus_fwd;
}
const safety_hooks chrysler_hooks = {
- .init = chrysler_init,
+ .init = nooutput_init,
.rx = chrysler_rx_hook,
.tx = chrysler_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = chrysler_fwd_hook,
+ .addr_check = chrysler_rx_checks,
+ .addr_check_len = sizeof(chrysler_rx_checks) / sizeof(chrysler_rx_checks[0]),
};
diff --git a/panda/board/safety/safety_defaults.h b/panda/board/safety/safety_defaults.h
index 9dc23b54b79906..793dc9615888ca 100644
--- a/panda/board/safety/safety_defaults.h
+++ b/panda/board/safety/safety_defaults.h
@@ -1,16 +1,14 @@
-void default_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+int default_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
UNUSED(to_push);
-}
-
-int default_ign_hook(void) {
- return -1; // use GPIO to determine ignition
+ return true;
}
// *** no output safety mode ***
static void nooutput_init(int16_t param) {
UNUSED(param);
- controls_allowed = 0;
+ controls_allowed = false;
+ relay_malfunction_reset();
}
static int nooutput_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
@@ -36,7 +34,6 @@ const safety_hooks nooutput_hooks = {
.rx = default_rx_hook,
.tx = nooutput_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = default_fwd_hook,
};
@@ -44,7 +41,8 @@ const safety_hooks nooutput_hooks = {
static void alloutput_init(int16_t param) {
UNUSED(param);
- controls_allowed = 1;
+ controls_allowed = true;
+ relay_malfunction_reset();
}
static int alloutput_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
@@ -64,6 +62,5 @@ const safety_hooks alloutput_hooks = {
.rx = default_rx_hook,
.tx = alloutput_tx_hook,
.tx_lin = alloutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = default_fwd_hook,
};
diff --git a/panda/board/safety/safety_elm327.h b/panda/board/safety/safety_elm327.h
index bbad909f28cb37..a39c4125cefee5 100644
--- a/panda/board/safety/safety_elm327.h
+++ b/panda/board/safety/safety_elm327.h
@@ -12,7 +12,7 @@ static int elm327_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
//Check valid 29 bit send addresses for ISO 15765-4
//Check valid 11 bit send addresses for ISO 15765-4
if ((addr != 0x18DB33F1) && ((addr & 0x1FFF00FF) != 0x18DA00F1) &&
- ((addr != 0x7DF) && ((addr & 0x7F8) != 0x7E0))) {
+ ((addr & 0x1FFFFF00) != 0x700)) {
tx = 0;
}
return tx;
@@ -38,6 +38,5 @@ const safety_hooks elm327_hooks = {
.rx = default_rx_hook,
.tx = elm327_tx_hook,
.tx_lin = elm327_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = default_fwd_hook,
};
diff --git a/panda/board/safety/safety_ford.h b/panda/board/safety/safety_ford.h
index 0bb839f2f6513d..2c0c677a882a7f 100644
--- a/panda/board/safety/safety_ford.h
+++ b/panda/board/safety/safety_ford.h
@@ -7,19 +7,18 @@
// brake rising edge
// brake > 0mph
-int ford_brake_prev = 0;
-int ford_gas_prev = 0;
-bool ford_moving = false;
-static void ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+static int ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
+ int bus = GET_BUS(to_push);
+ bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
if (addr == 0x217) {
// wheel speeds are 14 bits every 16
- ford_moving = false;
+ vehicle_moving = false;
for (int i = 0; i < 8; i += 2) {
- ford_moving |= GET_BYTE(to_push, i) | (GET_BYTE(to_push, (int)(i + 1)) & 0xFCU);
+ vehicle_moving |= GET_BYTE(to_push, i) | (GET_BYTE(to_push, (int)(i + 1)) & 0xFCU);
}
}
@@ -38,21 +37,26 @@ static void ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
// exit controls on rising edge of brake press or on brake press when
// speed > 0
if (addr == 0x165) {
- int brake = GET_BYTE(to_push, 0) & 0x20;
- if (brake && (!(ford_brake_prev) || ford_moving)) {
+ brake_pressed = GET_BYTE(to_push, 0) & 0x20;
+ if (brake_pressed && (!brake_pressed_prev || vehicle_moving)) {
controls_allowed = 0;
}
- ford_brake_prev = brake;
+ brake_pressed_prev = brake_pressed;
}
// exit controls on rising edge of gas press
if (addr == 0x204) {
- int gas = (GET_BYTE(to_push, 0) & 0x03) | GET_BYTE(to_push, 1);
- if (gas && !(ford_gas_prev)) {
+ gas_pressed = ((GET_BYTE(to_push, 0) & 0x03) | GET_BYTE(to_push, 1)) != 0;
+ if (!unsafe_allow_gas && gas_pressed && !gas_pressed_prev) {
controls_allowed = 0;
}
- ford_gas_prev = gas;
+ gas_pressed_prev = gas_pressed;
}
+
+ if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && (bus == 0) && (addr == 0x3CA)) {
+ relay_malfunction_set();
+ }
+ return 1;
}
// all commands: just steering
@@ -64,11 +68,20 @@ static void ford_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
static int ford_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int tx = 1;
+ int addr = GET_ADDR(to_send);
+
// disallow actuator commands if gas or brake (with vehicle moving) are pressed
// and the the latching controls_allowed flag is True
- int pedal_pressed = ford_gas_prev || (ford_brake_prev && ford_moving);
+ int pedal_pressed = brake_pressed_prev && vehicle_moving;
+ bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
+ if (!unsafe_allow_gas) {
+ pedal_pressed = pedal_pressed || gas_pressed_prev;
+ }
bool current_controls_allowed = controls_allowed && !(pedal_pressed);
- int addr = GET_ADDR(to_send);
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
// STEER: safety check
if (addr == 0x3CA) {
@@ -92,11 +105,12 @@ static int ford_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
return tx;
}
+// TODO: keep camera on bus 2 and make a fwd_hook
+
const safety_hooks ford_hooks = {
.init = nooutput_init,
.rx = ford_rx_hook,
.tx = ford_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = default_fwd_hook,
};
diff --git a/panda/board/safety/safety_gm.h b/panda/board/safety/safety_gm.h
index 9ca5ca32366e8d..0e9624ddc6a8f2 100644
--- a/panda/board/safety/safety_gm.h
+++ b/panda/board/safety/safety_gm.h
@@ -18,98 +18,84 @@ const int GM_DRIVER_TORQUE_FACTOR = 4;
const int GM_MAX_GAS = 3072;
const int GM_MAX_REGEN = 1404;
const int GM_MAX_BRAKE = 350;
+const CanMsg GM_TX_MSGS[] = {{384, 0, 4}, {1033, 0, 7}, {1034, 0, 7}, {715, 0, 8}, {880, 0, 6}, // pt bus
+ {161, 1, 7}, {774, 1, 8}, {776, 1, 7}, {784, 1, 2}, // obs bus
+ {789, 2, 5}, // ch bus
+ {0x104c006c, 3, 3}, {0x10400060, 3, 5}}; // gmlan
+
+// TODO: do checksum and counter checks. Add correct timestep, 0.1s for now.
+AddrCheckStruct gm_rx_checks[] = {
+ {.msg = {{388, 0, 8, .expected_timestep = 100000U}}},
+ {.msg = {{842, 0, 5, .expected_timestep = 100000U}}},
+ {.msg = {{481, 0, 7, .expected_timestep = 100000U}}},
+ {.msg = {{241, 0, 6, .expected_timestep = 100000U}}},
+ {.msg = {{417, 0, 7, .expected_timestep = 100000U}}},
+};
+const int GM_RX_CHECK_LEN = sizeof(gm_rx_checks) / sizeof(gm_rx_checks[0]);
-int gm_brake_prev = 0;
-int gm_gas_prev = 0;
-bool gm_moving = false;
-// silence everything if stock car control ECUs are still online
-bool gm_ascm_detected = 0;
-bool gm_ignition_started = 0;
-int gm_rt_torque_last = 0;
-int gm_desired_torque_last = 0;
-uint32_t gm_ts_last = 0;
-struct sample_t gm_torque_driver; // last few driver torques measured
-
-static void gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int bus_number = GET_BUS(to_push);
- int addr = GET_ADDR(to_push);
-
- if (addr == 388) {
- int torque_driver_new = ((GET_BYTE(to_push, 6) & 0x7) << 8) | GET_BYTE(to_push, 7);
- torque_driver_new = to_signed(torque_driver_new, 11);
- // update array of samples
- update_sample(&gm_torque_driver, torque_driver_new);
- }
+static int gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- if ((addr == 0x1F1) && (bus_number == 0)) {
- //Bit 5 should be ignition "on"
- //Backup plan is Bit 2 (accessory power)
- bool ign = (GET_BYTE(to_push, 0) & 0x20) != 0;
- gm_ignition_started = ign;
- }
+ bool valid = addr_safety_check(to_push, gm_rx_checks, GM_RX_CHECK_LEN,
+ NULL, NULL, NULL);
- // sample speed, really only care if car is moving or not
- // rear left wheel speed
- if (addr == 842) {
- gm_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
- }
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
- // Check if ASCM or LKA camera are online
- // on powertrain bus.
- // 384 = ASCMLKASteeringCmd
- // 715 = ASCMGasRegenCmd
- if ((bus_number == 0) && ((addr == 384) || (addr == 715))) {
- gm_ascm_detected = 1;
- controls_allowed = 0;
- }
+ if (addr == 388) {
+ int torque_driver_new = ((GET_BYTE(to_push, 6) & 0x7) << 8) | GET_BYTE(to_push, 7);
+ torque_driver_new = to_signed(torque_driver_new, 11);
+ // update array of samples
+ update_sample(&torque_driver, torque_driver_new);
+ }
- // ACC steering wheel buttons
- if (addr == 481) {
- int button = (GET_BYTE(to_push, 5) & 0x70) >> 4;
- switch (button) {
- case 2: // resume
- case 3: // set
- controls_allowed = 1;
- break;
- case 6: // cancel
- controls_allowed = 0;
- break;
- default:
- break; // any other button is irrelevant
+ // sample speed, really only care if car is moving or not
+ // rear left wheel speed
+ if (addr == 842) {
+ vehicle_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
}
- }
- // exit controls on rising edge of brake press or on brake press when
- // speed > 0
- if (addr == 241) {
- int brake = GET_BYTE(to_push, 1);
- // Brake pedal's potentiometer returns near-zero reading
- // even when pedal is not pressed
- if (brake < 10) {
- brake = 0;
+ // ACC steering wheel buttons
+ if (addr == 481) {
+ int button = (GET_BYTE(to_push, 5) & 0x70) >> 4;
+ switch (button) {
+ case 2: // resume
+ case 3: // set
+ controls_allowed = 1;
+ break;
+ case 6: // cancel
+ controls_allowed = 0;
+ break;
+ default:
+ break; // any other button is irrelevant
+ }
}
- if (brake && (!gm_brake_prev || gm_moving)) {
- controls_allowed = 0;
+
+ // speed > 0
+ if (addr == 241) {
+ // Brake pedal's potentiometer returns near-zero reading
+ // even when pedal is not pressed
+ brake_pressed = GET_BYTE(to_push, 1) >= 10;
}
- gm_brake_prev = brake;
- }
- // exit controls on rising edge of gas press
- if (addr == 417) {
- int gas = GET_BYTE(to_push, 6);
- if (gas && !gm_gas_prev && long_controls_allowed) {
- controls_allowed = 0;
+ if (addr == 417) {
+ gas_pressed = GET_BYTE(to_push, 6) != 0;
}
- gm_gas_prev = gas;
- }
- // exit controls on regen paddle
- if (addr == 189) {
- bool regen = GET_BYTE(to_push, 0) & 0x20;
- if (regen) {
- controls_allowed = 0;
+ // exit controls on regen paddle
+ if (addr == 189) {
+ bool regen = GET_BYTE(to_push, 0) & 0x20;
+ if (regen) {
+ controls_allowed = 0;
+ }
}
+
+ // Check if ASCM or LKA camera are online
+ // on powertrain bus.
+ // 384 = ASCMLKASteeringCmd
+ // 715 = ASCMGasRegenCmd
+ generic_rx_checks(((addr == 384) || (addr == 715)));
}
+ return valid;
}
// all commands: gas/regen, friction brake and steering
@@ -121,24 +107,30 @@ static void gm_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int tx = 1;
+ int addr = GET_ADDR(to_send);
- // There can be only one! (ASCM)
- if (gm_ascm_detected) {
+ if (!msg_allowed(to_send, GM_TX_MSGS, sizeof(GM_TX_MSGS)/sizeof(GM_TX_MSGS[0]))) {
+ tx = 0;
+ }
+
+ if (relay_malfunction) {
tx = 0;
}
// disallow actuator commands if gas or brake (with vehicle moving) are pressed
// and the the latching controls_allowed flag is True
- int pedal_pressed = gm_gas_prev || (gm_brake_prev && gm_moving);
+ int pedal_pressed = brake_pressed_prev && vehicle_moving;
+ bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
+ if (!unsafe_allow_gas) {
+ pedal_pressed = pedal_pressed || gas_pressed_prev;
+ }
bool current_controls_allowed = controls_allowed && !pedal_pressed;
- int addr = GET_ADDR(to_send);
-
// BRAKE: safety check
if (addr == 789) {
int brake = ((GET_BYTE(to_send, 0) & 0xFU) << 8) + GET_BYTE(to_send, 1);
brake = (0x1000 - brake) & 0xFFF;
- if (!current_controls_allowed || !long_controls_allowed) {
+ if (!current_controls_allowed) {
if (brake != 0) {
tx = 0;
}
@@ -161,21 +153,21 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, GM_MAX_STEER, -GM_MAX_STEER);
// *** torque rate limit check ***
- violation |= driver_limit_check(desired_torque, gm_desired_torque_last, &gm_torque_driver,
+ violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
GM_MAX_STEER, GM_MAX_RATE_UP, GM_MAX_RATE_DOWN,
GM_DRIVER_TORQUE_ALLOWANCE, GM_DRIVER_TORQUE_FACTOR);
// used next time
- gm_desired_torque_last = desired_torque;
+ desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
- violation |= rt_rate_limit_check(desired_torque, gm_rt_torque_last, GM_MAX_RT_DELTA);
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, GM_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, gm_ts_last);
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > GM_RT_INTERVAL) {
- gm_rt_torque_last = desired_torque;
- gm_ts_last = ts;
+ rt_torque_last = desired_torque;
+ ts_last = ts;
}
}
@@ -186,9 +178,9 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !current_controls_allowed) {
- gm_desired_torque_last = 0;
- gm_rt_torque_last = 0;
- gm_ts_last = ts;
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
}
if (violation) {
@@ -196,17 +188,12 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
}
}
- // PARK ASSIST STEER: unlimited torque, no thanks
- if (addr == 823) {
- tx = 0;
- }
-
// GAS/REGEN: safety check
if (addr == 715) {
int gas_regen = ((GET_BYTE(to_send, 2) & 0x7FU) << 5) + ((GET_BYTE(to_send, 3) & 0xF8U) >> 3);
- // Disabled message is !engaed with gas
+ // Disabled message is !engaged with gas
// value that corresponds to max regen.
- if (!current_controls_allowed || !long_controls_allowed) {
+ if (!current_controls_allowed) {
bool apply = GET_BYTE(to_send, 0) & 1U;
if (apply || (gas_regen != GM_MAX_REGEN)) {
tx = 0;
@@ -221,21 +208,13 @@ static int gm_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
return tx;
}
-static void gm_init(int16_t param) {
- UNUSED(param);
- controls_allowed = 0;
- gm_ignition_started = 0;
-}
-
-static int gm_ign_hook(void) {
- return gm_ignition_started;
-}
const safety_hooks gm_hooks = {
- .init = gm_init,
+ .init = nooutput_init,
.rx = gm_rx_hook,
.tx = gm_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = gm_ign_hook,
.fwd = default_fwd_hook,
+ .addr_check = gm_rx_checks,
+ .addr_check_len = sizeof(gm_rx_checks) / sizeof(gm_rx_checks[0]),
};
diff --git a/panda/board/safety/safety_gm_ascm.h b/panda/board/safety/safety_gm_ascm.h
index 82f1db6ae5741e..e7eddf454a1963 100644
--- a/panda/board/safety/safety_gm_ascm.h
+++ b/panda/board/safety/safety_gm_ascm.h
@@ -39,7 +39,5 @@ const safety_hooks gm_ascm_hooks = {
.rx = default_rx_hook,
.tx = alloutput_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = gm_ascm_fwd_hook,
};
-
diff --git a/panda/board/safety/safety_honda.h b/panda/board/safety/safety_honda.h
index 80237dccbe3611..39234462424bff 100644
--- a/panda/board/safety/safety_honda.h
+++ b/panda/board/safety/safety_honda.h
@@ -6,81 +6,173 @@
// accel rising edge
// brake rising edge
// brake > 0mph
+const CanMsg HONDA_N_TX_MSGS[] = {{0xE4, 0, 5}, {0x194, 0, 4}, {0x1FA, 0, 8}, {0x200, 0, 6}, {0x30C, 0, 8}, {0x33D, 0, 5}};
+const CanMsg HONDA_BG_TX_MSGS[] = {{0xE4, 2, 5}, {0xE5, 2, 8}, {0x296, 0, 4}, {0x33D, 2, 5}}; // Bosch Giraffe
+const CanMsg HONDA_BH_TX_MSGS[] = {{0xE4, 0, 5}, {0xE5, 0, 8}, {0x296, 1, 4}, {0x33D, 0, 5}}; // Bosch Harness
+const CanMsg HONDA_BG_LONG_TX_MSGS[] = {{0xE4, 0, 5}, {0x1DF, 0, 8}, {0x1EF, 0, 8}, {0x1FA, 0, 8}, {0x30C, 0, 8}, {0x33D, 0, 5}, {0x39F, 0, 8}, {0x18DAB0F1, 0, 8}}; // Bosch Giraffe w/ gas and brakes
+const CanMsg HONDA_BH_LONG_TX_MSGS[] = {{0xE4, 1, 5}, {0x1DF, 1, 8}, {0x1EF, 1, 8}, {0x1FA, 1, 8}, {0x30C, 1, 8}, {0x33D, 1, 5}, {0x39F, 1, 8}, {0x18DAB0F1, 1, 8}}; // Bosch Harness w/ gas and brakes
-const int HONDA_GAS_INTERCEPTOR_THRESHOLD = 328; // ratio between offset and gain from dbc file
-int honda_brake_prev = 0;
-int honda_gas_prev = 0;
-bool honda_moving = false;
-bool honda_bosch_hardware = false;
+// Roughly calculated using the offsets in openpilot +5%:
+// In openpilot: ((gas1_norm + gas2_norm)/2) > 15
+// gas_norm1 = ((gain_dbc1*gas1) + offset_dbc)
+// gas_norm2 = ((gain_dbc2*gas2) + offset_dbc)
+// assuming that 2*(gain_dbc1*gas1) == (gain_dbc2*gas2)
+// In this safety: ((gas1 + (gas2/2))/2) > THRESHOLD
+const int HONDA_GAS_INTERCEPTOR_THRESHOLD = 344;
+#define HONDA_GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + ((GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2 ) / 2) // avg between 2 tracks
+const int HONDA_BOSCH_NO_GAS_VALUE = -30000; // value sent when not requesting gas
+const int HONDA_BOSCH_GAS_MAX = 2000;
+const int HONDA_BOSCH_ACCEL_MIN = -350; // max braking == -3.5m/s2
+
+// Nidec and Bosch giraffe have pt on bus 0
+AddrCheckStruct honda_rx_checks[] = {
+ {.msg = {{0x1A6, 0, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 40000U},
+ {0x296, 0, 4, .check_checksum = true, .max_counter = 3U, .expected_timestep = 40000U}}},
+ {.msg = {{0x158, 0, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 10000U}}},
+ {.msg = {{0x17C, 0, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 10000U}}},
+};
+const int HONDA_RX_CHECKS_LEN = sizeof(honda_rx_checks) / sizeof(honda_rx_checks[0]);
+
+// Bosch harness has pt on bus 1
+AddrCheckStruct honda_bh_rx_checks[] = {
+ {.msg = {{0x296, 1, 4, .check_checksum = true, .max_counter = 3U, .expected_timestep = 40000U}}},
+ {.msg = {{0x158, 1, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 10000U}}},
+ {.msg = {{0x17C, 1, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 10000U}}},
+};
+const int HONDA_BH_RX_CHECKS_LEN = sizeof(honda_bh_rx_checks) / sizeof(honda_bh_rx_checks[0]);
+
+const uint16_t HONDA_PARAM_ALT_BRAKE = 1;
+const uint16_t HONDA_PARAM_BOSCH_LONG = 2;
+
+int honda_brake = 0;
bool honda_alt_brake_msg = false;
+bool honda_fwd_brake = false;
+bool honda_bosch_long = false;
+enum {HONDA_N_HW, HONDA_BG_HW, HONDA_BH_HW} honda_hw = HONDA_N_HW;
-static void honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int addr = GET_ADDR(to_push);
- int len = GET_LEN(to_push);
+static uint8_t honda_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int checksum_byte = GET_LEN(to_push) - 1;
+ return (uint8_t)(GET_BYTE(to_push, checksum_byte)) & 0xFU;
+}
- // sample speed
- if (addr == 0x158) {
- // first 2 bytes
- honda_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
+static uint8_t honda_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int len = GET_LEN(to_push);
+ uint8_t checksum = 0U;
+ unsigned int addr = GET_ADDR(to_push);
+ while (addr > 0U) {
+ checksum += (addr & 0xFU); addr >>= 4;
}
-
- // state machine to enter and exit controls
- // 0x1A6 for the ILX, 0x296 for the Civic Touring
- if ((addr == 0x1A6) || (addr == 0x296)) {
- int button = (GET_BYTE(to_push, 0) & 0xE0) >> 5;
- switch (button) {
- case 2: // cancel
- controls_allowed = 0;
- break;
- case 3: // set
- case 4: // resume
- controls_allowed = 1;
- break;
- default:
- break; // any other button is irrelevant
+ for (int j = 0; j < len; j++) {
+ uint8_t byte = GET_BYTE(to_push, j);
+ checksum += (byte & 0xFU) + (byte >> 4U);
+ if (j == (len - 1)) {
+ checksum -= (byte & 0xFU); // remove checksum in message
}
}
+ return (8U - checksum) & 0xFU;
+}
- // user brake signal on 0x17C reports applied brake from computer brake on accord
- // and crv, which prevents the usual brake safety from working correctly. these
- // cars have a signal on 0x1BE which only detects user's brake being applied so
- // in these cases, this is used instead.
- // most hondas: 0x17C bit 53
- // accord, crv: 0x1BE bit 4
- // exit controls on rising edge of brake press or on brake press when speed > 0
- bool is_user_brake_msg = honda_alt_brake_msg ? ((addr) == 0x1BE) : ((addr) == 0x17C);
- if (is_user_brake_msg) {
- int brake = honda_alt_brake_msg ? (GET_BYTE((to_push), 0) & 0x10) : (GET_BYTE((to_push), 6) & 0x20);
- if (brake && (!(honda_brake_prev) || honda_moving)) {
- controls_allowed = 0;
- }
- honda_brake_prev = brake;
- }
+static uint8_t honda_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
+ int counter_byte = GET_LEN(to_push) - 1;
+ return ((uint8_t)(GET_BYTE(to_push, counter_byte)) >> 4U) & 0x3U;
+}
- // exit controls on rising edge of gas press if interceptor (0x201 w/ len = 6)
- // length check because bosch hardware also uses this id (0x201 w/ len = 8)
- if ((addr == 0x201) && (len == 6)) {
- gas_interceptor_detected = 1;
- int gas_interceptor = GET_INTERCEPTOR(to_push);
- if ((gas_interceptor > HONDA_GAS_INTERCEPTOR_THRESHOLD) &&
- (gas_interceptor_prev <= HONDA_GAS_INTERCEPTOR_THRESHOLD) &&
- long_controls_allowed) {
- controls_allowed = 0;
- }
- gas_interceptor_prev = gas_interceptor;
+static int honda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+
+ bool valid;
+ if (honda_hw == HONDA_BH_HW) {
+ valid = addr_safety_check(to_push, honda_bh_rx_checks, HONDA_BH_RX_CHECKS_LEN,
+ honda_get_checksum, honda_compute_checksum, honda_get_counter);
+ } else {
+ valid = addr_safety_check(to_push, honda_rx_checks, HONDA_RX_CHECKS_LEN,
+ honda_get_checksum, honda_compute_checksum, honda_get_counter);
}
- // exit controls on rising edge of gas press if no interceptor
- if (!gas_interceptor_detected) {
- if (addr == 0x17C) {
- int gas = GET_BYTE(to_push, 0);
- if (gas && !(honda_gas_prev) && long_controls_allowed) {
- controls_allowed = 0;
+ if (valid) {
+ int addr = GET_ADDR(to_push);
+ int len = GET_LEN(to_push);
+ int bus = GET_BUS(to_push);
+
+ // sample speed
+ if (addr == 0x158) {
+ // first 2 bytes
+ vehicle_moving = GET_BYTE(to_push, 0) | GET_BYTE(to_push, 1);
+ }
+
+ // state machine to enter and exit controls
+ // 0x1A6 for the ILX, 0x296 for the Civic Touring
+ if ((addr == 0x1A6) || (addr == 0x296)) {
+ int button = (GET_BYTE(to_push, 0) & 0xE0) >> 5;
+ switch (button) {
+ case 2: // cancel
+ controls_allowed = 0;
+ break;
+ case 3: // set
+ case 4: // resume
+ controls_allowed = 1;
+ break;
+ default:
+ break; // any other button is irrelevant
}
- honda_gas_prev = gas;
}
+
+ // user brake signal on 0x17C reports applied brake from computer brake on accord
+ // and crv, which prevents the usual brake safety from working correctly. these
+ // cars have a signal on 0x1BE which only detects user's brake being applied so
+ // in these cases, this is used instead.
+ // most hondas: 0x17C bit 53
+ // accord, crv: 0x1BE bit 4
+ bool is_user_brake_msg = honda_alt_brake_msg ? ((addr) == 0x1BE) : ((addr) == 0x17C);
+ if (is_user_brake_msg) {
+ brake_pressed = honda_alt_brake_msg ? (GET_BYTE((to_push), 0) & 0x10) : (GET_BYTE((to_push), 6) & 0x20);
+ }
+
+ // length check because bosch hardware also uses this id (0x201 w/ len = 8)
+ if ((addr == 0x201) && (len == 6)) {
+ gas_interceptor_detected = 1;
+ int gas_interceptor = HONDA_GET_INTERCEPTOR(to_push);
+ gas_pressed = gas_interceptor > HONDA_GAS_INTERCEPTOR_THRESHOLD;
+ gas_interceptor_prev = gas_interceptor;
+ }
+
+ if (!gas_interceptor_detected) {
+ if (addr == 0x17C) {
+ gas_pressed = GET_BYTE(to_push, 0) != 0;
+ }
+ }
+
+ // disable stock Honda AEB in unsafe mode
+ if ( !(unsafe_mode & UNSAFE_DISABLE_STOCK_AEB) ) {
+ if ((bus == 2) && (addr == 0x1FA)) {
+ bool honda_stock_aeb = GET_BYTE(to_push, 3) & 0x20;
+ int honda_stock_brake = (GET_BYTE(to_push, 0) << 2) + ((GET_BYTE(to_push, 1) >> 6) & 0x3);
+
+ // Forward AEB when stock braking is higher than openpilot braking
+ // only stop forwarding when AEB event is over
+ if (!honda_stock_aeb) {
+ honda_fwd_brake = false;
+ } else if (honda_stock_brake >= honda_brake) {
+ honda_fwd_brake = true;
+ } else {
+ // Leave Honda forward brake as is
+ }
+ }
+ }
+
+ // if steering controls messages are received on the destination bus, it's an indication
+ // that the relay might be malfunctioning
+ bool stock_ecu_detected = false;
+ int bus_rdr_car = (honda_hw == HONDA_BH_HW) ? 0 : 2; // radar bus, car side
+ if ((safety_mode_cnt > RELAY_TRNS_TIMEOUT) && ((addr == 0xE4) || (addr == 0x194))) {
+ if (((honda_hw != HONDA_N_HW) && (bus == bus_rdr_car)) ||
+ ((honda_hw == HONDA_N_HW) && (bus == 0))) {
+ stock_ecu_detected = true;
+ }
+ }
+ generic_rx_checks(stock_ecu_detected);
}
+ return valid;
}
// all commands: gas, brake and steering
@@ -95,21 +187,69 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int addr = GET_ADDR(to_send);
int bus = GET_BUS(to_send);
+ if ((honda_hw == HONDA_BG_HW) && !honda_bosch_long) {
+ tx = msg_allowed(to_send, HONDA_BG_TX_MSGS, sizeof(HONDA_BG_TX_MSGS)/sizeof(HONDA_BG_TX_MSGS[0]));
+ } else if ((honda_hw == HONDA_BG_HW) && honda_bosch_long) {
+ tx = msg_allowed(to_send, HONDA_BG_LONG_TX_MSGS, sizeof(HONDA_BG_LONG_TX_MSGS)/sizeof(HONDA_BG_LONG_TX_MSGS[0]));
+ } else if ((honda_hw == HONDA_BH_HW) && !honda_bosch_long) {
+ tx = msg_allowed(to_send, HONDA_BH_TX_MSGS, sizeof(HONDA_BH_TX_MSGS)/sizeof(HONDA_BH_TX_MSGS[0]));
+ } else if ((honda_hw == HONDA_BH_HW) && honda_bosch_long) {
+ tx = msg_allowed(to_send, HONDA_BH_LONG_TX_MSGS, sizeof(HONDA_BH_LONG_TX_MSGS)/sizeof(HONDA_BH_LONG_TX_MSGS[0]));
+ } else {
+ tx = msg_allowed(to_send, HONDA_N_TX_MSGS, sizeof(HONDA_N_TX_MSGS)/sizeof(HONDA_N_TX_MSGS[0]));
+ }
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
+
// disallow actuator commands if gas or brake (with vehicle moving) are pressed
// and the the latching controls_allowed flag is True
- int pedal_pressed = honda_gas_prev || (gas_interceptor_prev > HONDA_GAS_INTERCEPTOR_THRESHOLD) ||
- (honda_brake_prev && honda_moving);
+ int pedal_pressed = brake_pressed_prev && vehicle_moving;
+ bool unsafe_allow_gas = unsafe_mode & UNSAFE_DISABLE_DISENGAGE_ON_GAS;
+ if (!unsafe_allow_gas) {
+ pedal_pressed = pedal_pressed || gas_pressed_prev || (gas_interceptor_prev > HONDA_GAS_INTERCEPTOR_THRESHOLD);
+ }
bool current_controls_allowed = controls_allowed && !(pedal_pressed);
+ int bus_pt = (honda_hw == HONDA_BH_HW)? 1 : 0;
+
+ // BRAKE: safety check (nidec)
+ if ((addr == 0x1FA) && (bus == bus_pt)) {
+ honda_brake = (GET_BYTE(to_send, 0) << 2) + ((GET_BYTE(to_send, 1) >> 6) & 0x3);
+ if (!current_controls_allowed) {
+ if (honda_brake != 0) {
+ tx = 0;
+ }
+ }
+ if (honda_brake > 255) {
+ tx = 0;
+ }
+ if (honda_fwd_brake) {
+ tx = 0;
+ }
+ }
- // BRAKE: safety check
- if (addr == 0x1FA) {
- int brake = (GET_BYTE(to_send, 0) << 2) + (GET_BYTE(to_send, 1) & 0x3);
- if (!current_controls_allowed || !long_controls_allowed) {
- if (brake != 0) {
+ // BRAKE/GAS: safety check (bosch)
+ if ((addr == 0x1DF) && (bus == bus_pt)) {
+ int accel = (GET_BYTE(to_send, 3) << 3) | ((GET_BYTE(to_send, 4) >> 5) & 0x7);
+ accel = to_signed(accel, 11);
+ if (!current_controls_allowed) {
+ if (accel != 0) {
tx = 0;
}
}
- if (brake > 255) {
+ if (accel < HONDA_BOSCH_ACCEL_MIN) {
+ tx = 0;
+ }
+
+ int gas = (GET_BYTE(to_send, 0) << 8) | GET_BYTE(to_send, 1);
+ gas = to_signed(gas, 16);
+ if (!current_controls_allowed) {
+ if (gas != HONDA_BOSCH_NO_GAS_VALUE) {
+ tx = 0;
+ }
+ }
+ if (gas > HONDA_BOSCH_GAS_MAX) {
tx = 0;
}
}
@@ -124,9 +264,16 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
}
}
- // GAS: safety check
+ // Bosch supplemental control check
+ if (addr == 0xE5) {
+ if ((GET_BYTES_04(to_send) != 0x10800004) || ((GET_BYTES_48(to_send) & 0x00FFFFFF) != 0x0)) {
+ tx = 0;
+ }
+ }
+
+ // GAS: safety check (interceptor)
if (addr == 0x200) {
- if (!current_controls_allowed || !long_controls_allowed) {
+ if (!current_controls_allowed) {
if (GET_BYTE(to_send, 0) || GET_BYTE(to_send, 1)) {
tx = 0;
}
@@ -136,9 +283,7 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// FORCE CANCEL: safety check only relevant when spamming the cancel button in Bosch HW
// ensuring that only the cancel button press is sent (VAL 2) when controls are off.
// This avoids unintended engagements while still allowing resume spam
- int bus_pt = ((hw_type == HW_TYPE_BLACK_PANDA) && honda_bosch_hardware)? 1 : 0;
- if ((addr == 0x296) && honda_bosch_hardware &&
- !current_controls_allowed && (bus == bus_pt)) {
+ if ((addr == 0x296) && !current_controls_allowed && (bus == bus_pt)) {
if (((GET_BYTE(to_send, 0) >> 5) & 0x7) != 2) {
tx = 0;
}
@@ -148,38 +293,56 @@ static int honda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
return tx;
}
-static void honda_init(int16_t param) {
+static void honda_nidec_init(int16_t param) {
UNUSED(param);
- controls_allowed = 0;
- honda_bosch_hardware = false;
+ controls_allowed = false;
+ relay_malfunction_reset();
+ gas_interceptor_detected = 0;
+ honda_hw = HONDA_N_HW;
honda_alt_brake_msg = false;
+ honda_bosch_long = false;
}
-static void honda_bosch_init(int16_t param) {
- controls_allowed = 0;
- honda_bosch_hardware = true;
+static void honda_bosch_giraffe_init(int16_t param) {
+ controls_allowed = false;
+ relay_malfunction_reset();
+ honda_hw = HONDA_BG_HW;
// Checking for alternate brake override from safety parameter
- honda_alt_brake_msg = (param == 1) ? true : false;
+ honda_alt_brake_msg = GET_FLAG(param, HONDA_PARAM_ALT_BRAKE);
+ // radar disabled so allow gas/brakes
+ honda_bosch_long = GET_FLAG(param, HONDA_PARAM_BOSCH_LONG);
}
-static int honda_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+static void honda_bosch_harness_init(int16_t param) {
+ controls_allowed = false;
+ relay_malfunction_reset();
+ honda_hw = HONDA_BH_HW;
+ // Checking for alternate brake override from safety parameter
+ honda_alt_brake_msg = GET_FLAG(param, HONDA_PARAM_ALT_BRAKE);
+ // radar disabled so allow gas/brakes
+ honda_bosch_long = GET_FLAG(param, HONDA_PARAM_BOSCH_LONG);
+}
+
+static int honda_nidec_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
// fwd from car to camera. also fwd certain msgs from camera to car
// 0xE4 is steering on all cars except CRV and RDX, 0x194 for CRV and RDX,
// 0x1FA is brake control, 0x30C is acc hud, 0x33D is lkas hud,
- // 0x39f is radar hud
int bus_fwd = -1;
- if (bus_num == 0) {
- bus_fwd = 2;
- }
- if (bus_num == 2) {
- // block stock lkas messages and stock acc messages (if OP is doing ACC)
- int addr = GET_ADDR(to_fwd);
- int is_lkas_msg = (addr == 0xE4) || (addr == 0x194) || (addr == 0x33D);
- int is_acc_msg = (addr == 0x1FA) || (addr == 0x30C) || (addr == 0x39F);
- int block_fwd = is_lkas_msg || (is_acc_msg && long_controls_allowed);
- if (!block_fwd) {
- bus_fwd = 0;
+ if (!relay_malfunction) {
+ if (bus_num == 0) {
+ bus_fwd = 2;
+ }
+ if (bus_num == 2) {
+ // block stock lkas messages and stock acc messages (if OP is doing ACC)
+ int addr = GET_ADDR(to_fwd);
+ bool is_lkas_msg = (addr == 0xE4) || (addr == 0x194) || (addr == 0x33D);
+ bool is_acc_hud_msg = addr == 0x30C;
+ bool is_brake_msg = addr == 0x1FA;
+ bool block_fwd = is_lkas_msg || is_acc_hud_msg || (is_brake_msg && !honda_fwd_brake);
+ if (!block_fwd) {
+ bus_fwd = 0;
+ }
}
}
return bus_fwd;
@@ -187,36 +350,50 @@ static int honda_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
static int honda_bosch_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
int bus_fwd = -1;
- int bus_rdr_cam = (hw_type == HW_TYPE_BLACK_PANDA) ? 2 : 1; // radar bus, camera side
- int bus_rdr_car = (hw_type == HW_TYPE_BLACK_PANDA) ? 0 : 2; // radar bus, car side
+ int bus_rdr_cam = (honda_hw == HONDA_BH_HW) ? 2 : 1; // radar bus, camera side
+ int bus_rdr_car = (honda_hw == HONDA_BH_HW) ? 0 : 2; // radar bus, car side
- if (bus_num == bus_rdr_car) {
- bus_fwd = bus_rdr_cam;
- }
- if (bus_num == bus_rdr_cam) {
- int addr = GET_ADDR(to_fwd);
- int is_lkas_msg = (addr == 0xE4) || (addr == 0x33D);
- if (!is_lkas_msg) {
- bus_fwd = bus_rdr_car;
+ if (!relay_malfunction) {
+ if (bus_num == bus_rdr_car) {
+ bus_fwd = bus_rdr_cam;
+ }
+ if (bus_num == bus_rdr_cam) {
+ int addr = GET_ADDR(to_fwd);
+ int is_lkas_msg = (addr == 0xE4) || (addr == 0xE5) || (addr == 0x33D);
+ if (!is_lkas_msg) {
+ bus_fwd = bus_rdr_car;
+ }
}
}
return bus_fwd;
}
-const safety_hooks honda_hooks = {
- .init = honda_init,
+const safety_hooks honda_nidec_hooks = {
+ .init = honda_nidec_init,
.rx = honda_rx_hook,
.tx = honda_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
- .fwd = honda_fwd_hook,
+ .fwd = honda_nidec_fwd_hook,
+ .addr_check = honda_rx_checks,
+ .addr_check_len = sizeof(honda_rx_checks) / sizeof(honda_rx_checks[0]),
+};
+
+const safety_hooks honda_bosch_giraffe_hooks = {
+ .init = honda_bosch_giraffe_init,
+ .rx = honda_rx_hook,
+ .tx = honda_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = honda_bosch_fwd_hook,
+ .addr_check = honda_rx_checks,
+ .addr_check_len = sizeof(honda_rx_checks) / sizeof(honda_rx_checks[0]),
};
-const safety_hooks honda_bosch_hooks = {
- .init = honda_bosch_init,
+const safety_hooks honda_bosch_harness_hooks = {
+ .init = honda_bosch_harness_init,
.rx = honda_rx_hook,
.tx = honda_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = honda_bosch_fwd_hook,
+ .addr_check = honda_bh_rx_checks,
+ .addr_check_len = sizeof(honda_bh_rx_checks) / sizeof(honda_bh_rx_checks[0]),
};
diff --git a/panda/board/safety/safety_hyundai.h b/panda/board/safety/safety_hyundai.h
index aed30621f44b00..a4a6d4c2a32c2b 100644
--- a/panda/board/safety/safety_hyundai.h
+++ b/panda/board/safety/safety_hyundai.h
@@ -1,58 +1,152 @@
-const int HYUNDAI_MAX_STEER = 255; // like stock
+const int HYUNDAI_MAX_STEER = 384; // like stock
const int HYUNDAI_MAX_RT_DELTA = 112; // max delta torque allowed for real time checks
-const uint32_t HYUNDAI_RT_INTERVAL = 250000; // 250ms between real time checks
+const uint32_t HYUNDAI_RT_INTERVAL = 250000; // 250ms between real time checks
const int HYUNDAI_MAX_RATE_UP = 3;
const int HYUNDAI_MAX_RATE_DOWN = 7;
const int HYUNDAI_DRIVER_TORQUE_ALLOWANCE = 50;
const int HYUNDAI_DRIVER_TORQUE_FACTOR = 2;
+const int HYUNDAI_STANDSTILL_THRSLD = 30; // ~1kph
+const CanMsg HYUNDAI_TX_MSGS[] = {
+ {832, 0, 8}, // LKAS11 Bus 0
+ {1265, 0, 4}, // CLU11 Bus 0
+ {1157, 0, 4}, // LFAHDA_MFC Bus 0
+ // {1056, 0, 8}, // SCC11, Bus 0
+ // {1057, 0, 8}, // SCC12, Bus 0
+ // {1290, 0, 8}, // SCC13, Bus 0
+ // {905, 0, 8}, // SCC14, Bus 0
+ // {1186, 0, 8} // 4a2SCC, Bus 0
+ };
-bool hyundai_camera_detected = 0;
-bool hyundai_giraffe_switch_2 = 0; // is giraffe switch 2 high?
-int hyundai_camera_bus = 0;
-int hyundai_rt_torque_last = 0;
-int hyundai_desired_torque_last = 0;
-int hyundai_cruise_engaged_last = 0;
-uint32_t hyundai_ts_last = 0;
-struct sample_t hyundai_torque_driver; // last few driver torques measured
-
-static void hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int bus = GET_BUS(to_push);
+// TODO: missing checksum for wheel speeds message,worst failure case is
+// wheel speeds stuck at 0 and we don't disengage on brake press
+AddrCheckStruct hyundai_rx_checks[] = {
+ {.msg = {{608, 0, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 10000U}}},
+ {.msg = {{902, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 10000U}}},
+ {.msg = {{916, 0, 8, .check_checksum = true, .max_counter = 7U, .expected_timestep = 10000U}}},
+ {.msg = {{1057, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+};
+const int HYUNDAI_RX_CHECK_LEN = sizeof(hyundai_rx_checks) / sizeof(hyundai_rx_checks[0]);
+
+// older hyundai models have less checks due to missing counters and checksums
+AddrCheckStruct hyundai_legacy_rx_checks[] = {
+ {.msg = {{608, 0, 8, .check_checksum = true, .max_counter = 3U, .expected_timestep = 10000U},
+ {881, 0, 8, .expected_timestep = 10000U}}},
+ {.msg = {{902, 0, 8, .expected_timestep = 10000U}}},
+ {.msg = {{916, 0, 8, .expected_timestep = 10000U}}},
+ {.msg = {{1057, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+};
+const int HYUNDAI_LEGACY_RX_CHECK_LEN = sizeof(hyundai_legacy_rx_checks) / sizeof(hyundai_legacy_rx_checks[0]);
+
+bool hyundai_legacy = false;
+
+static uint8_t hyundai_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
- if (addr == 897) {
- int torque_driver_new = ((GET_BYTES_04(to_push) >> 11) & 0xfff) - 2048;
- // update array of samples
- update_sample(&hyundai_torque_driver, torque_driver_new);
+ uint8_t cnt;
+ if (addr == 608) {
+ cnt = (GET_BYTE(to_push, 7) >> 4) & 0x3;
+ } else if (addr == 902) {
+ cnt = ((GET_BYTE(to_push, 3) >> 6) << 2) | (GET_BYTE(to_push, 1) >> 6);
+ } else if (addr == 916) {
+ cnt = (GET_BYTE(to_push, 1) >> 5) & 0x7;
+ } else if (addr == 1057) {
+ cnt = GET_BYTE(to_push, 7) & 0xF;
+ } else {
+ cnt = 0;
}
+ return cnt;
+}
- // check if stock camera ECU is still online
- if ((bus == 0) && (addr == 832)) {
- hyundai_camera_detected = 1;
- controls_allowed = 0;
+static uint8_t hyundai_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int addr = GET_ADDR(to_push);
+
+ uint8_t chksum;
+ if (addr == 608) {
+ chksum = GET_BYTE(to_push, 7) & 0xF;
+ } else if (addr == 916) {
+ chksum = GET_BYTE(to_push, 6) & 0xF;
+ } else if (addr == 1057) {
+ chksum = GET_BYTE(to_push, 7) >> 4;
+ } else {
+ chksum = 0;
}
+ return chksum;
+}
- // Find out which bus the camera is on
- if (addr == 832) {
- hyundai_camera_bus = bus;
+static uint8_t hyundai_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int addr = GET_ADDR(to_push);
+
+ uint8_t chksum = 0;
+ // same algorithm, but checksum is in a different place
+ for (int i = 0; i < 8; i++) {
+ uint8_t b = GET_BYTE(to_push, i);
+ if (((addr == 608) && (i == 7)) || ((addr == 916) && (i == 6)) || ((addr == 1057) && (i == 7))) {
+ b &= (addr == 1057) ? 0x0FU : 0xF0U; // remove checksum
+ }
+ chksum += (b % 16U) + (b / 16U);
+ }
+ return (16U - (chksum % 16U)) % 16U;
+}
+
+static int hyundai_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+
+ bool valid;
+ if (hyundai_legacy) {
+ valid = addr_safety_check(to_push, hyundai_legacy_rx_checks, HYUNDAI_LEGACY_RX_CHECK_LEN,
+ hyundai_get_checksum, hyundai_compute_checksum,
+ hyundai_get_counter);
+
+ } else {
+ valid = addr_safety_check(to_push, hyundai_rx_checks, HYUNDAI_RX_CHECK_LEN,
+ hyundai_get_checksum, hyundai_compute_checksum,
+ hyundai_get_counter);
}
- // enter controls on rising edge of ACC, exit controls on ACC off
- if (addr == 1057) {
- // 2 bits: 13-14
- int cruise_engaged = (GET_BYTES_04(to_push) >> 13) & 0x3;
- if (cruise_engaged && !hyundai_cruise_engaged_last) {
- controls_allowed = 1;
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
+
+ if (addr == 593) {
+ int torque_driver_new = ((GET_BYTES_04(to_push) & 0x7ff) * 0.79) - 808; // scale down new driver torque signal to match previous one
+ // update array of samples
+ update_sample(&torque_driver, torque_driver_new);
}
- if (!cruise_engaged) {
- controls_allowed = 0;
+
+ // enter controls on rising edge of ACC, exit controls on ACC off
+ if (addr == 1057) {
+ // 2 bits: 13-14
+ int cruise_engaged = (GET_BYTES_04(to_push) >> 13) & 0x3;
+ if (cruise_engaged && !cruise_engaged_prev) {
+ controls_allowed = 1;
+ }
+ if (!cruise_engaged) {
+ controls_allowed = 0;
+ }
+ cruise_engaged_prev = cruise_engaged;
+ }
+
+ if ((addr == 608) || (hyundai_legacy && (addr == 881))) {
+ if (addr == 608) {
+ gas_pressed = (GET_BYTE(to_push, 7) >> 6) != 0;
+ } else {
+ gas_pressed = (((GET_BYTE(to_push, 4) & 0x7F) << 1) | GET_BYTE(to_push, 3) >> 7) != 0;
+ }
+ }
+
+ // sample wheel speed, averaging opposite corners
+ if (addr == 902) {
+ int hyundai_speed = GET_BYTES_04(to_push) & 0x3FFF; // FL
+ hyundai_speed += (GET_BYTES_48(to_push) >> 16) & 0x3FFF; // RL
+ hyundai_speed /= 2;
+ vehicle_moving = hyundai_speed > HYUNDAI_STANDSTILL_THRSLD;
+ }
+
+ if (addr == 916) {
+ brake_pressed = (GET_BYTE(to_push, 6) >> 7) != 0;
}
- hyundai_cruise_engaged_last = cruise_engaged;
- }
- // 832 is lkas cmd. If it is on camera bus, then giraffe switch 2 is high
- if ((addr == 832) && (bus == hyundai_camera_bus) && (hyundai_camera_bus != 0)) {
- hyundai_giraffe_switch_2 = 1;
+ generic_rx_checks((addr == 832));
}
+ return valid;
}
static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
@@ -60,8 +154,11 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int tx = 1;
int addr = GET_ADDR(to_send);
- // There can be only one! (camera)
- if (hyundai_camera_detected) {
+ if (!msg_allowed(to_send, HYUNDAI_TX_MSGS, sizeof(HYUNDAI_TX_MSGS)/sizeof(HYUNDAI_TX_MSGS[0]))) {
+ tx = 0;
+ }
+
+ if (relay_malfunction) {
tx = 0;
}
@@ -77,21 +174,21 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, HYUNDAI_MAX_STEER, -HYUNDAI_MAX_STEER);
// *** torque rate limit check ***
- violation |= driver_limit_check(desired_torque, hyundai_desired_torque_last, &hyundai_torque_driver,
+ violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
HYUNDAI_MAX_STEER, HYUNDAI_MAX_RATE_UP, HYUNDAI_MAX_RATE_DOWN,
HYUNDAI_DRIVER_TORQUE_ALLOWANCE, HYUNDAI_DRIVER_TORQUE_FACTOR);
// used next time
- hyundai_desired_torque_last = desired_torque;
+ desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
- violation |= rt_rate_limit_check(desired_torque, hyundai_rt_torque_last, HYUNDAI_MAX_RT_DELTA);
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, HYUNDAI_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, hyundai_ts_last);
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > HYUNDAI_RT_INTERVAL) {
- hyundai_rt_torque_last = desired_torque;
- hyundai_ts_last = ts;
+ rt_torque_last = desired_torque;
+ ts_last = ts;
}
}
@@ -102,9 +199,9 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
- hyundai_desired_torque_last = 0;
- hyundai_rt_torque_last = 0;
- hyundai_ts_last = ts;
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
}
if (violation) {
@@ -115,12 +212,11 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// FORCE CANCEL: safety check only relevant when spamming the cancel button.
// ensuring that only the cancel button press is sent (VAL 4) when controls are off.
// This avoids unintended engagements while still allowing resume spam
- // TODO: fix bug preventing the button msg to be fwd'd on bus 2
- //if ((addr == 1265) && !controls_allowed && (bus == 0) {
- // if ((GET_BYTES_04(to_send) & 0x7) != 4) {
- // tx = 0;
- // }
- //}
+ if ((addr == 1265) && !controls_allowed) {
+ if ((GET_BYTES_04(to_send) & 0x7) != 4) {
+ tx = 0;
+ }
+ }
// 1 allows the message through
return tx;
@@ -129,16 +225,14 @@ static int hyundai_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
static int hyundai_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
int bus_fwd = -1;
+ int addr = GET_ADDR(to_fwd);
// forward cam to ccan and viceversa, except lkas cmd
- if (hyundai_giraffe_switch_2) {
+ if (!relay_malfunction) {
if (bus_num == 0) {
- bus_fwd = hyundai_camera_bus;
+ bus_fwd = 2;
}
- if (bus_num == hyundai_camera_bus) {
- int addr = GET_ADDR(to_fwd);
- if (addr != 832) {
- bus_fwd = 0;
- }
+ if ((bus_num == 2) && (addr != 832) && (addr != 1157)) {
+ bus_fwd = 0;
}
}
return bus_fwd;
@@ -146,8 +240,18 @@ static int hyundai_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
static void hyundai_init(int16_t param) {
UNUSED(param);
- controls_allowed = 0;
- hyundai_giraffe_switch_2 = 0;
+ controls_allowed = false;
+ relay_malfunction_reset();
+
+ hyundai_legacy = false;
+}
+
+static void hyundai_legacy_init(int16_t param) {
+ UNUSED(param);
+ controls_allowed = false;
+ relay_malfunction_reset();
+
+ hyundai_legacy = true;
}
const safety_hooks hyundai_hooks = {
@@ -155,6 +259,17 @@ const safety_hooks hyundai_hooks = {
.rx = hyundai_rx_hook,
.tx = hyundai_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = hyundai_fwd_hook,
+ .addr_check = hyundai_rx_checks,
+ .addr_check_len = sizeof(hyundai_rx_checks) / sizeof(hyundai_rx_checks[0]),
+};
+
+const safety_hooks hyundai_legacy_hooks = {
+ .init = hyundai_legacy_init,
+ .rx = hyundai_rx_hook,
+ .tx = hyundai_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = hyundai_fwd_hook,
+ .addr_check = hyundai_legacy_rx_checks,
+ .addr_check_len = sizeof(hyundai_legacy_rx_checks) / sizeof(hyundai_legacy_rx_checks[0]),
};
diff --git a/panda/board/safety/safety_mazda.h b/panda/board/safety/safety_mazda.h
new file mode 100644
index 00000000000000..12e92404064efb
--- /dev/null
+++ b/panda/board/safety/safety_mazda.h
@@ -0,0 +1,201 @@
+// CAN msgs we care about
+#define MAZDA_LKAS 0x243
+#define MAZDA_CRZ_CTRL 0x21c
+#define MAZDA_CRZ_BTNS 0x09d
+#define MAZDA_STEER_TORQUE 0x240
+#define MAZDA_ENGINE_DATA 0x202
+#define MAZDA_PEDALS 0x165
+
+// CAN bus numbers
+#define MAZDA_MAIN 0
+#define MAZDA_AUX 1
+#define MAZDA_CAM 2
+
+#define MAZDA_MAX_STEER 2048
+
+// max delta torque allowed for real time checks
+#define MAZDA_MAX_RT_DELTA 940
+// 250ms between real time checks
+#define MAZDA_RT_INTERVAL 250000
+#define MAZDA_MAX_RATE_UP 10
+#define MAZDA_MAX_RATE_DOWN 25
+#define MAZDA_DRIVER_TORQUE_ALLOWANCE 15
+#define MAZDA_DRIVER_TORQUE_FACTOR 1
+#define MAZDA_MAX_TORQUE_ERROR 350
+
+// lkas enable speed 52kph, disable at 45kph
+#define MAZDA_LKAS_ENABLE_SPEED 5200
+#define MAZDA_LKAS_DISABLE_SPEED 4500
+
+const CanMsg MAZDA_TX_MSGS[] = {{MAZDA_LKAS, 0, 8}, {MAZDA_CRZ_BTNS, 0, 8}};
+bool mazda_lkas_allowed = false;
+
+AddrCheckStruct mazda_rx_checks[] = {
+ {.msg = {{MAZDA_CRZ_CTRL, 0, 8, .expected_timestep = 20000U}}},
+ {.msg = {{MAZDA_CRZ_BTNS, 0, 8, .expected_timestep = 100000U}}},
+ {.msg = {{MAZDA_STEER_TORQUE, 0, 8, .expected_timestep = 12000U}}},
+ {.msg = {{MAZDA_ENGINE_DATA, 0, 8, .expected_timestep = 10000U}}},
+ {.msg = {{MAZDA_PEDALS, 0, 8, .expected_timestep = 20000U}}},
+};
+const int MAZDA_RX_CHECKS_LEN = sizeof(mazda_rx_checks) / sizeof(mazda_rx_checks[0]);
+
+// track msgs coming from OP so that we know what CAM msgs to drop and what to forward
+static int mazda_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+ bool valid = addr_safety_check(to_push, mazda_rx_checks, MAZDA_RX_CHECKS_LEN,
+ NULL, NULL, NULL);
+ if (valid && (GET_BUS(to_push) == MAZDA_MAIN)) {
+ int addr = GET_ADDR(to_push);
+
+ if (addr == MAZDA_ENGINE_DATA) {
+ // sample speed: scale by 0.01 to get kph
+ int speed = (GET_BYTE(to_push, 2) << 8) | GET_BYTE(to_push, 3);
+
+ vehicle_moving = speed > 10; // moving when speed > 0.1 kph
+
+ // Enable LKAS at 52kph going up, disable at 45kph going down
+ if (speed > MAZDA_LKAS_ENABLE_SPEED) {
+ mazda_lkas_allowed = true;
+ } else if (speed < MAZDA_LKAS_DISABLE_SPEED) {
+ mazda_lkas_allowed = false;
+ } else {
+ // Misra-able appeasment block!
+ }
+ }
+
+ if (addr == MAZDA_STEER_TORQUE) {
+ int torque_driver_new = GET_BYTE(to_push, 0) - 127;
+ // update array of samples
+ update_sample(&torque_driver, torque_driver_new);
+ }
+
+ // enter controls on rising edge of ACC, exit controls on ACC off
+ if (addr == MAZDA_CRZ_CTRL) {
+ bool cruise_engaged = GET_BYTE(to_push, 0) & 8;
+ if (cruise_engaged) {
+ if (!cruise_engaged_prev) {
+ // do not engage until we hit the speed at which lkas is on
+ if (mazda_lkas_allowed) {
+ controls_allowed = 1;
+ } else {
+ controls_allowed = 0;
+ cruise_engaged = false;
+ }
+ }
+ } else {
+ controls_allowed = 0;
+ }
+ cruise_engaged_prev = cruise_engaged;
+ }
+
+ if (addr == MAZDA_ENGINE_DATA) {
+ gas_pressed = (GET_BYTE(to_push, 4) || (GET_BYTE(to_push, 5) & 0xF0));
+ }
+
+ if (addr == MAZDA_PEDALS) {
+ brake_pressed = (GET_BYTE(to_push, 0) & 0x10);
+ }
+
+ generic_rx_checks((addr == MAZDA_LKAS));
+ }
+ return valid;
+}
+
+static int mazda_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
+ int tx = 1;
+ int addr = GET_ADDR(to_send);
+ int bus = GET_BUS(to_send);
+
+ if (!msg_allowed(to_send, MAZDA_TX_MSGS, sizeof(MAZDA_TX_MSGS)/sizeof(MAZDA_TX_MSGS[0]))) {
+ tx = 0;
+ }
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
+
+ // Check if msg is sent on the main BUS
+ if (bus == MAZDA_MAIN) {
+
+ // steer cmd checks
+ if (addr == MAZDA_LKAS) {
+ int desired_torque = (((GET_BYTE(to_send, 0) & 0x0f) << 8) | GET_BYTE(to_send, 1)) - MAZDA_MAX_STEER;
+ bool violation = 0;
+ uint32_t ts = TIM2->CNT;
+
+ if (controls_allowed) {
+
+ // *** global torque limit check ***
+ violation |= max_limit_check(desired_torque, MAZDA_MAX_STEER, -MAZDA_MAX_STEER);
+
+ // *** torque rate limit check ***
+ violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
+ MAZDA_MAX_STEER, MAZDA_MAX_RATE_UP, MAZDA_MAX_RATE_DOWN,
+ MAZDA_DRIVER_TORQUE_ALLOWANCE, MAZDA_DRIVER_TORQUE_FACTOR);
+
+ // used next time
+ desired_torque_last = desired_torque;
+
+ // *** torque real time rate limit check ***
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, MAZDA_MAX_RT_DELTA);
+
+ // every RT_INTERVAL set the new limits
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
+ if (ts_elapsed > ((uint32_t) MAZDA_RT_INTERVAL)) {
+ rt_torque_last = desired_torque;
+ ts_last = ts;
+ }
+ }
+
+ // no torque if controls is not allowed
+ if (!controls_allowed && (desired_torque != 0)) {
+ violation = 1;
+ }
+
+ // reset to 0 if either controls is not allowed or there's a violation
+ if (violation || !controls_allowed) {
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
+ }
+
+ if (violation) {
+ tx = 0;
+ }
+ }
+ }
+ return tx;
+}
+
+static int mazda_fwd_hook(int bus, CAN_FIFOMailBox_TypeDef *to_fwd) {
+ int bus_fwd = -1;
+ if (!relay_malfunction) {
+ int addr = GET_ADDR(to_fwd);
+ if (bus == MAZDA_MAIN) {
+ bus_fwd = MAZDA_CAM;
+ } else if (bus == MAZDA_CAM) {
+ if (!(addr == MAZDA_LKAS)) {
+ bus_fwd = MAZDA_MAIN;
+ }
+ } else {
+ bus_fwd = -1;
+ }
+ }
+ return bus_fwd;
+}
+
+static void mazda_init(int16_t param) {
+ UNUSED(param);
+ controls_allowed = false;
+ relay_malfunction_reset();
+ mazda_lkas_allowed = false;
+}
+
+const safety_hooks mazda_hooks = {
+ .init = mazda_init,
+ .rx = mazda_rx_hook,
+ .tx = mazda_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = mazda_fwd_hook,
+ .addr_check = mazda_rx_checks,
+ .addr_check_len = sizeof(mazda_rx_checks) / sizeof(mazda_rx_checks[0]),
+};
diff --git a/panda/board/safety/safety_nissan.h b/panda/board/safety/safety_nissan.h
new file mode 100644
index 00000000000000..ca0f54e53a7c6f
--- /dev/null
+++ b/panda/board/safety/safety_nissan.h
@@ -0,0 +1,207 @@
+
+const uint32_t NISSAN_RT_INTERVAL = 250000; // 250ms between real time checks
+
+const struct lookup_t NISSAN_LOOKUP_ANGLE_RATE_UP = {
+ {2., 7., 17.},
+ {5., .8, .15}};
+
+const struct lookup_t NISSAN_LOOKUP_ANGLE_RATE_DOWN = {
+ {2., 7., 17.},
+ {5., 3.5, .5}};
+
+const int NISSAN_DEG_TO_CAN = 100;
+
+const CanMsg NISSAN_TX_MSGS[] = {{0x169, 0, 8}, {0x2b1, 0, 8}, {0x4cc, 0, 8}, {0x20b, 2, 6}, {0x20b, 1, 6}, {0x280, 2, 8}};
+
+// Signals duplicated below due to the fact that these messages can come in on either CAN bus, depending on car model.
+AddrCheckStruct nissan_rx_checks[] = {
+ {.msg = {{0x2, 0, 5, .expected_timestep = 10000U},
+ {0x2, 1, 5, .expected_timestep = 10000U}}}, // STEER_ANGLE_SENSOR (100Hz)
+ {.msg = {{0x285, 0, 8, .expected_timestep = 20000U},
+ {0x285, 1, 8, .expected_timestep = 20000U}}}, // WHEEL_SPEEDS_REAR (50Hz)
+ {.msg = {{0x30f, 2, 3, .expected_timestep = 100000U},
+ {0x30f, 1, 3, .expected_timestep = 100000U}}}, // CRUISE_STATE (10Hz)
+ {.msg = {{0x15c, 0, 8, .expected_timestep = 20000U},
+ {0x15c, 1, 8, .expected_timestep = 20000U},
+ {0x239, 0, 8, .expected_timestep = 20000U}}}, // GAS_PEDAL (100Hz / 50Hz)
+ {.msg = {{0x454, 0, 8, .expected_timestep = 100000U},
+ {0x454, 1, 8, .expected_timestep = 100000U},
+ {0x1cc, 0, 4, .expected_timestep = 10000U}}}, // DOORS_LIGHTS (10Hz) / BRAKE (100Hz)
+};
+const int NISSAN_RX_CHECK_LEN = sizeof(nissan_rx_checks) / sizeof(nissan_rx_checks[0]);
+
+// EPS Location. false = V-CAN, true = C-CAN
+bool nissan_alt_eps = false;
+
+static int nissan_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+
+ bool valid = addr_safety_check(to_push, nissan_rx_checks, NISSAN_RX_CHECK_LEN,
+ NULL, NULL, NULL);
+
+ if (valid) {
+ int bus = GET_BUS(to_push);
+ int addr = GET_ADDR(to_push);
+
+ if (((bus == 0) && (!nissan_alt_eps)) || ((bus == 1) && (nissan_alt_eps))) {
+ if (addr == 0x2) {
+ // Current steering angle
+ // Factor -0.1, little endian
+ int angle_meas_new = (GET_BYTES_04(to_push) & 0xFFFF);
+ // Need to multiply by 10 here as LKAS and Steering wheel are different base unit
+ angle_meas_new = to_signed(angle_meas_new, 16) * 10;
+
+ // update array of samples
+ update_sample(&angle_meas, angle_meas_new);
+ }
+
+ if (addr == 0x285) {
+ // Get current speed
+ // Factor 0.005
+ vehicle_speed = ((GET_BYTE(to_push, 2) << 8) | (GET_BYTE(to_push, 3))) * 0.005 / 3.6;
+ vehicle_moving = vehicle_speed > 0.;
+ }
+
+ // X-Trail 0x15c, Leaf 0x239
+ if ((addr == 0x15c) || (addr == 0x239)) {
+ if (addr == 0x15c){
+ gas_pressed = ((GET_BYTE(to_push, 5) << 2) | ((GET_BYTE(to_push, 6) >> 6) & 0x3)) > 3;
+ } else {
+ gas_pressed = GET_BYTE(to_push, 0) > 3;
+ }
+ }
+ }
+
+ // X-trail 0x454, Leaf 0x1cc
+ if ((addr == 0x454) || (addr == 0x1cc)) {
+ if (addr == 0x454){
+ brake_pressed = (GET_BYTE(to_push, 2) & 0x80) != 0;
+ } else {
+ brake_pressed = GET_BYTE(to_push, 0) > 3;
+ }
+ }
+
+ // Handle cruise enabled
+ if ((addr == 0x30f) && (((bus == 2) && (!nissan_alt_eps)) || ((bus == 1) && (nissan_alt_eps)))) {
+ bool cruise_engaged = (GET_BYTE(to_push, 0) >> 3) & 1;
+
+ if (cruise_engaged && !cruise_engaged_prev) {
+ controls_allowed = 1;
+ }
+ if (!cruise_engaged) {
+ controls_allowed = 0;
+ }
+ cruise_engaged_prev = cruise_engaged;
+ }
+
+ generic_rx_checks((addr == 0x169) && (bus == 0));
+ }
+ return valid;
+}
+
+
+static int nissan_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
+ int tx = 1;
+ int addr = GET_ADDR(to_send);
+ bool violation = 0;
+
+ if (!msg_allowed(to_send, NISSAN_TX_MSGS, sizeof(NISSAN_TX_MSGS) / sizeof(NISSAN_TX_MSGS[0]))) {
+ tx = 0;
+ }
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
+
+ // steer cmd checks
+ if (addr == 0x169) {
+ int desired_angle = ((GET_BYTE(to_send, 0) << 10) | (GET_BYTE(to_send, 1) << 2) | ((GET_BYTE(to_send, 2) >> 6) & 0x3));
+ bool lka_active = (GET_BYTE(to_send, 6) >> 4) & 1;
+
+ // offeset 1310 * NISSAN_DEG_TO_CAN
+ desired_angle = desired_angle - 131000;
+
+ if (controls_allowed && lka_active) {
+ // add 1 to not false trigger the violation
+ float delta_angle_float;
+ delta_angle_float = (interpolate(NISSAN_LOOKUP_ANGLE_RATE_UP, vehicle_speed) * NISSAN_DEG_TO_CAN) + 1.;
+ int delta_angle_up = (int)(delta_angle_float);
+ delta_angle_float = (interpolate(NISSAN_LOOKUP_ANGLE_RATE_DOWN, vehicle_speed) * NISSAN_DEG_TO_CAN) + 1.;
+ int delta_angle_down = (int)(delta_angle_float);
+ int highest_desired_angle = desired_angle_last + ((desired_angle_last > 0) ? delta_angle_up : delta_angle_down);
+ int lowest_desired_angle = desired_angle_last - ((desired_angle_last >= 0) ? delta_angle_down : delta_angle_up);
+
+ // check for violation;
+ violation |= max_limit_check(desired_angle, highest_desired_angle, lowest_desired_angle);
+ }
+ desired_angle_last = desired_angle;
+
+ // desired steer angle should be the same as steer angle measured when controls are off
+ if ((!controls_allowed) &&
+ ((desired_angle < (angle_meas.min - 1)) ||
+ (desired_angle > (angle_meas.max + 1)))) {
+ violation = 1;
+ }
+
+ // no lka_enabled bit if controls not allowed
+ if (!controls_allowed && lka_active) {
+ violation = 1;
+ }
+ }
+
+ // acc button check, only allow cancel button to be sent
+ if (addr == 0x20b) {
+ // Violation of any button other than cancel is pressed
+ violation |= ((GET_BYTE(to_send, 1) & 0x3d) > 0);
+ }
+
+ if (violation) {
+ controls_allowed = 0;
+ tx = 0;
+ }
+
+ return tx;
+}
+
+
+static int nissan_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+ int bus_fwd = -1;
+ int addr = GET_ADDR(to_fwd);
+
+ if (bus_num == 0) {
+ int block_msg = (addr == 0x280); // CANCEL_MSG
+ if (!block_msg) {
+ bus_fwd = 2; // ADAS
+ }
+ }
+
+ if (bus_num == 2) {
+ // 0x169 is LKAS, 0x2b1 LKAS_HUD, 0x4cc LKAS_HUD_INFO_MSG
+ int block_msg = ((addr == 0x169) || (addr == 0x2b1) || (addr == 0x4cc));
+ if (!block_msg) {
+ bus_fwd = 0; // V-CAN
+ }
+ }
+
+ if (relay_malfunction) {
+ bus_fwd = -1;
+ }
+
+ // fallback to do not forward
+ return bus_fwd;
+}
+
+static void nissan_init(int16_t param) {
+ controls_allowed = 0;
+ nissan_alt_eps = param ? 1 : 0;
+ relay_malfunction_reset();
+}
+
+const safety_hooks nissan_hooks = {
+ .init = nissan_init,
+ .rx = nissan_rx_hook,
+ .tx = nissan_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = nissan_fwd_hook,
+ .addr_check = nissan_rx_checks,
+ .addr_check_len = sizeof(nissan_rx_checks) / sizeof(nissan_rx_checks[0]),
+};
diff --git a/panda/board/safety/safety_subaru.h b/panda/board/safety/safety_subaru.h
index 3eda8369be4c49..b2e8c0738f9b4e 100644
--- a/panda/board/safety/safety_subaru.h
+++ b/panda/board/safety/safety_subaru.h
@@ -7,48 +7,165 @@ const int SUBARU_MAX_RATE_UP = 50;
const int SUBARU_MAX_RATE_DOWN = 70;
const int SUBARU_DRIVER_TORQUE_ALLOWANCE = 60;
const int SUBARU_DRIVER_TORQUE_FACTOR = 10;
+const int SUBARU_STANDSTILL_THRSLD = 20; // about 1kph
-int subaru_cruise_engaged_last = 0;
-int subaru_rt_torque_last = 0;
-int subaru_desired_torque_last = 0;
-uint32_t subaru_ts_last = 0;
-struct sample_t subaru_torque_driver; // last few driver torques measured
+const int SUBARU_L_DRIVER_TORQUE_ALLOWANCE = 75;
+const int SUBARU_L_DRIVER_TORQUE_FACTOR = 10;
+const CanMsg SUBARU_TX_MSGS[] = {{0x122, 0, 8}, {0x221, 0, 8}, {0x322, 0, 8}};
+const int SUBARU_TX_MSGS_LEN = sizeof(SUBARU_TX_MSGS) / sizeof(SUBARU_TX_MSGS[0]);
-static void subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int bus = GET_BUS(to_push);
+AddrCheckStruct subaru_rx_checks[] = {
+ {.msg = {{ 0x40, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 10000U}}},
+ {.msg = {{0x119, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{0x139, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{0x13a, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{0x240, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 50000U}}},
+};
+const int SUBARU_RX_CHECK_LEN = sizeof(subaru_rx_checks) / sizeof(subaru_rx_checks[0]);
+
+const CanMsg SUBARU_L_TX_MSGS[] = {{0x161, 0, 8}, {0x164, 0, 8}};
+const int SUBARU_L_TX_MSGS_LEN = sizeof(SUBARU_L_TX_MSGS) / sizeof(SUBARU_L_TX_MSGS[0]);
+
+// TODO: do checksum and counter checks after adding the signals to the outback dbc file
+AddrCheckStruct subaru_l_rx_checks[] = {
+ {.msg = {{0x140, 0, 8, .expected_timestep = 10000U}}},
+ {.msg = {{0x371, 0, 8, .expected_timestep = 20000U}}},
+ {.msg = {{0x144, 0, 8, .expected_timestep = 50000U}}},
+};
+const int SUBARU_L_RX_CHECK_LEN = sizeof(subaru_l_rx_checks) / sizeof(subaru_l_rx_checks[0]);
+
+static uint8_t subaru_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ return (uint8_t)GET_BYTE(to_push, 0);
+}
+
+static uint8_t subaru_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
+ return (uint8_t)(GET_BYTE(to_push, 1) & 0xF);
+}
+
+static uint8_t subaru_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
int addr = GET_ADDR(to_push);
+ int len = GET_LEN(to_push);
+ uint8_t checksum = (uint8_t)(addr) + (uint8_t)((unsigned int)(addr) >> 8U);
+ for (int i = 1; i < len; i++) {
+ checksum += (uint8_t)GET_BYTE(to_push, i);
+ }
+ return checksum;
+}
- if ((addr == 0x119) && (bus == 0)){
- int torque_driver_new = ((GET_BYTES_04(to_push) >> 16) & 0x7FF);
- torque_driver_new = to_signed(torque_driver_new, 11);
- // update array of samples
- update_sample(&subaru_torque_driver, torque_driver_new);
+static int subaru_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+
+ bool valid = addr_safety_check(to_push, subaru_rx_checks, SUBARU_RX_CHECK_LEN,
+ subaru_get_checksum, subaru_compute_checksum, subaru_get_counter);
+
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
+ if (addr == 0x119) {
+ int torque_driver_new;
+ torque_driver_new = ((GET_BYTES_04(to_push) >> 16) & 0x7FF);
+ torque_driver_new = -1 * to_signed(torque_driver_new, 11);
+ update_sample(&torque_driver, torque_driver_new);
+ }
+
+ // enter controls on rising edge of ACC, exit controls on ACC off
+ if (addr == 0x240) {
+ int cruise_engaged = ((GET_BYTES_48(to_push) >> 9) & 1);
+ if (cruise_engaged && !cruise_engaged_prev) {
+ controls_allowed = 1;
+ }
+ if (!cruise_engaged) {
+ controls_allowed = 0;
+ }
+ cruise_engaged_prev = cruise_engaged;
+ }
+
+ // sample wheel speed, averaging opposite corners
+ if (addr == 0x13a) {
+ int subaru_speed = (GET_BYTES_04(to_push) >> 12) & 0x1FFF; // FR
+ subaru_speed += (GET_BYTES_48(to_push) >> 6) & 0x1FFF; // RL
+ subaru_speed /= 2;
+ vehicle_moving = subaru_speed > SUBARU_STANDSTILL_THRSLD;
+ }
+
+ if (addr == 0x139) {
+ brake_pressed = (GET_BYTES_48(to_push) & 0xFFF0) > 0;
+ }
+
+ if (addr == 0x40) {
+ gas_pressed = GET_BYTE(to_push, 4) != 0;
+ }
+
+ generic_rx_checks((addr == 0x122));
}
+ return valid;
+}
+
+static int subaru_legacy_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- // enter controls on rising edge of ACC, exit controls on ACC off
- if ((addr == 0x240) && (bus == 0)) {
- int cruise_engaged = GET_BYTE(to_push, 5) & 2;
- if (cruise_engaged && !subaru_cruise_engaged_last) {
- controls_allowed = 1;
+ bool valid = addr_safety_check(to_push, subaru_l_rx_checks, SUBARU_L_RX_CHECK_LEN,
+ NULL, NULL, NULL);
+
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
+ if (addr == 0x371) {
+ int torque_driver_new;
+ torque_driver_new = (GET_BYTE(to_push, 3) >> 5) + (GET_BYTE(to_push, 4) << 3);
+ torque_driver_new = to_signed(torque_driver_new, 11);
+ update_sample(&torque_driver, torque_driver_new);
+ }
+
+ // enter controls on rising edge of ACC, exit controls on ACC off
+ if (addr == 0x144) {
+ int cruise_engaged = ((GET_BYTES_48(to_push) >> 17) & 1);
+ if (cruise_engaged && !cruise_engaged_prev) {
+ controls_allowed = 1;
+ }
+ if (!cruise_engaged) {
+ controls_allowed = 0;
+ }
+ cruise_engaged_prev = cruise_engaged;
+ }
+
+ // sample wheel speed, averaging opposite corners
+ if (addr == 0xD4) {
+ int subaru_speed = (GET_BYTES_04(to_push) >> 16) & 0xFFFF; // FR
+ subaru_speed += GET_BYTES_48(to_push) & 0xFFFF; // RL
+ subaru_speed /= 2;
+ vehicle_moving = subaru_speed > SUBARU_STANDSTILL_THRSLD;
}
- if (!cruise_engaged) {
- controls_allowed = 0;
+
+ if (addr == 0xD1) {
+ brake_pressed = ((GET_BYTES_04(to_push) >> 16) & 0xFF) > 0;
+ }
+
+ if (addr == 0x140) {
+ gas_pressed = GET_BYTE(to_push, 0) != 0;
}
- subaru_cruise_engaged_last = cruise_engaged;
+
+ generic_rx_checks((addr == 0x164));
}
+ return valid;
}
static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int tx = 1;
int addr = GET_ADDR(to_send);
+ if (!msg_allowed(to_send, SUBARU_TX_MSGS, SUBARU_TX_MSGS_LEN)) {
+ tx = 0;
+ }
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
+
// steer cmd checks
if (addr == 0x122) {
int desired_torque = ((GET_BYTES_04(to_send) >> 16) & 0x1FFF);
bool violation = 0;
uint32_t ts = TIM2->CNT;
- desired_torque = to_signed(desired_torque, 13);
+
+ desired_torque = -1 * to_signed(desired_torque, 13);
if (controls_allowed) {
@@ -56,22 +173,21 @@ static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, SUBARU_MAX_STEER, -SUBARU_MAX_STEER);
// *** torque rate limit check ***
- int desired_torque_last = subaru_desired_torque_last;
- violation |= driver_limit_check(desired_torque, desired_torque_last, &subaru_torque_driver,
+ violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
SUBARU_MAX_STEER, SUBARU_MAX_RATE_UP, SUBARU_MAX_RATE_DOWN,
SUBARU_DRIVER_TORQUE_ALLOWANCE, SUBARU_DRIVER_TORQUE_FACTOR);
// used next time
- subaru_desired_torque_last = desired_torque;
+ desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
- violation |= rt_rate_limit_check(desired_torque, subaru_rt_torque_last, SUBARU_MAX_RT_DELTA);
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, SUBARU_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, subaru_ts_last);
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > SUBARU_RT_INTERVAL) {
- subaru_rt_torque_last = desired_torque;
- subaru_ts_last = ts;
+ rt_torque_last = desired_torque;
+ ts_last = ts;
}
}
@@ -82,9 +198,9 @@ static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
- subaru_desired_torque_last = 0;
- subaru_rt_torque_last = 0;
- subaru_ts_last = ts;
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
}
if (violation) {
@@ -95,24 +211,111 @@ static int subaru_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
return tx;
}
-static int subaru_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+static int subaru_legacy_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
+ int tx = 1;
+ int addr = GET_ADDR(to_send);
- int bus_fwd = -1;
- if (bus_num == 0) {
- bus_fwd = 2; // Camera CAN
+ if (!msg_allowed(to_send, SUBARU_L_TX_MSGS, SUBARU_L_TX_MSGS_LEN)) {
+ tx = 0;
}
- if (bus_num == 2) {
- // 356 is LKAS for outback 2015
- // 356 is LKAS for Global Platform
- // 545 is ES_Distance
- // 802 is ES_LKAS
- int addr = GET_ADDR(to_fwd);
- int block_msg = (addr == 290) || (addr == 356) || (addr == 545) || (addr == 802);
- if (!block_msg) {
- bus_fwd = 0; // Main CAN
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
+
+ // steer cmd checks
+ if (addr == 0x164) {
+ int desired_torque = ((GET_BYTES_04(to_send) >> 8) & 0x1FFF);
+ bool violation = 0;
+ uint32_t ts = TIM2->CNT;
+
+ desired_torque = -1 * to_signed(desired_torque, 13);
+
+ if (controls_allowed) {
+
+ // *** global torque limit check ***
+ violation |= max_limit_check(desired_torque, SUBARU_MAX_STEER, -SUBARU_MAX_STEER);
+
+ // *** torque rate limit check ***
+ violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
+ SUBARU_MAX_STEER, SUBARU_MAX_RATE_UP, SUBARU_MAX_RATE_DOWN,
+ SUBARU_L_DRIVER_TORQUE_ALLOWANCE, SUBARU_L_DRIVER_TORQUE_FACTOR);
+
+ // used next time
+ desired_torque_last = desired_torque;
+
+ // *** torque real time rate limit check ***
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, SUBARU_MAX_RT_DELTA);
+
+ // every RT_INTERVAL set the new limits
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
+ if (ts_elapsed > SUBARU_RT_INTERVAL) {
+ rt_torque_last = desired_torque;
+ ts_last = ts;
+ }
+ }
+
+ // no torque if controls is not allowed
+ if (!controls_allowed && (desired_torque != 0)) {
+ violation = 1;
+ }
+
+ // reset to 0 if either controls is not allowed or there's a violation
+ if (violation || !controls_allowed) {
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
+ }
+
+ if (violation) {
+ tx = 0;
+ }
+
+ }
+ return tx;
+}
+
+static int subaru_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+ int bus_fwd = -1;
+
+ if (!relay_malfunction) {
+ if (bus_num == 0) {
+ bus_fwd = 2; // Camera CAN
+ }
+ if (bus_num == 2) {
+ // Global platform
+ // 0x122 ES_LKAS
+ // 0x221 ES_Distance
+ // 0x322 ES_LKAS_State
+ int addr = GET_ADDR(to_fwd);
+ int block_msg = ((addr == 0x122) || (addr == 0x221) || (addr == 0x322));
+ if (!block_msg) {
+ bus_fwd = 0; // Main CAN
+ }
}
}
+ // fallback to do not forward
+ return bus_fwd;
+}
+static int subaru_legacy_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+ int bus_fwd = -1;
+
+ if (!relay_malfunction) {
+ if (bus_num == 0) {
+ bus_fwd = 2; // Camera CAN
+ }
+ if (bus_num == 2) {
+ // Preglobal platform
+ // 0x161 is ES_CruiseThrottle
+ // 0x164 is ES_LKAS
+ int addr = GET_ADDR(to_fwd);
+ int block_msg = ((addr == 0x161) || (addr == 0x164));
+ if (!block_msg) {
+ bus_fwd = 0; // Main CAN
+ }
+ }
+ }
// fallback to do not forward
return bus_fwd;
}
@@ -122,6 +325,17 @@ const safety_hooks subaru_hooks = {
.rx = subaru_rx_hook,
.tx = subaru_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = subaru_fwd_hook,
+ .addr_check = subaru_rx_checks,
+ .addr_check_len = sizeof(subaru_rx_checks) / sizeof(subaru_rx_checks[0]),
+};
+
+const safety_hooks subaru_legacy_hooks = {
+ .init = nooutput_init,
+ .rx = subaru_legacy_rx_hook,
+ .tx = subaru_legacy_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = subaru_legacy_fwd_hook,
+ .addr_check = subaru_l_rx_checks,
+ .addr_check_len = sizeof(subaru_l_rx_checks) / sizeof(subaru_l_rx_checks[0]),
};
diff --git a/panda/board/safety/safety_tesla.h b/panda/board/safety/safety_tesla.h
index 02726bf356a8e6..646e367024e2f8 100644
--- a/panda/board/safety/safety_tesla.h
+++ b/panda/board/safety/safety_tesla.h
@@ -8,7 +8,7 @@
// brake rising edge
// brake > 0mph
-
+void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number, bool skip_tx_hook);
// 2m/s are added to be less restrictive
const struct lookup_t TESLA_LOOKUP_ANGLE_RATE_UP = {
{2., 7., 17.},
@@ -22,6 +22,25 @@ const struct lookup_t TESLA_LOOKUP_MAX_ANGLE = {
{2., 29., 38.},
{500., 500., 500.}};
+// TODO: do checksum and counter checks. Add correct timestep, 0.1s for now.
+AddrCheckStruct tesla_rx_checks[] = {
+ //STW_ANGLHP_STAT
+ {.msg = {{ 0x00E, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+ //STW_ACTN_RQ
+ {.msg = {{ 0x045, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+ //DI_torque1
+ {.msg = {{ 0x108, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+ //DI_torque2
+ {.msg = {{ 0x118, 0, 6, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+ //GTW_carState
+ {.msg = {{ 0x318, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+ //GTW_status
+ {.msg = {{ 0x348, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+ //DI_state
+ {.msg = {{ 0x368, 0, 8, .check_checksum = false, .max_counter = 15U, .expected_timestep = 100000U}}},
+};
+const int TESLA_RX_CHECK_LEN = sizeof(tesla_rx_checks) / sizeof(tesla_rx_checks[0]);
+
const uint32_t TESLA_RT_INTERVAL = 250000; // 250ms between real time checks
struct sample_t tesla_angle_meas; // last 3 steer angles
@@ -41,9 +60,8 @@ int current_car_time = -1;
int time_at_last_stalk_pull = -1;
int eac_status = 0;
-int tesla_ignition_started = 0;
-
/* <-- revB giraffe GPIO */
+/*
#include "../drivers/uja1023.h"
uint32_t tesla_ts_brakelight_on_last = 0;
@@ -55,24 +73,24 @@ int stw_menu_current_output_state = 0;
int stw_menu_btn_state_last = 0;
int stw_menu_output_flag = 0;
int high_beam_lever_state = 0;
+*/
/* revB giraffe GPIO --> */
int tesla_radar_status = 0; //0-not present, 1-initializing, 2-active
uint32_t tesla_last_radar_signal = 0;
-const uint32_t TESLA_RADAR_TIMEOUT = 1000000; // 1 second between real time checks
+const uint32_t TESLA_RADAR_TIMEOUT = 10000000; // 10s second between real time checks
char radar_VIN[] = " "; //leave empty if your radar VIN matches the car VIN
int tesla_radar_vin_complete = 0;
-int tesla_radar_can = 1;
+uint8_t tesla_radar_can = 1;
+uint8_t tesla_epas_can = 2;
int tesla_radar_trigger_message_id = 0; //not used by tesla, to showcase for other cars
int radarPosition = 0; //0 nosecone, 1 facelift
int radarEpasType = 0; //0/1 bosch, 2-4 mando
-//EPB enable counter
-int EPB_epasControl_idx = 0;
//settings from bb_openpilot.cfg
-
+int DAS_gtwConfigReceived = 0;
int enable_das_emulation = 1;
int enable_radar_emulation = 1;
@@ -86,6 +104,7 @@ int streetSignObject_b3 = 0;
int streetSignObject_active = 0;
//fake DAS counters
+int DAS_uom = 0; //units of measure, 0 = MPH, 1 = km/h
int DAS_bootID_sent = 0;
int fake_DAS_counter = 0;
int DAS_object_idx = 0;
@@ -108,6 +127,7 @@ int DI_locStatus_idx = 0;
int DAS_carLog_idx = 0;
int DAS_telemetry_idx = 0;
+
//fake DAS variables
int DAS_longC_enabled = 0;
int DAS_speed_limit_kph = 0;
@@ -119,6 +139,8 @@ int DAS_jerk_min = 0x000;
int DAS_jerk_max = 0x0F;
int DAS_gas_to_resume = 0;
int DAS_206_apUnavailable = 0;
+int DAS_haptic_request = 0;
+uint8_t EPB_epasControl_idx = 0;
//fake DAS objects
int DAS_LEAD_OBJECT_MLB = 0xFFFFFF00;
@@ -133,8 +155,9 @@ int DAS_op_status_last_received = 1;
int DAS_alca_state = 0x05;
int DAS_hands_on_state = 0;
int DAS_forward_collision_warning = 0;
+int DAS_units_included = 0;
int DAS_cc_state = 0;
-int DAS_acc_speed_limit_mph = 0;
+int DAS_acc_speed_limit = 0; //in car speed units
int DAS_acc_speed_kph = 0;
int DAS_collision_warning = 0;
int DAS_ldwStatus = 0;
@@ -183,6 +206,7 @@ int DAS_inDrive_prev = 0;
int DAS_present = 0;
int tesla_radar_should_send = 0;
int DAS_noEpasHarness = 0;
+int DAS_usesApillarHarness=0;
//fake DAS - last stalk data used to cancel
uint32_t DAS_lastStalkL =0x00;
@@ -209,6 +233,18 @@ int DAS_208_rackDetected = 0x00;
int DAS_025_steeringOverride = 0x00;
int DAS_221_lcAborting = 0x00;
+//fake DAS - high beam request
+int DAS_high_low_beam_request = 0x00;
+int DAS_high_low_beam_reason = 0x00;
+int DAS_ahb_is_enabled = 0;
+
+//fake DAS - plain CC condition
+int DAS_plain_cc_enabled = 0x00;
+
+//fake DAS - emergency brakes use
+int DAS_emergency_brake_request = 0x00;
+int DAS_fleet_speed_state = 0x00;
+
static int add_tesla_crc(uint32_t MLB, uint32_t MHB , int msg_len) {
//"""Calculate CRC8 using 1D poly, FF start, FF end"""
@@ -300,20 +336,21 @@ static uint32_t bitShift(int value, int which_octet, int starting_bit_in_octet)
return ( value << ((starting_bit_in_octet - 1) + (which_octet -1) * 8));
}
-void can_send(CAN_FIFOMailBox_TypeDef *to_push, uint8_t bus_number);
-static void send_fake_message(uint32_t RIR, uint32_t RDTR,int msg_len, int msg_addr, int bus_num, uint32_t data_lo, uint32_t data_hi) {
+
+static void send_fake_message(uint32_t RIR, uint32_t RDTR,int msg_len, int msg_addr, uint8_t bus_num, uint32_t data_lo, uint32_t data_hi) {
CAN_FIFOMailBox_TypeDef to_send;
uint32_t addr_mask = 0x001FFFFF;
to_send.RIR = (msg_addr << 21) + (addr_mask & (RIR | 1));
to_send.RDTR = (RDTR & 0xFFFFFFF0) | msg_len;
to_send.RDLR = data_lo;
to_send.RDHR = data_hi;
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, false);
}
static void reset_DAS_data(void) {
//fake DAS variables
+ //DAS_gtwConfigReceived = 0;
DAS_present = 0;
DAS_longC_enabled = 0;
DAS_speed_limit_kph = 0;
@@ -325,12 +362,13 @@ static void reset_DAS_data(void) {
DAS_jerk_max = 0x0F;
DAS_gas_to_resume = 0;
DAS_206_apUnavailable = 0;
+ DAS_haptic_request = 0;
DAS_op_status = 1; //unavailable
DAS_alca_state = 0x05;
DAS_hands_on_state = 0;
DAS_forward_collision_warning = 0;
DAS_cc_state = 0;
- DAS_acc_speed_limit_mph = 0;
+ DAS_acc_speed_limit = 0;
DAS_acc_speed_kph = 0;
DAS_collision_warning = 0;
DAS_telLeftMarkerQuality = 3; //3-high, 2-medium, 1-low 0-lowest
@@ -342,6 +380,8 @@ static void reset_DAS_data(void) {
DAS_telLeftMarkerColor = 1; //0-unknown, 1-white, 2-yellow, 3-blue
DAS_telRightMarkerColor = 1; //0-unknown, 1-white, 2-yellow, 3-blue
DAS_turn_signal_request = 0;
+ DAS_high_low_beam_request = 0;
+ DAS_high_low_beam_reason = 0;
DAS_steeringAngle = 0x4000;
DAS_steeringEnabled = 0;
DAS_usingPedal = 0;
@@ -369,6 +409,9 @@ static void reset_DAS_data(void) {
DAS_LEFT_OBJECT_MHB = 0x03FFFF83;
DAS_RIGHT_OBJECT_MLB = 0xFFFFFF02;
DAS_RIGHT_OBJECT_MHB = 0x03FFFF83;
+ DAS_plain_cc_enabled = 0x00;
+ DAS_emergency_brake_request = 0x00;
+ DAS_fleet_speed_state = 0x00;
}
@@ -382,19 +425,35 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
//check if we got data from OP in the last two seconds
if (current_car_time - time_last_DAS_data > 2) {
//no message in the last 2 seconds, reset all variables
- reset_DAS_data();
+ //BB_no_harness: why are we resetting here.... maybe it should be only when disconnecting or not at all
+ //reset_DAS_data();
if (EON_is_connected == 1) {
- //reset_DAS_data();
+ reset_DAS_data();
EON_is_connected = 0;
}
} else {
EON_is_connected = 1;
}
+ //ldw type of warning... use haptic if we manually steer
+ if (DAS_ldwStatus > 0) {
+ DAS_haptic_request = 1;
+ //if OP not enabled or manual steering, only use haptic
+ if (((DAS_219_lcTempUnavailableSpeed == 1) || (DAS_op_status < 5)) && (DAS_ldwStatus > 2)) {
+ DAS_ldwStatus -= 2;
+ }
+ //if OP enabled and no manual steering, always force audible alert
+ if ((DAS_219_lcTempUnavailableSpeed == 0) && (DAS_op_status == 5) && (DAS_ldwStatus > 0) && (DAS_ldwStatus < 3)) {
+ DAS_ldwStatus += 2;
+ }
+ } else {
+ DAS_haptic_request = 0;
+ }
+
if (fake_DAS_counter % 2 == 0) {
//send DAS_steeringControl - 0x488
MHB = 0x00;
- MLB = ((DAS_steeringAngle >> 8) & 0x7F) +
+ MLB = ((DAS_steeringAngle >> 8) & 0x7F) + (DAS_haptic_request << 7) +
((DAS_steeringAngle & 0xFF) << 8) +
(((((DAS_steeringEnabled & controls_allowed & DAS_inDrive) )<< 6) + DAS_steeringControl_idx) << 16);
int cksm = add_tesla_cksm2(MLB, MHB, 0x488, 3);
@@ -496,7 +555,11 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
jerk_min = 0x000;
jerk_max = 0x0F;
acc_state = 0x04;//bb send HOLD?
- acc_speed_kph = (int)(DAS_acc_speed_limit_mph * 1.609 * 10.0);
+ float uom = 1;
+ if ((DAS_uom == 0) && (DAS_units_included == 0)) {
+ uom = 1.609;
+ }
+ acc_speed_kph = (int)(DAS_acc_speed_limit * uom * 10.0);
accel_max = 0x1FE; //(int)((DAS_accel_max + 15 ) / 0.04);
accel_min = 0x001; //(int)((DAS_accel_min + 15 ) / 0.04);
}
@@ -553,7 +616,13 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
if (fake_DAS_counter % 4 == 2) {
//send DAS_pscControl - 0x219
// 0x90 + DAS_pscControl_idx,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- MLB = 0x90 + DAS_pscControl_idx;
+ uint8_t eacStatus = 1;
+ if ((DAS_steeringEnabled & controls_allowed & DAS_inDrive) == 1) {
+ eacStatus = 2;
+ }
+ //BB disabling to see if this is the issue
+ eacStatus = 0;
+ MLB = 0x90 + DAS_pscControl_idx + (eacStatus << 8);
MHB = 0x00;
int cksm = add_tesla_cksm2(MLB, MHB, 0x219, 2);
MLB = MLB + (cksm << 16);
@@ -749,10 +818,9 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
if (fake_DAS_counter % 50 == 0) {
//send DAS_status - 0x399
- int sl = (int)(DAS_speed_limit_kph / 5);
- MLB = DAS_op_status + 0xF0 + (sl << 8) + (((DAS_collision_warning << 6) + sl) << 16);
- MHB = ((DAS_cc_state & 0x03) << 3) + (DAS_ldwStatus << 5) +
- (((DAS_hands_on_state << 2) + ((DAS_alca_state & 0x03) << 6)) << 8) +
+ MLB = DAS_op_status + 0xF0 + (DAS_speed_limit_kph << 8) + (((DAS_collision_warning << 6) + DAS_speed_limit_kph) << 16);
+ MHB = ((DAS_fleet_speed_state & 0x03) << 3) + (DAS_ldwStatus << 5) +
+ (((DAS_hands_on_state << 2) + ((DAS_alca_state & 0x03) << 6) + DAS_fleet_speed_state) << 8) +
((( DAS_status_idx << 4) + (DAS_alca_state >> 2)) << 16);
int cksm = add_tesla_cksm2(MLB, MHB, 0x399, 7);
MHB = MHB + (cksm << 24);
@@ -761,7 +829,11 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
DAS_status_idx = DAS_status_idx % 16;
//send DAS_status2 - 0x389
- int sl2 = ((int)(DAS_acc_speed_limit_mph / 0.2)) & 0x3FF;
+ float uom = 1.0;
+ if ((DAS_uom == 1) && (DAS_units_included == 1)){
+ uom = 1.0/1.609;
+ }
+ int sl2 = ((int)(DAS_acc_speed_limit * uom / 0.2)) & 0x3FF;
if (sl2 == 0) {
sl2 = 0x3FF;
}
@@ -771,10 +843,19 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
lcw = 0x01;
}
int b4 = 0x80;
- int b5 = 0x13;
+ int b5 = 0x13;
if (DAS_cc_state > 1) { //enabled or hold
- b4 = 0x60;
- b5 = 0x12;
+ b4 = 0x84;
+ b5 = 0x25; //BB lssState 0x 0x03 should be LSS_STATE_ELK enhanced LK
+ int _DAS_RobState = 0x02; //active
+ int _DAS_radarTelemetry = 0x01; // normal
+ int _DAS_lssState = 0x03;
+ int _DAS_acc_report = 0x01; //ACC_report_target_CIPV
+ if (DAS_fleet_speed_state == 2) {
+ _DAS_acc_report = 0x12; //ACC_report_fleet_speed
+ }
+ b4 = (_DAS_acc_report << 2) + ((_DAS_lssState & 0x01) << 7);
+ b5 =((_DAS_lssState >> 1) & 0x01) + (_DAS_radarTelemetry << 2) + (_DAS_RobState <<4);
}
MLB = MLB + (b4 << 24);
MHB = 0x8000 + b5 + (DAS_status2_idx << 20) + (lcw << 16);
@@ -787,7 +868,7 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
if (fake_DAS_counter % 50 == 9) {
//send DAS_bodyControls - 0x3E9
//0xf1,0x0c + turn_signal_request,0x00,0x00,0x00,0x00,(idx << 4)
- MLB = 0x00000CF1 + (DAS_turn_signal_request << 8);
+ MLB = 0x000000F1 + (DAS_turn_signal_request << 8) + (DAS_high_low_beam_request << 10) + (DAS_high_low_beam_reason << 12);
MHB = 0x00 + (DAS_bodyControls_idx << 20);
int cksm = add_tesla_cksm2(MLB, MHB, 0x3E9, 7);
MHB = MHB + (cksm << 24);
@@ -802,17 +883,17 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
//send DAS_info - 0x539
switch (DAS_info_idx) {
- case 0:
+ case 0: //changed
MLB = 0x0003010a;
- MHB = 0x004e0000;
+ MHB = 0x78000000;
break;
case 1:
MLB = 0x0102000b;
MHB = 0x00000001;
break;
- case 2:
+ case 2: //changed
MLB = 0x0000000d;
- MHB = 0x3eac8e5b;
+ MHB = 0x9c20c11e;
break;
case 3:
MLB = 0xc9060010;
@@ -890,15 +971,13 @@ static void do_fake_DAS(uint32_t RIR, uint32_t RDTR) {
static void do_EPB_epasControl(uint32_t RIR, uint32_t RDTR) {
uint32_t MLB;
uint32_t MHB;
- MLB = 0x01 + (EPB_epasControl_idx << 8);
+ MLB = 0x01 + (EPB_epasControl_idx << 8);
MHB = 0x00;
int cksm = add_tesla_cksm2(MLB, MHB, 0x214, 2);
MLB = MLB + (cksm << 16);
if (DAS_noEpasHarness == 0) {
send_fake_message(RIR,RDTR,3,0x214,2,MLB,MHB);
- } else {
- send_fake_message(RIR,RDTR,3,0x214,0,MLB,MHB);
- }
+ }
EPB_epasControl_idx++;
EPB_epasControl_idx = EPB_epasControl_idx % 16;
}
@@ -922,13 +1001,19 @@ static void do_fake_stalk_cancel(uint32_t RIR, uint32_t RDTR) {
-static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
+static int tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
{
- set_gmlan_digital_output(GMLAN_HIGH);
- reset_gmlan_switch_timeout(); //we're still in tesla safety mode, reset the timeout counter and make sure our output is enabled
+ bool valid = false;
+ //not much to check yet on these, each tesla messaage has checksum in a different place
+
+
+ if (DAS_noEpasHarness == 0) {
+ set_gmlan_digital_output(GMLAN_HIGH);
+ reset_gmlan_switch_timeout(); //we're still in tesla safety mode, reset the timeout counter and make sure our output is enabled
+ }
uint32_t ts = TIM2->CNT;
- int bus_number = (to_push->RDTR >> 4) & 0xFF;
+ uint8_t bus_number = (to_push->RDTR >> 4) & 0xFF;
uint32_t addr;
if (to_push->RIR & 4)
@@ -943,9 +1028,39 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
// Normal
addr = to_push->RIR >> 21;
}
+ if (bus_number == 1) {
+ //radar is always accepted
+ valid = true;
+ } else
+ if ((bus_number == 0) || (bus_number == 2)) {
+ if ((addr == 0x00E ) || (addr == 0x045 ) || (addr == 0x108 ) ||
+ (addr == 0x118 ) || (addr == 0x318 ) || (addr == 0x348 ) || (addr == 0x368))
+ {
+ valid = addr_safety_check(to_push, tesla_rx_checks, TESLA_RX_CHECK_LEN,
+ NULL, NULL, NULL);
+ } else {
+ valid = true;
+ }
+
+ }
+
+ if ((addr == 0x398) && (bus_number == 0)) {
+ if (DAS_gtwConfigReceived == 0) {
+ DAS_gtwConfigReceived = 1;
+ int dashw = ((to_push->RDLR >> 6) & 0x03);
+ int radhw = ((to_push->RDLR >> 10) & 0x03);
+ if (dashw == 1) {
+ DAS_noEpasHarness = 1;
+ enable_das_emulation = 1;
+ }
+ if (radhw > 0) {
+ enable_radar_emulation = 1;
+ }
+ }
+ }
//let's see if the pedal was pressed
- if ((addr == 0x552) && (bus_number == 2)) {
+ if ((addr == 0x552) && (bus_number == tesla_epas_can)) {
//m1 = 0.050796813
//m2 = 0.101593626
//d = -22.85856576
@@ -953,17 +1068,18 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
}
//we use 0x108 at 100Hz to detect timing of messages sent by our fake DAS and EPB
- if (addr == 0x108) {
- if (fake_DAS_counter % 10 == 5) {
- do_EPB_epasControl(to_push->RIR,to_push->RDTR);
+ if ((addr == 0x108) && (bus_number == 0)) {
+ if (DAS_gtwConfigReceived == 1) {
+ if ((fake_DAS_counter % 10 == 5) && (DAS_noEpasHarness == 0)) {
+ do_EPB_epasControl(to_push->RIR,to_push->RDTR);
+ }
+ do_fake_DAS(to_push->RIR,to_push->RDTR);
}
- do_fake_DAS(to_push->RIR,to_push->RDTR);
- return;
+ return valid;
}
// Record the current car time in current_car_time (for use with double-pulling cruise stalk)
- if (addr == 0x318)
- {
+ if ((addr == 0x318) && (bus_number == 0)) {
int hour = (to_push->RDLR & 0x1F000000) >> 24;
int minute = (to_push->RDHR & 0x3F00) >> 8;
int second = (to_push->RDLR & 0x3F0000) >> 16;
@@ -971,7 +1087,7 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
}
//we use EPAS_sysStatus 0x370 to determine if the car is off or on
- if (addr == 0x370) {
+ if ((addr == 0x370) && (bus_number != 1)) {
time_last_EPAS_data = current_car_time;
}
@@ -979,27 +1095,36 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
if (current_car_time - time_last_EPAS_data > 2) {
//no message in the last 2 seconds, car is off
// GTW_status
- tesla_ignition_started = 0;
time_last_EPAS_data = -10;
} else {
- tesla_ignition_started = 1;
+
}
//see if cruise is enabled [Enabled, standstill or Override] and cancel if using pedal
- if (addr == 0x368) {
+ if ((addr == 0x368) && (bus_number == 0)) {
//first save values for spamming
DAS_diStateL = to_push->RDLR;
DAS_diStateH = to_push->RDHR;
DAS_diState_idx = (DAS_diStateH & 0xF000 ) >> 12;
int acc_state = ((to_push->RDLR & 0xF000) >> 12);
+ DAS_uom = (to_push->RDLR >> 31) & 1;
+ //if pedal and CC looks enabled, disable
if ((DAS_usingPedal == 1) && ( acc_state >= 2) && ( acc_state <= 4)) {
do_fake_stalk_cancel(to_push->RIR, to_push->RDTR);
}
-
+ //if ACC not enabled but CC is enabled, disable if more than 2 seconds since last pull
+ if ((EON_is_connected == 1) && (DAS_usingPedal == 0) && (DAS_cc_state != 2) && ( acc_state >= 2) && ( acc_state <= 4)) {
+ //disable if more than two seconds since last pull, or there was never a stalk pull
+ if (((current_car_time >= time_at_last_stalk_pull + 2) && (current_car_time != -1) && (time_at_last_stalk_pull != -1)) || (time_at_last_stalk_pull == -1)) {
+ if (DAS_plain_cc_enabled == 0) {
+ do_fake_stalk_cancel(to_push->RIR, to_push->RDTR);
+ }
+ }
+ }
}
//looking for radar messages;
- if ((addr == 0x300) && (bus_number ==1))
+ if ((addr == 0x300) && (bus_number == tesla_radar_can))
{
uint32_t ts = TIM2->CNT;
uint32_t ts_elapsed = get_ts_elapsed(ts, tesla_last_radar_signal);
@@ -1018,7 +1143,7 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
}
//0x631 is sent by radar to initiate the sync
- if ((addr == 0x631) && (bus_number == 1))
+ if ((addr == 0x631) && (bus_number == tesla_radar_can))
{
uint32_t ts = TIM2->CNT;
uint32_t ts_elapsed = get_ts_elapsed(ts, tesla_last_radar_signal);
@@ -1036,8 +1161,7 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
}
}
- if (addr == 0x45)
- {
+ if ((addr == 0x45) && (bus_number == 0)) {
//first save for future use
DAS_lastStalkL = to_push->RDLR;
DAS_lastStalkH = to_push->RDHR;
@@ -1062,6 +1186,7 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
do_fake_stalk_cancel(to_push->RIR, to_push->RDTR);
}
/* <-- revB giraffe GPIO */
+ /*
int turn_signal_lever = (to_push->RDLR >> 16) & 0x3; //TurnIndLvr_Stat : 16|2@1+
int stw_menu_button = (to_push->RDHR >> 5) & 0x1; //StW_Sw05_Psd : 37|1@1+
high_beam_lever_state = (to_push->RDLR >> 18) & 0x3; //SG_ HiBmLvr_Stat : 18|2@1+
@@ -1124,18 +1249,13 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
stw_menu_output_flag = 0;
stw_menu_btn_state_last = 0;
}
+ */
/* revB giraffe GPIO --> */
}
// Detect drive rail on (ignition) (start recording)
if ((addr == 0x348) && (bus_number == 0))
{
-
- if ((tesla_ignition_started * DAS_present * tesla_radar_should_send ) == 1) {
- //set_uja1023_output_bits(1 << 7);
- } else {
- //clear_uja1023_output_bits(1 << 7);
- }
//ALSO use this for radar timeout, this message is always on
uint32_t ts = TIM2->CNT;
uint32_t ts_elapsed = get_ts_elapsed(ts, tesla_last_radar_signal);
@@ -1145,10 +1265,12 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
}
}
+
// exit controls on brake press
// DI_torque2::DI_brakePedal 0x118
/* revB giraffe GPIO --> */
+ /*
if ((addr == 0x118) && (bus_number == 0))
{
int drive_state = (to_push->RDLR >> 12) & 0x7; //DI_gear : 12|3@1+
@@ -1156,8 +1278,6 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
int tesla_speed_mph = (((((GET_BYTE(to_push, 3) & 0xF) << 8) + GET_BYTE(to_push, 2)) * 0.05) - 25);
- //for fake messages for radar we need also in kph
- //actual_speed_kph = (int)(tesla_speed_mph * 1.609);
//if the car goes into reverse, set UJA1023 output pin 5 to high. If Drive, set pin 1 high
//DI_gear 7 "DI_GEAR_SNA" 4 "DI_GEAR_D" 3 "DI_GEAR_N" 2 "DI_GEAR_R" 1 "DI_GEAR_P" 0 "DI_GEAR_INVALID" ;
@@ -1219,7 +1339,13 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
//puts(" Brakelight off!\n");
}
}
+ }
+ */
/* revB giraffe GPIO --> */
+ if ((addr == 0x118) && (bus_number == 0))
+ {
+ int tesla_speed_mph = (((((GET_BYTE(to_push, 3) & 0xF) << 8) + GET_BYTE(to_push, 2)) * 0.05) - 25);
+
//get vehicle speed in m/2. Tesla gives MPH
tesla_speed = (tesla_speed_mph*1.609/3.6);
@@ -1234,13 +1360,15 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
DAS_inDrive = 0;
}
if ((DAS_inDrive == 0) && (DAS_inDrive_prev == 1)) {
- reset_DAS_data();
+ //BB_no_harness: why are we resetting here?
+ //reset_DAS_data();
}
}
// exit controls on EPAS error
// EPAS_sysStatus::EPAS_eacStatus 0x370
- if ((addr == 0x370) && (bus_number == 1))
+ //BB this was on bus_number 1 which is wrong, but not tested on 2 yet
+ if ((addr == 0x370) && (bus_number == tesla_epas_can))
{
// if EPAS_eacStatus is not 1 or 2, disable control
eac_status = (GET_BYTE(to_push, 6) >> 5) & 0x7;
@@ -1256,7 +1384,7 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
if ((addr == 0x00E) && (bus_number == 0))
{
int angle_meas_now = (int)(((((GET_BYTE(to_push, 0) & 0x3F) << 8) + GET_BYTE(to_push, 1)) * 0.1) - 819.2);
- uint32_t ts = TIM2->CNT;
+ //uint32_t ts = TIM2->CNT;
uint32_t ts_elapsed = get_ts_elapsed(ts, tesla_ts_angle_last);
// *** angle real time check
@@ -1292,9 +1420,9 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
}
/* <-- revB giraffe GPIO */
+ /*
//BO_ 1001 DAS_bodyControls: 8 XXX
- if (addr == 0x3e9)
- {
+ if ((addr == 0x3e9) && (bus_number == 0)) {
int high_beam_decision = (to_push->RDLR >> 10) & 0x3; //DAS_highLowBeamDecision : 10|2@1+
// highLowBeamDecision:
//0: Undecided (Car off)
@@ -1320,8 +1448,7 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
} //DAS_bodyControls
//BO_ 872 DI_state: 8 DI
- if (addr == 0x368)
- {
+ if ((addr == 0x368) && (bus_number == 0)) {
int regen_brake_light = (to_push->RDLR >> 8) & 0x1; //DI_regenLight : 8|1@1+
//if the car's brake lights are on, set pin 2 to high
if (regen_brake_light == 1)
@@ -1339,8 +1466,9 @@ static void tesla_rx_hook(CAN_FIFOMailBox_TypeDef *to_push)
//puts(" Brakelight off!\n");
}
}
- }
+ }*/
/* revB giraffe GPIO --> */
+ return valid;
}
// all commands: gas/regen, friction brake and steering
@@ -1500,6 +1628,25 @@ static int tesla_tx_hook(CAN_FIFOMailBox_TypeDef *to_send)
DAS_ldwStatus = (b2 & 0x07);
//FLAG NOT USED = ((b2 >> 3) & 0x01);
DAS_noEpasHarness = ((b2 >> 4) & 0x01);
+ DAS_usesApillarHarness = ((b2 >> 5) & 0x01);
+ if (DAS_noEpasHarness == 1) {
+ tesla_epas_can = 0;
+ } else {
+ tesla_epas_can = 2;
+ }
+ return false;
+ }
+
+ //capture message for AHB and parse
+ if (addr == 0x65A) {
+ int b0 = (to_send->RDLR & 0xFF);
+ int b1 = ((to_send->RDLR >> 8) & 0xFF);
+ int b2 = ((to_send->RDLR >> 16) & 0xFF);
+ DAS_high_low_beam_request = b0;
+ DAS_high_low_beam_reason = b1;
+ DAS_ahb_is_enabled = b2 & 0x01;
+ DAS_fleet_speed_state = (b2 >> 1) & 0x03;
+ //intercept and do not forward
return false;
}
@@ -1515,19 +1662,26 @@ static int tesla_tx_hook(CAN_FIFOMailBox_TypeDef *to_send)
int b7 = ((to_send->RDHR >> 24) & 0xFF);
DAS_acc_speed_kph = b1;
- DAS_acc_speed_limit_mph = b4;
+ DAS_acc_speed_limit = b4;
DAS_longC_enabled = ((b0 & 0x80) >> 7);
DAS_gas_to_resume = ((b0 & 0x40) >> 6);
DAS_206_apUnavailable = ((b0 & 0x20) >> 5);
DAS_collision_warning = ((b0 & 0x10) >> 4);
DAS_op_status = (b0 & 0x0F);
DAS_turn_signal_request = ((b2 & 0xC0) >> 6);
- DAS_forward_collision_warning = ((b2 & 0x30) >> 4);
- DAS_hands_on_state = (b2 & 0x0F);
+ DAS_forward_collision_warning = ((b2 & 0x10) >> 4);
+ DAS_units_included = ((b2 & 0x20) >> 5);
+ if (((b2 >> 3) & 0x01) == 0) {
+ DAS_plain_cc_enabled = 1;
+ } else {
+ DAS_plain_cc_enabled = 0;
+ }
+ DAS_hands_on_state = (b2 & 0x07);
DAS_cc_state = ((b3 & 0xC0)>>6);
DAS_usingPedal = ((b3 & 0x20) >> 5);
DAS_alca_state = (b3 & 0x1F);
- DAS_speed_limit_kph = b5;
+ DAS_speed_limit_kph = (b5 & 0x1F);
+ DAS_emergency_brake_request = ((b5 & 0x20) >> 5);
time_last_DAS_data = current_car_time;
DAS_present = 1;
DAS_steeringAngle = ((b7 << 8) + b6) & 0x7FFF;
@@ -1573,18 +1727,14 @@ static int tesla_tx_hook(CAN_FIFOMailBox_TypeDef *to_send)
static void tesla_init(int16_t param)
{
UNUSED(param);
- controls_allowed = 0;
- tesla_ignition_started = 0;
- gmlan_switch_init(1); //init the gmlan switch with 1s timeout enabled
+ if (DAS_noEpasHarness == 0) {
+ gmlan_switch_init(1); //init the gmlan switch with 1s timeout enabled
+ }
//uja1023_init();
}
-static int tesla_ign_hook(void)
-{
- return tesla_ignition_started;
-}
-static void tesla_fwd_to_radar_as_is(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+static void tesla_fwd_to_radar_as_is(uint8_t bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
if ((enable_radar_emulation == 0) || (tesla_radar_vin_complete !=7) || (tesla_radar_should_send==0) ) {
return;
}
@@ -1593,7 +1743,7 @@ static void tesla_fwd_to_radar_as_is(int bus_num, CAN_FIFOMailBox_TypeDef *to_fw
to_send.RDTR = to_fwd->RDTR;
to_send.RDLR = to_fwd->RDLR;
to_send.RDHR = to_fwd->RDHR;
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
}
@@ -1602,7 +1752,7 @@ static uint32_t radar_VIN_char(int pos, int shift) {
}
-static void tesla_fwd_to_radar_modded(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+static void tesla_fwd_to_radar_modded(uint8_t bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
if ((enable_radar_emulation == 0) || (tesla_radar_vin_complete !=7) || (tesla_radar_should_send==0) ) {
return;
}
@@ -1613,11 +1763,12 @@ static void tesla_fwd_to_radar_modded(int bus_num, CAN_FIFOMailBox_TypeDef *to_f
to_send.RDLR = to_fwd->RDLR;
to_send.RDHR = to_fwd->RDHR;
uint32_t addr_mask = 0x001FFFFF;
- //now modd
+ //now modd messages as needed
+ // if DAS_noEpasHarness == 1, only modify IDs because we have iBooster and thus everything else is correct
if (addr == 0x405 )
{
to_send.RIR = (0x2B9 << 21) + (addr_mask & (to_fwd->RIR | 1));
- if (((to_send.RDLR & 0x10) == 0x10) && (sizeof(radar_VIN) >= 4))
+ if (((to_send.RDLR & 0x10) == 0x10) && (sizeof(radar_VIN) >= 4) && (DAS_noEpasHarness == 0))
{
int rec = to_send.RDLR & 0xFF;
if (rec == 0x10) {
@@ -1633,64 +1784,78 @@ static void tesla_fwd_to_radar_modded(int bus_num, CAN_FIFOMailBox_TypeDef *to_f
to_send.RDHR = radar_VIN_char(13,0) | radar_VIN_char(14,1) | radar_VIN_char(15,2) | radar_VIN_char(16,3);
}
}
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
if (addr == 0x398 )
{
- //change frontradarHW = 1 and dashw = 1
- //SG_ GTW_dasHw : 7|2@0+ (1,0) [0|0] "" NEO
- //SG_ GTW_parkAssistInstalled : 11|2@0+ (1,0) [0|0] "" NEO
- to_send.RDHR = to_send.RDHR | 0x100;
- //resend on CAN 0 first
- to_send.RIR = (to_fwd->RIR | 1);
- can_send(&to_send,0);
-
- to_send.RDLR = to_send.RDLR & 0xFFFFF33F;
- to_send.RDLR = to_send.RDLR | 0x440;
- // change the autopilot to 1
- to_send.RDHR = to_fwd->RDHR & 0xCFFF0F0F;
- to_send.RDHR = to_send.RDHR | 0x10000000 | (radarPosition << 4) | (radarEpasType << 12);
-
- if ((sizeof(radar_VIN) >= 4) && ((int)(radar_VIN[7]) == 0x32)) {
- //also change to AWD if needed (most likely) if manual VIN and if position 8 of VIN is a 2 (dual motor)
- to_send.RDLR = to_send.RDLR | 0x08;
+ if (DAS_noEpasHarness == 0) {
+ //change frontradarHW = 1 and dashw = 1
+ //SG_ GTW_dasHw : 7|2@0+ (1,0) [0|0] "" NEO
+ //SG_ GTW_parkAssistInstalled : 11|2@0+ (1,0) [0|0] "" NEO
+
+ to_send.RDHR = to_send.RDHR | 0x100; //TODO if this is Park Assist, it should be RDLR not RDHR
+ //resend on CAN 0 first
+ to_send.RIR = (to_fwd->RIR | 1);
+ //can_send(&to_send,0, true);
+
+
+ to_send.RDLR = to_send.RDLR & 0xFFFFF33F;
+ to_send.RDLR = to_send.RDLR | 0x440;
+ // change the autopilot to 1
+ to_send.RDHR = to_fwd->RDHR & 0xCFFF0F0F;
+ to_send.RDHR = to_send.RDHR | 0x10000000 | (radarPosition << 4) | (radarEpasType << 12);
+
+ if ((sizeof(radar_VIN) >= 4) && (((int)(radar_VIN[7]) == 0x32) || ((int)(radar_VIN[7]) == 0x34))) {
+ //also change to AWD if needed (most likely) if manual VIN and if position 8 of VIN is a 2 (dual motor)
+ to_send.RDLR = to_send.RDLR | 0x08;
+ }
}
//now change address and send to radar
to_send.RIR = (0x2A9 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
if (addr == 0x00E )
{
to_send.RIR = (0x199 << 21) + (addr_mask & (to_fwd->RIR | 1));
- //check if angular speed sends SNA (0x3FFF)
- if (((to_send.RDLR >> 16) & 0xFF3F) == 0xFF3F) {
- //if yes replace 0x3FFFF with 0x2000 which is 0 angular change
- to_send.RDLR = (to_send.RDLR & 0x00C0FFFF) | (0x0020 << 16);
- //if this is the case, most likely we need to change the model too
- //so remove CRC and StW_AnglHP_Sens_Id (1st octet of RDHR)
- to_send.RDHR = to_send.RDHR & 0x00FFFFF0;
- //force StW_AnglHP_Sens_Id to DELPHI (0x04 1st octet of RDHR)
- to_send.RDHR = to_send.RDHR | 0x00000004;
- //compute new CRC
- int crc = add_tesla_crc(to_send.RDLR, to_send.RDHR,7);
- //Add new CRC
- to_send.RDHR = to_send.RDHR | (crc << 24);
- }
- can_send(&to_send, bus_num);
+ if (DAS_noEpasHarness == 0) {
+ //check if angular speed sends SNA (0x3FFF)
+ if (((to_send.RDLR >> 16) & 0xFF3F) == 0xFF3F) {
+ //if yes replace 0x3FFFF with 0x2000 which is 0 angular change
+ to_send.RDLR = (to_send.RDLR & 0x00C0FFFF) | (0x0020 << 16);
+ //if this is the case, most likely we need to change the model too
+ //so remove CRC and StW_AnglHP_Sens_Id (1st octet of RDHR)
+ to_send.RDHR = to_send.RDHR & 0x00FFFFF0;
+ //force StW_AnglHP_Sens_Id to DELPHI (0x04 1st octet of RDHR)
+ to_send.RDHR = to_send.RDHR | 0x00000004;
+ //compute new CRC
+ int crc = add_tesla_crc(to_send.RDLR, to_send.RDHR,7);
+ //Add new CRC
+ to_send.RDHR = to_send.RDHR | (crc << 24);
+ }
+ }
+ can_send(&to_send, bus_num, true);
return;
}
if (addr == 0x20A )
{
to_send.RIR = (0x159 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
+
+ if ((addr == 0x148) && (DAS_noEpasHarness == 1))
+ {
+ to_send.RIR = (0x1A9 << 21) + (addr_mask & (to_fwd->RIR | 1));
+ can_send(&to_send, bus_num, true);
+ return;
+ }
+
if (addr == 0x115 )
{
@@ -1698,18 +1863,20 @@ static void tesla_fwd_to_radar_modded(int bus_num, CAN_FIFOMailBox_TypeDef *to_f
to_send.RIR = (0x129 << 21) + (addr_mask & (to_fwd->RIR | 1));
int cksm = (0x16 + (counter << 4)) & 0xFF;
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
- //we don't get 0x148 DI_espControl so send as 0x1A9 on CAN1 and also as 0x148 on CAN0
- to_send.RDTR = (to_fwd->RDTR & 0xFFFFFFF0) | 0x05;
- to_send.RIR = (0x148 << 21) + (addr_mask & (to_fwd->RIR | 1));
- to_send.RDLR = 0x000C0000 | (counter << 28);
- cksm = (0x38 + 0x0C + (counter << 4)) & 0xFF;
- to_send.RDHR = cksm;
- //can_send(&to_send, 0);
+ if (DAS_noEpasHarness == 0) {
+ //we don't get 0x148 DI_espControl so send as 0x1A9 on CAN1 and also as 0x148 on CAN0
+ to_send.RDTR = (to_fwd->RDTR & 0xFFFFFFF0) | 0x05;
+ to_send.RIR = (0x148 << 21) + (addr_mask & (to_fwd->RIR | 1));
+ to_send.RDLR = 0x000C0000 | (counter << 28);
+ cksm = (0x38 + 0x0C + (counter << 4)) & 0xFF;
+ to_send.RDHR = cksm;
+ //can_send(&to_send, 0, true);
- to_send.RIR = (0x1A9 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ to_send.RIR = (0x1A9 << 21) + (addr_mask & (to_fwd->RIR | 1));
+ can_send(&to_send, bus_num, true);
+ }
return;
}
@@ -1717,81 +1884,84 @@ static void tesla_fwd_to_radar_modded(int bus_num, CAN_FIFOMailBox_TypeDef *to_f
if (addr == 0x145)
{
to_send.RIR = (0x149 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
- /*if (addr == 0x175)
+ if ((addr == 0x175) && (DAS_noEpasHarness == 1))
{
to_send.RIR = (0x169 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
- }*/
+ }
if (addr == 0x118 )
{
to_send.RIR = (0x119 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
- //we don't get 0x175 ESP_wheelSpeeds so send as 0x169 on CAN1 and also as 0x175 on CAN0
- int counter = to_fwd->RDHR & 0x0F;
- to_send.RIR = (0x169 << 21) + (addr_mask & (to_fwd->RIR | 1));
- to_send.RDTR = (to_fwd->RDTR & 0xFFFFFFF0) | 0x08;
- int32_t speed_kph = (((0xFFF0000 & to_send.RDLR) >> 16) * 0.05 -25) * 1.609;
- if (speed_kph < 0) {
- speed_kph = 0;
+ if (DAS_noEpasHarness == 0) {
+ //we don't get 0x175 ESP_wheelSpeeds so send as 0x169 on CAN1 and also as 0x175 on CAN0
+ int counter = to_fwd->RDHR & 0x0F;
+ to_send.RIR = (0x169 << 21) + (addr_mask & (to_fwd->RIR | 1));
+ to_send.RDTR = (to_fwd->RDTR & 0xFFFFFFF0) | 0x08;
+ int32_t speed_kph = (((0xFFF0000 & to_send.RDLR) >> 16) * 0.05 -25) * 1.609;
+ if (speed_kph < 0) {
+ speed_kph = 0;
+ }
+ // is AHB is enabled, use low apeed to spread radar angle
+ if ((speed_kph > 2 ) && (DAS_ahb_is_enabled == 1)) {
+ // speed_kph = 2;
+ }
+ if (((0xFFF0000 & to_send.RDLR) >> 16) == 0xFFF) {
+ speed_kph = 0x1FFF; //0xFFF is signal not available for DI_Torque2 speed 0x118; should be SNA or 0x1FFF for 0x169
+ } else {
+ speed_kph = (int)(speed_kph/0.04) & 0x1FFF;
+ }
+ to_send.RDLR = (speed_kph | (speed_kph << 13) | (speed_kph << 26)) & 0xFFFFFFFF;
+ to_send.RDHR = ((speed_kph >> 6) | (speed_kph << 7) | (counter << 20)) & 0x00FFFFFF;
+ int cksm = 0x76;
+ cksm = (cksm + (to_send.RDLR & 0xFF) + ((to_send.RDLR >> 8) & 0xFF) + ((to_send.RDLR >> 16) & 0xFF) + ((to_send.RDLR >> 24) & 0xFF)) & 0xFF;
+ cksm = (cksm + (to_send.RDHR & 0xFF) + ((to_send.RDHR >> 8) & 0xFF) + ((to_send.RDHR >> 16) & 0xFF) + ((to_send.RDHR >> 24) & 0xFF)) & 0xFF;
+ to_send.RDHR = to_send.RDHR | (cksm << 24);
+ can_send(&to_send, bus_num, true);
}
- if (((0xFFF0000 & to_send.RDLR) >> 16) == 0xFFF) {
- speed_kph = 0x1FFF; //0xFFF is signal not available for DI_Torque2 speed 0x118; should be SNA or 0x1FFF for 0x169
- } else {
- speed_kph = (int)(speed_kph/0.04) & 0x1FFF;
- }
- to_send.RDLR = (speed_kph | (speed_kph << 13) | (speed_kph << 26)) & 0xFFFFFFFF;
- to_send.RDHR = ((speed_kph >> 6) | (speed_kph << 7) | (counter << 20)) & 0x00FFFFFF;
- int cksm = 0x76;
- cksm = (cksm + (to_send.RDLR & 0xFF) + ((to_send.RDLR >> 8) & 0xFF) + ((to_send.RDLR >> 16) & 0xFF) + ((to_send.RDLR >> 24) & 0xFF)) & 0xFF;
- cksm = (cksm + (to_send.RDHR & 0xFF) + ((to_send.RDHR >> 8) & 0xFF) + ((to_send.RDHR >> 16) & 0xFF) + ((to_send.RDHR >> 24) & 0xFF)) & 0xFF;
- to_send.RDHR = to_send.RDHR | (cksm << 24);
- can_send(&to_send, bus_num);
-
- //to_send.RIR = (0x175 << 21) + (addr_mask & (to_fwd->RIR | 1));
- //can_send(&to_send, 0);
return;
}
if (addr == 0x108 )
{
to_send.RIR = (0x109 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
if (addr == 0x308 )
{
to_send.RIR = (0x209 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
if (addr == 0x45 )
{
to_send.RIR = (0x219 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
if (addr == 0x148 )
{
to_send.RIR = (0x1A9 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num,true);
return;
}
if (addr == 0x30A)
{
to_send.RIR = (0x2D9 << 21) + (addr_mask & (to_fwd->RIR | 1));
- can_send(&to_send, bus_num);
+ can_send(&to_send, bus_num, true);
return;
}
@@ -1802,9 +1972,31 @@ static int tesla_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd)
{
int32_t addr = to_fwd->RIR >> 21;
+ int ret_val = -1;
+
+ //if we never got the config from gtw, don't forward anything anywhere
+ if (DAS_gtwConfigReceived == 0) {
+ return -1;
+ }
- if (bus_num == 0)
+ //first let's deal with the messages we need to send to radar
+ if ((bus_num == 0) || ((bus_num == 2 ) && (DAS_usesApillarHarness == 1)))
{
+
+ //compute return value; do not forward 0->2 and 2->0 if no epas harness
+ if (bus_num == 0) {
+ if (DAS_noEpasHarness == 0) {
+ ret_val=2;
+ } else {
+ ret_val=-1;
+ }
+ } else if (bus_num == 2) {
+ if (DAS_noEpasHarness == 0) {
+ ret_val=0;
+ } else {
+ ret_val=-1;
+ }
+ }
//check all messages we need to also send to radar, moddified, after we receive 0x631 from radar
//148 does not exist, we use 115 at the same frequency to trigger and pass static vals
@@ -1813,46 +2005,54 @@ static int tesla_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd)
(addr == 0x115 ) || (addr == 0x148 ) || (addr == 0x145)))
{
tesla_fwd_to_radar_modded(tesla_radar_can, to_fwd);
+ return ret_val;
}
//check all messages we need to also send to radar, moddified, all the time
if (((addr == 0xE ) || (addr == 0x308 ) || (addr == 0x45 ) || (addr == 0x398 ) ||
(addr == 0x405 ) || (addr == 0x30A)) && (enable_radar_emulation == 1)) {
tesla_fwd_to_radar_modded(tesla_radar_can, to_fwd);
+ return ret_val;
}
//forward to radar unmodded the UDS messages 0x641
if (addr == 0x641 ) {
tesla_fwd_to_radar_as_is(tesla_radar_can, to_fwd);
+ return ret_val;
}
+
+ }
+ //now let's deal with CAN0 alone
+ if (bus_num == 0) {
- // change inhibit of GTW_epasControl
+ if (DAS_noEpasHarness == 0) {
+ ret_val=2;
+ } else {
+ ret_val=-1;
+ }
+
+ // change inhibit of GTW_epasControl and enabled haptic for LDW
if (addr == 0x101)
{
- to_fwd->RDLR = GET_BYTES_04(to_fwd) | 0x4000; // 0x4000: WITH_ANGLE, 0xC000: WITH_BOTH (angle and torque)
+ to_fwd->RDLR = GET_BYTES_04(to_fwd) | 0x4000 | 0x1000;
+ // 0x4000: WITH_ANGLE, 0xC000: WITH_BOTH (angle and torque)
+ // 0x1000: enabled LDW for haptic
int checksum = (GET_BYTE(to_fwd, 1) + GET_BYTE(to_fwd, 0) + 2) & 0xFF;
to_fwd->RDLR = GET_BYTES_04(to_fwd) & 0xFFFF;
to_fwd->RDLR = GET_BYTES_04(to_fwd) + (checksum << 16);
- if (DAS_noEpasHarness == 0) {
- return 2;
- } else {
- return -1;
- }
+ return ret_val;
}
- // remove EPB_epasControl
- if (addr == 0x214)
- {
+ if (addr == 0x214) {
+ //inhibit ibooster epas kill signal
return -1;
}
- if (DAS_noEpasHarness == 0) {
- return 2;
- } else {
- return -1;
- }
+ //forward everything else to CAN 2 unless claiming no harness
+ return ret_val;
}
+ //now let's deal with CAN1 - Radar
if (bus_num == tesla_radar_can) {
//send radar 0x531 and 0x651 from Radar CAN to CAN0
if ((addr == 0x531) || (addr == 0x651)){
@@ -1863,25 +2063,17 @@ static int tesla_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd)
return -1;
}
- if (bus_num == 2)
+ //now let's deal with CAN2
+ if ((bus_num == tesla_epas_can) && (bus_num > 0))
{
- // remove GTW_epasControl in forwards
- if (addr == 0x101)
- {
- return -1;
- }
-
// remove Pedal in forwards
if ((addr == 0x551) || (addr == 0x552)) {
return -1;
}
- if (DAS_noEpasHarness == 0) {
- return 0;
- } else {
- return -1;
- }
+ //forward everything else to CAN 0 unless claiming no harness
+ return 0;
}
return -1;
}
@@ -1891,6 +2083,7 @@ const safety_hooks tesla_hooks = {
.rx = tesla_rx_hook,
.tx = tesla_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = tesla_ign_hook,
.fwd = tesla_fwd_hook,
-};
\ No newline at end of file
+ .addr_check = tesla_rx_checks,
+ .addr_check_len = sizeof(tesla_rx_checks) / sizeof(tesla_rx_checks[0]),
+};
diff --git a/panda/board/safety/safety_toyota.h b/panda/board/safety/safety_toyota.h
index c1ce996058611b..2ffe58b5f46c6f 100644
--- a/panda/board/safety/safety_toyota.h
+++ b/panda/board/safety/safety_toyota.h
@@ -14,88 +14,126 @@ const uint32_t TOYOTA_RT_INTERVAL = 250000; // 250ms between real time checks
// longitudinal limits
const int TOYOTA_MAX_ACCEL = 1500; // 1.5 m/s2
-const int TOYOTA_MIN_ACCEL = -3000; // 3.0 m/s2
-
-const int TOYOTA_GAS_INTERCEPTOR_THRESHOLD = 475; // ratio between offset and gain from dbc file
+const int TOYOTA_MIN_ACCEL = -3000; // -3.0 m/s2
+
+const int TOYOTA_ISO_MAX_ACCEL = 2000; // 2.0 m/s2
+const int TOYOTA_ISO_MIN_ACCEL = -3500; // -3.5 m/s2
+
+const int TOYOTA_STANDSTILL_THRSLD = 100; // 1kph
+
+// Roughly calculated using the offsets in openpilot +5%:
+// In openpilot: ((gas1_norm + gas2_norm)/2) > 15
+// gas_norm1 = ((gain_dbc*gas1) + offset1_dbc)
+// gas_norm2 = ((gain_dbc*gas2) + offset2_dbc)
+// In this safety: ((gas1 + gas2)/2) > THRESHOLD
+const int TOYOTA_GAS_INTERCEPTOR_THRSLD = 845;
+#define TOYOTA_GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + (GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2) // avg between 2 tracks
+
+const CanMsg TOYOTA_TX_MSGS[] = {{0x283, 0, 7}, {0x2E6, 0, 8}, {0x2E7, 0, 8}, {0x33E, 0, 7}, {0x344, 0, 8}, {0x365, 0, 7}, {0x366, 0, 7}, {0x4CB, 0, 8}, // DSU bus 0
+ {0x128, 1, 6}, {0x141, 1, 4}, {0x160, 1, 8}, {0x161, 1, 7}, {0x470, 1, 4}, // DSU bus 1
+ {0x2E4, 0, 5}, {0x411, 0, 8}, {0x412, 0, 8}, {0x343, 0, 8}, {0x1D2, 0, 8}, // LKAS + ACC
+ {0x200, 0, 6}}; // interceptor
+
+AddrCheckStruct toyota_rx_checks[] = {
+ {.msg = {{ 0xaa, 0, 8, .check_checksum = false, .expected_timestep = 12000U}}},
+ {.msg = {{0x260, 0, 8, .check_checksum = true, .expected_timestep = 20000U}}},
+ {.msg = {{0x1D2, 0, 8, .check_checksum = true, .expected_timestep = 30000U}}},
+ {.msg = {{0x224, 0, 8, .check_checksum = false, .expected_timestep = 25000U},
+ {0x226, 0, 8, .check_checksum = false, .expected_timestep = 25000U}}},
+};
+const int TOYOTA_RX_CHECKS_LEN = sizeof(toyota_rx_checks) / sizeof(toyota_rx_checks[0]);
// global actuation limit states
int toyota_dbc_eps_torque_factor = 100; // conversion factor for STEER_TORQUE_EPS in %: see dbc file
-// states
-int toyota_giraffe_switch_1 = 0; // is giraffe switch 1 high?
-int toyota_camera_forwarded = 0; // should we forward the camera bus?
-int toyota_desired_torque_last = 0; // last desired steer torque
-int toyota_rt_torque_last = 0; // last desired torque for real time check
-uint32_t toyota_ts_last = 0;
-int toyota_cruise_engaged_last = 0; // cruise state
-int toyota_gas_prev = 0;
-struct sample_t toyota_torque_meas; // last 3 motor torques produced by the eps
+static uint8_t toyota_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int addr = GET_ADDR(to_push);
+ int len = GET_LEN(to_push);
+ uint8_t checksum = (uint8_t)(addr) + (uint8_t)((unsigned int)(addr) >> 8U) + (uint8_t)(len);
+ for (int i = 0; i < (len - 1); i++) {
+ checksum += (uint8_t)GET_BYTE(to_push, i);
+ }
+ return checksum;
+}
+static uint8_t toyota_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int checksum_byte = GET_LEN(to_push) - 1;
+ return (uint8_t)(GET_BYTE(to_push, checksum_byte));
+}
-static void toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+static int toyota_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- int bus = GET_BUS(to_push);
- int addr = GET_ADDR(to_push);
+ bool valid = addr_safety_check(to_push, toyota_rx_checks, TOYOTA_RX_CHECKS_LEN,
+ toyota_get_checksum, toyota_compute_checksum, NULL);
- // get eps motor torque (0.66 factor in dbc)
- if (addr == 0x260) {
- int torque_meas_new = (GET_BYTE(to_push, 5) << 8) | GET_BYTE(to_push, 6);
- torque_meas_new = to_signed(torque_meas_new, 16);
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
- // scale by dbc_factor
- torque_meas_new = (torque_meas_new * toyota_dbc_eps_torque_factor) / 100;
+ // get eps motor torque (0.66 factor in dbc)
+ if (addr == 0x260) {
+ int torque_meas_new = (GET_BYTE(to_push, 5) << 8) | GET_BYTE(to_push, 6);
+ torque_meas_new = to_signed(torque_meas_new, 16);
- // update array of sample
- update_sample(&toyota_torque_meas, torque_meas_new);
+ // scale by dbc_factor
+ torque_meas_new = (torque_meas_new * toyota_dbc_eps_torque_factor) / 100;
- // increase torque_meas by 1 to be conservative on rounding
- toyota_torque_meas.min--;
- toyota_torque_meas.max++;
- }
+ // update array of sample
+ update_sample(&torque_meas, torque_meas_new);
- // enter controls on rising edge of ACC, exit controls on ACC off
- if (addr == 0x1D2) {
- // 5th bit is CRUISE_ACTIVE
- int cruise_engaged = GET_BYTE(to_push, 0) & 0x20;
- if (!cruise_engaged) {
- controls_allowed = 0;
+ // increase torque_meas by 1 to be conservative on rounding
+ torque_meas.min--;
+ torque_meas.max++;
}
- if (cruise_engaged && !toyota_cruise_engaged_last) {
- controls_allowed = 1;
+
+ // enter controls on rising edge of ACC, exit controls on ACC off
+ // exit controls on rising edge of gas press
+ if (addr == 0x1D2) {
+ // 5th bit is CRUISE_ACTIVE
+ int cruise_engaged = GET_BYTE(to_push, 0) & 0x20;
+ if (!cruise_engaged) {
+ controls_allowed = 0;
+ }
+ if (cruise_engaged && !cruise_engaged_prev) {
+ controls_allowed = 1;
+ }
+ cruise_engaged_prev = cruise_engaged;
+
+ // sample gas pedal
+ if (!gas_interceptor_detected) {
+ gas_pressed = ((GET_BYTE(to_push, 0) >> 4) & 1) == 0;
+ }
}
- toyota_cruise_engaged_last = cruise_engaged;
- }
- // exit controls on rising edge of interceptor gas press
- if (addr == 0x201) {
- gas_interceptor_detected = 1;
- int gas_interceptor = GET_INTERCEPTOR(to_push);
- if ((gas_interceptor > TOYOTA_GAS_INTERCEPTOR_THRESHOLD) &&
- (gas_interceptor_prev <= TOYOTA_GAS_INTERCEPTOR_THRESHOLD) &&
- long_controls_allowed) {
- controls_allowed = 0;
+ // sample speed
+ if (addr == 0xaa) {
+ int speed = 0;
+ // sum 4 wheel speeds
+ for (int i=0; i<8; i+=2) {
+ int next_byte = i + 1; // hack to deal with misra 10.8
+ speed += (GET_BYTE(to_push, i) << 8) + GET_BYTE(to_push, next_byte) - 0x1a6f;
+ }
+ vehicle_moving = ABS(speed / 4) > TOYOTA_STANDSTILL_THRSLD;
}
- gas_interceptor_prev = gas_interceptor;
- }
- // exit controls on rising edge of gas press
- if (addr == 0x2C1) {
- int gas = GET_BYTE(to_push, 6) & 0xFF;
- if ((gas > 0) && (toyota_gas_prev == 0) && !gas_interceptor_detected && long_controls_allowed) {
- controls_allowed = 0;
+ // most cars have brake_pressed on 0x226, corolla and rav4 on 0x224
+ if ((addr == 0x224) || (addr == 0x226)) {
+ int byte = (addr == 0x224) ? 0 : 4;
+ brake_pressed = ((GET_BYTE(to_push, byte) >> 5) & 1) != 0;
}
- toyota_gas_prev = gas;
- }
- // msgs are only on bus 2 if panda is connected to frc
- if (bus == 2) {
- toyota_camera_forwarded = 1;
- }
+ // sample gas interceptor
+ if (addr == 0x201) {
+ gas_interceptor_detected = 1;
+ int gas_interceptor = TOYOTA_GET_INTERCEPTOR(to_push);
+ gas_pressed = gas_interceptor > TOYOTA_GAS_INTERCEPTOR_THRSLD;
- // 0x2E4 is lkas cmd. If it is on bus 0, then giraffe switch 1 is high
- if ((addr == 0x2E4) && (bus == 0)) {
- toyota_giraffe_switch_1 = 1;
+ // TODO: remove this, only left in for gas_interceptor_prev test
+ gas_interceptor_prev = gas_interceptor;
+ }
+
+ generic_rx_checks((addr == 0x2E4));
}
+ return valid;
}
static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
@@ -104,17 +142,20 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
int addr = GET_ADDR(to_send);
int bus = GET_BUS(to_send);
+ if (!msg_allowed(to_send, TOYOTA_TX_MSGS, sizeof(TOYOTA_TX_MSGS)/sizeof(TOYOTA_TX_MSGS[0]))) {
+ tx = 0;
+ }
+
+ if (relay_malfunction) {
+ tx = 0;
+ }
+
// Check if msg is sent on BUS 0
if (bus == 0) {
- // no IPAS in non IPAS mode
- if ((addr == 0x266) || (addr == 0x167)) {
- tx = 0;
- }
-
// GAS PEDAL: safety check
if (addr == 0x200) {
- if (!controls_allowed || !long_controls_allowed) {
+ if (!controls_allowed) {
if (GET_BYTE(to_send, 0) || GET_BYTE(to_send, 1)) {
tx = 0;
}
@@ -125,12 +166,15 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
if (addr == 0x343) {
int desired_accel = (GET_BYTE(to_send, 0) << 8) | GET_BYTE(to_send, 1);
desired_accel = to_signed(desired_accel, 16);
- if (!controls_allowed || !long_controls_allowed) {
+ if (!controls_allowed) {
if (desired_accel != 0) {
tx = 0;
}
}
- bool violation = max_limit_check(desired_accel, TOYOTA_MAX_ACCEL, TOYOTA_MIN_ACCEL);
+ bool violation = (unsafe_mode & UNSAFE_RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX)?
+ max_limit_check(desired_accel, TOYOTA_ISO_MAX_ACCEL, TOYOTA_ISO_MIN_ACCEL) :
+ max_limit_check(desired_accel, TOYOTA_MAX_ACCEL, TOYOTA_MIN_ACCEL);
+
if (violation) {
tx = 0;
}
@@ -150,20 +194,20 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
violation |= max_limit_check(desired_torque, TOYOTA_MAX_TORQUE, -TOYOTA_MAX_TORQUE);
// *** torque rate limit check ***
- violation |= dist_to_meas_check(desired_torque, toyota_desired_torque_last,
- &toyota_torque_meas, TOYOTA_MAX_RATE_UP, TOYOTA_MAX_RATE_DOWN, TOYOTA_MAX_TORQUE_ERROR);
+ violation |= dist_to_meas_check(desired_torque, desired_torque_last,
+ &torque_meas, TOYOTA_MAX_RATE_UP, TOYOTA_MAX_RATE_DOWN, TOYOTA_MAX_TORQUE_ERROR);
// used next time
- toyota_desired_torque_last = desired_torque;
+ desired_torque_last = desired_torque;
// *** torque real time rate limit check ***
- violation |= rt_rate_limit_check(desired_torque, toyota_rt_torque_last, TOYOTA_MAX_RT_DELTA);
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, TOYOTA_MAX_RT_DELTA);
// every RT_INTERVAL set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, toyota_ts_last);
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
if (ts_elapsed > TOYOTA_RT_INTERVAL) {
- toyota_rt_torque_last = desired_torque;
- toyota_ts_last = ts;
+ rt_torque_last = desired_torque;
+ ts_last = ts;
}
}
@@ -174,9 +218,9 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
// reset to 0 if either controls is not allowed or there's a violation
if (violation || !controls_allowed) {
- toyota_desired_torque_last = 0;
- toyota_rt_torque_last = 0;
- toyota_ts_last = ts;
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
}
if (violation) {
@@ -185,32 +229,31 @@ static int toyota_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
}
}
- // 1 allows the message through
return tx;
}
static void toyota_init(int16_t param) {
controls_allowed = 0;
- toyota_giraffe_switch_1 = 0;
- toyota_camera_forwarded = 0;
+ relay_malfunction_reset();
+ gas_interceptor_detected = 0;
toyota_dbc_eps_torque_factor = param;
}
static int toyota_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
int bus_fwd = -1;
- if (toyota_camera_forwarded && !toyota_giraffe_switch_1) {
+ if (!relay_malfunction) {
if (bus_num == 0) {
bus_fwd = 2;
}
if (bus_num == 2) {
int addr = GET_ADDR(to_fwd);
// block stock lkas messages and stock acc messages (if OP is doing ACC)
- // in TSS2, 0.191 is LTA which we need to block to avoid controls collision
+ // in TSS2, 0x191 is LTA which we need to block to avoid controls collision
int is_lkas_msg = ((addr == 0x2E4) || (addr == 0x412) || (addr == 0x191));
// in TSS2 the camera does ACC as well, so filter 0x343
int is_acc_msg = (addr == 0x343);
- int block_msg = is_lkas_msg || (is_acc_msg && long_controls_allowed);
+ int block_msg = is_lkas_msg || is_acc_msg;
if (!block_msg) {
bus_fwd = 0;
}
@@ -224,6 +267,7 @@ const safety_hooks toyota_hooks = {
.rx = toyota_rx_hook,
.tx = toyota_tx_hook,
.tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
.fwd = toyota_fwd_hook,
+ .addr_check = toyota_rx_checks,
+ .addr_check_len = sizeof(toyota_rx_checks)/sizeof(toyota_rx_checks[0]),
};
diff --git a/panda/board/safety/safety_toyota_ipas.h b/panda/board/safety/safety_toyota_ipas.h
deleted file mode 100644
index 3e3a3b3a24134f..00000000000000
--- a/panda/board/safety/safety_toyota_ipas.h
+++ /dev/null
@@ -1,169 +0,0 @@
-// uses tons from safety_toyota
-// TODO: refactor to repeat less code
-
-// IPAS override
-const int32_t TOYOTA_IPAS_OVERRIDE_THRESHOLD = 200; // disallow controls when user torque exceeds this value
-
-// 2m/s are added to be less restrictive
-const struct lookup_t LOOKUP_ANGLE_RATE_UP = {
- {2., 7., 17.},
- {5., .8, .15}};
-
-const struct lookup_t LOOKUP_ANGLE_RATE_DOWN = {
- {2., 7., 17.},
- {5., 3.5, .4}};
-
-const float RT_ANGLE_FUDGE = 1.5; // for RT checks allow 50% more angle change
-const float CAN_TO_DEG = 2. / 3.; // convert angles from CAN unit to degrees
-
-int ipas_state = 1; // 1 disabled, 3 executing angle control, 5 override
-int angle_control = 0; // 1 if direct angle control packets are seen
-float speed = 0.;
-
-struct sample_t angle_meas; // last 3 steer angles
-struct sample_t torque_driver; // last 3 driver steering torque
-
-// state of angle limits
-int16_t desired_angle_last = 0; // last desired steer angle
-int16_t rt_angle_last = 0; // last desired torque for real time check
-uint32_t ts_angle_last = 0;
-
-int controls_allowed_last = 0;
-
-
-static void toyota_ipas_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
- // check standard toyota stuff as well
- toyota_rx_hook(to_push);
-
- int addr = GET_ADDR(to_push);
-
- if (addr == 0x260) {
- // get driver steering torque
- int16_t torque_driver_new = (GET_BYTE(to_push, 1) << 8) | GET_BYTE(to_push, 2);
-
- // update array of samples
- update_sample(&torque_driver, torque_driver_new);
- }
-
- // get steer angle
- if (addr == 0x25) {
- int angle_meas_new = ((GET_BYTE(to_push, 0) & 0xF) << 8) | GET_BYTE(to_push, 1);
- uint32_t ts = TIM2->CNT;
-
- angle_meas_new = to_signed(angle_meas_new, 12);
-
- // update array of samples
- update_sample(&angle_meas, angle_meas_new);
-
- // *** angle real time check
- // add 1 to not false trigger the violation and multiply by 20 since the check is done every 250ms and steer angle is updated at 80Hz
- int rt_delta_angle_up = ((int)(RT_ANGLE_FUDGE * ((interpolate(LOOKUP_ANGLE_RATE_UP, speed) * 20. * CAN_TO_DEG) + 1.)));
- int rt_delta_angle_down = ((int)(RT_ANGLE_FUDGE * ((interpolate(LOOKUP_ANGLE_RATE_DOWN, speed) * 20. * CAN_TO_DEG) + 1.)));
- int highest_rt_angle = rt_angle_last + ((rt_angle_last > 0) ? rt_delta_angle_up : rt_delta_angle_down);
- int lowest_rt_angle = rt_angle_last - ((rt_angle_last > 0) ? rt_delta_angle_down : rt_delta_angle_up);
-
- // every RT_INTERVAL or when controls are turned on, set the new limits
- uint32_t ts_elapsed = get_ts_elapsed(ts, ts_angle_last);
- if ((ts_elapsed > TOYOTA_RT_INTERVAL) || (controls_allowed && !controls_allowed_last)) {
- rt_angle_last = angle_meas_new;
- ts_angle_last = ts;
- }
-
- // check for violation
- if (angle_control &&
- ((angle_meas_new < lowest_rt_angle) ||
- (angle_meas_new > highest_rt_angle))) {
- controls_allowed = 0;
- }
-
- controls_allowed_last = controls_allowed;
- }
-
- // get speed
- if (addr == 0xb4) {
- speed = ((float)((GET_BYTE(to_push, 5) << 8) | GET_BYTE(to_push, 6))) * 0.01 / 3.6;
- }
-
- // get ipas state
- if (addr == 0x262) {
- ipas_state = GET_BYTE(to_push, 0) & 0xf;
- }
-
- // exit controls on high steering override
- if (angle_control && ((torque_driver.min > TOYOTA_IPAS_OVERRIDE_THRESHOLD) ||
- (torque_driver.max < -TOYOTA_IPAS_OVERRIDE_THRESHOLD) ||
- (ipas_state==5))) {
- controls_allowed = 0;
- }
-}
-
-static int toyota_ipas_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
-
- int tx = 1;
- int bypass_standard_tx_hook = 0;
- int bus = GET_BUS(to_send);
- int addr = GET_ADDR(to_send);
-
- // Check if msg is sent on BUS 0
- if (bus == 0) {
-
- // STEER ANGLE
- if ((addr == 0x266) || (addr == 0x167)) {
-
- angle_control = 1; // we are in angle control mode
- int desired_angle = ((GET_BYTE(to_send, 0) & 0xF) << 8) | GET_BYTE(to_send, 1);
- int ipas_state_cmd = GET_BYTE(to_send, 0) >> 4;
- bool violation = 0;
-
- desired_angle = to_signed(desired_angle, 12);
-
- if (controls_allowed) {
- // add 1 to not false trigger the violation
- float delta_angle_float;
- delta_angle_float = (interpolate(LOOKUP_ANGLE_RATE_UP, speed) * CAN_TO_DEG) + 1.;
- int delta_angle_up = (int) (delta_angle_float);
- delta_angle_float = (interpolate(LOOKUP_ANGLE_RATE_DOWN, speed) * CAN_TO_DEG) + 1.;
- int delta_angle_down = (int) (delta_angle_float);
-
- int highest_desired_angle = desired_angle_last + ((desired_angle_last > 0) ? delta_angle_up : delta_angle_down);
- int lowest_desired_angle = desired_angle_last - ((desired_angle_last > 0) ? delta_angle_down : delta_angle_up);
- if ((desired_angle > highest_desired_angle) ||
- (desired_angle < lowest_desired_angle)){
- violation = 1;
- controls_allowed = 0;
- }
- }
-
- // desired steer angle should be the same as steer angle measured when controls are off
- if ((!controls_allowed) &&
- ((desired_angle < (angle_meas.min - 1)) ||
- (desired_angle > (angle_meas.max + 1)) ||
- (ipas_state_cmd != 1))) {
- violation = 1;
- }
-
- desired_angle_last = desired_angle;
-
- if (violation) {
- tx = 0;
- }
- bypass_standard_tx_hook = 1;
- }
- }
-
- // check standard toyota stuff as well if addr isn't IPAS related
- if (!bypass_standard_tx_hook) {
- tx &= toyota_tx_hook(to_send);
- }
-
- return tx;
-}
-
-const safety_hooks toyota_ipas_hooks = {
- .init = toyota_init,
- .rx = toyota_ipas_rx_hook,
- .tx = toyota_ipas_tx_hook,
- .tx_lin = nooutput_tx_lin_hook,
- .ignition = default_ign_hook,
- .fwd = toyota_fwd_hook,
-};
diff --git a/panda/board/safety/safety_volkswagen.h b/panda/board/safety/safety_volkswagen.h
new file mode 100644
index 00000000000000..2a2c4474558346
--- /dev/null
+++ b/panda/board/safety/safety_volkswagen.h
@@ -0,0 +1,406 @@
+// Safety-relevant steering constants for Volkswagen
+const int VOLKSWAGEN_MAX_STEER = 300; // 3.0 Nm (EPS side max of 3.0Nm with fault if violated)
+const int VOLKSWAGEN_MAX_RT_DELTA = 75; // 4 max rate up * 50Hz send rate * 250000 RT interval / 1000000 = 50 ; 50 * 1.5 for safety pad = 75
+const uint32_t VOLKSWAGEN_RT_INTERVAL = 250000; // 250ms between real time checks
+const int VOLKSWAGEN_MAX_RATE_UP = 4; // 2.0 Nm/s RoC limit (EPS rack has own soft-limit of 5.0 Nm/s)
+const int VOLKSWAGEN_MAX_RATE_DOWN = 10; // 5.0 Nm/s RoC limit (EPS rack has own soft-limit of 5.0 Nm/s)
+const int VOLKSWAGEN_DRIVER_TORQUE_ALLOWANCE = 80;
+const int VOLKSWAGEN_DRIVER_TORQUE_FACTOR = 3;
+
+// Safety-relevant CAN messages for the Volkswagen MQB platform
+#define MSG_ESP_19 0x0B2 // RX from ABS, for wheel speeds
+#define MSG_EPS_01 0x09F // RX from EPS, for driver steering torque
+#define MSG_ESP_05 0x106 // RX from ABS, for brake switch state
+#define MSG_TSK_06 0x120 // RX from ECU, for ACC status from drivetrain coordinator
+#define MSG_MOTOR_20 0x121 // RX from ECU, for driver throttle input
+#define MSG_HCA_01 0x126 // TX by OP, Heading Control Assist steering torque
+#define MSG_GRA_ACC_01 0x12B // TX by OP, ACC control buttons for cancel/resume
+#define MSG_LDW_02 0x397 // TX by OP, Lane line recognition and text alerts
+
+// Transmit of GRA_ACC_01 is allowed on bus 0 and 2 to keep compatibility with gateway and camera integration
+const CanMsg VOLKSWAGEN_MQB_TX_MSGS[] = {{MSG_HCA_01, 0, 8}, {MSG_GRA_ACC_01, 0, 8}, {MSG_GRA_ACC_01, 2, 8}, {MSG_LDW_02, 0, 8}};
+const int VOLKSWAGEN_MQB_TX_MSGS_LEN = sizeof(VOLKSWAGEN_MQB_TX_MSGS) / sizeof(VOLKSWAGEN_MQB_TX_MSGS[0]);
+
+AddrCheckStruct volkswagen_mqb_rx_checks[] = {
+ {.msg = {{MSG_ESP_19, 0, 8, .check_checksum = false, .max_counter = 0U, .expected_timestep = 10000U}}},
+ {.msg = {{MSG_EPS_01, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 10000U}}},
+ {.msg = {{MSG_ESP_05, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{MSG_TSK_06, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+ {.msg = {{MSG_MOTOR_20, 0, 8, .check_checksum = true, .max_counter = 15U, .expected_timestep = 20000U}}},
+};
+const int VOLKSWAGEN_MQB_RX_CHECKS_LEN = sizeof(volkswagen_mqb_rx_checks) / sizeof(volkswagen_mqb_rx_checks[0]);
+
+// Safety-relevant CAN messages for the Volkswagen PQ35/PQ46/NMS platforms
+#define MSG_LENKHILFE_3 0x0D0 // RX from EPS, for steering angle and driver steering torque
+#define MSG_HCA_1 0x0D2 // TX by OP, Heading Control Assist steering torque
+#define MSG_MOTOR_2 0x288 // RX from ECU, for CC state and brake switch state
+#define MSG_MOTOR_3 0x380 // RX from ECU, for driver throttle input
+#define MSG_GRA_NEU 0x38A // TX by OP, ACC control buttons for cancel/resume
+#define MSG_BREMSE_3 0x4A0 // RX from ABS, for wheel speeds
+#define MSG_LDW_1 0x5BE // TX by OP, Lane line recognition and text alerts
+
+// Transmit of GRA_Neu is allowed on bus 0 and 2 to keep compatibility with gateway and camera integration
+const CanMsg VOLKSWAGEN_PQ_TX_MSGS[] = {{MSG_HCA_1, 0, 5}, {MSG_GRA_NEU, 0, 4}, {MSG_GRA_NEU, 2, 4}, {MSG_LDW_1, 0, 8}};
+const int VOLKSWAGEN_PQ_TX_MSGS_LEN = sizeof(VOLKSWAGEN_PQ_TX_MSGS) / sizeof(VOLKSWAGEN_PQ_TX_MSGS[0]);
+
+AddrCheckStruct volkswagen_pq_rx_checks[] = {
+ {.msg = {{MSG_LENKHILFE_3, 0, 6, .check_checksum = true, .max_counter = 15U, .expected_timestep = 10000U}}},
+ {.msg = {{MSG_MOTOR_2, 0, 8, .check_checksum = false, .max_counter = 0U, .expected_timestep = 20000U}}},
+ {.msg = {{MSG_MOTOR_3, 0, 8, .check_checksum = false, .max_counter = 0U, .expected_timestep = 10000U}}},
+ {.msg = {{MSG_BREMSE_3, 0, 8, .check_checksum = false, .max_counter = 0U, .expected_timestep = 10000U}}},
+};
+const int VOLKSWAGEN_PQ_RX_CHECKS_LEN = sizeof(volkswagen_pq_rx_checks) / sizeof(volkswagen_pq_rx_checks[0]);
+
+int volkswagen_torque_msg = 0;
+int volkswagen_lane_msg = 0;
+uint8_t volkswagen_crc8_lut_8h2f[256]; // Static lookup table for CRC8 poly 0x2F, aka 8H2F/AUTOSAR
+
+
+static uint8_t volkswagen_get_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ return (uint8_t)GET_BYTE(to_push, 0);
+}
+
+static uint8_t volkswagen_mqb_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
+ // MQB message counters are consistently found at LSB 8.
+ return (uint8_t)GET_BYTE(to_push, 1) & 0xFU;
+}
+
+static uint8_t volkswagen_pq_get_counter(CAN_FIFOMailBox_TypeDef *to_push) {
+ // Few PQ messages have counters, and their offsets are inconsistent. This
+ // function works only for Lenkhilfe_3 at this time.
+ return (uint8_t)(GET_BYTE(to_push, 1) & 0xF0U) >> 4;
+}
+
+static uint8_t volkswagen_mqb_compute_crc(CAN_FIFOMailBox_TypeDef *to_push) {
+ int addr = GET_ADDR(to_push);
+ int len = GET_LEN(to_push);
+
+ // This is CRC-8H2F/AUTOSAR with a twist. See the OpenDBC implementation
+ // of this algorithm for a version with explanatory comments.
+
+ uint8_t crc = 0xFFU;
+ for (int i = 1; i < len; i++) {
+ crc ^= (uint8_t)GET_BYTE(to_push, i);
+ crc = volkswagen_crc8_lut_8h2f[crc];
+ }
+
+ uint8_t counter = volkswagen_mqb_get_counter(to_push);
+ switch(addr) {
+ case MSG_EPS_01:
+ crc ^= (uint8_t[]){0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5}[counter];
+ break;
+ case MSG_ESP_05:
+ crc ^= (uint8_t[]){0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07}[counter];
+ break;
+ case MSG_TSK_06:
+ crc ^= (uint8_t[]){0xC4,0xE2,0x4F,0xE4,0xF8,0x2F,0x56,0x81,0x9F,0xE5,0x83,0x44,0x05,0x3F,0x97,0xDF}[counter];
+ break;
+ case MSG_MOTOR_20:
+ crc ^= (uint8_t[]){0xE9,0x65,0xAE,0x6B,0x7B,0x35,0xE5,0x5F,0x4E,0xC7,0x86,0xA2,0xBB,0xDD,0xEB,0xB4}[counter];
+ break;
+ default: // Undefined CAN message, CRC check expected to fail
+ break;
+ }
+ crc = volkswagen_crc8_lut_8h2f[crc];
+
+ return crc ^ 0xFFU;
+}
+
+static uint8_t volkswagen_pq_compute_checksum(CAN_FIFOMailBox_TypeDef *to_push) {
+ int len = GET_LEN(to_push);
+ uint8_t checksum = 0U;
+
+ for (int i = 1; i < len; i++) {
+ checksum ^= (uint8_t)GET_BYTE(to_push, i);
+ }
+
+ return checksum;
+}
+
+static void volkswagen_mqb_init(int16_t param) {
+ UNUSED(param);
+
+ controls_allowed = false;
+ relay_malfunction_reset();
+ volkswagen_torque_msg = MSG_HCA_01;
+ volkswagen_lane_msg = MSG_LDW_02;
+ gen_crc_lookup_table(0x2F, volkswagen_crc8_lut_8h2f);
+}
+
+static void volkswagen_pq_init(int16_t param) {
+ UNUSED(param);
+
+ controls_allowed = false;
+ relay_malfunction_reset();
+ volkswagen_torque_msg = MSG_HCA_1;
+ volkswagen_lane_msg = MSG_LDW_1;
+}
+
+static int volkswagen_mqb_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+
+ bool valid = addr_safety_check(to_push, volkswagen_mqb_rx_checks, VOLKSWAGEN_MQB_RX_CHECKS_LEN,
+ volkswagen_get_checksum, volkswagen_mqb_compute_crc, volkswagen_mqb_get_counter);
+
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
+
+ // Update in-motion state by sampling front wheel speeds
+ // Signal: ESP_19.ESP_VL_Radgeschw_02 (front left) in scaled km/h
+ // Signal: ESP_19.ESP_VR_Radgeschw_02 (front right) in scaled km/h
+ if (addr == MSG_ESP_19) {
+ int wheel_speed_fl = GET_BYTE(to_push, 4) | (GET_BYTE(to_push, 5) << 8);
+ int wheel_speed_fr = GET_BYTE(to_push, 6) | (GET_BYTE(to_push, 7) << 8);
+ // Check for average front speed in excess of 0.3m/s, 1.08km/h
+ // DBC speed scale 0.0075: 0.3m/s = 144, sum both wheels to compare
+ vehicle_moving = (wheel_speed_fl + wheel_speed_fr) > 288;
+ }
+
+ // Update driver input torque samples
+ // Signal: EPS_01.Driver_Strain (absolute torque)
+ // Signal: EPS_01.Driver_Strain_VZ (direction)
+ if (addr == MSG_EPS_01) {
+ int torque_driver_new = GET_BYTE(to_push, 5) | ((GET_BYTE(to_push, 6) & 0x1F) << 8);
+ int sign = (GET_BYTE(to_push, 6) & 0x80) >> 7;
+ if (sign == 1) {
+ torque_driver_new *= -1;
+ }
+ update_sample(&torque_driver, torque_driver_new);
+ }
+
+ // Update ACC status from drivetrain coordinator for controls-allowed state
+ // Signal: TSK_06.TSK_Status
+ if (addr == MSG_TSK_06) {
+ int acc_status = (GET_BYTE(to_push, 3) & 0x7);
+ controls_allowed = ((acc_status == 3) || (acc_status == 4) || (acc_status == 5)) ? 1 : 0;
+ }
+
+ // Signal: Motor_20.MO_Fahrpedalrohwert_01
+ if (addr == MSG_MOTOR_20) {
+ gas_pressed = ((GET_BYTES_04(to_push) >> 12) & 0xFF) != 0;
+ }
+
+ // Signal: ESP_05.ESP_Fahrer_bremst
+ if (addr == MSG_ESP_05) {
+ brake_pressed = (GET_BYTE(to_push, 3) & 0x4) >> 2;
+ }
+
+ generic_rx_checks((addr == MSG_HCA_01));
+ }
+ return valid;
+}
+
+static int volkswagen_pq_rx_hook(CAN_FIFOMailBox_TypeDef *to_push) {
+
+ bool valid = addr_safety_check(to_push, volkswagen_pq_rx_checks, VOLKSWAGEN_PQ_RX_CHECKS_LEN,
+ volkswagen_get_checksum, volkswagen_pq_compute_checksum, volkswagen_pq_get_counter);
+
+ if (valid && (GET_BUS(to_push) == 0)) {
+ int addr = GET_ADDR(to_push);
+
+ // Update in-motion state by sampling front wheel speeds
+ // Signal: Bremse_3.Radgeschw__VL_4_1 (front left)
+ // Signal: Bremse_3.Radgeschw__VR_4_1 (front right)
+ if (addr == MSG_BREMSE_3) {
+ int wheel_speed_fl = (GET_BYTE(to_push, 0) | (GET_BYTE(to_push, 1) << 8)) >> 1;
+ int wheel_speed_fr = (GET_BYTE(to_push, 2) | (GET_BYTE(to_push, 3) << 8)) >> 1;
+ // Check for average front speed in excess of 0.3m/s, 1.08km/h
+ // DBC speed scale 0.01: 0.3m/s = 108, sum both wheels to compare
+ vehicle_moving = (wheel_speed_fl + wheel_speed_fr) > 216;
+ }
+
+ // Update driver input torque samples
+ // Signal: Lenkhilfe_3.LH3_LM (absolute torque)
+ // Signal: Lenkhilfe_3.LH3_LMSign (direction)
+ if (addr == MSG_LENKHILFE_3) {
+ int torque_driver_new = GET_BYTE(to_push, 2) | ((GET_BYTE(to_push, 3) & 0x3) << 8);
+ int sign = (GET_BYTE(to_push, 3) & 0x4) >> 2;
+ if (sign == 1) {
+ torque_driver_new *= -1;
+ }
+ update_sample(&torque_driver, torque_driver_new);
+ }
+
+ // Update ACC status from ECU for controls-allowed state
+ // Signal: Motor_2.GRA_Status
+ if (addr == MSG_MOTOR_2) {
+ int acc_status = (GET_BYTE(to_push, 2) & 0xC0) >> 6;
+ controls_allowed = ((acc_status == 1) || (acc_status == 2)) ? 1 : 0;
+ }
+
+ // Signal: Motor_3.Fahrpedal_Rohsignal
+ if (addr == MSG_MOTOR_3) {
+ gas_pressed = (GET_BYTE(to_push, 2));
+ }
+
+ // Signal: Motor_2.Bremslichtschalter
+ if (addr == MSG_MOTOR_2) {
+ brake_pressed = (GET_BYTE(to_push, 2) & 0x1);
+ }
+
+ generic_rx_checks((addr == MSG_HCA_1));
+ }
+ return valid;
+}
+
+static bool volkswagen_steering_check(int desired_torque) {
+ bool violation = false;
+ uint32_t ts = TIM2->CNT;
+
+ if (controls_allowed) {
+ // *** global torque limit check ***
+ violation |= max_limit_check(desired_torque, VOLKSWAGEN_MAX_STEER, -VOLKSWAGEN_MAX_STEER);
+
+ // *** torque rate limit check ***
+ violation |= driver_limit_check(desired_torque, desired_torque_last, &torque_driver,
+ VOLKSWAGEN_MAX_STEER, VOLKSWAGEN_MAX_RATE_UP, VOLKSWAGEN_MAX_RATE_DOWN,
+ VOLKSWAGEN_DRIVER_TORQUE_ALLOWANCE, VOLKSWAGEN_DRIVER_TORQUE_FACTOR);
+ desired_torque_last = desired_torque;
+
+ // *** torque real time rate limit check ***
+ violation |= rt_rate_limit_check(desired_torque, rt_torque_last, VOLKSWAGEN_MAX_RT_DELTA);
+
+ // every RT_INTERVAL set the new limits
+ uint32_t ts_elapsed = get_ts_elapsed(ts, ts_last);
+ if (ts_elapsed > VOLKSWAGEN_RT_INTERVAL) {
+ rt_torque_last = desired_torque;
+ ts_last = ts;
+ }
+ }
+
+ // no torque if controls is not allowed
+ if (!controls_allowed && (desired_torque != 0)) {
+ violation = true;
+ }
+
+ // reset to 0 if either controls is not allowed or there's a violation
+ if (violation || !controls_allowed) {
+ desired_torque_last = 0;
+ rt_torque_last = 0;
+ ts_last = ts;
+ }
+
+ return violation;
+}
+
+static int volkswagen_mqb_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
+ int addr = GET_ADDR(to_send);
+ int tx = 1;
+
+ if (!msg_allowed(to_send, VOLKSWAGEN_MQB_TX_MSGS, VOLKSWAGEN_MQB_TX_MSGS_LEN) || relay_malfunction) {
+ tx = 0;
+ }
+
+ // Safety check for HCA_01 Heading Control Assist torque
+ // Signal: HCA_01.Assist_Torque (absolute torque)
+ // Signal: HCA_01.Assist_VZ (direction)
+ if (addr == MSG_HCA_01) {
+ int desired_torque = GET_BYTE(to_send, 2) | ((GET_BYTE(to_send, 3) & 0x3F) << 8);
+ int sign = (GET_BYTE(to_send, 3) & 0x80) >> 7;
+ if (sign == 1) {
+ desired_torque *= -1;
+ }
+
+ if (volkswagen_steering_check(desired_torque)) {
+ tx = 0;
+ }
+ }
+
+ // FORCE CANCEL: ensuring that only the cancel button press is sent when controls are off.
+ // This avoids unintended engagements while still allowing resume spam
+ if ((addr == MSG_GRA_ACC_01) && !controls_allowed) {
+ // disallow resume and set: bits 16 and 19
+ if ((GET_BYTE(to_send, 2) & 0x9) != 0) {
+ tx = 0;
+ }
+ }
+
+ // 1 allows the message through
+ return tx;
+}
+
+static int volkswagen_pq_tx_hook(CAN_FIFOMailBox_TypeDef *to_send) {
+ int addr = GET_ADDR(to_send);
+ int tx = 1;
+
+ if (!msg_allowed(to_send, VOLKSWAGEN_PQ_TX_MSGS, VOLKSWAGEN_PQ_TX_MSGS_LEN) || relay_malfunction) {
+ tx = 0;
+ }
+
+ // Safety check for HCA_1 Heading Control Assist torque
+ // Signal: HCA_1.LM_Offset (absolute torque)
+ // Signal: HCA_1.LM_Offsign (direction)
+ if (addr == MSG_HCA_1) {
+ int desired_torque = GET_BYTE(to_send, 2) | ((GET_BYTE(to_send, 3) & 0x7F) << 8);
+ desired_torque = desired_torque / 32; // DBC scale from PQ network to centi-Nm
+ int sign = (GET_BYTE(to_send, 3) & 0x80) >> 7;
+ if (sign == 1) {
+ desired_torque *= -1;
+ }
+
+ if (volkswagen_steering_check(desired_torque)) {
+ tx = 0;
+ }
+ }
+
+ // FORCE CANCEL: ensuring that only the cancel button press is sent when controls are off.
+ // This avoids unintended engagements while still allowing resume spam
+ if ((addr == MSG_GRA_NEU) && !controls_allowed) {
+ // disallow resume and set: bits 16 and 17
+ if ((GET_BYTE(to_send, 2) & 0x3) != 0) {
+ tx = 0;
+ }
+ }
+
+ // 1 allows the message through
+ return tx;
+}
+
+static int volkswagen_fwd_hook(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd) {
+ int addr = GET_ADDR(to_fwd);
+ int bus_fwd = -1;
+
+ if (!relay_malfunction) {
+ switch (bus_num) {
+ case 0:
+ // Forward all traffic from the Extended CAN onward
+ bus_fwd = 2;
+ break;
+ case 2:
+ if ((addr == volkswagen_torque_msg) || (addr == volkswagen_lane_msg)) {
+ // OP takes control of the Heading Control Assist and Lane Departure Warning messages from the camera
+ bus_fwd = -1;
+ } else {
+ // Forward all remaining traffic from Extended CAN devices to J533 gateway
+ bus_fwd = 0;
+ }
+ break;
+ default:
+ // No other buses should be in use; fallback to do-not-forward
+ bus_fwd = -1;
+ break;
+ }
+ }
+ return bus_fwd;
+}
+
+// Volkswagen MQB platform
+const safety_hooks volkswagen_mqb_hooks = {
+ .init = volkswagen_mqb_init,
+ .rx = volkswagen_mqb_rx_hook,
+ .tx = volkswagen_mqb_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = volkswagen_fwd_hook,
+ .addr_check = volkswagen_mqb_rx_checks,
+ .addr_check_len = sizeof(volkswagen_mqb_rx_checks) / sizeof(volkswagen_mqb_rx_checks[0]),
+};
+
+// Volkswagen PQ35/PQ46/NMS platforms
+const safety_hooks volkswagen_pq_hooks = {
+ .init = volkswagen_pq_init,
+ .rx = volkswagen_pq_rx_hook,
+ .tx = volkswagen_pq_tx_hook,
+ .tx_lin = nooutput_tx_lin_hook,
+ .fwd = volkswagen_fwd_hook,
+ .addr_check = volkswagen_pq_rx_checks,
+ .addr_check_len = sizeof(volkswagen_pq_rx_checks) / sizeof(volkswagen_pq_rx_checks[0]),
+};
diff --git a/panda/board/safety_declarations.h b/panda/board/safety_declarations.h
index 7e0a54d73e8231..3f8221c9727445 100644
--- a/panda/board/safety_declarations.h
+++ b/panda/board/safety_declarations.h
@@ -1,3 +1,6 @@
+const int MAX_WRONG_COUNTERS = 5;
+const uint8_t MAX_MISSED_MSGS = 10U;
+
// sample struct that keeps 3 samples in memory
struct sample_t {
int values[6];
@@ -11,10 +14,38 @@ struct lookup_t {
float y[3];
};
-void safety_rx_hook(CAN_FIFOMailBox_TypeDef *to_push);
+typedef struct {
+ int addr;
+ int bus;
+ int len;
+} CanMsg;
+
+typedef struct {
+ const int addr;
+ const int bus;
+ const int len;
+ const bool check_checksum; // true is checksum check is performed
+ const uint8_t max_counter; // maximum value of the counter. 0 means that the counter check is skipped
+ const uint32_t expected_timestep; // expected time between message updates [us]
+} CanMsgCheck;
+
+// params and flags about checksum, counter and frequency checks for each monitored address
+typedef struct {
+ // const params
+ const CanMsgCheck msg[3]; // check either messages (e.g. honda steer). Array MUST terminate with an empty struct to know its length.
+ // dynamic flags
+ bool msg_seen;
+ int index; // if multiple messages are allowed to be checked, this stores the index of the first one seen. only msg[msg_index] will be used
+ bool valid_checksum; // true if and only if checksum check is passed
+ int wrong_counters; // counter of wrong counters, saturated between 0 and MAX_WRONG_COUNTERS
+ uint8_t last_counter; // last counter value
+ uint32_t last_timestamp; // micro-s
+ bool lagging; // true if and only if the time between updates is excessive
+} AddrCheckStruct;
+
+int safety_rx_hook(CAN_FIFOMailBox_TypeDef *to_push);
int safety_tx_hook(CAN_FIFOMailBox_TypeDef *to_send);
int safety_tx_lin_hook(int lin_num, uint8_t *data, int len);
-int safety_ignition_hook(void);
uint32_t get_ts_elapsed(uint32_t ts, uint32_t ts_last);
int to_signed(int d, int bits);
void update_sample(struct sample_t *sample, int sample_new);
@@ -26,30 +57,84 @@ bool driver_limit_check(int val, int val_last, struct sample_t *val_driver,
const int MAX_ALLOWANCE, const int DRIVER_FACTOR);
bool rt_rate_limit_check(int val, int val_last, const int MAX_RT_DELTA);
float interpolate(struct lookup_t xy, float x);
+void gen_crc_lookup_table(uint8_t poly, uint8_t crc_lut[]);
+bool msg_allowed(CAN_FIFOMailBox_TypeDef *to_send, const CanMsg msg_list[], int len);
+int get_addr_check_index(CAN_FIFOMailBox_TypeDef *to_push, AddrCheckStruct addr_list[], const int len);
+void update_counter(AddrCheckStruct addr_list[], int index, uint8_t counter);
+void update_addr_timestamp(AddrCheckStruct addr_list[], int index);
+bool is_msg_valid(AddrCheckStruct addr_list[], int index);
+bool addr_safety_check(CAN_FIFOMailBox_TypeDef *to_push,
+ AddrCheckStruct *addr_check,
+ const int addr_check_len,
+ uint8_t (*get_checksum)(CAN_FIFOMailBox_TypeDef *to_push),
+ uint8_t (*compute_checksum)(CAN_FIFOMailBox_TypeDef *to_push),
+ uint8_t (*get_counter)(CAN_FIFOMailBox_TypeDef *to_push));
+void generic_rx_checks(bool stock_ecu_detected);
+void relay_malfunction_set(void);
+void relay_malfunction_reset(void);
typedef void (*safety_hook_init)(int16_t param);
-typedef void (*rx_hook)(CAN_FIFOMailBox_TypeDef *to_push);
+typedef int (*rx_hook)(CAN_FIFOMailBox_TypeDef *to_push);
typedef int (*tx_hook)(CAN_FIFOMailBox_TypeDef *to_send);
typedef int (*tx_lin_hook)(int lin_num, uint8_t *data, int len);
-typedef int (*ign_hook)(void);
typedef int (*fwd_hook)(int bus_num, CAN_FIFOMailBox_TypeDef *to_fwd);
typedef struct {
safety_hook_init init;
- ign_hook ignition;
rx_hook rx;
tx_hook tx;
tx_lin_hook tx_lin;
fwd_hook fwd;
+ AddrCheckStruct *addr_check;
+ const int addr_check_len;
} safety_hooks;
-// This can be set by the safety hooks.
-bool controls_allowed = 0;
-bool gas_interceptor_detected = 0;
+void safety_tick(const safety_hooks *hooks);
+
+// This can be set by the safety hooks
+bool controls_allowed = false;
+bool relay_malfunction = false;
+bool gas_interceptor_detected = false;
int gas_interceptor_prev = 0;
+bool gas_pressed = false;
+bool gas_pressed_prev = false;
+bool brake_pressed = false;
+bool brake_pressed_prev = false;
+bool cruise_engaged_prev = false;
+float vehicle_speed = 0;
+bool vehicle_moving = false;
+
+// for safety modes with torque steering control
+int desired_torque_last = 0; // last desired steer torque
+int rt_torque_last = 0; // last desired torque for real time check
+struct sample_t torque_meas; // last 3 motor torques produced by the eps
+struct sample_t torque_driver; // last 3 driver torques measured
+uint32_t ts_last = 0;
+
+// for safety modes with angle steering control
+uint32_t ts_angle_last = 0;
+int desired_angle_last = 0;
+struct sample_t angle_meas; // last 3 steer angles
+
+// This can be set with a USB command
+// It enables features we consider to be unsafe, but understand others may have different opinions
+// It is always 0 on mainline comma.ai openpilot
+
+// If using this flag, be very careful about what happens if your fork wants to brake while the
+// user is pressing the gas. Tesla is careful with this.
+#define UNSAFE_DISABLE_DISENGAGE_ON_GAS 1
+
+// If using this flag, make sure to communicate to your users that a stock safety feature is now disabled.
+#define UNSAFE_DISABLE_STOCK_AEB 2
+
+// If using this flag, be aware that harder braking is more likely to lead to rear endings,
+// and that alone this flag doesn't make braking compliant because there's also a time element.
+// See ISO 15622:2018 for more information.
+#define UNSAFE_RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX 8
-// This is set by USB command 0xdf
-bool long_controls_allowed = 1;
+int unsafe_mode = 0;
-// avg between 2 tracks
-#define GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + ((GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2 ) / 2)
+// time since safety mode has been changed
+uint32_t safety_mode_cnt = 0U;
+// allow 1s of transition timeout after relay changes state before assessing malfunctioning
+const uint32_t RELAY_TRNS_TIMEOUT = 1U;
diff --git a/panda/board/spi_flasher.h b/panda/board/spi_flasher.h
index 4eab35671cae10..2636bf535a40d8 100644
--- a/panda/board/spi_flasher.h
+++ b/panda/board/spi_flasher.h
@@ -65,7 +65,14 @@ int usb_cb_control_msg(USB_Setup_TypeDef *setup, uint8_t *resp, bool hardwired)
// so it's blocked over wifi
switch (setup->b.wValue.w) {
case 0:
+ // TODO: put this back when it's no longer a "devkit"
+ //#ifdef ALLOW_DEBUG
+ #if 1
if (hardwired) {
+ #else
+ // no more bootstub on UNO once OTP block is flashed
+ if (hardwired && ((hw_type != HW_TYPE_UNO) || (!is_provisioned()))) {
+ #endif
puts("-> entering bootloader\n");
enter_bootloader_mode = ENTER_BOOTLOADER_MAGIC;
NVIC_SystemReset();
@@ -103,6 +110,7 @@ void usb_cb_ep3_out(void *usbdata, int len, bool hardwired) {
UNUSED(len);
UNUSED(hardwired);
}
+void usb_cb_ep3_out_complete(void) {}
int is_enumerated = 0;
void usb_cb_enumeration_complete(void) {
@@ -151,7 +159,7 @@ int spi_cb_rx(uint8_t *data, int len, uint8_t *data_out) {
#define CAN_BL_INPUT 0x1
#define CAN_BL_OUTPUT 0x2
-void CAN1_TX_IRQHandler(void) {
+void CAN1_TX_IRQ_Handler(void) {
// clear interrupt
CAN->TSR |= CAN_TSR_RQCP0;
}
@@ -178,12 +186,12 @@ void bl_can_send(uint8_t *odat) {
CAN->sTxMailBox[0].TIR = (CAN_BL_OUTPUT << 21) | 1;
}
-void CAN1_RX0_IRQHandler(void) {
+void CAN1_RX0_IRQ_Handler(void) {
while (CAN->RF0R & CAN_RF0R_FMP0) {
if ((CAN->sFIFOMailBox[0].RIR>>21) == CAN_BL_INPUT) {
uint8_t dat[8];
for (int i = 0; i < 8; i++) {
- dat[0] = GET_BYTE(&CAN->sFIFOMailBox[0], i);
+ dat[i] = GET_BYTE(&CAN->sFIFOMailBox[0], i);
}
uint8_t odat[8];
uint8_t type = dat[0] & 0xF0;
@@ -253,13 +261,19 @@ void CAN1_RX0_IRQHandler(void) {
}
}
-void CAN1_SCE_IRQHandler(void) {
+void CAN1_SCE_IRQ_Handler(void) {
llcan_clear_send(CAN);
}
#endif
void soft_flasher_start(void) {
+ #ifdef PEDAL
+ REGISTER_INTERRUPT(CAN1_TX_IRQn, CAN1_TX_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN1_RX0_IRQn, CAN1_RX0_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ REGISTER_INTERRUPT(CAN1_SCE_IRQn, CAN1_SCE_IRQ_Handler, CAN_INTERRUPT_RATE, FAULT_INTERRUPT_RATE_CAN_1)
+ #endif
+
puts("\n\n\n************************ FLASHER START ************************\n");
enter_bootloader_mode = 0;
@@ -276,7 +290,7 @@ void soft_flasher_start(void) {
// B8,B9: CAN 1
set_gpio_alternate(GPIOB, 8, GPIO_AF9_CAN1);
set_gpio_alternate(GPIOB, 9, GPIO_AF9_CAN1);
- current_board->enable_can_transciever(1, true);
+ current_board->enable_can_transceiver(1, true);
// init can
llcan_set_speed(CAN1, 5000, false, false);
@@ -307,7 +321,7 @@ void soft_flasher_start(void) {
// green LED on for flashing
current_board->set_led(LED_GREEN, 1);
- __enable_irq();
+ enable_interrupts();
uint64_t cnt = 0;
diff --git a/panda/board/tools/enter_download_mode.py b/panda/board/tools/enter_download_mode.py
index ff3cf84ca97aa3..4e6a2b4cc71d6f 100755
--- a/panda/board/tools/enter_download_mode.py
+++ b/panda/board/tools/enter_download_mode.py
@@ -1,5 +1,5 @@
-#!/usr/bin/env python
-from __future__ import print_function
+#!/usr/bin/env python3
+
import sys
import time
@@ -11,7 +11,7 @@ def enter_download_mode(device):
try:
handle.controlWrite(usb1.TYPE_VENDOR | usb1.RECIPIENT_DEVICE, 0xd1, 0, 0, b'')
- except (usb1.USBErrorIO, usb1.USBErrorPipe) as e:
+ except (usb1.USBErrorIO, usb1.USBErrorPipe):
print("Device download mode enabled.")
time.sleep(1)
else:
@@ -21,12 +21,12 @@ def enter_download_mode(device):
def find_first_panda(context=None):
context = context or usb1.USBContext()
for device in context.getDeviceList(skip_on_error=True):
- if device.getVendorID() == 0xbbaa and device.getProductID()&0xFF00 == 0xdd00:
+ if device.getVendorID() == 0xbbaa and device.getProductID() & 0xFF00 == 0xdd00:
return device
if __name__ == "__main__":
panda_dev = find_first_panda()
- if panda_dev == None:
+ if panda_dev is None:
print("no device found")
sys.exit(0)
print("found device")
diff --git a/panda/boardesp/.gitignore b/panda/boardesp/.gitignore
deleted file mode 100644
index 75255a58518e15..00000000000000
--- a/panda/boardesp/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-proxy
-*.bin
-esp-open-sdk
-a.out
-cert.h
-gitversion.h
-esp-open-sdk.dmg
-obj/*
diff --git a/panda/boardesp/ELM327.md b/panda/boardesp/ELM327.md
deleted file mode 100644
index 6453b35ca41119..00000000000000
--- a/panda/boardesp/ELM327.md
+++ /dev/null
@@ -1,101 +0,0 @@
-ELM327 support for panda
-======
-The panda now has basic ELM327 support.
-
-### What is ELM327?
-
-ELM327 is a command protocol for interfacing with cars using an OBD-II
-port to read [list](standard vehicle diagnostic codes). ELM327
-originally referred to a line of programmable microcontrollers that
-implemented the ELM327 command protocol, and are still being
-developed.
-
-ELM327 devices present a shell and commands are sent via a UART. The
-official ELM327 chips only support raw UART communication, but most
-devices built with the ELM327 devices (official or clones) expose the
-UART in a more modern way (Wifi, USB, etc).
-
-Mechanics use ELM to diagnose vehicles, and reset fault codes in the
-car's computer after fixing the issue (turning off the dreaded check
-engine light). Car owners can use ELM devices to perform the same
-diagnostics in their garage using either a raw terminal to send
-commands to the ELM device directly, or using a GUI (like one of
-several popular smart phone apps) to translate the OBD error codes
-into readable messages. These GUIs also often allow monitoring of the
-performance of the car's speed, engine rpm, etc.
-
-The panda natively supports sending all the important OBD diagnostic
-messages, but ELM327 support removes the need for the user to manually
-craft CAN or LIN packets using the native panda API, and grants
-compatibility with many existing tools.
-
-[Wikipedia](https://en.wikipedia.org/wiki/ELM327) can provide
-additional information.
-
-### OBD Protocols?
-
-While the commands that the OBD standard describe are in fact
-standard, there are several different protocols that those messages
-can be sent and received with. All cars after 1991 support one of
-these protocols. Which one depends on the car's year and country, as
-legal requirements change over the years.
-
-The panda supports the most popular/modern of these protocols, and all
-but two can be added as needed. Below is a chart of the OBD-II
-protocols supported by the panda.
-
-| Protocol | Support Status |
-| --- | --- |
-| SAE J1850 PWM (41.6 kbit/s) | Never/Obsolete |
-| SAE J1850 VPW (10.4 kbit/s) | Never/Obsolete |
-| ISO 9141-2 (5 baud init, 10.4 kbit/s) | Unsupported |
-| ISO 14230-4 KWP (5 baud init, 10.4 kbit/s) | Unsupported |
-| ISO 14230-4 KWP (fast init, 10.4 kbit/s) | Supported |
-| ISO 15765-4 CAN (11 bit ID, 500 kbit/s) | Supported |
-| ISO 15765-4 CAN (29 bit ID, 500 kbit/s) | Supported |
-| ISO 15765-4 CAN (11 bit ID, 250 kbit/s) | Supported |
-| ISO 15765-4 CAN (29 bit ID, 250 kbit/s) | Supported |
-| SAE J1939 (250kbps) | Unsupported |
-
-### The Implementation
-
-The panda ELM327 implementation is not a full implementation of all
-the features of the official ELM327 microcontroller. Like most ELM327
-clones, the panda reports its ELM version as the unreleased version
-1.5, despite only implementing commands from protocol version 1.0.
-
-
-### Testing
-
-These tests require two pandas. One to be tested, and the second to
-simulate the vehicle.
-
-The panda used to simulate the vehicle must be plugged into a USB port
-of the testing computer.
-
-The computer running the tests must be connected to the panda being
-tested's wifi network.
-
-The following command will run the tests (nosetest should work fine
-instead of pytest if you still prefer using that). The CANSIMSERIAL
-environment variable will force the car simulator to use the correct
-panda as the simulator if multiple pandas are attached via usb to the
-host computer.
-
-```
-CANSIMSERIAL=car_sim_panda_serial pytest tests/automated/elm_wifi.py
-```
-
-A single test can be run by putting the test name after the file name
-and two colons, like so:
-
-```
-CANSIMSERIAL=car_sim_panda_serial pytest tests/automated/elm_wifi.py::test_important_thing
-```
-
-For more detail, provide the -s (show output) and the -vv (very
-verbose) flags.
-
-```
-CANSIMSERIAL=car_sim_panda_serial pytest -s -vv tests/automated/elm_wifi.py
-```
diff --git a/panda/boardesp/Makefile b/panda/boardesp/Makefile
deleted file mode 100644
index 0b8fe32b693ff5..00000000000000
--- a/panda/boardesp/Makefile
+++ /dev/null
@@ -1,74 +0,0 @@
-PATH := esp-open-sdk/xtensa-lx106-elf/bin:$(PATH)
-CC = esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc
-CFLAGS = -Iinclude/ -I. -I../ -mlongcalls -Iesp-open-sdk/ESP8266_NONOS_SDK_V1.5.4_16_05_20/driver_lib/include -std=c99 -DICACHE_FLASH
-LDLIBS = -nostdlib -Wl,--start-group -lmain -lnet80211 -lwpa -llwip -lpp -lphy -Wl,--end-group -lgcc -ldriver -Wl,--gc-sections
-LDFLAGS = -Teagle.app.v6.ld
-OBJCP = esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-objcopy
-SDK_BASE = esp-open-sdk/ESP8266_NONOS_SDK_V1.5.4_16_05_20
-
-ifeq ($(RELEASE),1)
- CERT = ../../pandaextra/certs/releaseesp
-else
- CERT = ../certs/debugesp
- CFLAGS += "-DALLOW_DEBUG"
-endif
-
-flashall: user1.bin user2.bin
- ../python/esptool.py write_flash 0 $(SDK_BASE)/bin/boot_v1.5.bin 0x01000 user1.bin 0x81000 user2.bin 0x3FE000 $(SDK_BASE)/bin/blank.bin
-
-proxy-0x00000.bin: proxy
- ../python/esptool.py elf2image $^
-
-proxy: proxy.o elm327.o webserver.o sha.o
-
-obj/proxy.o: proxy.c
- $(CC) $(CFLAGS) -c $^ -o $@
-
-obj/elm327.o: elm327.c
- $(CC) $(CFLAGS) -c $^ -o $@
-
-obj/webserver.o: webserver.c obj/cert.h obj/gitversion.h
- $(CC) $(CFLAGS) -c $< -o $@
-
-obj/cert.h: ../crypto/getcertheader.py
- ../crypto/getcertheader.py ../certs/debugesp.pub ../certs/releaseesp.pub > obj/cert.h
-
-include ../common/version.mk
-
-obj/sha.o: ../crypto/sha.c
- $(CC) $(CFLAGS) -c $^ -o $@
-
-obj/rsa.o: ../crypto/rsa.c
- $(CC) $(CFLAGS) -c $^ -o $@
-
-oldflash: proxy-0x00000.bin
- ../python/esptool.py write_flash 0 proxy-0x00000.bin 0x40000 proxy-0x40000.bin
-
-user1.bin: obj/proxy.o obj/elm327.o obj/webserver.o obj/sha.o obj/rsa.o
- $(CC) $(CFLAGS) $^ -o a.out -L$(SDK_BASE)/ld -T$(SDK_BASE)/ld/eagle.app.v6.new.1024.app1.ld $(LDLIBS)
- $(OBJCP) --only-section .text -O binary a.out eagle.app.v6.text.bin
- $(OBJCP) --only-section .data -O binary a.out eagle.app.v6.data.bin
- $(OBJCP) --only-section .rodata -O binary a.out eagle.app.v6.rodata.bin
- $(OBJCP) --only-section .irom0.text -O binary a.out eagle.app.v6.irom0text.bin
- COMPILE=gcc python ./esp-open-sdk/ESP8266_NONOS_SDK_V1.5.4_16_05_20/tools/gen_appbin.py a.out 2 0 32 4 0
- rm -f eagle.app.v6.*.bin
- mv eagle.app.flash.bin $@
- ../crypto/sign.py $@ $@ $(CERT)
-
-user2.bin: obj/proxy.o obj/elm327.o obj/webserver.o obj/sha.o obj/rsa.o
- $(CC) $(CFLAGS) $^ -o a.out -L$(SDK_BASE)/ld -T$(SDK_BASE)/ld/eagle.app.v6.new.1024.app2.ld $(LDLIBS)
- $(OBJCP) --only-section .text -O binary a.out eagle.app.v6.text.bin
- $(OBJCP) --only-section .data -O binary a.out eagle.app.v6.data.bin
- $(OBJCP) --only-section .rodata -O binary a.out eagle.app.v6.rodata.bin
- $(OBJCP) --only-section .irom0.text -O binary a.out eagle.app.v6.irom0text.bin
- COMPILE=gcc python ./esp-open-sdk/ESP8266_NONOS_SDK_V1.5.4_16_05_20/tools/gen_appbin.py a.out 2 0 32 4 0
- rm -f eagle.app.v6.*.bin
- mv eagle.app.flash.bin $@
- ../crypto/sign.py $@ $@ $(CERT)
-
-ota: user1.bin user2.bin
- curl http://192.168.0.10/espupdate1 --upload-file user1.bin
- curl http://192.168.0.10/espupdate2 --upload-file user2.bin
-
-clean:
- rm -f proxy proxy.o proxy-0x00000.bin proxy-0x40000.bin eagle.app.* user1.bin user2.bin a.out obj/*
diff --git a/panda/boardesp/README.md b/panda/boardesp/README.md
deleted file mode 100644
index 5a8fab14777fee..00000000000000
--- a/panda/boardesp/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-Dependencies
------
-
-**Debian / Ubuntu**
-
-```
-./get_sdk.sh
-```
-
-**Mac**
-
-```
-./get_sdk_mac.sh
-```
-
-Programming
------
-
-```
-make
-```
diff --git a/panda/boardesp/elm327.c b/panda/boardesp/elm327.c
deleted file mode 100644
index 58ac4c86386aa1..00000000000000
--- a/panda/boardesp/elm327.c
+++ /dev/null
@@ -1,1576 +0,0 @@
-#include "ets_sys.h"
-#include "osapi.h"
-#include "gpio.h"
-#include "os_type.h"
-#include "user_interface.h"
-#include "espconn.h"
-#include "mem.h"
-
-#include "driver/uart.h"
-
-//#define ELM_DEBUG
-
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-int ICACHE_FLASH_ATTR spi_comm(char *dat, int len, uint32_t *recvData, int recvDataLen);
-
-#define ELM_PORT 35000
-
-//Version 1.5 is an invalid version used by many pirate clones
-//that only partially support 1.0.
-#define IDENT_MSG "ELM327 v1.5\r\r"
-#define DEVICE_DESC "Panda\n\n"
-
-#define SHOW_CONNECTION(msg, p_conn) os_printf("%s %p, proto %p, %d.%d.%d.%d:%d disconnect\r\n", \
- msg, p_conn, (p_conn)->proto.tcp, (p_conn)->proto.tcp->remote_ip[0], \
- (p_conn)->proto.tcp->remote_ip[1], (p_conn)->proto.tcp->remote_ip[2], \
- (p_conn)->proto.tcp->remote_ip[3], (p_conn)->proto.tcp->remote_port)
-
-const static char hex_lookup[] = {'0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
-typedef struct __attribute__((packed)) {
- bool tx : 1;
- bool : 1;
- bool ext : 1;
- uint32_t addr : 29;
-
- uint8_t len : 4;
- uint8_t bus : 8;
- uint8_t : 4; //unused
- uint16_t ts : 16;
- uint8_t data[8];
-} panda_can_msg_t;
-
-//TODO: Masking is likely unnecessary for these bit fields. Check.
-#define panda_get_can_addr(recv) (((recv)->ext) ? ((recv)->addr & 0x1FFFFFFF) :\
- (((recv)->addr >> 18) & 0x7FF))
-
-#define PANDA_CAN_FLAG_TRANSMIT 1
-#define PANDA_CAN_FLAG_EXTENDED 4
-
-#define PANDA_USB_CAN_WRITE_BUS_NUM 3
-#define PANDA_USB_LIN_WRITE_BUS_NUM 2
-
-typedef struct _elm_tcp_conn {
- struct espconn *conn;
- struct _elm_tcp_conn *next;
-} elm_tcp_conn_t;
-
-typedef struct __attribute__((packed)) {
- uint8_t len;
- uint8_t dat[7]; //mode and data
-} elm_can_obd_msg;
-
-typedef struct __attribute__((packed)) {
- uint8_t priority;
- uint8_t receiver;
- uint8_t sender;
-
- uint8_t dat[8]; //mode, data, and checksum
-} elm_lin_obd_msg;
-
-typedef struct __attribute__((packed)) {
- uint16_t usb_ep_num;
- uint16_t payload_len;
-
- uint8_t serial_port;
- //uint8_t msg[8+3];
- elm_lin_obd_msg msg;
-} elm_lin_usb_msg;
-
-static struct espconn elm_conn;
-static esp_tcp elm_proto;
-static elm_tcp_conn_t *connection_list = NULL;
-
-static char stripped_msg[0x100];
-static uint16 stripped_msg_len = 0;
-
-static char in_msg[0x100];
-static uint16 in_msg_len = 0;
-
-static char rsp_buff[536]; //TCP min MTU
-static uint16 rsp_buff_len = 0;
-
-static uint8_t pandaSendData[0x14] = {0};
-static uint32_t pandaRecvData[0x40] = {0};
-static uint32_t pandaRecvDataDummy[0x40] = {0}; // Used for CAN write operations (no received data)
-
-#define ELM_MODE_SELECTED_PROTOCOL_DEFAULT 6
-#define ELM_MODE_TIMEOUT_DEFAULT 20;
-#define ELM_MODE_KEEPALIVE_PERIOD_DEFAULT (0x92*20)
-
-static bool elm_mode_echo = true;
-static bool elm_mode_linefeed = false;
-static bool elm_mode_additional_headers = false;
-static bool elm_mode_auto_protocol = true;
-static uint8_t elm_selected_protocol = ELM_MODE_SELECTED_PROTOCOL_DEFAULT;
-static bool elm_mode_print_spaces = true;
-static uint8_t elm_mode_adaptive_timing = 1;
-static bool elm_mode_allow_long = false;
-static uint16_t elm_mode_timeout = ELM_MODE_TIMEOUT_DEFAULT;
-static uint16_t elm_mode_keepalive_period = ELM_MODE_KEEPALIVE_PERIOD_DEFAULT;
-
-bool lin_bus_initialized = false;
-
-/***********************************************
- *** ELM CLI response functions ***
- *** (for sending data back to the terminal) ***
- ***********************************************/
-
-// All ELM operations are global, so send data out to all connections
-void ICACHE_FLASH_ATTR elm_tcp_tx_flush() {
- if(!rsp_buff_len) return; // Was causing small error messages
-
- for(elm_tcp_conn_t *iter = connection_list; iter != NULL; iter = iter->next){
- int8_t err = espconn_send(iter->conn, rsp_buff, rsp_buff_len);
- if(err){
- os_printf(" Wifi %p TX error code %d\n", iter->conn, err);
- if(err == ESPCONN_ARG) {
- if(iter == connection_list) {
- connection_list = iter->next;
- } else {
- for(elm_tcp_conn_t *iter2 = connection_list; iter2 != NULL; iter2 = iter2->next)
- if(iter2->next == iter) {
- iter2->next = iter->next;
- break;
- }
- }
- os_printf(" deleting orphaned connection. iter: %p; conn: %p\n", iter, iter->conn);
- os_free(iter);
- }
- }
- }
- rsp_buff_len = 0;
-}
-
-static void ICACHE_FLASH_ATTR elm_append_rsp(const char *data, uint16_t len) {
- uint16_t overflow_len = 0;
- if(rsp_buff_len + len > sizeof(rsp_buff)) {
- overflow_len = rsp_buff_len + len - sizeof(rsp_buff);
- len = sizeof(rsp_buff) - rsp_buff_len;
- }
- if(!elm_mode_linefeed) {
- memcpy(rsp_buff + rsp_buff_len, data, len);
- rsp_buff_len += len;
- } else {
- for(int i=0; i < len && rsp_buff_len < sizeof(rsp_buff); i++){
- rsp_buff[rsp_buff_len++] = data[i];
- if(data[i] == '\r' && rsp_buff_len < sizeof(rsp_buff))
- rsp_buff[rsp_buff_len++] = '\n';
- }
- }
- if(overflow_len) {
- os_printf("Packet full, sending\n");
- elm_tcp_tx_flush();
- elm_append_rsp(data + len, overflow_len);
- }
-}
-
-#define elm_append_rsp_const(str) elm_append_rsp(str, sizeof(str)-1)
-
-static void ICACHE_FLASH_ATTR elm_append_rsp_hex_byte(uint8_t num) {
- elm_append_rsp(&hex_lookup[num >> 4], 1);
- elm_append_rsp(&hex_lookup[num & 0xF], 1);
- if(elm_mode_print_spaces) elm_append_rsp_const(" ");
-}
-
-void ICACHE_FLASH_ATTR elm_append_rsp_can_msg_addr(const panda_can_msg_t *recv) {
- //Show address
- uint32_t addr = panda_get_can_addr(recv);
- if(recv->ext){
- elm_append_rsp_hex_byte(addr>>24);
- elm_append_rsp_hex_byte(addr>>16);
- elm_append_rsp_hex_byte(addr>>8);
- elm_append_rsp_hex_byte(addr);
- } else {
- elm_append_rsp(&hex_lookup[addr>>8], 1);
- elm_append_rsp_hex_byte(addr);
- }
-}
-
-/***************************************
- *** Panda communication functions ***
- *** (for controlling the Panda MCU) ***
- ***************************************/
-
-static int ICACHE_FLASH_ATTR panda_usbemu_ctrl_write(uint8_t request_type, uint8_t request,
- uint16_t value, uint16_t index, uint16_t length) {
- //self.sock.send(struct.pack("HHBBHHH", 0, 0, request_type, request, value, index, length));
- *(uint16_t*)(pandaSendData) = 0;
- *(uint16_t*)(pandaSendData+2) = 0;
- pandaSendData[4] = request_type;
- pandaSendData[5] = request;
- *(uint16_t*)(pandaSendData+6) = value;
- *(uint16_t*)(pandaSendData+8) = index;
- *(uint16_t*)(pandaSendData+10) = length;
-
- int returned_count = spi_comm(pandaSendData, 0x10, pandaRecvData, 0x40);
- if(returned_count > 0x40 || returned_count < 0)
- return -1;
- return returned_count;
-}
-
-#define panda_set_can0_cbaud(cbps) panda_usbemu_ctrl_write(0x40, 0xde, 0, cbps, 0)
-#define panda_set_can0_kbaud(kbps) panda_usbemu_ctrl_write(0x40, 0xde, 0, kbps*10, 0)
-#define panda_set_safety_mode(mode) panda_usbemu_ctrl_write(0x40, 0xdc, mode, 0, 0)
-#define panda_kline_wakeup_pulse() panda_usbemu_ctrl_write(0x40, 0xf0, 0, 0, 0)
-#define panda_clear_can_rx() panda_usbemu_ctrl_write(0x40, 0xf1, 0xFFFF, 0, 0)
-#define panda_clear_lin_txrx() panda_usbemu_ctrl_write(0x40, 0xf2, 2, 0, 0)
-
-static int ICACHE_FLASH_ATTR panda_usbemu_can_read(panda_can_msg_t** can_msgs) {
- int returned_count = spi_comm((uint8_t *)((const uint16 []){1,0}), 4, pandaRecvData, 0x40);
- if(returned_count > 0x40 || returned_count < 0){
- os_printf("CAN read got invalid length\n");
- return -1;
- }
- *can_msgs = (panda_can_msg_t*)(pandaRecvData+1);
- return returned_count/sizeof(panda_can_msg_t);
-}
-
-static int ICACHE_FLASH_ATTR panda_usbemu_can_write(bool ext, uint32_t addr,
- char *candata, uint8_t canlen) {
- uint32_t rir;
-
- if(canlen > 8) return 0;
-
- if(ext || addr >= 0x800){
- rir = (addr << 3) | PANDA_CAN_FLAG_TRANSMIT | PANDA_CAN_FLAG_EXTENDED;
- }else{
- rir = (addr << 21) | PANDA_CAN_FLAG_TRANSMIT;
- }
-
- #define MAX_CAN_LEN 8
-
- //Wifi USB Wrapper
- *(uint16_t*)(pandaSendData) = PANDA_USB_CAN_WRITE_BUS_NUM; //USB Bulk Endpoint ID.
- *(uint16_t*)(pandaSendData+2) = MAX_CAN_LEN;
- //BULK MESSAGE
- *(uint32_t*)(pandaSendData+4) = rir;
- *(uint32_t*)(pandaSendData+8) = MAX_CAN_LEN | (0 << 4); //0 is CAN bus number.
- //CAN DATA
- memcpy(pandaSendData+12, candata, canlen);
- memset(pandaSendData+12+canlen, 0, MAX_CAN_LEN-canlen);
- for(int i = 12+canlen; i < 20; i++) pandaSendData[i] = 0; //Zero the rest
-
- /* spi_comm will erase data in the recv buffer even if you are only
- * interested in sending data that gets no response (like writing
- * can data). This behavior becomes problematic when trying to send
- * a can message while processsing received can messages. A dummy
- * recv buffer is used here so received data is not overwritten. */
- int returned_count = spi_comm(pandaSendData, 0x14, pandaRecvDataDummy, 0x40);
- if(returned_count)
- os_printf("ELM Can send expected 0 bytes back from panda. Got %d bytes instead\n", returned_count);
- if(returned_count > 0x40) return 0;
- return returned_count;
-}
-
-elm_lin_obd_msg lin_last_sent_msg;
-uint16_t lin_last_sent_msg_len = 0;
-bool lin_await_msg_echo = false;
-
-static int ICACHE_FLASH_ATTR panda_usbemu_kline_read(uint16_t len) {
- int returned_count = panda_usbemu_ctrl_write(0xC0, 0xE0, 2, 0, len);
- if(returned_count > len || returned_count < 0){
- os_printf("LIN read got invalid length\n");
- return -1;
- }
-
- #ifdef ELM_DEBUG
- if(returned_count) {
- os_printf("LIN Received %d bytes\n", returned_count);
- os_printf(" Data: ");
- for(int i = 0; i < returned_count; i++)
- os_printf("%02x ", ((char*)(pandaRecvData+1))[i]);
- os_printf("\n");
- }
- #endif
- return returned_count;
-}
-
-static int ICACHE_FLASH_ATTR panda_usbemu_kline_write(elm_lin_obd_msg *msg) {
- elm_lin_usb_msg usb_msg = {};
-
- usb_msg.usb_ep_num = PANDA_USB_LIN_WRITE_BUS_NUM; //USB Bulk Endpoint ID.
- usb_msg.payload_len = (msg->priority & 0x07) + 4 + 1; //The +1 is for serial_port
- usb_msg.serial_port = 2;
- memcpy(&usb_msg.msg, msg, sizeof(elm_lin_obd_msg));
-
- /* spi_comm will erase data in the recv buffer even if you are only
- * interested in sending data that gets no response (like writing
- * can data). This behavior becomes problematic when trying to send
- * a can message while processsing received can messages. A dummy
- * recv buffer is used here so received data is not overwritten. */
- int returned_count = spi_comm((char*)&usb_msg, sizeof(elm_lin_usb_msg), pandaRecvDataDummy, 0x40);
-
- if(returned_count)
- os_printf("ELM LIN send expected 0 bytes back from panda. Got %d bytes instead\n", returned_count);
- if(returned_count > 0x40) return 0;
-
- return returned_count;
-}
-
-/****************************************
- *** Ringbuffer ***
- ****************************************/
-
-//LIN data is delivered in chunks of arbitrary size. Using a
-//ringbuffer to handle it.
-uint8_t lin_ringbuff[0x20];
-uint8_t lin_ringbuff_start = 0;
-uint8_t lin_ringbuff_end = 0;
-#define lin_ringbuff_len \
- (((sizeof(lin_ringbuff) + lin_ringbuff_end) - lin_ringbuff_start)% sizeof(lin_ringbuff))
-#define lin_ringbuff_get(index) (lin_ringbuff[(lin_ringbuff_start + index) % sizeof(lin_ringbuff)])
-#define lin_ringbuff_consume(len) lin_ringbuff_start = ((lin_ringbuff_start + len) % sizeof(lin_ringbuff))
-#define lin_ringbuff_clear()\
- {lin_ringbuff_start = 0; \
- lin_ringbuff_end = 0;}
-
-int ICACHE_FLASH_ATTR elm_LIN_ringbuff_memcmp(uint8_t *data, uint16_t len) {
- if(len > lin_ringbuff_len) return 1;
- for(int i = 0; i < len; i++)
- if(lin_ringbuff_get(i) != data[i]) return 1;
- return 0; // Going with memcpy ret format where 0 means 'equal'
-}
-
-uint16_t ICACHE_FLASH_ATTR elm_LIN_read_into_ringbuff() {
- int bytelen = panda_usbemu_kline_read((sizeof(lin_ringbuff) - lin_ringbuff_len) - 1);
- if(bytelen < 0) return 0;
- for(int j = 0; j < bytelen; j++) {
- lin_ringbuff[lin_ringbuff_end % sizeof(lin_ringbuff)] = ((char*)(pandaRecvData+1))[j];
- lin_ringbuff_end = (lin_ringbuff_end + 1) % sizeof(lin_ringbuff);
- if(lin_ringbuff_start == lin_ringbuff_end) lin_ringbuff_start++;
- }
-
- #ifdef ELM_DEBUG
- if(bytelen){
- os_printf(" RB Data (%d %d %d): ", lin_ringbuff_start, lin_ringbuff_end, lin_ringbuff_len);
- for(int i = 0; i < sizeof(lin_ringbuff); i++)
- os_printf("%02x ", lin_ringbuff[i]);
- os_printf("\n");
- }
- #endif
-
- return bytelen;
-}
-
-/****************************************
- *** String parsing utility functions ***
- ****************************************/
-
-static int8_t ICACHE_FLASH_ATTR elm_decode_hex_char(char b){
- if(b >= '0' && b <= '9') return b - '0';
- if(b >= 'A' && b <= 'F') return (b - 'A') + 10;
- if(b >= 'a' && b <= 'f') return (b - 'a') + 10;
- return -1;
-}
-
-static uint8_t ICACHE_FLASH_ATTR elm_decode_hex_byte(const char* data) {
- return (elm_decode_hex_char(data[0]) << 4) | elm_decode_hex_char(data[1]);
-}
-
-static bool ICACHE_FLASH_ATTR elm_check_valid_hex_chars(const char* data, uint8_t len) {
- for(int i = 0; i < len; i++){
- char b = data[i];
- if(!((b >= '0' && b <= '9') || (b >= 'A' && b <= 'F') || (b >= 'a' && b <= 'f')))
- return 0;
- }
- return 1;
-}
-
-static uint16_t ICACHE_FLASH_ATTR elm_strip(const char *data, uint16_t lenin,
- char *outbuff, uint16_t outbufflen) {
- uint16_t count = 0;
- for(uint16_t i = 0; i < lenin; i++) {
- if(count >= outbufflen) break;
- if(data[i] == ' ') continue;
- if(data[i] >= 'a' && data[i] <= 'z'){
- outbuff[count++] = data[i] - ('a' - 'A');
- } else {
- outbuff[count++] = data[i];
- }
- if(data[i] == '\r') break;
- }
- return count;
-}
-
-static int ICACHE_FLASH_ATTR elm_msg_find_cr_or_eos(char *data, uint16_t len){
- uint16_t i;
- for(i = 0; i < len; i++)
- if(data[i] == '\r') {
- i++;
- break;
- }
- return i;
-}
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *****************************************************/
-
-typedef enum {
- AUTO, LIN, CAN11, CAN29, NA
-} elm_proto_type_t;
-
-typedef struct elm_protocol {
- bool supported;
- elm_proto_type_t type;
- uint16_t cbaud; //Centibaud (cbaud * 10 = kbaud)
- void (*process_obd)(const struct elm_protocol*, const char*, uint16_t);
- //init is used to init and de-init a protocol. Init functions should
- //not do things that would leave a new protocol in an invalid state
- //after the new protocol's init is called (e.g. No arming timers).
- void (*init)(const struct elm_protocol*);
- char* name;
-} elm_protocol_t;
-
-static const elm_protocol_t* ICACHE_FLASH_ATTR elm_current_proto();
-void ICACHE_FLASH_ATTR elm_reset_aux_timer();
-static void ICACHE_FLASH_ATTR elm_autodetect_cb(bool);
-
-static const elm_protocol_t elm_protocols[];
-//(sizeof(elm_protocols)/sizeof(elm_protocol_t))
-#define ELM_PROTOCOL_COUNT 13
-
-#define LOOPCOUNT_FULL 4
-static int loopcount = 0;
-static volatile os_timer_t elm_timeout;
-static volatile os_timer_t elm_proto_aux_timeout;
-
-static bool is_auto_detecting = false;
-
-// Used only by elm_timer_cb, so not volatile
-static bool did_multimessage = false;
-static bool got_msg_this_run = false;
-static bool can_tx_worked = false;
-static uint8_t elm_msg_mode_ret_filter;
-static uint8_t elm_msg_pid_ret_filter;
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *** -> SAE J1850 implementation (Unsupported) ***
- *****************************************************/
-
-static void ICACHE_FLASH_ATTR elm_process_obd_cmd_J1850(const elm_protocol_t* proto,
- const char *cmd, uint16_t len) {
- elm_append_rsp_const("NO DATA\r\r>");
-}
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *** -> ISO 14230-4 implementation ***
- *****************************************************/
-
-const char *lin_cmd_backup = NULL; //Holds msg while bus init is done
-uint16_t lin_cmd_backup_len = 0;
-bool lin_waiting_keepalive_echo = false;
-
-static void ICACHE_FLASH_ATTR elm_process_obd_cmd_LIN5baud(const elm_protocol_t* proto,
- const char *cmd, uint16_t len) {
- elm_append_rsp_const("BUS INIT: ...ERROR\r\r>");
-}
-
-bool ICACHE_FLASH_ATTR elm_lin_keepalive_echo() {
- if(lin_waiting_keepalive_echo) {
- for(int pass = 0; pass < 4 && lin_ringbuff_len < 5; pass++) {
- elm_LIN_read_into_ringbuff();
- }
-
- lin_waiting_keepalive_echo = false;
- //keepalive Echo should always come before other message echo.
- if(lin_ringbuff_len >= 5 && !elm_LIN_ringbuff_memcmp("\xc1\x33\xf1\x3e\x23", 5)){
- lin_ringbuff_consume(5);
- return true;
- } else {
- os_printf("Keep alive echo failed\n");
- return false;
- }
- }
- return true;
-}
-
-void ICACHE_FLASH_ATTR elm_LINFast_keepalive_timer_cb(void *arg) {
- if(!lin_bus_initialized) {
- os_printf("WARNING! Elm LIN keepalive timer running while bus is not initialized\n");
- return;
- }
- if(loopcount) {
- os_printf("WARNING! Elm LIN keepalive timer during a tx/rx loop!\n");
- return;
- }
- if(lin_ringbuff_len) {
- os_printf("WARNING! lin_ringbuff_len should be 0 when a keepalive echo is processed.\n");
- return;
- }
-
- if(!elm_lin_keepalive_echo()) {
- lin_bus_initialized = false;
- return;
- }
-
- elm_lin_obd_msg msg = {};
-
- msg.priority = 0xC0 | 1;
- msg.receiver = 0x33;
- msg.sender = 0xF1;
- msg.dat[0] = 0x3E;
- msg.dat[1] = msg.dat[0] + msg.priority + msg.receiver + msg.sender; // checksum
-
- #ifdef ELM_DEBUG
- os_printf("Sending LIN KEEPALIVE: Priority: %02x; RecvAddr: %02x; SendAddr: %02x; (%02x); ",
- msg.priority, msg.receiver, msg.sender, 1);
- for(int i = 0; i < 2; i++) os_printf("%02x ", msg.dat[i]);
- os_printf("\n");
- #endif
-
- lin_waiting_keepalive_echo = true;
-
- panda_usbemu_kline_write(&msg);
- elm_reset_aux_timer();
-}
-
-static void ICACHE_FLASH_ATTR elm_init_LINFast(const elm_protocol_t* proto){
- os_timer_disarm(&elm_proto_aux_timeout);
- os_timer_setfn(&elm_proto_aux_timeout, (os_timer_func_t *)elm_LINFast_keepalive_timer_cb, proto);
-
- lin_bus_initialized = false;
- lin_await_msg_echo = false;
- lin_waiting_keepalive_echo = false;
-
- lin_cmd_backup = NULL;
- lin_cmd_backup_len = 0;
-
- lin_ringbuff_clear();
- panda_clear_lin_txrx();
-}
-
-int ICACHE_FLASH_ATTR elm_LINFast_process_echo() {
- if(!elm_lin_keepalive_echo()) {
- os_printf("Keepalive echo not detected.\n");
- lin_ringbuff_clear();
- return -1;
- }
-
- if(!lin_await_msg_echo) {
- os_printf("Echo abort. Nothing waiting echo\n");
- return 1;
- }
-
- for(int i = 0; i < 4; i++){
- if(lin_ringbuff_len < lin_last_sent_msg_len) elm_LIN_read_into_ringbuff();
-
- if(lin_ringbuff_len >= lin_last_sent_msg_len){
- #ifdef ELM_DEBUG
- os_printf("Got enough data %d\n", lin_last_sent_msg_len);
- #endif
- if(!elm_LIN_ringbuff_memcmp((uint8_t*)&lin_last_sent_msg, lin_last_sent_msg_len)) {
- #ifdef ELM_DEBUG
- os_printf("LIN data was sent successfully.\n");
- #endif
- lin_ringbuff_consume(lin_last_sent_msg_len);
- lin_await_msg_echo = false;
- return 1;
- } else {
- #ifdef ELM_DEBUG
- os_printf("Echo not correct.\n");
- os_printf(" RB Data (%d %d %d): ", lin_ringbuff_start, lin_ringbuff_end, lin_ringbuff_len);
- for(int i = 0; i < sizeof(lin_ringbuff); i++)
- os_printf("%02x ", lin_ringbuff[i]);
- os_printf("\n");
- os_printf(" MSG Data (%d): ", lin_last_sent_msg_len);
- for(int i = 0; i < lin_last_sent_msg_len; i++)
- os_printf("%02x ", ((uint8_t*)&lin_last_sent_msg)[i]);
- os_printf("\n");
- #endif
-
- if(lin_bus_initialized || loopcount == 0 && i == 4) {
- lin_ringbuff_clear();
- return -1;
- } else {
- os_printf("Lin init echo misaligned? Consuming byte (%02x). Retry.\n", lin_ringbuff_get(0));
- lin_ringbuff_consume(1);
- continue;
- }
- }
- }
- }
-
- return !lin_await_msg_echo; //true if echo handled
-}
-
-void ICACHE_FLASH_ATTR elm_LINFast_timer_cb(void *arg){
- const elm_protocol_t* proto = (const elm_protocol_t*) arg;
- loopcount--;
- #ifdef ELM_DEBUG
- os_printf("LIN CB call\n");
- #endif
-
- if(!lin_bus_initialized) {
- os_printf("WARNING: LIN CB called without bus initialized!");
- return; // TODO: shoulnd't ever happen. Handle?
- }
-
- int echo_result = elm_LINFast_process_echo();
-
- if(echo_result == -1 || (echo_result == 0 && loopcount == 0)) {
- if(!is_auto_detecting){
- elm_append_rsp_const("BUS ERROR\r\r>");
- elm_tcp_tx_flush();
- }
- loopcount = 0;
- lin_bus_initialized = false;
- return;
- }
-
- if(echo_result == 0) {
- #ifdef ELM_DEBUG
- os_printf("Not ready to process\n");
- #endif
- os_timer_arm(&elm_timeout, 30, 0);
- return; // Not ready to go on
- }
-
- #ifdef ELM_DEBUG
- os_printf("Processing ELM %d\n", lin_ringbuff_len);
- #endif
-
- if(loopcount>0) {
- for(int pass = 0; pass < 16 && loopcount; pass++){
- elm_LIN_read_into_ringbuff();
-
- while(lin_ringbuff_len > 0){
- //if(lin_ringbuff_len > 0){
- if(lin_ringbuff_get(0) & 0x80 != 0x80){
- os_printf("Resetting LIN bus due to bad first byte.\n");
- loopcount = 0;
- lin_bus_initialized = false;
- lin_ringbuff_clear();
-
- if(!is_auto_detecting){
- elm_append_rsp_const("ERROR\r\r>");
- elm_tcp_tx_flush();
- }
- return;
- }
-
- uint8_t newmsg_len = 4 + (lin_ringbuff_get(0) & 0x7);
- if(lin_ringbuff_len >= newmsg_len) {
- #ifdef ELM_DEBUG
- os_printf("Processing LIN MSG. BuffLen %d; expect %d. Dat: ", lin_ringbuff_len, newmsg_len);
- for(int i = 0; i < newmsg_len; i++) os_printf("%02x ", lin_ringbuff_get(i));
- os_printf("\n");
- #endif
- got_msg_this_run = true;
- loopcount = LOOPCOUNT_FULL;
-
- if(!is_auto_detecting){
- if(elm_mode_additional_headers){
- for(int i = 0; i < newmsg_len; i++) elm_append_rsp_hex_byte(lin_ringbuff_get(i));
- } else {
- for(int i = 3; i < newmsg_len - 1; i++) elm_append_rsp_hex_byte(lin_ringbuff_get(i));
- }
- elm_append_rsp_const("\r");
- }
-
- lin_ringbuff_consume(newmsg_len);
- //elm_reset_aux_timer();
- } else {
- break; //Stop consuming data if there is not enough data for the next msg.
- }
- }
- }
- os_timer_arm(&elm_timeout, 50, 0);
- } else {
- bool got_msg_this_run_backup = got_msg_this_run;
- if(!got_msg_this_run) {
- #ifdef ELM_DEBUG
- os_printf(" No data collected\n");
- #endif
- if(!is_auto_detecting) {
- elm_append_rsp_const("NO DATA\r");
- }
- }
- got_msg_this_run = false;
-
- if(!is_auto_detecting) {
- elm_append_rsp_const("\r>");
- elm_tcp_tx_flush();
- } else {
- elm_autodetect_cb(got_msg_this_run_backup);
- }
-
- //TX RX over, resume Keepalive timer
- elm_reset_aux_timer();
- }
-}
-
-void ICACHE_FLASH_ATTR elm_LINFast_businit_timer_cb(void *arg){
- const elm_protocol_t* proto = (const elm_protocol_t*) arg;
- loopcount--;
- #ifdef ELM_DEBUG
- os_printf("LIN INIT CB call\n");
- #endif
-
- int echo_result = elm_LINFast_process_echo();
-
- if(echo_result == -1 || (echo_result == 0 && loopcount == 0)) {
- #ifdef ELM_DEBUG
- os_printf("Init failed with echo test\n");
- #endif
-
- loopcount = 0;
- lin_bus_initialized = 0;
-
- if(!is_auto_detecting){
- if(echo_result == -1)
- elm_append_rsp_const("BUS ERROR\r\r>");
- else
- elm_append_rsp_const("ERROR\r\r>");
- elm_tcp_tx_flush();
- } else {
- elm_autodetect_cb(false);
- }
- return;
- }
-
- if(echo_result == 0) {
- #ifdef ELM_DEBUG
- os_printf("Not ready to process\n");
- #endif
- os_timer_arm(&elm_timeout, elm_mode_timeout, 0);
- return; // Not ready to go on
- }
-
- #ifdef ELM_DEBUG
- os_printf("Bus init ready to process %d bytes\n", lin_ringbuff_len);
- #endif
-
- if(lin_bus_initialized) return; // TODO: shoulnd't ever happen. Handle?
-
- if(loopcount>0) {
- //Keep waiting for response
- for(int i = 0; i < 4; i++){
- elm_LIN_read_into_ringbuff();
-
- if(lin_ringbuff_len > 0){
- if(lin_ringbuff_get(0) & 0x80 != 0x80){
- os_printf("Resetting LIN bus due to bad first byte.\n");
- loopcount = 0;
- lin_ringbuff_clear();
-
- if(!is_auto_detecting){
- elm_append_rsp_const("ERROR\r\r>");
- elm_tcp_tx_flush();
- } else {
- elm_autodetect_cb(false);
- }
- return;
- }
-
- uint8_t newmsg_len = 4 + (lin_ringbuff_get(0) & 0x7);
- if(lin_ringbuff_len < newmsg_len) {
- os_printf("Resetting LIN because returned init data was wrong.\n");
- loopcount = 0;
- lin_ringbuff_clear();
-
- if(!is_auto_detecting){
- elm_append_rsp_const("ERROR\r\r>");
- elm_tcp_tx_flush();
- } else {
- elm_autodetect_cb(false);
- }
- return;
- }
-
- if(!elm_LIN_ringbuff_memcmp("\x83\xF1\x10\xC1\x8F\xE9\xBD", 7)) {
- lin_ringbuff_consume(7);
- lin_bus_initialized = true;
- //lin_ringbuff_clear();
-
- os_printf("BUS INITIALIZED\n");
-
- elm_reset_aux_timer();
-
- if(!is_auto_detecting) {
- elm_append_rsp_const("OK\r");
-
- //Do the send that was delayed
- if(lin_cmd_backup_len) {
- elm_tcp_tx_flush();
- proto->process_obd(proto, lin_cmd_backup, lin_cmd_backup_len);
- } else {
- elm_append_rsp_const("\r>");
- elm_tcp_tx_flush();
- }
- } else {
- #ifdef ELM_DEBUG
- os_printf("LIN success. Silent because in autodetect.\n");
- #endif
- elm_autodetect_cb(true);
- // TODO: Since bus init is good, is it ok to skip sending the '0100' msg?
- }
- return;
- }
- }
- }
- os_timer_arm(&elm_timeout, elm_mode_timeout, 0);
- } else {
- #ifdef ELM_DEBUG
- os_printf("Fall through on bus init\n");
- #endif
- if(!is_auto_detecting){
- elm_append_rsp_const("ERROR\r\r>");
- elm_tcp_tx_flush();
- } else {
- elm_autodetect_cb(false);
- }
- elm_reset_aux_timer();
- }
-}
-
-static void ICACHE_FLASH_ATTR elm_process_obd_cmd_LINFast(const elm_protocol_t* proto,
- const char *cmd, uint16_t len) {
- elm_lin_obd_msg msg = {};
- uint8_t bytelen = (len-1)/2;
- if((bytelen > 7 && !elm_mode_allow_long) || bytelen > 8) {
- elm_append_rsp_const("?\r\r>");
- return;
- }
-
- os_timer_disarm(&elm_proto_aux_timeout);
-
- if(!lin_bus_initialized) {
- panda_clear_lin_txrx();
-
- if(!is_auto_detecting)
- elm_append_rsp_const("BUS INIT: ");
-
- lin_cmd_backup = cmd;
- lin_cmd_backup_len = len;
-
- bytelen = 1;
- msg.dat[0] = 0x81;
- msg.dat[1] = 0x81; // checksum
-
- panda_kline_wakeup_pulse();
- } else {
- bytelen = MIN(bytelen, 7);
- for(int i = 0; i < bytelen; i++){
- msg.dat[i] = elm_decode_hex_byte(&cmd[i*2]);
- msg.dat[bytelen] += msg.dat[i];
- }
-
- elm_msg_mode_ret_filter = msg.dat[0];
- elm_msg_pid_ret_filter = msg.dat[1];
- }
-
- msg.priority = 0xC0 | bytelen;
- msg.receiver = 0x33;
- msg.sender = 0xF1;
- msg.dat[bytelen] += msg.priority + msg.receiver + msg.sender; // checksum
-
- #ifdef ELM_DEBUG
- os_printf("Sending LIN OBD: Priority: %02x; RecvAddr: %02x; SendAddr: %02x; (%02x); ",
- msg.priority, msg.receiver, msg.sender, bytelen);
- for(int i = 0; i < 8; i++) os_printf("%02x ", msg.dat[i]);
- os_printf("\n");
- #endif
-
- lin_last_sent_msg_len = (msg.priority & 0x07) + 4;
- memcpy(&lin_last_sent_msg, &msg, lin_last_sent_msg_len);
- lin_await_msg_echo = true;
- panda_usbemu_kline_write(&msg);
-
- loopcount = LOOPCOUNT_FULL + 1;
- os_timer_disarm(&elm_timeout);
-
- if(lin_bus_initialized) {
- os_timer_setfn(&elm_timeout, (os_timer_func_t *)elm_LINFast_timer_cb, proto);
- elm_LINFast_timer_cb((void*)proto);
- } else {
- os_timer_setfn(&elm_timeout, (os_timer_func_t *)elm_LINFast_businit_timer_cb, proto);
- elm_LINFast_businit_timer_cb((void*)proto);
- }
-}
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *** -> ISO 15765-4 implementation ***
- *****************************************************/
-
-void ICACHE_FLASH_ATTR elm_ISO15765_timer_cb(void *arg){
- const elm_protocol_t* proto = (const elm_protocol_t*) arg;
- loopcount--;
- if(loopcount>0) {
- for(int pass = 0; pass < 16 && loopcount; pass++){
- panda_can_msg_t *can_msgs;
- int num_can_msgs = panda_usbemu_can_read(&can_msgs);
-
- #ifdef ELM_DEBUG
- if(num_can_msgs) os_printf(" Received %d can messages\n", num_can_msgs);
- #endif
-
- if(num_can_msgs < 0) continue;
- if(!num_can_msgs) break;
-
- for(int i = 0; i < num_can_msgs; i++){
-
- panda_can_msg_t *recv = &can_msgs[i];
-
- #ifdef ELM_DEBUG
- os_printf(" RECV: Bus: %d; Addr: %08x; ext: %d; tx: %d; Len: %d; ",
- recv->bus, panda_get_can_addr(recv), recv->ext, recv->tx, recv->len);
- for(int j = 0; j < recv->len; j++) os_printf("%02x ", recv->data[j]);
- os_printf("Ts: %d\n", recv->ts);
- #endif
-
- if (recv->bus==0 && recv->len == 8 &&
- (
- (proto->type == CAN11 && !recv->ext && (panda_get_can_addr(recv) & 0x7F8) == 0x7E8) ||
- (proto->type == CAN29 && recv->ext && (panda_get_can_addr(recv) & 0x1FFFFF00) == 0x18DAF100)
- )
- ) {
- if(recv->data[0] <= 7 &&
- recv->data[1] == (0x40|elm_msg_mode_ret_filter) &&
- recv->data[2] == elm_msg_pid_ret_filter) {
- got_msg_this_run = true;
- loopcount = LOOPCOUNT_FULL;
-
- #ifdef ELM_DEBUG
- os_printf(" CAN msg response, index: %d\n", i);
- #endif
-
- if(!is_auto_detecting){
- if(elm_mode_additional_headers){
- elm_append_rsp_can_msg_addr(recv);
- for(int j = 0; j < recv->data[0]+1; j++) elm_append_rsp_hex_byte(recv->data[j]);
- } else {
- for(int j = 1; j < recv->data[0]+1; j++) elm_append_rsp_hex_byte(recv->data[j]);
- }
-
- elm_append_rsp_const("\r");
- elm_tcp_tx_flush();
- }
-
- } else if((recv->data[0] & 0xF0) == 0x10 &&
- recv->data[2] == (0x40|elm_msg_mode_ret_filter) &&
- recv->data[3] == elm_msg_pid_ret_filter) {
- got_msg_this_run = true;
- loopcount = LOOPCOUNT_FULL;
- panda_usbemu_can_write(0,
- (proto->type==CAN11) ?
- 0x7E0 | (panda_get_can_addr(recv)&0x7) :
- (0x18DA00F1 | (((panda_get_can_addr(recv))&0xFF)<<8)),
- "\x30\x00\x00", 3);
-
- did_multimessage = true;
-
- #ifdef ELM_DEBUG
- os_printf(" CAN multimsg start response, index: %d, len %d\n", i,
- ((recv->data[0]&0xF)<<8) | recv->data[1]);
- #endif
-
- if(!is_auto_detecting){
- if(!elm_mode_additional_headers) {
- elm_append_rsp(&hex_lookup[recv->data[0]&0xF], 1);
- elm_append_rsp_hex_byte(recv->data[1]);
- elm_append_rsp_const("\r0:");
- if(elm_mode_print_spaces) elm_append_rsp_const(" ");
- for(int j = 2; j < 8; j++) elm_append_rsp_hex_byte(recv->data[j]);
- } else {
- elm_append_rsp_can_msg_addr(recv);
- for(int j = 0; j < 8; j++) elm_append_rsp_hex_byte(recv->data[j]);
- }
-
- elm_append_rsp_const("\r");
- elm_tcp_tx_flush();
- }
-
- } else if (did_multimessage && (recv->data[0] & 0xF0) == 0x20) {
- got_msg_this_run = true;
- loopcount = LOOPCOUNT_FULL;
- #ifdef ELM_DEBUG
- os_printf(" CAN multimsg data response, index: %d\n", i);
- #endif
-
- if(!is_auto_detecting){
- if(!elm_mode_additional_headers) {
- elm_append_rsp(&hex_lookup[recv->data[0] & 0xF], 1);
- elm_append_rsp_const(":");
- if(elm_mode_print_spaces) elm_append_rsp_const(" ");
- for(int j = 1; j < 8; j++) elm_append_rsp_hex_byte(recv->data[j]);
- } else {
- elm_append_rsp_can_msg_addr(recv);
- for(int j = 0; j < 8; j++) elm_append_rsp_hex_byte(recv->data[j]);
- }
- elm_append_rsp_const("\r");
- }
- }
- } else if (recv->bus == 0x80 && recv->len == 8 &&
- (panda_get_can_addr(recv) == ((proto->type==CAN11) ? 0x7DF : 0x18DB33F1))
- ) {
- //Can send receipt
- #ifdef ELM_DEBUG
- os_printf(" Got CAN tx receipt\n");
- #endif
- can_tx_worked = true;
- }
- }
- }
- os_timer_arm(&elm_timeout, elm_mode_timeout, 0);
- } else {
- bool got_msg_this_run_backup = got_msg_this_run;
- if(did_multimessage) {
- os_printf(" End of multi message\n");
- } else if(!got_msg_this_run) {
- os_printf(" No data collected\n");
- if(!is_auto_detecting) {
- if(can_tx_worked) {
- elm_append_rsp_const("NO DATA\r");
- } else {
- elm_append_rsp_const("CAN ERROR\r");
- }
- }
- }
- did_multimessage = false;
- got_msg_this_run = false;
- can_tx_worked = false;
-
- if(!is_auto_detecting) {
- elm_append_rsp_const("\r>");
- elm_tcp_tx_flush();
- } else {
- elm_autodetect_cb(got_msg_this_run_backup);
- }
- }
-}
-
-static void ICACHE_FLASH_ATTR elm_init_ISO15765(const elm_protocol_t* proto){
- panda_set_can0_cbaud(proto->cbaud);
-}
-
-static void ICACHE_FLASH_ATTR elm_process_obd_cmd_ISO15765(const elm_protocol_t* proto,
- const char *cmd, uint16_t len) {
- elm_can_obd_msg msg = {};
- msg.len = (len-1)/2;
- if((msg.len > 7 && !elm_mode_allow_long) || msg.len > 8) {
- elm_append_rsp_const("?\r\r>");
- return;
- }
-
- msg.len = MIN(msg.len, 7);
-
- for(int i = 0; i < msg.len; i++)
- msg.dat[i] = elm_decode_hex_byte(&cmd[i*2]);
-
- elm_msg_mode_ret_filter = msg.dat[0];
- elm_msg_pid_ret_filter = msg.dat[1];
-
- #ifdef ELM_DEBUG
- os_printf("Sending CAN OBD: %02x; ", msg.len);
- for(int i = 0; i < 7; i++)
- os_printf("%02x ", msg.dat[i]);
- os_printf("\n");
- #endif
-
- panda_clear_can_rx();
-
- panda_usbemu_can_write(0, (proto->type==CAN11) ? 0x7DF : 0x18DB33F1,
- (uint8_t*)&msg, msg.len+1);
-
- #ifdef ELM_DEBUG
- os_printf("Starting up timer\n");
- #endif
-
- loopcount = LOOPCOUNT_FULL;
- os_timer_disarm(&elm_timeout);
- os_timer_setfn(&elm_timeout, (os_timer_func_t *)elm_ISO15765_timer_cb, proto);
- os_timer_arm(&elm_timeout, elm_mode_timeout, 0);
-}
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *** -> Stuf for unsupported CAN protocols ***
- *****************************************************/
-
-static void ICACHE_FLASH_ATTR elm_process_obd_cmd_CANGen(const elm_protocol_t* proto,
- const char *cmd, uint16_t len) {
- elm_append_rsp_const("NO DATA\r\r>");
-}
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *** -> AUTO Detect implementation ***
- *****************************************************/
-
-static int elm_autodetect_proto_iter;
-static uint16_t elm_staged_auto_msg_len;
-static const char* elm_staged_auto_msg;
-
-static void ICACHE_FLASH_ATTR elm_autodetect_cb(bool proto_worked){
- if(proto_worked) {
- os_printf("Autodetect proto success\n");
- is_auto_detecting = false;
- elm_selected_protocol = elm_autodetect_proto_iter;
- elm_current_proto()->process_obd(elm_current_proto(),
- elm_staged_auto_msg, elm_staged_auto_msg_len);
- } else {
- for(elm_autodetect_proto_iter++; elm_autodetect_proto_iter < ELM_PROTOCOL_COUNT;
- elm_autodetect_proto_iter++){
- const elm_protocol_t *proto = &elm_protocols[elm_autodetect_proto_iter];
- if(proto->supported && proto->type != AUTO) {
- os_printf("*** AUTO trying '%s'\n", proto->name);
- proto->init(proto);
- proto->process_obd(proto, "0100\r", 5); // Try sending on the bus
- return;
- }
- }
-
- //if(elm_autodetect_main()) return;
- is_auto_detecting = false;
- os_printf("Autodetect failed\n");
- elm_append_rsp_const("UNABLE TO CONNECT\r\r>");
- elm_tcp_tx_flush();
- }
-}
-
-static void ICACHE_FLASH_ATTR elm_process_obd_cmd_AUTO(const elm_protocol_t* proto,
- const char *cmd, uint16_t len) {
- elm_append_rsp_const("SEARCHING...\r");
- elm_staged_auto_msg_len = len;
- elm_staged_auto_msg = cmd;
- is_auto_detecting = true;
-
- elm_autodetect_proto_iter = 0;
- elm_autodetect_cb(false);
-}
-
-/*****************************************************
- *** ELM protocol specification and implementation ***
- *** -> Protocol Registry and related functions. ***
- *****************************************************/
-
-static const elm_protocol_t elm_protocols[] = {
- {true, AUTO, 0, elm_process_obd_cmd_AUTO, NULL, "AUTO", },
- {false, NA, 416, elm_process_obd_cmd_J1850, NULL, "SAE J1850 PWM", },
- {false, NA, 104, elm_process_obd_cmd_J1850, NULL, "SAE J1850 VPW", },
- {false, LIN, 104, elm_process_obd_cmd_LIN5baud, NULL, "ISO 9141-2", },
- {false, LIN, 104, elm_process_obd_cmd_LIN5baud, NULL, "ISO 14230-4 (KWP 5BAUD)", },
- {true, LIN, 104, elm_process_obd_cmd_LINFast, NULL, "ISO 14230-4 (KWP FAST)", },
- {true, CAN11, 5000, elm_process_obd_cmd_ISO15765, elm_init_ISO15765, "ISO 15765-4 (CAN 11/500)",},
- {true, CAN29, 5000, elm_process_obd_cmd_ISO15765, elm_init_ISO15765, "ISO 15765-4 (CAN 29/500)",},
- {true, CAN11, 2500, elm_process_obd_cmd_ISO15765, elm_init_ISO15765, "ISO 15765-4 (CAN 11/250)",},
- {true, CAN29, 2500, elm_process_obd_cmd_ISO15765, elm_init_ISO15765, "ISO 15765-4 (CAN 29/250)",},
- {false, CAN29, 2500, elm_process_obd_cmd_CANGen, NULL, "SAE J1939 (CAN 29/250)", },
- {false, CAN11, 1250, elm_process_obd_cmd_CANGen, NULL, "USER1 (CAN 11/125)", },
- {false, CAN11, 500, elm_process_obd_cmd_CANGen, NULL, "USER2 (CAN 11/50)", },
-};
-
-static const elm_protocol_t* ICACHE_FLASH_ATTR elm_current_proto() {
- return &elm_protocols[elm_selected_protocol];
-}
-
-void ICACHE_FLASH_ATTR elm_reset_aux_timer() {
- os_timer_disarm(&elm_proto_aux_timeout);
- if(elm_mode_keepalive_period)
- os_timer_arm(&elm_proto_aux_timeout, elm_mode_keepalive_period, 0);
-}
-
-void ICACHE_FLASH_ATTR elm_proto_reinit(const elm_protocol_t *proto) {
- if(proto->init) proto->init(proto);
-}
-
-/*******************************************
- *** ELM AT command parsing and handling ***
- *******************************************/
-
-enum at_cmd_ids_t { // FULL ELM 1.0 list
- AT_INVALID, //Fake
-
- AT_AMP1,
- AT_AL,
- AT_AT0, AT_AT1, AT_AT2, // Added ELM 1.2, expected by Torque
- AT_BD,
- AT_BI,
- AT_CAF0, AT_CAF1,
- AT_CF_8, AT_CF_3,
- AT_CFC0, AT_CFC1,
- AT_CM_8, AT_CM_3,
- AT_CP,
- AT_CS,
- AT_CV,
- AT_D,
- AT_DP, AT_DPN,
- AT_E0, AT_E1,
- AT_H0, AT_H1,
- AT_I,
- AT_IB10,
- AT_IB96,
- AT_L0, AT_L1,
- AT_M0, AT_M1, AT_MA,
- AT_MR,
- AT_MT,
- AT_NL,
- AT_PC,
- AT_R0, AT_R1,
- AT_RV,
- AT_S0, AT_S1, // Added ELM 1.3, expected by Torque
- AT_SH_6, AT_SH_3,
- AT_SPA, AT_SP,
- AT_ST,
- AT_SW,
- AT_TPA, AT_TP,
- AT_WM_XYZA, AT_WM_XYZAB, AT_WM_XYZABC,
- AT_WS,
- AT_Z,
-};
-
-typedef struct {
- char* name;
- uint8_t name_len;
- uint8_t cmd_len;
- enum at_cmd_ids_t id;
-} at_cmd_reg_t;
-
-static const at_cmd_reg_t at_cmd_reg[] = {
- {"@1", 2, 2, AT_AMP1},
- {"AL", 2, 2, AT_AL},
- {"AT0", 3, 3, AT_AT0}, // Added ELM 1.2, expected by Torque
- {"AT1", 3, 3, AT_AT1}, // Added ELM 1.2, expected by Torque
- {"AT2", 3, 3, AT_AT2}, // Added ELM 1.2, expected by Torque
- {"DP", 2, 2, AT_DP},
- {"DPN", 3, 3, AT_DPN},
- {"E0", 2, 2, AT_E0},
- {"E1", 2, 2, AT_E1},
- {"H0", 2, 2, AT_H0},
- {"H1", 2, 2, AT_H1},
- {"I", 1, 1, AT_I},
- {"L0", 2, 2, AT_L0},
- {"L1", 2, 2, AT_L1},
- {"M0", 2, 2, AT_M0},
- //{"M1", 2, 2, AT_M1},
- {"NL", 2, 2, AT_NL},
- {"PC", 2, 2, AT_PC},
- {"S0", 2, 2, AT_S0}, // Added ELM 1.3, expected by Torque
- {"S1", 2, 2, AT_S1}, // Added ELM 1.3, expected by Torque
- {"SP", 2, 3, AT_SP},
- {"SPA", 3, 4, AT_SPA},
- {"ST", 2, 4, AT_ST},
- {"SW", 2, 4, AT_SW},
- {"Z", 1, 1, AT_Z},
-};
-#define AT_CMD_REG_LEN (sizeof(at_cmd_reg)/sizeof(at_cmd_reg_t))
-
-static enum at_cmd_ids_t ICACHE_FLASH_ATTR elm_parse_at_cmd(char *cmd, uint16_t len){
- int i;
- for(i=0; i7 BYTES)
- elm_mode_allow_long = true;
- break;
- case AT_AT0: //DISABLE ADAPTIVE TIMING
- elm_mode_adaptive_timing = 0;
- break;
- case AT_AT1: //SET ADAPTIVE TIMING TO AUTO1
- elm_mode_adaptive_timing = 1;
- break;
- case AT_AT2: //SET ADAPTIVE TIMING TO AUTO2
- elm_mode_adaptive_timing = 2;
- break;
- case AT_DP: //DESCRIBE THE PROTOCOL BY NAME
- if(elm_mode_auto_protocol && elm_selected_protocol != 0)
- elm_append_rsp_const("AUTO, ");
- elm_append_rsp(elm_current_proto()->name,
- strlen(elm_current_proto()->name));
- elm_append_rsp_const("\r\r");
- return;
- case AT_DPN: //DESCRIBE THE PROTOCOL BY NUMBER
- //TODO: Required. Report currently selected protocol
- if(elm_mode_auto_protocol)
- elm_append_rsp_const("A");
- elm_append_rsp(&hex_lookup[elm_selected_protocol], 1);
- elm_append_rsp_const("\r\r");
- return; // Don't display 'OK'
- case AT_E0: //ECHO OFF
- elm_mode_echo = false;
- break;
- case AT_E1: //ECHO ON
- elm_mode_echo = true;
- break;
- case AT_H0: //SHOW FULL CAN HEADERS OFF
- elm_mode_additional_headers = false;
- break;
- case AT_H1: //SHOW FULL CAN HEADERS ON
- elm_mode_additional_headers = true;
- break;
- case AT_I: //IDENTIFY SELF
- elm_append_rsp_const(IDENT_MSG);
- return;
- case AT_L0: //LINEFEED OFF
- elm_mode_linefeed = false;
- break;
- case AT_L1: //LINEFEED ON
- elm_mode_linefeed = true;
- break;
- case AT_M0: //DISABLE NONVOLATILE STORAGE
- //Memory storage is likely unnecessary
- break;
- case AT_NL: //DISABLE LONG MESSAGE SUPPORT (>7 BYTES)
- elm_mode_allow_long = false;
- break;
- case AT_PC: //PROTOCOL CANCEL (Stop timers and stuff)
- {
- //Init functions should idenpotently prepare the protocol to be used.
- //Thus, the init function can be used as a protocol cancel function
- elm_proto_reinit(elm_current_proto());
- break;
- }
- case AT_S0: //DISABLE PRINTING SPACES IN ECU RESPONSES
- elm_mode_print_spaces = false;
- break;
- case AT_S1: //ENABLE PRINTING SPACES IN ECU RESPONSES
- elm_mode_print_spaces = true;
- break;
- case AT_SP: //SET PROTOCOL
- tmp = elm_decode_hex_char(cmd[2]);
- if(tmp == -1 || tmp >= ELM_PROTOCOL_COUNT) {
- elm_append_rsp_const("?\r\r");
- return;
- }
-
- //De-Init previous protocol
- elm_proto_reinit(elm_current_proto());
-
- elm_selected_protocol = tmp;
- elm_mode_auto_protocol = (tmp == 0);
-
- //Init new protocol
- elm_proto_reinit(elm_current_proto());
- break;
- case AT_SPA: //SET PROTOCOL WITH AUTO FALLBACK
- tmp = elm_decode_hex_char(cmd[3]);
- if(tmp == -1 || tmp >= ELM_PROTOCOL_COUNT) {
- elm_append_rsp_const("?\r\r");
- return;
- }
-
- //De-Init previous protocol
- elm_proto_reinit(elm_current_proto());
-
- elm_selected_protocol = tmp;
- elm_mode_auto_protocol = true;
-
- //Init new protocol
- elm_proto_reinit(elm_current_proto());
- break;
- case AT_ST: //SET TIMEOUT
- if(!elm_check_valid_hex_chars(&cmd[2], 2)) {
- elm_append_rsp_const("?\r\r");
- return;
- }
-
- tmp = elm_decode_hex_byte(&cmd[2]);
- //20 for CAN, 4 for LIN
- elm_mode_timeout = tmp ? tmp*20 : ELM_MODE_TIMEOUT_DEFAULT;
- break;
- case AT_SW: //SET WAKEUP TIME INTERVAL
- if(!elm_check_valid_hex_chars(&cmd[2], 2)) {
- elm_append_rsp_const("?\r\r");
- return;
- }
-
- tmp = elm_decode_hex_byte(&cmd[2]);
- elm_mode_keepalive_period = tmp ? MAX(tmp, 0x20) * 20 : 0;
-
- if(lin_bus_initialized){
- os_timer_disarm(&elm_proto_aux_timeout);
- if(elm_mode_keepalive_period)
- os_timer_arm(&elm_proto_aux_timeout, elm_mode_keepalive_period, 0);
- }
- break;
- case AT_Z: //RESET
- elm_mode_echo = true;
- elm_mode_linefeed = false;
- elm_mode_additional_headers = false;
- elm_mode_auto_protocol = true;
- elm_selected_protocol = ELM_MODE_SELECTED_PROTOCOL_DEFAULT;
- elm_mode_print_spaces = true;
- elm_mode_adaptive_timing = 1;
- elm_mode_allow_long = false;
- elm_mode_timeout = ELM_MODE_TIMEOUT_DEFAULT;
- elm_mode_keepalive_period = ELM_MODE_KEEPALIVE_PERIOD_DEFAULT;
-
- elm_append_rsp_const("\r\r");
- elm_append_rsp_const(IDENT_MSG);
- panda_set_safety_mode(0xE327);
-
- elm_proto_reinit(elm_current_proto());
- return;
- default:
- elm_append_rsp_const("?\r\r");
- return;
- }
-
- elm_append_rsp_const("OK\r\r");
-}
-
-/*************************************
- *** Connection and cli management ***
- *************************************/
-
-static void ICACHE_FLASH_ATTR elm_append_in_msg(char *data, uint16_t len) {
- if(in_msg_len + len > sizeof(in_msg))
- len = sizeof(in_msg) - in_msg_len;
- memcpy(in_msg + in_msg_len, data, len);
- in_msg_len += len;
-}
-
-static int ICACHE_FLASH_ATTR elm_msg_is_at_cmd(char *data, uint16_t len){
- return len >= 4 && data[0] == 'A' && data[1] == 'T';
-}
-
-static void ICACHE_FLASH_ATTR elm_rx_cb(void *arg, char *data, uint16_t len) {
- #ifdef ELM_DEBUG
- //os_printf("\nGot ELM Data In: '%s'\n", data);
- #endif
-
- rsp_buff_len = 0;
- len = elm_msg_find_cr_or_eos(data, len);
-
- if(loopcount){
- os_timer_disarm(&elm_timeout);
- loopcount = 0;
- got_msg_this_run = false;
- can_tx_worked = false;
- did_multimessage = false;
-
- os_printf("Interrupting operation, stopping timer. msg len: %d\n", len);
- elm_append_rsp_const("STOPPED\r\r>");
- if(len == 1 && data[0] == '\r') {
- os_printf("Empty msg source of interrupt.\n");
- elm_tcp_tx_flush();
- return;
- }
- }
-
- if(!(len == 1 && data[0] == '\r') && in_msg_len && in_msg[in_msg_len-1] == '\r'){
- in_msg_len = 0;
- }
-
- if(!(len == 1 && data[0] == '\r' && in_msg_len && in_msg[in_msg_len-1] == '\r')) {
- // Not Repeating last message
- elm_append_in_msg(data, len); //Aim to remove this memcpy
- }
- if(elm_mode_echo)
- elm_append_rsp(in_msg, in_msg_len);
-
- if(in_msg_len > 0 && in_msg[in_msg_len-1] == '\r') { //Got a full line
- stripped_msg_len = elm_strip(in_msg, in_msg_len, stripped_msg, sizeof(stripped_msg));
-
- if(elm_msg_is_at_cmd(stripped_msg, stripped_msg_len)) {
- elm_process_at_cmd(stripped_msg+2, stripped_msg_len-2);
- elm_append_rsp_const(">");
- } else if(elm_check_valid_hex_chars(stripped_msg, stripped_msg_len - 1)) {
- elm_current_proto()->process_obd(elm_current_proto(), stripped_msg, stripped_msg_len);
- } else {
- elm_append_rsp_const("?\r\r>");
- }
- }
-
- elm_tcp_tx_flush();
-
- //Just clear the buffer if full with no termination
- if(in_msg_len == sizeof(in_msg) && in_msg[in_msg_len-1] != '\r')
- in_msg_len = 0;
-}
-
-void ICACHE_FLASH_ATTR elm_tcp_disconnect_cb(void *arg){
- struct espconn *pesp_conn = (struct espconn *)arg;
-
- elm_tcp_conn_t * prev = NULL;
- for(elm_tcp_conn_t *iter = connection_list; iter != NULL; iter=iter->next){
- struct espconn *conn = iter->conn;
- //SHOW_CONNECTION("Considering Disconnecting", conn);
- if(!memcmp(pesp_conn->proto.tcp->remote_ip, conn->proto.tcp->remote_ip, 4) &&
- pesp_conn->proto.tcp->remote_port == conn->proto.tcp->remote_port){
- os_printf("Deleting ELM Connection!\n");
- if(prev){
- prev->next = iter->next;
- } else {
- connection_list = iter->next;
- }
- os_free(iter);
- break;
- }
-
- prev = iter;
- }
-
- if(connection_list == NULL) {
- //If all clients are disconnected, reset the protocol (cancels
- //keep alive timers). This will not detect inproperly killed
- //connections. In this case, periodic events associated with the
- //current protocol will continue until a new client attaches, a
- //command is sent generating a response (ELM will try to responde
- //to the dead connection, and remove it upon error), and finally,
- //the new client disconnects. OFC a power cycle is also an option.
- elm_proto_reinit(elm_current_proto());
- }
-}
-
-void ICACHE_FLASH_ATTR elm_tcp_connect_cb(void *arg) {
- struct espconn *pesp_conn = (struct espconn *)arg;
- //SHOW_CONNECTION("New connection", pesp_conn);
- espconn_set_opt(&elm_conn, ESPCONN_NODELAY);
- espconn_regist_recvcb(pesp_conn, elm_rx_cb);
- //Allow several sends to be queued at a time.
- espconn_tcp_set_buf_count(pesp_conn, 3);
-
- bool connection_address_already_there = false;
- for(elm_tcp_conn_t *iter2 = connection_list; iter2 != NULL; iter2 = iter2->next)
- if(iter2->conn == pesp_conn){connection_address_already_there = true; break;}
-
- if(connection_address_already_there) {
- os_printf("ELM WIFI: Memory reuse of recently killed connection\n");
- } else {
- os_printf("ELM WIFI: Adding connection\n");
- elm_tcp_conn_t *newconn = os_malloc(sizeof(elm_tcp_conn_t));
- if(!newconn) {
- os_printf("Failed to allocate place for connection\n");
- } else {
- newconn->next = connection_list;
- newconn->conn = pesp_conn;
- connection_list = newconn;
- }
- }
-}
-
-void ICACHE_FLASH_ATTR elm327_init() {
- // control listener
- elm_proto.local_port = ELM_PORT;
- elm_conn.type = ESPCONN_TCP;
- elm_conn.state = ESPCONN_NONE;
- elm_conn.proto.tcp = &elm_proto;
- espconn_regist_connectcb(&elm_conn, elm_tcp_connect_cb);
- espconn_regist_disconcb(&elm_conn, elm_tcp_disconnect_cb);
- espconn_accept(&elm_conn);
- espconn_regist_time(&elm_conn, 0, 0); // 60s timeout for all connections
-}
diff --git a/panda/boardesp/get_sdk.sh b/panda/boardesp/get_sdk.sh
deleted file mode 100755
index adccf678f9c6a9..00000000000000
--- a/panda/boardesp/get_sdk.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf \
- flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial \
- sed git unzip bash help2man wget bzip2
-# huh?
-sudo apt-get install libtool
-sudo apt-get install libtool-bin
-git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
-cd esp-open-sdk
-git checkout 03f5e898a059451ec5f3de30e7feff30455f7cec
-LD_LIBRARY_PATH="" make STANDALONE=y
-
diff --git a/panda/boardesp/get_sdk_ci.sh b/panda/boardesp/get_sdk_ci.sh
deleted file mode 100755
index b11cb099a6eb5c..00000000000000
--- a/panda/boardesp/get_sdk_ci.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-git clone --recursive https://github.com/pfalcon/esp-open-sdk.git
-cd esp-open-sdk
-git checkout 03f5e898a059451ec5f3de30e7feff30455f7cec
-LD_LIBRARY_PATH="" make STANDALONE=y
diff --git a/panda/boardesp/get_sdk_mac.sh b/panda/boardesp/get_sdk_mac.sh
deleted file mode 100755
index a8c2d709d45811..00000000000000
--- a/panda/boardesp/get_sdk_mac.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-# from http://www.esp8266.com/wiki/doku.php?id=setup-osx-compiler-esp8266
-
-brew install gnu-sed --with-default-names
-brew tap homebrew/dupes
-brew install gperf
-brew install grep
-brew install autoconf
-brew install binutils
-brew install gawk
-brew install wget
-brew install automake
-brew install libtool
-brew install help2man
-
-brew uninstall gperf
-
-hdiutil create esp-open-sdk.dmg -volname "esp-open-sdk" -size 10g -fs "Case-sensitive HFS+"
-hdiutil mount esp-open-sdk.dmg
-ln -s /Volumes/esp-open-sdk esp-open-sdk
-cd esp-open-sdk
-
-git init
-git remote add origin https://github.com/pfalcon/esp-open-sdk.git
-git fetch origin
-git checkout 03f5e898a059451ec5f3de30e7feff30455f7cec
-git submodule init
-git submodule update --recursive
-
-make STANDALONE=y
-
diff --git a/panda/boardesp/include/espmissingincludes.h b/panda/boardesp/include/espmissingincludes.h
deleted file mode 100644
index 51672d3f50c54c..00000000000000
--- a/panda/boardesp/include/espmissingincludes.h
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef ESPMISSINGINCLUDES_H
-#define ESPMISSINGINCLUDES_H
-
-#include
-#include
-#include
-
-
-int strcasecmp(const char *a, const char *b);
-#ifndef FREERTOS
-#include
-#include
-//Missing function prototypes in include folders. Gcc will warn on these if we don't define 'em anywhere.
-//MOST OF THESE ARE GUESSED! but they seem to swork and shut up the compiler.
-typedef struct espconn espconn;
-
-int atoi(const char *nptr);
-void ets_install_putc1(void *routine);
-void ets_isr_attach(int intr, void *handler, void *arg);
-void ets_isr_mask(unsigned intr);
-void ets_isr_unmask(unsigned intr);
-int ets_memcmp(const void *s1, const void *s2, size_t n);
-void *ets_memcpy(void *dest, const void *src, size_t n);
-void *ets_memset(void *s, int c, size_t n);
-int ets_sprintf(char *str, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
-int ets_str2macaddr(void *, void *);
-int ets_strcmp(const char *s1, const char *s2);
-char *ets_strcpy(char *dest, const char *src);
-size_t ets_strlen(const char *s);
-int ets_strncmp(const char *s1, const char *s2, int len);
-char *ets_strncpy(char *dest, const char *src, size_t n);
-char *ets_strstr(const char *haystack, const char *needle);
-void ets_timer_arm_new(os_timer_t *a, int b, int c, int isMstimer);
-void ets_timer_disarm(os_timer_t *a);
-void ets_timer_setfn(os_timer_t *t, ETSTimerFunc *fn, void *parg);
-void ets_update_cpu_frequency(int freqmhz);
-void *os_memmove(void *dest, const void *src, size_t n);
-int os_printf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
-int os_snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
-int os_printf_plus(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
-void uart_div_modify(int no, unsigned int freq);
-uint8 wifi_get_opmode(void);
-uint32 system_get_time();
-int rand(void);
-void ets_bzero(void *s, size_t n);
-void ets_delay_us(int ms);
-
-//Hack: this is defined in SDK 1.4.0 and undefined in 1.3.0. It's only used for this, the symbol itself
-//has no meaning here.
-#ifndef RC_LIMIT_P2P_11N
-//Defs for SDK <1.4.0
-void *pvPortMalloc(size_t xWantedSize);
-void *pvPortZalloc(size_t);
-void vPortFree(void *ptr);
-void *vPortMalloc(size_t xWantedSize);
-void pvPortFree(void *ptr);
-#else
-void *pvPortMalloc(size_t xWantedSize, const char *file, int line);
-void *pvPortZalloc(size_t, const char *file, int line);
-void vPortFree(void *ptr, const char *file, int line);
-void *vPortMalloc(size_t xWantedSize, const char *file, int line);
-void pvPortFree(void *ptr, const char *file, int line);
-#endif
-
-//Standard PIN_FUNC_SELECT gives a warning. Replace by a non-warning one.
-#ifdef PIN_FUNC_SELECT
-#undef PIN_FUNC_SELECT
-#define PIN_FUNC_SELECT(PIN_NAME, FUNC) do { \
- WRITE_PERI_REG(PIN_NAME, \
- (READ_PERI_REG(PIN_NAME) \
- & (~(PERIPHS_IO_MUX_FUNC< _b ? _a : _b; })
-
-char ssid[32];
-char password[] = "testing123";
-int wifi_secure_mode = 0;
-
-static const int pin = 2;
-
-// Structure holding the TCP connection information.
-struct espconn tcp_conn;
-// TCP specific protocol structure.
-esp_tcp tcp_proto;
-
-// interrupt communication on port 1338, UDP!
-struct espconn inter_conn;
-esp_udp inter_proto;
-
-uint32_t sendData[0x14] = {0};
-uint32_t recvData[0x40] = {0};
-
-static int ICACHE_FLASH_ATTR __spi_comm(char *dat, int len, uint32_t *recvData, int recvDataLen) {
- unsigned int length = 0;
-
- SpiData spiData;
-
- spiData.cmd = 2;
- spiData.cmdLen = 0;
- spiData.addr = NULL;
- spiData.addrLen = 0;
-
- // float boot pin
- gpio_output_set(0, 0, 0, (1 << 4));
-
- // manual CS pin
- gpio_output_set(0, (1 << 5), 0, 0);
- memset(sendData, 0xCC, 0x14);
-
- // wait for ST to respond to CS interrupt
- os_delay_us(50);
-
- // send request
- memcpy(((void*)sendData), dat, len);
- spiData.data = sendData;
- spiData.dataLen = 0x14;
- SPIMasterSendData(SpiNum_HSPI, &spiData);
-
- #define SPI_TIMEOUT 50000
- // give the ST time to be ready, up to 500ms
- int i;
- for (i = 0; (gpio_input_get() & (1 << 4)) && i < SPI_TIMEOUT; i++) {
- os_delay_us(10);
- system_soft_wdt_feed();
- }
-
- // TODO: handle this better
- if (i == SPI_TIMEOUT) {
- os_printf("ERROR: SPI receive failed\n");
- goto fail;
- }
-
- // blank out recvData
- memset(recvData, 0x00, 0x44);
-
- // receive the length
- spiData.data = recvData;
- spiData.dataLen = 4;
- if(SPIMasterRecvData(SpiNum_HSPI, &spiData) == -1) {
- // TODO: Handle gracefully. Maybe fail if len read fails?
- os_printf("SPI: Failed to recv length\n");
- goto fail;
- }
-
- length = recvData[0];
- if (length > 0x40) {
- os_printf("SPI: BAD LENGTH RECEIVED %x\n", length);
- length = 0;
- goto fail;
- }
-
- // got response, 0x40 works, 0x44 does not
- spiData.data = recvData+1;
- spiData.dataLen = (length+3)&(~3); // recvDataLen;
- if(SPIMasterRecvData(SpiNum_HSPI, &spiData) == -1) {
- // TODO: Handle gracefully. Maybe retry if payload failed.
- os_printf("SPI: Failed to recv payload\n");
- length = 0;
- goto fail;
- }
-
-fail:
- // clear CS
- gpio_output_set((1 << 5), 0, 0, 0);
-
- // set boot pin back
- gpio_output_set((1 << 4), 0, (1 << 4), 0);
-
- return length;
-}
-
-int ICACHE_FLASH_ATTR spi_comm(char *dat, int len, uint32_t *recvData, int recvDataLen) {
- // blink the led during SPI comm
- if (GPIO_REG_READ(GPIO_OUT_ADDRESS) & (1 << pin)) {
- // set gpio low
- gpio_output_set(0, (1 << pin), 0, 0);
- } else {
- // set gpio high
- gpio_output_set((1 << pin), 0, 0, 0);
- }
-
- return __spi_comm(dat, len, recvData, recvDataLen);
-}
-
-static void ICACHE_FLASH_ATTR tcp_rx_cb(void *arg, char *data, uint16_t len) {
- // nothing too big
- if (len > 0x14) return;
-
- // do the SPI comm
- spi_comm(data, len, recvData, 0x40);
-
- espconn_send(&tcp_conn, recvData, 0x44);
-}
-
-void ICACHE_FLASH_ATTR tcp_connect_cb(void *arg) {
- struct espconn *conn = (struct espconn *)arg;
- espconn_set_opt(&tcp_conn, ESPCONN_NODELAY);
- espconn_regist_recvcb(conn, tcp_rx_cb);
-}
-
-// must be 0x44, because we can fit 4 more
-uint8_t buf[0x44*0x10];
-int queue_send_len = -1;
-
-void ICACHE_FLASH_ATTR poll_can(void *arg) {
- uint8_t timerRecvData[0x44] = {0};
- int i = 0;
- int j;
-
- while (i < 0x40) {
- int len = spi_comm("\x01\x00\x00\x00", 4, timerRecvData, 0x40);
- if (len == 0) break;
- if (len > 0x40) { os_printf("SPI LENGTH ERROR!"); break; }
-
- // if it sends it, assume it's valid CAN
- for (j = 0; j < len; j += 0x10) {
- memcpy(buf + i*0x10, (timerRecvData+4)+j, 0x10);
- i++;
- }
- }
-
- if (i != 0) {
- int ret = espconn_sendto(&inter_conn, buf, i*0x10);
- if (ret != 0) {
- os_printf("send failed: %d\n", ret);
- queue_send_len = i*0x10;
- } else {
- queue_send_len = -1;
- }
- }
-}
-
-int udp_countdown = 0;
-
-static volatile os_timer_t udp_callback;
-void ICACHE_FLASH_ATTR udp_callback_func(void *arg) {
- if (queue_send_len == -1) {
- poll_can(NULL);
- } else {
- int ret = espconn_sendto(&inter_conn, buf, queue_send_len);
- if (ret == 0) {
- queue_send_len = -1;
- }
- }
- if (udp_countdown > 0) {
- os_timer_arm(&udp_callback, 5, 0);
- udp_countdown--;
- } else {
- os_printf("UDP timeout\n");
- }
-}
-
-void ICACHE_FLASH_ATTR inter_recv_cb(void *arg, char *pusrdata, unsigned short length) {
- remot_info *premot = NULL;
- if (espconn_get_connection_info(&inter_conn,&premot,0) == ESPCONN_OK) {
- inter_conn.proto.udp->remote_port = premot->remote_port;
- inter_conn.proto.udp->remote_ip[0] = premot->remote_ip[0];
- inter_conn.proto.udp->remote_ip[1] = premot->remote_ip[1];
- inter_conn.proto.udp->remote_ip[2] = premot->remote_ip[2];
- inter_conn.proto.udp->remote_ip[3] = premot->remote_ip[3];
-
-
- if (udp_countdown == 0) {
- os_printf("UDP recv\n");
- udp_countdown = 200*5;
-
- // start 5 second timer
- os_timer_disarm(&udp_callback);
- os_timer_setfn(&udp_callback, (os_timer_func_t *)udp_callback_func, NULL);
- os_timer_arm(&udp_callback, 5, 0);
- } else {
- udp_countdown = 200*5;
- }
- }
-}
-
-void ICACHE_FLASH_ATTR wifi_configure(int secure) {
- wifi_secure_mode = secure;
-
- // start wifi AP
- wifi_set_opmode(SOFTAP_MODE);
- struct softap_config config = {0};
- wifi_softap_get_config(&config);
- strcpy(config.ssid, ssid);
- if (wifi_secure_mode == 0) strcat(config.ssid, "-pair");
- strcpy(config.password, password);
- config.ssid_len = strlen(config.ssid);
- config.authmode = wifi_secure_mode ? AUTH_WPA2_PSK : AUTH_OPEN;
- config.beacon_interval = 100;
- config.max_connection = 4;
- wifi_softap_set_config(&config);
-
- if (wifi_secure_mode) {
- // setup tcp server
- tcp_proto.local_port = 1337;
- tcp_conn.type = ESPCONN_TCP;
- tcp_conn.state = ESPCONN_NONE;
- tcp_conn.proto.tcp = &tcp_proto;
- espconn_regist_connectcb(&tcp_conn, tcp_connect_cb);
- espconn_accept(&tcp_conn);
- espconn_regist_time(&tcp_conn, 60, 0); // 60s timeout for all connections
-
- // setup inter server
- inter_proto.local_port = 1338;
- const char udp_remote_ip[4] = {255, 255, 255, 255};
- os_memcpy(inter_proto.remote_ip, udp_remote_ip, 4);
- inter_proto.remote_port = 1338;
-
- inter_conn.type = ESPCONN_UDP;
- inter_conn.proto.udp = &inter_proto;
-
- espconn_regist_recvcb(&inter_conn, inter_recv_cb);
- espconn_create(&inter_conn);
- }
-}
-
-void ICACHE_FLASH_ATTR wifi_init() {
- // default ssid and password
- memset(ssid, 0, 32);
- os_sprintf(ssid, "panda-%08x-BROKEN", system_get_chip_id());
-
- // fetch secure ssid and password
- // update, try 20 times, for 1 second
- for (int i = 0; i < 20; i++) {
- uint8_t digest[SHA_DIGEST_SIZE];
- char resp[0x20];
- __spi_comm("\x00\x00\x00\x00\x40\xD0\x00\x00\x00\x00\x20\x00", 0xC, recvData, 0x40);
- memcpy(resp, recvData+1, 0x20);
-
- SHA_hash(resp, 0x1C, digest);
- if (memcmp(digest, resp+0x1C, 4) == 0) {
- // OTP is valid
- memcpy(ssid+6, resp, 0x10);
- memcpy(password, resp+0x10, 10);
- break;
- }
- os_delay_us(50000);
- }
- os_printf("Finished getting SID\n");
- os_printf(ssid);
- os_printf("\n");
-
- // set IP
- wifi_softap_dhcps_stop(); //stop DHCP before setting static IP
- struct ip_info ip_config;
- IP4_ADDR(&ip_config.ip, 192, 168, 0, 10);
- IP4_ADDR(&ip_config.gw, 0, 0, 0, 0);
- IP4_ADDR(&ip_config.netmask, 255, 255, 255, 0);
- wifi_set_ip_info(SOFTAP_IF, &ip_config);
- int stupid_gateway = 0;
- wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &stupid_gateway);
- wifi_softap_dhcps_start();
-
- wifi_configure(0);
-}
-
-#define LOOP_PRIO 2
-#define QUEUE_SIZE 1
-static os_event_t my_queue[QUEUE_SIZE];
-void loop();
-
-void ICACHE_FLASH_ATTR web_init();
-void ICACHE_FLASH_ATTR elm327_init();
-
-void ICACHE_FLASH_ATTR user_init() {
- // init gpio subsystem
- gpio_init();
-
- // configure UART TXD to be GPIO1, set as output
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_GPIO1);
- gpio_output_set(0, 0, (1 << pin), 0);
-
- // configure SPI
- SpiAttr hSpiAttr;
- hSpiAttr.bitOrder = SpiBitOrder_MSBFirst;
- hSpiAttr.speed = SpiSpeed_10MHz;
- hSpiAttr.mode = SpiMode_Master;
- hSpiAttr.subMode = SpiSubMode_0;
-
- // TODO: is one of these CS?
- WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105);
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, 2); // configure io to spi mode
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, 2); // configure io to spi mode
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, 2); // configure io to spi mode
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, 2); // configure io to spi mode
- SPIInit(SpiNum_HSPI, &hSpiAttr);
- //SPICsPinSelect(SpiNum_HSPI, SpiPinCS_1);
-
- // configure UART TXD to be GPIO1, set as output
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5);
- gpio_output_set(0, 0, (1 << 5), 0);
- gpio_output_set((1 << 5), 0, 0, 0);
-
- // uart init
- uart_init(BIT_RATE_115200, BIT_RATE_115200);
-
- // led init
- PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
- gpio_output_set(0, (1 << pin), (1 << pin), 0);
-
- os_printf("hello\n");
-
- // needs SPI
- wifi_init();
-
- // support ota upgrades
- elm327_init();
- web_init();
-
- // set gpio high, so LED is off by default
- for (int i = 0; i < 5; i++) {
- gpio_output_set(0, (1 << pin), 0, 0);
- os_delay_us(50000);
- gpio_output_set((1 << pin), 0, 0, 0);
- os_delay_us(50000);
- }
-
- // jump to OS
- system_os_task(loop, LOOP_PRIO, my_queue, QUEUE_SIZE);
- system_os_post(LOOP_PRIO, 0, 0);
-}
-
-void ICACHE_FLASH_ATTR loop(os_event_t *events) {
- system_os_post(LOOP_PRIO, 0, 0);
-}
-
diff --git a/panda/boardesp/user_config.h b/panda/boardesp/user_config.h
deleted file mode 100644
index e69de29bb2d1d6..00000000000000
diff --git a/panda/boardesp/webserver.c b/panda/boardesp/webserver.c
deleted file mode 100644
index b1a514626f6a6e..00000000000000
--- a/panda/boardesp/webserver.c
+++ /dev/null
@@ -1,380 +0,0 @@
-#include "stdlib.h"
-#include "ets_sys.h"
-#include "osapi.h"
-#include "gpio.h"
-#include "mem.h"
-#include "os_type.h"
-#include "user_interface.h"
-#include "espconn.h"
-#include "upgrade.h"
-
-#include "crypto/rsa.h"
-#include "crypto/sha.h"
-
-#include "obj/gitversion.h"
-#include "obj/cert.h"
-
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#define espconn_send_string(conn, x) espconn_send(conn, x, strlen(x))
-
-#define MAX_RESP 0x800
-char resp[MAX_RESP];
-char pageheader[] = "HTTP/1.0 200 OK\nContent-Type: text/html\n\n"
-"\n"
-"\n"
-"\n"
-"Panda \n"
-"\n"
-"\n"
-"This is your comma.ai panda\n\n"
-"It's open source. Find the code here \n";
-
-char pagefooter[] = " \n"
-"\n"
-"\n";
-
-char OK_header[] = "HTTP/1.0 200 OK\nContent-Type: text/html\n\n";
-
-static struct espconn web_conn;
-static esp_tcp web_proto;
-extern char ssid[];
-extern int wifi_secure_mode;
-
-char *st_firmware;
-int real_content_length, content_length = 0;
-char *st_firmware_ptr;
-LOCAL os_timer_t ota_reboot_timer;
-
-#define FIRMWARE_SIZE 503808
-
-typedef struct {
- uint16_t ep;
- uint16_t extra_len;
- union {
- struct {
- uint8_t request_type;
- uint8_t request;
- uint16_t value;
- uint16_t index;
- uint16_t length;
- } control;
- uint8_t data[0x10];
- } u;
-} usb_msg;
-
-int ICACHE_FLASH_ATTR usb_cmd(int ep, int len, int request,
- int value, int index, char *data) {
- usb_msg usb = {0};
-
- usb.ep = ep;
- usb.extra_len = (ep == 0) ? 0 : len;
- if (ep == 0) {
- usb.u.control.request_type = 0xc0;
- usb.u.control.request = request;
- usb.u.control.value = value;
- usb.u.control.index = index;
- } else {
- memcpy(&usb.u.data, data, usb.extra_len);
- }
-
- uint32_t recv[0x44/4];
- spi_comm(&usb, sizeof(usb), recv, 0x40);
-
- return recv[0];
-}
-
-
-void ICACHE_FLASH_ATTR st_flash() {
- if (st_firmware != NULL) {
- // boot mode
- os_printf("st_flash: enter boot mode\n");
- st_set_boot_mode(1);
-
- // echo
- os_printf("st_flash: wait for echo\n");
- for (int i = 0; i < 10; i++) {
- os_printf(" attempt: %d\n", i);
- if (usb_cmd(0, 0, 0xb0, 0, 0, NULL) > 0) break;
- }
-
- // unlock flash
- os_printf("st_flash: unlock flash\n");
- usb_cmd(0, 0, 0xb1, 0, 0, NULL);
-
- // erase sector 1
- os_printf("st_flash: erase sector 1\n");
- usb_cmd(0, 0, 0xb2, 1, 0, NULL);
-
- if (real_content_length >= 16384) {
- // erase sector 2
- os_printf("st_flash: erase sector 2\n");
- usb_cmd(0, 0, 0xb2, 2, 0, NULL);
- }
-
- // real content length will always be 0x10 aligned
- os_printf("st_flash: flashing\n");
- for (int i = 0; i < real_content_length; i += 0x10) {
- int rl = MIN(0x10, real_content_length-i);
- usb_cmd(2, rl, 0, 0, 0, &st_firmware[i]);
- system_soft_wdt_feed();
- }
-
- // reboot into normal mode
- os_printf("st_flash: rebooting\n");
- usb_cmd(0, 0, 0xd8, 0, 0, NULL);
-
- // done with this
- os_free(st_firmware);
- st_firmware = NULL;
- }
-}
-
-typedef enum {
- NOT_STARTED,
- CONNECTION_ESTABLISHED,
- RECEIVING_HEADER,
- RECEIVING_ST_FIRMWARE,
- RECEIVING_ESP_FIRMWARE,
- REBOOTING,
- ERROR
-} web_state_t;
-
-web_state_t state = NOT_STARTED;
-int esp_address, esp_address_erase_limit, start_address;
-
-void ICACHE_FLASH_ATTR hexdump(char *data, int len) {
- int i;
- for (i=0;isecure it");
- }
-
- ets_strcat(resp,"\nSet USB Mode:"
- "Client "
- "CDP "
- "DCP \n");
-
- ets_strcat(resp, pagefooter);
-
- espconn_send_string(&web_conn, resp);
- espconn_disconnect(conn);
- } else if (memcmp(data, "GET /secure", 11) == 0 && !wifi_secure_mode) {
- wifi_configure(1);
- } else if (memcmp(data, "GET /set_property?usb_mode=", 27) == 0 && wifi_secure_mode) {
- char mode_value = data[27] - '0';
- if (mode_value >= '\x00' && mode_value <= '\x02') {
- memset(resp, 0, MAX_RESP);
- char set_usb_mode_packet[] = "\x00\x00\x00\x00\x40\xE6\x00\x00\x00\x00\x40\x00";
- set_usb_mode_packet[6] = mode_value;
- uint32_t recvData[1];
- spi_comm(set_usb_mode_packet, 0xC, recvData, 0);
- os_sprintf(resp, "%sUSB Mode set to %02x\n\n", OK_header, mode_value);
- espconn_send_string(&web_conn, resp);
- espconn_disconnect(conn);
- }
- } else if (memcmp(data, "PUT /stupdate ", 14) == 0 && wifi_secure_mode) {
- os_printf("init st firmware\n");
- char *cl = strstr(data, "Content-Length: ");
- if (cl != NULL) {
- // get content length
- cl += strlen("Content-Length: ");
- content_length = skip_atoi(&cl);
- os_printf("with content length %d\n", content_length);
-
- // should be small enough to fit in RAM
- real_content_length = (content_length+0xF)&(~0xF);
- st_firmware_ptr = st_firmware = os_malloc(real_content_length);
- memset(st_firmware, 0, real_content_length);
- state = RECEIVING_ST_FIRMWARE;
- }
-
- } else if (((memcmp(data, "PUT /espupdate1 ", 16) == 0) ||
- (memcmp(data, "PUT /espupdate2 ", 16) == 0)) && wifi_secure_mode) {
- // 0x1000 = user1.bin
- // 0x81000 = user2.bin
- // 0x3FE000 = blank.bin
- os_printf("init esp firmware\n");
- char *cl = strstr(data, "Content-Length: ");
- if (cl != NULL) {
- // get content length
- cl += strlen("Content-Length: ");
- content_length = skip_atoi(&cl);
- os_printf("with content length %d\n", content_length);
-
- // setup flashing
- uint8_t current = system_upgrade_userbin_check();
- if (data[14] == '2' && current == UPGRADE_FW_BIN1) {
- os_printf("flashing boot2.bin\n");
- state = RECEIVING_ESP_FIRMWARE;
- esp_address = 4*1024 + FIRMWARE_SIZE + 16*1024 + 4*1024;
- } else if (data[14] == '1' && current == UPGRADE_FW_BIN2) {
- os_printf("flashing boot1.bin\n");
- state = RECEIVING_ESP_FIRMWARE;
- esp_address = 4*1024;
- } else {
- espconn_send_string(&web_conn, "HTTP/1.0 404 Not Found\nContent-Type: text/html\n\nwrong!\n");
- espconn_disconnect(conn);
- }
- esp_address_erase_limit = esp_address;
- start_address = esp_address;
- }
- } else {
- espconn_send_string(&web_conn, "HTTP/1.0 404 Not Found\nContent-Type: text/html\n\n404 Not Found!\n");
- espconn_disconnect(conn);
- }
- } else if (state == RECEIVING_ST_FIRMWARE) {
- os_printf("receiving st firmware: %d/%d\n", len, content_length);
- memcpy(st_firmware_ptr, data, MIN(content_length, len));
- st_firmware_ptr += len;
- content_length -= len;
-
- if (content_length <= 0 && real_content_length > 1000) {
- state = NOT_STARTED;
- os_printf("done!\n");
- espconn_send_string(&web_conn, "HTTP/1.0 200 OK\nContent-Type: text/html\n\nsuccess!\n");
- espconn_disconnect(conn);
-
- // reboot
- os_printf("Scheduling st_flash in 100ms.\n");
- os_timer_disarm(&ota_reboot_timer);
- os_timer_setfn(&ota_reboot_timer, (os_timer_func_t *)st_flash, NULL);
- os_timer_arm(&ota_reboot_timer, 100, 0);
- }
- } else if (state == RECEIVING_ESP_FIRMWARE) {
- if ((esp_address+len) < (start_address + FIRMWARE_SIZE)) {
- os_printf("receiving esp firmware: %d/%d -- 0x%x - 0x%x\n", len, content_length,
- esp_address, esp_address_erase_limit);
- content_length -= len;
- while (esp_address_erase_limit < (esp_address + len)) {
- os_printf("erasing 0x%X\n", esp_address_erase_limit);
- spi_flash_erase_sector(esp_address_erase_limit / SPI_FLASH_SEC_SIZE);
- esp_address_erase_limit += SPI_FLASH_SEC_SIZE;
- }
- SpiFlashOpResult res = spi_flash_write(esp_address, data, len);
- if (res != SPI_FLASH_RESULT_OK) {
- os_printf("flash fail @ 0x%x\n", esp_address);
- }
- esp_address += len;
-
- if (content_length == 0) {
-
- char digest[SHA_DIGEST_SIZE];
- uint32_t rsa[RSANUMBYTES/4];
- uint32_t dat[0x80/4];
- int ll;
- spi_flash_read(esp_address-RSANUMBYTES, rsa, RSANUMBYTES);
-
- // 32-bit aligned accesses only
- SHA_CTX ctx;
- SHA_init(&ctx);
- for (ll = start_address; ll < esp_address-RSANUMBYTES; ll += 0x80) {
- spi_flash_read(ll, dat, 0x80);
- SHA_update(&ctx, dat, MIN((esp_address-RSANUMBYTES)-ll, 0x80));
- }
- memcpy(digest, SHA_final(&ctx), SHA_DIGEST_SIZE);
-
- if (RSA_verify(&releaseesp_rsa_key, rsa, RSANUMBYTES, digest, SHA_DIGEST_SIZE) ||
- #ifdef ALLOW_DEBUG
- RSA_verify(&debugesp_rsa_key, rsa, RSANUMBYTES, digest, SHA_DIGEST_SIZE)
- #else
- false
- #endif
- ) {
- os_printf("RSA verify success!\n");
- espconn_send_string(&web_conn, "HTTP/1.0 200 OK\nContent-Type: text/html\n\nsuccess!\n");
- system_upgrade_flag_set(UPGRADE_FLAG_FINISH);
-
- // reboot
- os_printf("Scheduling reboot.\n");
- os_timer_disarm(&ota_reboot_timer);
- os_timer_setfn(&ota_reboot_timer, (os_timer_func_t *)system_upgrade_reboot, NULL);
- os_timer_arm(&ota_reboot_timer, 2000, 0);
- } else {
- os_printf("RSA verify FAILURE\n");
- espconn_send_string(&web_conn, "HTTP/1.0 500 Internal Server Error\nContent-Type: text/html\n\nrsa verify fail\n");
- }
- espconn_disconnect(conn);
- }
- }
- }
-}
-
-void ICACHE_FLASH_ATTR web_tcp_connect_cb(void *arg) {
- state = CONNECTION_ESTABLISHED;
- struct espconn *conn = (struct espconn *)arg;
- espconn_set_opt(&web_conn, ESPCONN_NODELAY);
- espconn_regist_recvcb(conn, web_rx_cb);
-}
-
-void ICACHE_FLASH_ATTR web_init() {
- web_proto.local_port = 80;
- web_conn.type = ESPCONN_TCP;
- web_conn.state = ESPCONN_NONE;
- web_conn.proto.tcp = &web_proto;
- espconn_regist_connectcb(&web_conn, web_tcp_connect_cb);
- espconn_accept(&web_conn);
-}
-
diff --git a/panda/buy.png b/panda/buy.png
deleted file mode 100644
index a4a9e0fd40a426..00000000000000
Binary files a/panda/buy.png and /dev/null differ
diff --git a/panda/certs/debugesp b/panda/certs/debugesp
deleted file mode 100644
index 789beaac195639..00000000000000
--- a/panda/certs/debugesp
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQCjIHvrSCWN0Nec6ozbImYik30PIF7JSWgdwDKTxSJ05RM3pj5E
-LQEGt3qcaVrTokO68tpt5Gu1p6ZsNqWg7iVTW9M7Qj7IH45YDzQP/PSRjgSosQA6
-6f5Gokba5QrW38myqimvj+0p+YH+CNGCBRlTUQGCO8uLCspMZneRSLPW9QIDAQAB
-AoGADaUn+HRef9BaWMvd4G6uMHI54cwJYbj8NpDfKjExQqnuw5bqWnWRQmiSnwbJ
-DC7kj3zE/LBAuj890ot3q1CAWqh47ZICZfoX9Qbi5TpvIHFCGy6YkOliF6iIQhR2
-4+zNKTAA0zNKskOM25PdI+grK1Ni/bEofSA6TrqvEwsmxnkCQQDVp9FUUor2Bo/h
-/3oAIP51LTw7vfpztYbJr+BDV63czV2DLXzSwzeNrwH4sA3oy1mjUgMBBgAarNGE
-DYlc4H5jAkEAw3UCHzzXPlxkw2QGp7nBly5y3p80Uqc31NuYz8rdX/U8KTngi2No
-Ft/SGCEXNpeYbToj+WK3RJJ2Ey0mK8+IxwJAcpGd/5CPsaQNLcw4WK9Yo+8Q2Jxk
-G/4gfDCSmqn+smNxnLEcuUwzkwdgkEGgA9BfjeOhdsAH+EXpx90WZrZ/LwJBAK0k
-jq+rTqUQZbZsejTEKYjJ/bnV4BzDwoKN0Q1pkLc7X4LJoW74rTFuLgdv8MdMfRtt
-IIb/eoeFEpGkMicnHesCQHgR7BTUGBM6Uxam7RCdsgVsxoHBma21E/44ivWUMZzN
-3oVt0mPnjS4speOlqwED5pCJ7yw7jwLPFMs8kNxuIKU=
------END RSA PRIVATE KEY-----
diff --git a/panda/certs/debugesp.pub b/panda/certs/debugesp.pub
deleted file mode 100644
index 3afcf3988ea651..00000000000000
--- a/panda/certs/debugesp.pub
+++ /dev/null
@@ -1 +0,0 @@
-ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCjIHvrSCWN0Nec6ozbImYik30PIF7JSWgdwDKTxSJ05RM3pj5ELQEGt3qcaVrTokO68tpt5Gu1p6ZsNqWg7iVTW9M7Qj7IH45YDzQP/PSRjgSosQA66f5Gokba5QrW38myqimvj+0p+YH+CNGCBRlTUQGCO8uLCspMZneRSLPW9Q== batman@y840
diff --git a/panda/certs/releaseesp.pub b/panda/certs/releaseesp.pub
deleted file mode 100644
index 1d1d54bb7e73f4..00000000000000
--- a/panda/certs/releaseesp.pub
+++ /dev/null
@@ -1 +0,0 @@
-ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDN4pVyGuJJSde1l3Fjay8qPxog09DsAJZtYPk+armoYO1L6YKReUTcMNyHQYZZMZFmhCdgjCgTIF2QYWMoP4KSe8l6JF04YPP51dIgefc6UXjtlSI8Pyutr0v9xXjSfsVm3RAJxDSHgzs9AoMsluKCL+LhAR1nd7cuHXITJ80O4w== batman@y840
diff --git a/panda/crypto/getcertheader.py b/panda/crypto/getcertheader.py
index 75d04e977ad8c1..a43bc02ebac908 100755
--- a/panda/crypto/getcertheader.py
+++ b/panda/crypto/getcertheader.py
@@ -1,6 +1,5 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import sys
-import struct
from Crypto.PublicKey import RSA
def egcd(a, b):
@@ -11,7 +10,7 @@ def egcd(a, b):
return (g, x - (b // a) * y, y)
def modinv(a, m):
- g, x, y = egcd(a, m)
+ g, x, _ = egcd(a, m)
if g != 1:
raise Exception('modular inverse does not exist')
else:
@@ -19,15 +18,15 @@ def modinv(a, m):
def to_c_string(x):
mod = (hex(x)[2:-1].rjust(0x100, '0'))
- hh = ''.join('\\x'+mod[i:i+2] for i in range(0, 0x100, 2))
+ hh = ''.join('\\x' + mod[i:i + 2] for i in range(0, 0x100, 2))
return hh
def to_c_uint32(x):
nums = []
- for i in range(0x20):
- nums.append(x%(2**32))
- x /= (2**32)
- return "{"+'U,'.join(map(str, nums))+"U}"
+ for _ in range(0x20):
+ nums.append(x % (2**32))
+ x //= (2**32)
+ return "{" + 'U,'.join(map(str, nums)) + "U}"
for fn in sys.argv[1:]:
rsa = RSA.importKey(open(fn).read())
@@ -36,11 +35,9 @@ def to_c_uint32(x):
cname = fn.split("/")[-1].split(".")[0] + "_rsa_key"
- print 'RSAPublicKey '+cname+' = {.len = 0x20,'
- print ' .n0inv = %dU,' % n0inv
- print ' .n = %s,' % to_c_uint32(rsa.n)
- print ' .rr = %s,' % to_c_uint32(rr)
- print ' .exponent = %d,' % rsa.e
- print '};'
-
-
+ print('RSAPublicKey ' + cname + ' = {.len = 0x20,')
+ print(' .n0inv = %dU,' % n0inv)
+ print(' .n = %s,' % to_c_uint32(rsa.n))
+ print(' .rr = %s,' % to_c_uint32(rr))
+ print(' .exponent = %d,' % rsa.e)
+ print('};')
diff --git a/panda/crypto/sign.py b/panda/crypto/sign.py
index 159299271e91e0..e199a6b148137c 100755
--- a/panda/crypto/sign.py
+++ b/panda/crypto/sign.py
@@ -1,29 +1,36 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import os
import sys
import struct
import hashlib
from Crypto.PublicKey import RSA
+import binascii
+
+# increment this to make new hardware not run old versions
+VERSION = 2
rsa = RSA.importKey(open(sys.argv[3]).read())
-with open(sys.argv[1]) as f:
+with open(sys.argv[1], "rb") as f:
dat = f.read()
-print "signing", len(dat), "bytes"
+print("signing", len(dat), "bytes")
with open(sys.argv[2], "wb") as f:
if os.getenv("SETLEN") is not None:
+ # add the version at the end
+ dat += b"VERS" + struct.pack("I", VERSION)
+ # add the length at the beginning
x = struct.pack("I", len(dat)) + dat[4:]
# mock signature of dat[4:]
dd = hashlib.sha1(dat[4:]).digest()
else:
x = dat
dd = hashlib.sha1(dat).digest()
- print "hash:",dd.encode("hex")
- dd = "\x00\x01" + "\xff"*0x69 + "\x00" + dd
- rsa_out = pow(int(dd.encode("hex"), 16), rsa.d, rsa.n)
- sig = (hex(rsa_out)[2:-1].rjust(0x100, '0')).decode("hex")
- x += sig
- f.write(x)
+ print("hash:", str(binascii.hexlify(dd), "utf-8"))
+ dd = b"\x00\x01" + b"\xff" * 0x69 + b"\x00" + dd
+ rsa_out = pow(int.from_bytes(dd, byteorder='big', signed=False), rsa.d, rsa.n)
+ sig = (hex(rsa_out)[2:].rjust(0x100, '0'))
+ x += binascii.unhexlify(sig)
+ f.write(x)
diff --git a/panda/docs/guide.pdf b/panda/docs/guide.pdf
deleted file mode 100644
index 5dbc95680aa4f7..00000000000000
Binary files a/panda/docs/guide.pdf and /dev/null differ
diff --git a/panda/drivers/linux/.gitignore b/panda/drivers/linux/.gitignore
deleted file mode 100644
index 93a6cde7630501..00000000000000
--- a/panda/drivers/linux/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.*.cmd
-*.ko
-.tmp_versions
-Module.symvers
-modules.order
-*.mod.c
diff --git a/panda/drivers/linux/Makefile b/panda/drivers/linux/Makefile
deleted file mode 100644
index e5b1ec4219ea92..00000000000000
--- a/panda/drivers/linux/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-VERSION=0.0.1
-obj-m+=panda.o
-
-link:
- sudo dkms add `pwd`
-
-build:
- sudo dkms build panda/$(VERSION)
-
-install:
- sudo dkms install panda/$(VERSION)
-
-all: build install
-
-uninstall:
- sudo dkms uninstall panda/$(VERSION)
- sudo dkms remove panda/$(VERSION) --all
-
diff --git a/panda/drivers/linux/README.md b/panda/drivers/linux/README.md
deleted file mode 100644
index 81e95523acaca1..00000000000000
--- a/panda/drivers/linux/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-Installs the panda linux kernel driver using DKMS.
-
-This will allow the panda to work with tools such as `can-utils`
-
-prerequisites:
- - `apt-get install dkms gcc linux-headers-$(uname -r) make sudo`
-
-installation:
- - `make link` (only needed the first time. It will report an error on subsequent attempts to link)
- - `make all`
- - `make install`
-
-uninstall:
- - `make uninstall`
-
-usage:
-
-You will need to bring it up using `sudo ifconfig can0 up` or
-`sudo ip link set dev can0 up`, depending on your platform.
diff --git a/panda/drivers/linux/dkms.conf b/panda/drivers/linux/dkms.conf
deleted file mode 100644
index da9cba04a28bb7..00000000000000
--- a/panda/drivers/linux/dkms.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-PACKAGE_NAME="panda"
-PACKAGE_VERSION="0.0.1"
-BUILT_MODULE_NAME[0]="panda"
-DEST_MODULE_LOCATION[0]="/kernel/drivers/net/panda/"
-AUTOINSTALL="yes"
-
diff --git a/panda/drivers/linux/panda.c b/panda/drivers/linux/panda.c
deleted file mode 100644
index 4c5980a9d2ff3c..00000000000000
--- a/panda/drivers/linux/panda.c
+++ /dev/null
@@ -1,613 +0,0 @@
-/**
- * @file panda.c
- * @author Jessy Diamond Exum
- * @date 16 June 2017
- * @version 0.1
- * @brief Driver for the Comma.ai Panda CAN adapter to allow it to be controlled via
- * the Linux SocketCAN interface.
- * @see https://github.com/commaai/panda for the full project.
- * @see Inspired by net/can/usb/mcba_usb.c from Linux Kernel 4.12-rc4.
- */
-
-#include
-#include
-#include
-#include // Macros used to mark up functions e.g., __init __exit
-#include // Contains types, macros, functions for the kernel
-#include // Core header for loading LKMs into the kernel
-#include
-#include
-
-/* vendor and product id */
-#define PANDA_MODULE_NAME "panda"
-#define PANDA_VENDOR_ID 0XBBAA
-#define PANDA_PRODUCT_ID 0XDDCC
-
-#define PANDA_MAX_TX_URBS 20
-#define PANDA_CTX_FREE PANDA_MAX_TX_URBS
-
-#define PANDA_USB_RX_BUFF_SIZE 0x40
-#define PANDA_USB_TX_BUFF_SIZE (sizeof(struct panda_usb_can_msg))
-
-#define PANDA_NUM_CAN_INTERFACES 3
-
-#define PANDA_CAN_TRANSMIT 1
-#define PANDA_CAN_EXTENDED 4
-
-#define PANDA_BITRATE 500000
-
-#define PANDA_DLC_MASK 0x0F
-
-struct panda_usb_ctx {
- struct panda_inf_priv *priv;
- u32 ndx;
- u8 dlc;
-};
-
-struct panda_dev_priv;
-
-struct panda_inf_priv {
- struct can_priv can;
- struct panda_usb_ctx tx_context[PANDA_MAX_TX_URBS];
- struct net_device *netdev;
- struct usb_anchor tx_submitted;
- atomic_t free_ctx_cnt;
- u8 interface_num;
- u8 mcu_can_ifnum;
- struct panda_dev_priv *priv_dev;
-};
-
-struct panda_dev_priv {
- struct usb_device *udev;
- struct device *dev;
- struct usb_anchor rx_submitted;
- struct panda_inf_priv *interfaces[PANDA_NUM_CAN_INTERFACES];
-};
-
-struct __packed panda_usb_can_msg {
- u32 rir;
- u32 bus_dat_len;
- u8 data[8];
-};
-
-static const struct usb_device_id panda_usb_table[] = {
- { USB_DEVICE(PANDA_VENDOR_ID, PANDA_PRODUCT_ID) },
- {} /* Terminating entry */
-};
-
-MODULE_DEVICE_TABLE(usb, panda_usb_table);
-
-
-// panda: CAN1 = 0 CAN2 = 1 CAN3 = 4
-const int can_numbering[] = {0,1,4};
-
-struct panda_inf_priv *
-panda_get_inf_from_bus_id(struct panda_dev_priv *priv_dev, int bus_id){
- int inf_num;
- for(inf_num = 0; inf_num < PANDA_NUM_CAN_INTERFACES; inf_num++)
- if(can_numbering[inf_num] == bus_id)
- return priv_dev->interfaces[inf_num];
- return NULL;
-}
-
-// CTX handling shamlessly ripped from mcba_usb.c linux driver
-static inline void panda_init_ctx(struct panda_inf_priv *priv)
-{
- int i = 0;
-
- for (i = 0; i < PANDA_MAX_TX_URBS; i++) {
- priv->tx_context[i].ndx = PANDA_CTX_FREE;
- priv->tx_context[i].priv = priv;
- }
-
- atomic_set(&priv->free_ctx_cnt, ARRAY_SIZE(priv->tx_context));
-}
-
-static inline struct panda_usb_ctx *panda_usb_get_free_ctx(struct panda_inf_priv *priv,
- struct can_frame *cf)
-{
- int i = 0;
- struct panda_usb_ctx *ctx = NULL;
-
- for (i = 0; i < PANDA_MAX_TX_URBS; i++) {
- if (priv->tx_context[i].ndx == PANDA_CTX_FREE) {
- ctx = &priv->tx_context[i];
- ctx->ndx = i;
- ctx->dlc = cf->can_dlc;
-
- atomic_dec(&priv->free_ctx_cnt);
- break;
- }
- }
-
- printk("CTX num %d\n", atomic_read(&priv->free_ctx_cnt));
- if (!atomic_read(&priv->free_ctx_cnt)){
- /* That was the last free ctx. Slow down tx path */
- printk("SENDING TOO FAST\n");
- netif_stop_queue(priv->netdev);
- }
-
- return ctx;
-}
-
-/* panda_usb_free_ctx and panda_usb_get_free_ctx are executed by different
- * threads. The order of execution in below function is important.
- */
-static inline void panda_usb_free_ctx(struct panda_usb_ctx *ctx)
-{
- /* Increase number of free ctxs before freeing ctx */
- atomic_inc(&ctx->priv->free_ctx_cnt);
-
- ctx->ndx = PANDA_CTX_FREE;
-
- /* Wake up the queue once ctx is marked free */
- netif_wake_queue(ctx->priv->netdev);
-}
-
-
-
-static void panda_urb_unlink(struct panda_inf_priv *priv)
-{
- usb_kill_anchored_urbs(&priv->priv_dev->rx_submitted);
- usb_kill_anchored_urbs(&priv->tx_submitted);
-}
-
-static int panda_set_output_enable(struct panda_inf_priv* priv, bool enable){
- return usb_control_msg(priv->priv_dev->udev,
- usb_sndctrlpipe(priv->priv_dev->udev, 0),
- 0xDC, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
- enable ? 0x1337 : 0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
-}
-
-static void panda_usb_write_bulk_callback(struct urb *urb)
-{
- struct panda_usb_ctx *ctx = urb->context;
- struct net_device *netdev;
-
- WARN_ON(!ctx);
-
- netdev = ctx->priv->netdev;
-
- /* free up our allocated buffer */
- usb_free_coherent(urb->dev, urb->transfer_buffer_length,
- urb->transfer_buffer, urb->transfer_dma);
-
- if (!netif_device_present(netdev))
- return;
-
- netdev->stats.tx_packets++;
- netdev->stats.tx_bytes += ctx->dlc;
-
- can_get_echo_skb(netdev, ctx->ndx);
-
- if (urb->status)
- netdev_info(netdev, "Tx URB aborted (%d)\n", urb->status);
-
- /* Release the context */
- panda_usb_free_ctx(ctx);
-}
-
-
-static netdev_tx_t panda_usb_xmit(struct panda_inf_priv *priv,
- struct panda_usb_can_msg *usb_msg,
- struct panda_usb_ctx *ctx)
-{
- struct urb *urb;
- u8 *buf;
- int err;
-
- /* create a URB, and a buffer for it, and copy the data to the URB */
- urb = usb_alloc_urb(0, GFP_ATOMIC);
- if (!urb)
- return -ENOMEM;
-
- buf = usb_alloc_coherent(priv->priv_dev->udev,
- PANDA_USB_TX_BUFF_SIZE, GFP_ATOMIC,
- &urb->transfer_dma);
- if (!buf) {
- err = -ENOMEM;
- goto nomembuf;
- }
-
- memcpy(buf, usb_msg, PANDA_USB_TX_BUFF_SIZE);
-
- usb_fill_bulk_urb(urb, priv->priv_dev->udev,
- usb_sndbulkpipe(priv->priv_dev->udev, 3), buf,
- PANDA_USB_TX_BUFF_SIZE, panda_usb_write_bulk_callback,
- ctx);
-
- urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
- usb_anchor_urb(urb, &priv->tx_submitted);
-
- err = usb_submit_urb(urb, GFP_ATOMIC);
- if (unlikely(err))
- goto failed;
-
- /* Release our reference to this URB, the USB core will eventually free it entirely. */
- usb_free_urb(urb);
-
- return 0;
-
- failed:
- usb_unanchor_urb(urb);
- usb_free_coherent(priv->priv_dev->udev, PANDA_USB_TX_BUFF_SIZE, buf, urb->transfer_dma);
-
- if (err == -ENODEV)
- netif_device_detach(priv->netdev);
- else
- netdev_warn(priv->netdev, "failed tx_urb %d\n", err);
-
- nomembuf:
- usb_free_urb(urb);
-
- return err;
-}
-
-static void panda_usb_process_can_rx(struct panda_dev_priv *priv_dev,
- struct panda_usb_can_msg *msg)
-{
- struct can_frame *cf;
- struct sk_buff *skb;
- int bus_num;
- struct panda_inf_priv *priv_inf;
- struct net_device_stats *stats;
-
- bus_num = (msg->bus_dat_len >> 4) & 0xf;
- priv_inf = panda_get_inf_from_bus_id(priv_dev, bus_num);
- if(!priv_inf){
- printk("Got something on an unused interface %d\n", bus_num);
- return;
- }
- printk("Recv bus %d\n", bus_num);
-
- stats = &priv_inf->netdev->stats;
- //u16 sid;
-
- if (!netif_device_present(priv_inf->netdev))
- return;
-
- skb = alloc_can_skb(priv_inf->netdev, &cf);
- if (!skb)
- return;
-
- if(msg->rir & PANDA_CAN_EXTENDED){
- cf->can_id = (msg->rir >> 3) | CAN_EFF_FLAG;
- }else{
- cf->can_id = (msg->rir >> 21);
- }
-
- // TODO: Handle Remote Frames
- //if (msg->dlc & MCBA_DLC_RTR_MASK)
- // cf->can_id |= CAN_RTR_FLAG;
-
- cf->can_dlc = get_can_dlc(msg->bus_dat_len & PANDA_DLC_MASK);
-
- memcpy(cf->data, msg->data, cf->can_dlc);
-
- stats->rx_packets++;
- stats->rx_bytes += cf->can_dlc;
-
- netif_rx(skb);
-}
-
-static void panda_usb_read_int_callback(struct urb *urb)
-{
- struct panda_dev_priv *priv_dev = urb->context;
- int retval;
- int pos = 0;
- int inf_num;
-
- switch (urb->status) {
- case 0: /* success */
- break;
- case -ENOENT:
- case -ESHUTDOWN:
- return;
- default:
- dev_info(priv_dev->dev, "Rx URB aborted (%d)\n", urb->status);
- goto resubmit_urb;
- }
-
- while (pos < urb->actual_length) {
- struct panda_usb_can_msg *msg;
-
- if (pos + sizeof(struct panda_usb_can_msg) > urb->actual_length) {
- dev_err(priv_dev->dev, "format error\n");
- break;
- }
-
- msg = (struct panda_usb_can_msg *)(urb->transfer_buffer + pos);
-
- panda_usb_process_can_rx(priv_dev, msg);
-
- pos += sizeof(struct panda_usb_can_msg);
- }
-
- resubmit_urb:
- usb_fill_int_urb(urb, priv_dev->udev,
- usb_rcvintpipe(priv_dev->udev, 1),
- urb->transfer_buffer, PANDA_USB_RX_BUFF_SIZE,
- panda_usb_read_int_callback, priv_dev, 5);
-
- retval = usb_submit_urb(urb, GFP_ATOMIC);
-
- if (retval == -ENODEV){
- for(inf_num = 0; inf_num < PANDA_NUM_CAN_INTERFACES; inf_num++)
- if(priv_dev->interfaces[inf_num])
- netif_device_detach(priv_dev->interfaces[inf_num]->netdev);
- }else if (retval)
- dev_err(priv_dev->dev, "failed resubmitting read bulk urb: %d\n", retval);
-}
-
-
-static int panda_usb_start(struct panda_dev_priv *priv_dev)
-{
- int err;
- struct urb *urb = NULL;
- u8 *buf;
- int inf_num;
-
- for(inf_num = 0; inf_num < PANDA_NUM_CAN_INTERFACES; inf_num++)
- panda_init_ctx(priv_dev->interfaces[inf_num]);
-
- err = usb_set_interface(priv_dev->udev, 0, 1);
- if (err) {
- dev_err(priv_dev->dev, "Can not set alternate setting to 1, error: %i", err);
- return err;
- }
-
- /* create a URB, and a buffer for it */
- urb = usb_alloc_urb(0, GFP_KERNEL);
- if (!urb) {
- return -ENOMEM;
- }
-
- buf = usb_alloc_coherent(priv_dev->udev, PANDA_USB_RX_BUFF_SIZE,
- GFP_KERNEL, &urb->transfer_dma);
- if (!buf) {
- dev_err(priv_dev->dev, "No memory left for USB buffer\n");
- usb_free_urb(urb);
- return -ENOMEM;
- }
-
- usb_fill_int_urb(urb, priv_dev->udev,
- usb_rcvintpipe(priv_dev->udev, 1),
- buf, PANDA_USB_RX_BUFF_SIZE,
- panda_usb_read_int_callback, priv_dev, 5);
- urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
-
- usb_anchor_urb(urb, &priv_dev->rx_submitted);
-
- err = usb_submit_urb(urb, GFP_KERNEL);
- if (err) {
- usb_unanchor_urb(urb);
- usb_free_coherent(priv_dev->udev, PANDA_USB_RX_BUFF_SIZE,
- buf, urb->transfer_dma);
- usb_free_urb(urb);
- dev_err(priv_dev->dev, "Failed in start, while submitting urb.\n");
- return err;
- }
-
- /* Drop reference, USB core will take care of freeing it */
- usb_free_urb(urb);
-
-
- return 0;
-}
-
-/* Open USB device */
-static int panda_usb_open(struct net_device *netdev)
-{
- struct panda_inf_priv *priv = netdev_priv(netdev);
- int err;
-
- /* common open */
- err = open_candev(netdev);
- if (err)
- return err;
-
- //priv->can_speed_check = true;
- priv->can.state = CAN_STATE_ERROR_ACTIVE;
-
- netif_start_queue(netdev);
-
- return 0;
-}
-
-/* Close USB device */
-static int panda_usb_close(struct net_device *netdev)
-{
- struct panda_inf_priv *priv = netdev_priv(netdev);
-
- priv->can.state = CAN_STATE_STOPPED;
-
- netif_stop_queue(netdev);
-
- /* Stop polling */
- panda_urb_unlink(priv);
-
- close_candev(netdev);
-
- return 0;
-}
-
-static netdev_tx_t panda_usb_start_xmit(struct sk_buff *skb,
- struct net_device *netdev)
-{
- struct panda_inf_priv *priv_inf = netdev_priv(netdev);
- struct can_frame *cf = (struct can_frame *)skb->data;
- struct panda_usb_ctx *ctx = NULL;
- struct net_device_stats *stats = &priv_inf->netdev->stats;
- int err;
- struct panda_usb_can_msg usb_msg = {};
- int bus = priv_inf->mcu_can_ifnum;
-
- if (can_dropped_invalid_skb(netdev, skb)){
- printk("Invalid CAN packet");
- return NETDEV_TX_OK;
- }
-
- ctx = panda_usb_get_free_ctx(priv_inf, cf);
-
- //Warning: cargo cult. Can't tell what this is for, but it is
- //everywhere and encouraged in the documentation.
- can_put_echo_skb(skb, priv_inf->netdev, ctx->ndx);
-
- if(cf->can_id & CAN_EFF_FLAG){
- usb_msg.rir = cpu_to_le32(((cf->can_id & 0x1FFFFFFF) << 3) |
- PANDA_CAN_TRANSMIT | PANDA_CAN_EXTENDED);
- }else{
- usb_msg.rir = cpu_to_le32(((cf->can_id & 0x7FF) << 21) | PANDA_CAN_TRANSMIT);
- }
- usb_msg.bus_dat_len = cpu_to_le32((cf->can_dlc & 0x0F) | (bus << 4));
-
- memcpy(usb_msg.data, cf->data, cf->can_dlc);
-
- //TODO Handle Remote Frames
- //if (cf->can_id & CAN_RTR_FLAG)
- // usb_msg.dlc |= PANDA_DLC_RTR_MASK;
-
- netdev_err(netdev, "Received data from socket. canid: %x; len: %d\n", cf->can_id, cf->can_dlc);
-
- err = panda_usb_xmit(priv_inf, &usb_msg, ctx);
- if (err)
- goto xmit_failed;
-
- return NETDEV_TX_OK;
-
- xmit_failed:
- can_free_echo_skb(priv_inf->netdev, ctx->ndx);
- panda_usb_free_ctx(ctx);
- dev_kfree_skb(skb);
- stats->tx_dropped++;
-
- return NETDEV_TX_OK;
-}
-
-static const struct net_device_ops panda_netdev_ops = {
- .ndo_open = panda_usb_open,
- .ndo_stop = panda_usb_close,
- .ndo_start_xmit = panda_usb_start_xmit,
-};
-
-static int panda_usb_probe(struct usb_interface *intf,
- const struct usb_device_id *id)
-{
- struct net_device *netdev;
- struct panda_inf_priv *priv_inf;
- int err = -ENOMEM;
- int inf_num;
- struct panda_dev_priv *priv_dev;
- struct usb_device *usbdev = interface_to_usbdev(intf);
-
- priv_dev = kzalloc(sizeof(struct panda_dev_priv), GFP_KERNEL);
- if (!priv_dev) {
- dev_err(&intf->dev, "Couldn't alloc priv_dev\n");
- return -ENOMEM;
- }
- priv_dev->udev = usbdev;
- priv_dev->dev = &intf->dev;
- usb_set_intfdata(intf, priv_dev);
-
- ////// Interface privs
- for(inf_num = 0; inf_num < PANDA_NUM_CAN_INTERFACES; inf_num++){
- netdev = alloc_candev(sizeof(struct panda_inf_priv), PANDA_MAX_TX_URBS);
- if (!netdev) {
- dev_err(&intf->dev, "Couldn't alloc candev\n");
- goto cleanup_candev;
- }
- netdev->netdev_ops = &panda_netdev_ops;
- netdev->flags |= IFF_ECHO; /* we support local echo */
-
- priv_inf = netdev_priv(netdev);
- priv_inf->netdev = netdev;
- priv_inf->priv_dev = priv_dev;
- priv_inf->interface_num = inf_num;
- priv_inf->mcu_can_ifnum = can_numbering[inf_num];
-
- init_usb_anchor(&priv_dev->rx_submitted);
- init_usb_anchor(&priv_inf->tx_submitted);
-
- /* Init CAN device */
- priv_inf->can.state = CAN_STATE_STOPPED;
- priv_inf->can.bittiming.bitrate = PANDA_BITRATE;
-
- SET_NETDEV_DEV(netdev, &intf->dev);
-
- err = register_candev(netdev);
- if (err) {
- netdev_err(netdev, "couldn't register PANDA CAN device: %d\n", err);
- free_candev(priv_inf->netdev);
- goto cleanup_candev;
- }
-
- priv_dev->interfaces[inf_num] = priv_inf;
- }
-
- err = panda_usb_start(priv_dev);
- if (err) {
- dev_err(&intf->dev, "Failed to initialize Comma.ai Panda CAN controller\n");
- goto cleanup_candev;
- }
-
- err = panda_set_output_enable(priv_inf, true);
- if (err) {
- dev_info(&intf->dev, "Failed to initialize send enable message to Panda.\n");
- goto cleanup_candev;
- }
-
- dev_info(&intf->dev, "Comma.ai Panda CAN controller connected\n");
-
- return 0;
-
- cleanup_candev:
- for(inf_num = 0; inf_num < PANDA_NUM_CAN_INTERFACES; inf_num++){
- priv_inf = priv_dev->interfaces[inf_num];
- if(priv_inf){
- unregister_candev(priv_inf->netdev);
- free_candev(priv_inf->netdev);
- }else
- break;
- }
-
- kfree(priv_dev);
-
- return err;
-}
-
-/* Called by the usb core when driver is unloaded or device is removed */
-static void panda_usb_disconnect(struct usb_interface *intf)
-{
- struct panda_dev_priv *priv_dev = usb_get_intfdata(intf);
- struct panda_inf_priv *priv_inf;
- int inf_num;
-
- usb_set_intfdata(intf, NULL);
-
- for(inf_num = 0; inf_num < PANDA_NUM_CAN_INTERFACES; inf_num++){
- priv_inf = priv_dev->interfaces[inf_num];
- if(priv_inf){
- netdev_info(priv_inf->netdev, "device disconnected\n");
- unregister_candev(priv_inf->netdev);
- free_candev(priv_inf->netdev);
- }else
- break;
- }
-
- panda_urb_unlink(priv_inf);
- kfree(priv_dev);
-}
-
-static struct usb_driver panda_usb_driver = {
- .name = PANDA_MODULE_NAME,
- .probe = panda_usb_probe,
- .disconnect = panda_usb_disconnect,
- .id_table = panda_usb_table,
-};
-
-module_usb_driver(panda_usb_driver);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Jessy Diamond Exum ");
-MODULE_DESCRIPTION("SocketCAN driver for Comma.ai's Panda Adapter.");
-MODULE_VERSION("0.1");
diff --git a/panda/drivers/linux/test/Makefile b/panda/drivers/linux/test/Makefile
deleted file mode 100644
index c73945e4cd0702..00000000000000
--- a/panda/drivers/linux/test/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-all:
- gcc main.c -o cantest -pthread -lpthread
diff --git a/panda/drivers/linux/test/main.c b/panda/drivers/linux/test/main.c
deleted file mode 100644
index 1f44efc76e20a7..00000000000000
--- a/panda/drivers/linux/test/main.c
+++ /dev/null
@@ -1,120 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-const char *ifname = "can0";
-
-static unsigned char payload[] = {0xAA, 0xAA, 0xAA, 0xAA, 0x07, 0x00, 0x00, 0x00};
-int packet_len = 8;
-int dir = 0;
-
-void *write_thread( void *dat ){
- int nbytes;
- struct can_frame frame;
- int s = *((int*) dat);
-
- while(1){
- for(int i = 0; i < 1; i ++){
- if(packet_len % 2){
- frame.can_id = 0x8AA | CAN_EFF_FLAG;
- }else{
- frame.can_id = 0xAA;
- }
-
- frame.can_dlc = packet_len;
- memcpy(frame.data, payload, frame.can_dlc);
-
- nbytes = write(s, &frame, sizeof(struct can_frame));
-
- printf("Wrote %d bytes; addr: %lx; datlen: %d\n", nbytes, frame.can_id, frame.can_dlc);
-
- if(dir){
- packet_len++;
- if(packet_len >= 8)
- dir = 0;
- }else{
- packet_len--;
- if(packet_len <= 0)
- dir = 1;
- }
- }
- sleep(2);
- }
-}
-
-
-int main(void)
-{
- pthread_t sndthread;
- int err, s, nbytes;
- struct sockaddr_can addr;
- struct can_frame frame;
- struct ifreq ifr;
-
- if((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
- perror("Error while opening socket");
- return -1;
- }
-
- strcpy(ifr.ifr_name, ifname);
- ioctl(s, SIOCGIFINDEX, &ifr);
-
- addr.can_family = AF_CAN;
- addr.can_ifindex = ifr.ifr_ifindex;
-
- printf("%s at index %d\n", ifname, ifr.ifr_ifindex);
-
- if(bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- perror("Error in socket bind");
- return -2;
- }
-
- /////// Create Write Thread
-
- err = pthread_create( &sndthread, NULL, write_thread, (void*) &s);
- if(err){
- fprintf(stderr,"Error - pthread_create() return code: %d\n", err);
- exit(EXIT_FAILURE);
- }
-
- /////// Listen to socket
- while (1) {
- struct can_frame framein;
-
- // Read in a CAN frame
- int numBytes = read(s, &framein, CANFD_MTU);
- switch (numBytes) {
- case CAN_MTU:
- if(framein.can_id & 0x80000000)
- printf("Received %u byte payload; canid 0x%lx (EXT)\n",
- framein.can_dlc, framein.can_id & 0x7FFFFFFF);
- else
- printf("Received %u byte payload; canid 0x%lx\n", framein.can_dlc, framein.can_id);
- break;
- case CANFD_MTU:
- // TODO: Should make an example for CAN FD
- break;
- case -1:
- // Check the signal value on interrupt
- //if (EINTR == errno)
- // continue;
-
- // Delay before continuing
- sleep(1);
- default:
- continue;
- }
- }
-
- return 0;
-}
diff --git a/panda/drivers/linux/test/run.sh b/panda/drivers/linux/test/run.sh
deleted file mode 100755
index 5301719b497982..00000000000000
--- a/panda/drivers/linux/test/run.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-sudo ifconfig can0 up
-make
-./cantest
diff --git a/panda/drivers/windows/.gitignore b/panda/drivers/windows/.gitignore
deleted file mode 100644
index dbe7ad5a91a227..00000000000000
--- a/panda/drivers/windows/.gitignore
+++ /dev/null
@@ -1,306 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
-
-# User-specific files
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Build results
-Debug_x86/
-Debug_x64/
-Release_x86/
-Release_x64/
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-
-# Visual Studio 2015 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-**/Properties/launchSettings.json
-
-*_i.c
-*_p.c
-*_i.h
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding add-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/packages/*
-# except build/, which is used as an MSBuild target.
-!**/packages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Typescript v1 declaration files
-typings/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# JetBrains Rider
-.idea/
-*.sln.iml
-
-# CodeRush
-.cr/
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# installer
-*.exe
diff --git a/panda/drivers/windows/ECUsim CLI/ECUsim CLI.cpp b/panda/drivers/windows/ECUsim CLI/ECUsim CLI.cpp
deleted file mode 100644
index 6c8a469acc8566..00000000000000
--- a/panda/drivers/windows/ECUsim CLI/ECUsim CLI.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// ECUsim CLI.cpp : Defines the entry point for the console application.
-//
-
-#include "stdafx.h"
-#include "ECUsim DLL\ECUsim.h"
-
-std::unique_ptr sim;
-
-BOOL CtrlHandler(DWORD fdwCtrlType)
-{
- if (fdwCtrlType != CTRL_C_EVENT) return FALSE;
-
- sim->stop();
- sim->join();
-
- return(TRUE);
-}
-
-int main(int argc, // Number of strings in array argv
- char *argv[], // Array of command-line argument strings
- char *envp[]) // Array of environment variable strings
-{
-
- int count;
-
- // Display each command-line argument.
- std::cout << "\nCommand-line arguments:\n";
- for (count = 0; count < argc; count++)
- std::cout << " argv[" << count << "] " << argv[count] << "\n";
-
- SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
-
- sim.reset(new ECUsim("", 500000));
- sim->join();
-
- return 0;
-}
-
diff --git a/panda/drivers/windows/ECUsim CLI/ECUsim CLI.vcxproj b/panda/drivers/windows/ECUsim CLI/ECUsim CLI.vcxproj
deleted file mode 100644
index 4b9de8c442828a..00000000000000
--- a/panda/drivers/windows/ECUsim CLI/ECUsim CLI.vcxproj
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- {D99E2FCD-21A4-4065-949A-31E34E0E69D1}
- Win32Proj
- ECUsimCLI
- 10.0.16299.0
-
-
-
- Application
- true
- v141
- Unicode
-
-
- Application
- false
- v141
- true
- Unicode
-
-
- Application
- true
- v141
- Unicode
-
-
- Application
- false
- v141
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
- true
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
- false
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
- false
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
-
- Use
- Level3
- Disabled
- WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Console
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)ecusim.lib
-
-
-
-
- Use
- Level3
- Disabled
- _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Console
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)ecusim.lib
-
-
-
-
- Level3
- Use
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Console
- true
- true
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)ecusim.lib
-
-
-
-
- Level3
- Use
- MaxSpeed
- true
- true
- NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Console
- true
- true
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)ecusim.lib
-
-
-
-
-
-
-
-
-
-
- Create
- Create
- Create
- Create
-
-
-
-
- {96e0e646-ee76-444d-9a77-a0cd7f781deb}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/panda/drivers/windows/ECUsim CLI/ECUsim CLI.vcxproj.filters b/panda/drivers/windows/ECUsim CLI/ECUsim CLI.vcxproj.filters
deleted file mode 100644
index ea223e30b23b71..00000000000000
--- a/panda/drivers/windows/ECUsim CLI/ECUsim CLI.vcxproj.filters
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;hm;inl;inc;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
-
-
- Source Files
-
-
- Source Files
-
-
-
\ No newline at end of file
diff --git a/panda/drivers/windows/ECUsim CLI/stdafx.cpp b/panda/drivers/windows/ECUsim CLI/stdafx.cpp
deleted file mode 100644
index d4a23c3cf7b90a..00000000000000
--- a/panda/drivers/windows/ECUsim CLI/stdafx.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// ECUsim CLI.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/panda/drivers/windows/ECUsim CLI/stdafx.h b/panda/drivers/windows/ECUsim CLI/stdafx.h
deleted file mode 100644
index b005a839def248..00000000000000
--- a/panda/drivers/windows/ECUsim CLI/stdafx.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-#include "targetver.h"
-
-#include
-#include
-
-
-
-// TODO: reference additional headers your program requires here
diff --git a/panda/drivers/windows/ECUsim CLI/targetver.h b/panda/drivers/windows/ECUsim CLI/targetver.h
deleted file mode 100644
index 87c0086de751ba..00000000000000
--- a/panda/drivers/windows/ECUsim CLI/targetver.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-// Including SDKDDKVer.h defines the highest available Windows platform.
-
-// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
-// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
-
-#include
diff --git a/panda/drivers/windows/ECUsim DLL/ECUsim DLL.vcxproj b/panda/drivers/windows/ECUsim DLL/ECUsim DLL.vcxproj
deleted file mode 100644
index 93d75c14be1c7a..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/ECUsim DLL.vcxproj
+++ /dev/null
@@ -1,197 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- {96E0E646-EE76-444D-9A77-A0CD7F781DEB}
- Win32Proj
- ECUsimDLL
- 10.0.16299.0
-
-
-
- DynamicLibrary
- true
- v141
- Unicode
-
-
- DynamicLibrary
- false
- v141
- true
- Unicode
-
-
- DynamicLibrary
- true
- v141
- Unicode
-
-
- DynamicLibrary
- false
- v141
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- ecusim
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
- true
- ecusim
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
- false
- ecusim
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
- false
- ecusim
- $(SolutionDir)$(Configuration)_$(PlatformShortName)\
-
-
-
- Use
- Level3
- Disabled
- WIN32;_DEBUG;_WINDOWS;_USRDLL;ECUSIMDLL_EXPORTS;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Windows
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)panda.lib
-
-
-
-
- Use
- Level3
- Disabled
- _DEBUG;_WINDOWS;_USRDLL;ECUSIMDLL_EXPORTS;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Windows
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)panda.lib
-
-
-
-
- Level3
- Use
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_WINDOWS;_USRDLL;ECUSIMDLL_EXPORTS;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Windows
- true
- true
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)panda.lib
-
-
-
-
- Level3
- Use
- MaxSpeed
- true
- true
- NDEBUG;_WINDOWS;_USRDLL;ECUSIMDLL_EXPORTS;%(PreprocessorDefinitions)
- true
- %(AdditionalIncludeDirectories);$(SolutionDir)
-
-
- Windows
- true
- true
- true
- kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);$(OutDir)panda.lib
-
-
-
-
-
-
-
-
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
-
-
-
- Create
- Create
- Create
- Create
-
-
-
-
- {5528aefb-638d-49af-b9d4-965154e7d531}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/panda/drivers/windows/ECUsim DLL/ECUsim DLL.vcxproj.filters b/panda/drivers/windows/ECUsim DLL/ECUsim DLL.vcxproj.filters
deleted file mode 100644
index 299d654451e182..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/ECUsim DLL.vcxproj.filters
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {93995380-89BD-4b04-88EB-625FBE52EBFB}
- h;hh;hpp;hxx;hm;inl;inc;xsd
-
-
- {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
- rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
-
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
- Header Files
-
-
-
-
- Source Files
-
-
- Source Files
-
-
- Source Files
-
-
-
\ No newline at end of file
diff --git a/panda/drivers/windows/ECUsim DLL/ECUsim.cpp b/panda/drivers/windows/ECUsim DLL/ECUsim.cpp
deleted file mode 100644
index 19f2bf360ead9d..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/ECUsim.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-#include "stdafx.h"
-#include "ECUsim.h"
-
-ECUsim::ECUsim(std::string sn, unsigned long can_baud, bool ext_addr) :
- doloop(TRUE), verbose(TRUE), can11b_enabled(TRUE), can29b_enabled(TRUE), ext_addr(ext_addr){
- this->panda = panda::Panda::openPanda(sn);
- this->panda->set_can_speed_cbps(panda::PANDA_CAN1, can_baud / 100); //Don't pass in baud where baud%100 != 0
- this->panda->set_safety_mode(panda::SAFETY_ALLOUTPUT);
- this->panda->set_can_loopback(FALSE);
- this->panda->can_clear(panda::PANDA_CAN_RX);
-
- DWORD threadid;
- this->thread_can = CreateThread(NULL, 0, _canthreadBootstrap, (LPVOID)this, 0, &threadid);
-}
-
-ECUsim::~ECUsim() {
- this->stop();
- this->join();
-}
-
-void ECUsim::stop() {
- this->doloop = FALSE;
-}
-
-void ECUsim::join() {
- WaitForSingleObject(this->thread_can, INFINITE);
-}
-
-DWORD WINAPI ECUsim::_canthreadBootstrap(LPVOID This) {
- return ((ECUsim*)This)->can_recv_thread_function();
-}
-
-DWORD ECUsim::can_recv_thread_function() {
- while (this->doloop) {
- auto msgs = this->panda->can_recv();
- for (auto& msg : msgs) {
- if (msg.is_receipt) continue;
- if (msg.bus == 0 && !msg.is_receipt /*&& msg.len == 8*/ && msg.dat[0] >= 2) {
- if (this->verbose) {
- printf("Processing message (bus: %d; addr: %X; 29b: %d):\n ", msg.bus, msg.addr, msg.addr_29b);
- for (int i = 0; i < msg.len; i++) printf("%02X ", msg.dat[i]);
- printf("\n");
- }
- this->_CAN_process_msg(msg);
- } else {
- if (this->verbose) {
- printf("Rejecting message (bus: %d; addr: %X; 29b: %d):\n ", msg.bus, msg.addr, msg.addr_29b);
- for (int i = 0; i < msg.len; i++) printf("%02X ", msg.dat[i]);
- printf("\n");
- }
- }
- }
- }
-
- return 0;
-}
-
-BOOL ECUsim::_can_addr_matches(panda::PANDA_CAN_MSG& msg) {
- if (this->can11b_enabled && !msg.addr_29b && (msg.addr == 0x7DF || (msg.addr & 0x7F8) == 0x7E0)) {
- if (!this->ext_addr) {
- return TRUE;
- } else {
- return msg.len >= 1 && msg.dat[0] == 0x13;//13 is an arbitrary address picked to test ext addresses
- }
- }
- if (this->can29b_enabled && msg.addr_29b && ((msg.addr & 0x1FFF00FF) == 0x18DB00F1 || (msg.addr & 0x1FFF00FF) == 0x18da00f1)) {
- if (!this->ext_addr) {
- return TRUE;
- } else {
- return msg.len >= 1 && msg.dat[0] == 0x13;//13 is an arbitrary address picked to test ext addresses
- }
- }
- return FALSE;
-}
-
-void ECUsim::_CAN_process_msg(panda::PANDA_CAN_MSG& msg) {
- std::string outmsg;
- uint32_t outaddr;
- uint8_t formatted_msg_buff[8];
- bool doreply = FALSE;
-
- if (this->_can_addr_matches(msg)) {// && msg.len == 8) {
- uint8_t *dat = (this->ext_addr) ? &msg.dat[1] : &msg.dat[0];
- if ((dat[0] & 0xF0) == 0x10) {
- printf("Got a multiframe write request\n");
- outaddr = (msg.addr_29b) ? 0x18DAF1EF : 0x7E8;
- this->panda->can_send(outaddr, msg.addr_29b, (const uint8_t*)"\x30\x00\x00", 3, panda::PANDA_CAN1);
- return;
- }
-
- /////////// Check if Flow Control Msg
- if ((dat[0] & 0xF0) == 0x30 && msg.len >= 3 && this->can_multipart_data.size() > 0) {
- if (this->verbose) printf("More data requested\n");
- uint8_t block_size = dat[1], sep_time_min = dat[2];
- outaddr = (msg.addr == 0x7DF || msg.addr == 0x7E0) ? 0x7E8 : 0x18DAF1EF; //ext addr 5th byte is just always 0x13 for simplicity
-
- unsigned int msgnum = 1;
- while (this->can_multipart_data.size()) {
- unsigned int datalen = this->ext_addr ?
- min(6, this->can_multipart_data.size()): //EXT ADDR VALUE
- min(7, this->can_multipart_data.size()); //NORMAL ADDR VALUE
-
- unsigned int idx = 0;
- if (this->ext_addr)
- formatted_msg_buff[idx++] = 0x13; //EXT ADDR
- formatted_msg_buff[idx++] = 0x20 | msgnum;
- for (int i = 0; i < datalen; i++) {
- formatted_msg_buff[i + idx] = this->can_multipart_data.front();
- this->can_multipart_data.pop();
- }
- for (int i = datalen + idx; i < sizeof(formatted_msg_buff); i++)
- formatted_msg_buff[i] = 0;
-
- if (this->verbose) {
- printf("Multipart reply to %X.\n ", outaddr);
- for (int i = 0; i < datalen + idx; i++) printf("%02X ", formatted_msg_buff[i]);
- printf("\n");
- }
-
- this->panda->can_send(outaddr, msg.addr_29b, formatted_msg_buff, datalen + idx, panda::PANDA_CAN1);
- msgnum = (msgnum + 1) % 0x10;
- Sleep(10);
- }
- return;
- }
-
- /////////// Normal message in
- outmsg = this->process_obd_msg(dat[1], dat[2], doreply);
- if (doreply) {
- outaddr = (msg.addr_29b) ? 0x18DAF1EF : 0x7E8;
-
- if (outmsg.size() <= (this->ext_addr ? 4 : 5)) {
- unsigned int idx = 0;
- if(this->ext_addr)
- formatted_msg_buff[idx++] = 0x13; //EXT ADDR
- formatted_msg_buff[idx++] = outmsg.size() + 2;
- formatted_msg_buff[idx++] = 0x40 | dat[1];
- formatted_msg_buff[idx++] = dat[2]; //PID
- memcpy_s(&formatted_msg_buff[idx], sizeof(formatted_msg_buff) - idx, outmsg.c_str(), outmsg.size());
- for (int i = idx + outmsg.size(); i < 8; i++)
- formatted_msg_buff[i] = 0;
-
- if (this->verbose) {
- printf("Replying to %X.\n ", outaddr);
- for (int i = 0; i < 8; i++) printf("%02X ", formatted_msg_buff[i]);
- printf("\n");
- }
-
- this->panda->can_send(outaddr, msg.addr_29b, formatted_msg_buff, 8, panda::PANDA_CAN1); //outmsg.size() + 3
- } else {
- uint8_t first_msg_len = this->ext_addr ?
- min(2, outmsg.size() % 7) : //EXT ADDR VALUES
- min(3, outmsg.size() % 7); //NORMAL ADDR VALUES
- uint8_t payload_len = outmsg.size() + 3;
-
- unsigned int idx = 0;
- if (this->ext_addr)
- formatted_msg_buff[idx++] = 0x13; //EXT ADDR
- formatted_msg_buff[idx++] = 0x10 | ((payload_len >> 8) & 0xF);
- formatted_msg_buff[idx++] = payload_len & 0xFF;
- formatted_msg_buff[idx++] = 0x40 | dat[1];
- formatted_msg_buff[idx++] = dat[2]; //PID
- formatted_msg_buff[idx++] = 1;
- memcpy_s(&formatted_msg_buff[idx], sizeof(formatted_msg_buff) - idx, outmsg.c_str(), first_msg_len);
-
- if (this->verbose) {
- printf("Replying FIRST FRAME to %X.\n ", outaddr);
- for (int i = 0; i < 8; i++) printf("%02X ", formatted_msg_buff[i]);
- printf("\n");
- }
-
- this->panda->can_send(outaddr, msg.addr_29b, formatted_msg_buff, 8, panda::PANDA_CAN1);
- for (int i = first_msg_len; i < outmsg.size(); i++)
- this->can_multipart_data.push(outmsg[i]);
- }
- }
- }
-}
-
-std::string ECUsim::process_obd_msg(UCHAR mode, UCHAR pid, bool& return_data) {
- std::string tmp;
- return_data = TRUE;
-
- switch (mode) {
- case 0x01: // Mode : Show current data
- switch (pid) {
- case 0x00: //List supported things
- return "\xff\xff\xff\xfe"; //b"\xBE\x1F\xB8\x10" #Bitfield, random features
- case 0x01: // Monitor Status since DTC cleared
- return std::string("\x00\x00\x00\x00", 4); //Bitfield, random features
- case 0x04: // Calculated engine load
- return "\x2f";
- case 0x05: // Engine coolant temperature
- return "\x3c";
- case 0x0B: // Intake manifold absolute pressure
- return "\x90";
- case 0x0C: // Engine RPM
- return "\x1A\xF8";
- case 0x0D: // Vehicle Speed
- return "\x53";
- case 0x10: // MAF air flow rate
- return "\x01\xA0";
- case 0x11: // Throttle Position
- return "\x90";
- case 0x33: // Absolute Barometric Pressure
- return "\x90";
- default:
- return_data = FALSE;
- return "";
- }
- case 0x09: // Mode : Request vehicle information
- switch (pid) {
- case 0x02: // Show VIN
- return "1D4GP00R55B123456";
- case 0xFC: // test long multi message.Ligned up for LIN responses
- for (int i = 0; i < 80; i++) {
- tmp += "\xAA\xAA";
- }
- return tmp;//">BBH", 0xAA, 0xAA, num + 1)
- case 0xFD: // test long multi message
- for (int i = 0; i < 80; i++) {
- tmp += "\xAA\xAA\xAA";
- tmp.push_back(i >> 24);
- tmp.push_back((i >> 16) & 0xFF);
- tmp.push_back((i >> 8) & 0xFF);
- tmp.push_back(i & 0xFF);
- }
- return "\xAA\xAA\xAA" + tmp;
- case 0xFE: // test very long multi message
- tmp = "\xAA\xAA\xAA";
- for (int i = 0; i < 584; i++) {
- tmp += "\xAA\xAA\xAA";
- tmp.push_back(i >> 24);
- tmp.push_back((i >> 16) & 0xFF);
- tmp.push_back((i >> 8) & 0xFF);
- tmp.push_back(i & 0xFF);
- }
- return tmp + "\xAA";
- case 0xFF:
- for (int i = 0; i < 584; i++) {
- tmp += "\xAA\xAA\xAA\xAA\xAA";
- tmp.push_back(((i + 1) >> 8) & 0xFF);
- tmp.push_back((i + 1) & 0xFF);
- }
- return std::string("\xAA\x00\x00", 3) + tmp;
- default:
- return_data = FALSE;
- return "";
- }
- case 0x3E:
- if (pid == 0) {
- return_data = TRUE;
- return "";
- }
- return_data = FALSE;
- return "";
- default:
- return_data = FALSE;
- return "";
- }
-}
diff --git a/panda/drivers/windows/ECUsim DLL/ECUsim.h b/panda/drivers/windows/ECUsim DLL/ECUsim.h
deleted file mode 100644
index 2f5fe0f7ad4865..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/ECUsim.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#pragma once
-
-#include
-#include "panda_shared/panda.h"
-#include
-
-// The following ifdef block is the standard way of creating macros which make exporting
-// from a DLL simpler. All files within this DLL are compiled with the ECUSIMDLL_EXPORTS
-// symbol defined on the command line. This symbol should not be defined on any project
-// that uses this DLL. This way any other project whose source files include this file see
-// ECUSIMDLL_API functions as being imported from a DLL, whereas this DLL sees symbols
-// defined with this macro as being exported.
-#ifdef ECUSIMDLL_EXPORTS
-#define ECUSIMDLL_API __declspec(dllexport)
-#else
-#define ECUSIMDLL_API __declspec(dllimport)
-#endif
-
-// This class is exported from the ECUsim DLL.dll
-class ECUSIMDLL_API ECUsim {
-public:
- ECUsim(std::string sn, unsigned long can_baud, bool ext_addr = FALSE);
- ECUsim(panda::Panda && p, unsigned long can_baud, bool ext_addr = FALSE);
- ~ECUsim();
-
- void stop();
- void join();
-
- // Flag determines if verbose output is enabled
- volatile bool verbose;
- BOOL ext_addr;
-private:
- std::unique_ptr panda;
-
- static DWORD WINAPI _canthreadBootstrap(LPVOID This);
- DWORD can_recv_thread_function();
-
- BOOL _can_addr_matches(panda::PANDA_CAN_MSG & msg);
-
- void _CAN_process_msg(panda::PANDA_CAN_MSG & msg);
-
- std::string process_obd_msg(UCHAR mode, UCHAR pid, bool& return_data);
-
- HANDLE thread_can;
- volatile bool doloop;
- std::queue can_multipart_data;
-
- BOOL can11b_enabled;
- BOOL can29b_enabled;
-};
diff --git a/panda/drivers/windows/ECUsim DLL/dllmain.cpp b/panda/drivers/windows/ECUsim DLL/dllmain.cpp
deleted file mode 100644
index 69b58914b3572b..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/dllmain.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// dllmain.cpp : Defines the entry point for the DLL application.
-#include "stdafx.h"
-
-BOOL APIENTRY DllMain( HMODULE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
-{
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
-}
-
diff --git a/panda/drivers/windows/ECUsim DLL/stdafx.cpp b/panda/drivers/windows/ECUsim DLL/stdafx.cpp
deleted file mode 100644
index b4056ecd062c0d..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/stdafx.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// ECUsim DLL.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
diff --git a/panda/drivers/windows/ECUsim DLL/stdafx.h b/panda/drivers/windows/ECUsim DLL/stdafx.h
deleted file mode 100644
index f3a07375c76623..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/stdafx.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-#include "targetver.h"
-
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-// Windows Header Files:
-#include
-
-
-
-// TODO: reference additional headers your program requires here
diff --git a/panda/drivers/windows/ECUsim DLL/targetver.h b/panda/drivers/windows/ECUsim DLL/targetver.h
deleted file mode 100644
index 87c0086de751ba..00000000000000
--- a/panda/drivers/windows/ECUsim DLL/targetver.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-// Including SDKDDKVer.h defines the highest available Windows platform.
-
-// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
-// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
-
-#include
diff --git a/panda/drivers/windows/README.md b/panda/drivers/windows/README.md
deleted file mode 100644
index 06c7a51101914d..00000000000000
--- a/panda/drivers/windows/README.md
+++ /dev/null
@@ -1,144 +0,0 @@
-```
- ;" ^; ;' ",
-______/\\\\\\\\\\\____/\\\\\\\\\_______/\\\\\\\\\\\\\\\______/\\\\\\\\\\_____________/\\\____ ; s$$$$$$$s ;
- _____\/////\\\///___/\\\///////\\\____\/\\\///////////_____/\\\///////\\\__________/\\\\\____ , ss$$$$$$$$$$s ,'
- _________\/\\\_____\///______\//\\\___\/\\\_______________\///______/\\\_________/\\\/\\\____ ;s$$$$$$$$$$$$$$$
- _________\/\\\_______________/\\\/____\/\\\\\\\\\\\\_____________/\\\//________/\\\/\/\\\____ $$$$$$$$$$$$$$$$$$
- _________\/\\\____________/\\\//______\////////////\\\__________\////\\\_____/\\\/__\/\\\____ $$$$P""Y$$$Y""W$$$$$
- _________\/\\\_________/\\\//____________________\//\\\____________\//\\\__/\\\\\\\\\\\\\\\\_ $$$$ p"$$$"q $$$$$
- __/\\\___\/\\\_______/\\\/____________/\\\________\/\\\___/\\\______/\\\__\///////////\\\//__ $$$$ .$$$$$. $$$$
- _\//\\\\\\\\\_______/\\\\\\\\\\\\\\\_\//\\\\\\\\\\\\\/___\///\\\\\\\\\/_____________\/\\\____ _ $$$$$$$$$$$$$$$$
- __\/////////_______\///////////////___\/////////////_______\/////////_______________\///_____| | "Y$$$"*"$$$Y"
- _ __ __ _ _ __ __| | __ _"$b.$$"
- | '_ \ / _` | '_ \ / _` |/ _` |
- | |_) | (_| | | | | (_| | (_| |
- | .__/ \__,_|_| |_|\__,_|\__,_|
- | | A comma.ai product.
- |_| (Code by Jessy Diamond Exum)
-```
-
-
-# Installing J2534 driver:
-
-[Download](https://github.com/commaai/panda/files/1742802/panda.J2534.driver.install.zip)
-
-Depending on what version of windows you are on, you may need to separately install the WinUSB driver (see next section).
-
-# Installing WinUSB driver:
-
-Installation automatically happens for Windows 8 and Windows 10 because the panda
-firmware contains the USB descriptors necessary to auto-install the WinUSB driver.
-
-Windows 7 will not auto-install the WinUSB driver. You can use Zadig to install
-the WinUSB driver. This software is not tested on anything before 7.
-
-More details here:
-[WinUSB (Winusb.sys) Installation](https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/winusb-installation)
-[WCID Devices](https://github.com/pbatard/libwdi/wiki/WCID-Devices)
-[Zadig for installing libusb compatible driver](https://github.com/pbatard/libwdi/wiki/Zadig)
-
-# Using J2534:
-
-After installing the J2534 drivers for the panda, you can do... nothing.
-You first need to get a J2534 client that can load the drivers and talk to
-the panda for you.
-
-A simple tool for testing J2534 drivers is DrewTech's 'J2534-1 Bus Analysis
-Tool' available in the 'Other Support Applications' section of their
-[Download Page](http://www.drewtech.com/downloads/).
-
-# What is J2534?
-
-J2534 is an API that tries to provide a consistent way to send/receive
-messages over the many different protocols supported by the OBD II
-port. The place this is perhaps most obvious, is sending data over
-different protocols (each using unique packetizing methods) using the
-same data format.
-
-For each PassThru Device that should be used with J2534 (in this case,
-the panda), a 'driver' has to be written that can be loaded by a
-client application wanting to send/receive data.
-
-A lot of J2534 has good ideas behind it, but the standard has some odd choices:
-
-* Platform Locked: Requires using the Windows Registry to find installed J2534 libraries/drivers. Drivers have to be DLLs.
-* Architecture Locked: So far there is only support for x86.
-* No device autodetect, and poor support for selecting from multiple devices.
-* Constant vague language about important behavior (small differences between vendors).
-* Most common differences become standard in later revisions.
-
-# Why use J2534 with the panda?
-
-J2534 is the only interface supported by most professional grade
-vehicle diagnostics systems (such as HDS). These tools are useful for
-diagnosing vehicles, as well as reverse engineering some lesser known
-features.
-
-# What parts are supported with panda?
-
-- [ ] **J1850VPW** *(Outdated, and not physically supported by the panda)*
-- [ ] **J1850PWM** *(Outdated, and not physically supported by the panda)*
-- [X] **CAN**
-- [X] **ISO15765**
-- [ ] **ISO9141** *(This protocol could be implemented if 5 BAUD init support is added to the panda.)*
-- [ ] **ISO14230/KWP2000** *(Could be supported with FAST init, 5baud init if panda adds support for 5bps serial)*
-
-# Building the Project:
-
-This project is developed with Visual Studio 2017, the Windows SDK,
-and the Windows Driver Kit (WDK).
-
-The WDK is only required for creating the signed WinUSB inf file. The
-WDK may also provide the headers for WinUSB.
-
-To build all the projects required for the installer, in Visual
-Studio, select **Build->Batch Build.** In the project list select:
-
-- **"panda"** *Release|x86*
-- **"panda"** *Release|x64*
-- **"panda Driver Package"** Debug|x86 (Note this inf file works with x86/amd64).
-- **"pandaJ2534DLL"** *Release|x86*
-
-The installer is generated with [NullSoft NSIS](http://nsis.sourceforge.net/Main_Page).
-Use NSIS to run panda_install.nsi after building all the required projects.
-
-Before generating the installer, you must go to copy vscruntimeinfo.nsh.sample to
-vscruntimeinfo.nsh and follow the instructions to bundle in the Visual Studio C
-Runtime required by your version of Visual Studio. Without this runtime, the panda
-code will not work, so without this file, the installer will refuse to build.
-
-# Developing:
-
-- Edit and merge pandaJ2534DLL\J2534register_x64.reg to register your development J2534 DLL.
-- Add your output directory (panda\drivers\windows\Debug_x86) to your system PATH to avoid insanity.
-
-# ToDo Items:
-
-- Apply a style-guide and consistent naming convention for Classes/Functions/Variables.
-- Send multiple messages (each with a different address) from a given connection at the same time.
-- Implement ISO14230/KWP2000 FAST (LIN communication is already supported with the raw panda USB driver).
-- Find more documentation about SW_CAN_PS (Single Wire CAN, aka GMLAN).
-- Find example of client using a _PS version of a protocol (PS is pin select, and may support using different CAN buses).
-
-
-# Known Issues:
-
-- ISO15765 Multi-frame TX: Hardware delays make transmission overshoot
- STMIN by several milliseconds. This does not violate the requirements
- of STMIN, it just means it is a little slower than it could be.
-
-- All Tx messages from a single Connection are serialized. This can be
- relaxed to allow serialization of messages based on their address
- (making multiple queues, effectively one queue per address).
-
-# Troubleshooting:
-troubleshooting:
-1. Install DrewTech J2534-1 Bus Analysis Tool
-http://www.drewtech.com/downloads/tools/Drew%20Technologies%20Tool%20for%20J2534-1%20API%20v1.07.msi
-2. Open DrewTech tool and make sure it shows "panda" as a device listed (this means registry settings are correct)
-3. When DrewTech tool attempts to load the driver it will show an error if it fails
-4. To figure out why the driver fails to load install Process Monitor and filter by the appropriate process name
-https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
-
-# Other:
-Panda head ASCII art by dcau
\ No newline at end of file
diff --git a/panda/drivers/windows/docs/Message_Size.png b/panda/drivers/windows/docs/Message_Size.png
deleted file mode 100644
index 3a20a2ef39fbdf..00000000000000
Binary files a/panda/drivers/windows/docs/Message_Size.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/RxBits_defs.jpg b/panda/drivers/windows/docs/RxBits_defs.jpg
deleted file mode 100644
index db01f62c95dba3..00000000000000
Binary files a/panda/drivers/windows/docs/RxBits_defs.jpg and /dev/null differ
diff --git a/panda/drivers/windows/docs/RxBits_valid.png b/panda/drivers/windows/docs/RxBits_valid.png
deleted file mode 100644
index 6f7c4c326d9e0b..00000000000000
Binary files a/panda/drivers/windows/docs/RxBits_valid.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/bus_init_signla.png b/panda/drivers/windows/docs/bus_init_signla.png
deleted file mode 100644
index 9aa71faa274151..00000000000000
Binary files a/panda/drivers/windows/docs/bus_init_signla.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/connection_flags.png b/panda/drivers/windows/docs/connection_flags.png
deleted file mode 100644
index dd578a2cb9d7b3..00000000000000
Binary files a/panda/drivers/windows/docs/connection_flags.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/iso15765_ioctls.png b/panda/drivers/windows/docs/iso15765_ioctls.png
deleted file mode 100644
index 7de4a118e0d11c..00000000000000
Binary files a/panda/drivers/windows/docs/iso15765_ioctls.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/message_send.png b/panda/drivers/windows/docs/message_send.png
deleted file mode 100644
index 112aab14cb060f..00000000000000
Binary files a/panda/drivers/windows/docs/message_send.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/msg_filter_passfail.png b/panda/drivers/windows/docs/msg_filter_passfail.png
deleted file mode 100644
index 4a91facb4538fb..00000000000000
Binary files a/panda/drivers/windows/docs/msg_filter_passfail.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/other notes.txt b/panda/drivers/windows/docs/other notes.txt
deleted file mode 100644
index a066d2646557b1..00000000000000
--- a/panda/drivers/windows/docs/other notes.txt
+++ /dev/null
@@ -1,347 +0,0 @@
-When using the ISO 15765-4 protocol, only SingleFrame messages can be transmitted without a matching
-flow control filter. Also, PCI bytes are transparently added by the API. See PassThruStartMsgFilter
-and Appendix A for a discussion of flow control filters.
-
-
-
-PassThruReadMsgs
-This function reads messages and indications from the receive buffer. All messages and indications shall
-be read in the order that they occurred on the bus. If a transmit message generated a loopback message
-and TxDone indication, the TxDone indication shall always be queued first. Except for loopback messages
-and indications, no messages shall be queued for reception without matching a PASS_FILTER
-(for non-ISO 15765) or FLOW_CONTROL filter (for ISO 15765). On ISO 15765, PCI bytes are transparently
-removed by the API. If the function is successful, a value of STATUS_NOERROR is returned.
-
-
-PassThruWriteMsgs
-Write timeout (in milliseconds). When a value of 0 is specified, the function queues as
-many of the specified messages as possible and returns immediately. When a value
-greater than 0 is specified, the function will block until the Timeout has expired, an error
-has occurred, or the desired number of messages have been transmitted on the vehicle
-network. Even if the device can buffer only one packet at a time, this function shall be
-able to send an arbitrary number of packets if a Timeout value is supplied. Since the
-function returns early if all the messages have been sent, there is normally no penalty for
-having a large timeout (several seconds). If the number of messages requested have
-been written, the function shall not return ERR_TIMEOUT, even if the timeout value is
-zero.
-
-When an ERR_TIMEOUT is returned, only the number of messages that were sent on
-the vehicle network is known. The number of messages queued is unknown. Application
-writers should avoid this ambiguity by using a Timeout value large enough to work on
-slow devices and networks with arbitration delays.
-
-
-
-PassThruStartPeriodicMsg
-This function will immediately queue the specified message for transmission, and repeat at the specified
-interval. Periodic messages are limited in length to a single frame message of 12 bytes or less, including
-header or CAN ID. Periodic messages shall have priority over messages queued with
-PassThruWriteMsgs, but periodic messages must not violate bus idle timing parameters (e.g. P3_MIN).
-Periodic messages shall generate TxDone indications (ISO 15765) and loopback messages (on any
-protocol, if enabled). On ISO 15765, periodic messages can be sent during a multi-frame transmission or
-reception. If the function is successful, a value of STATUS_NOERROR is returned. The Pass-Thru
-device must support a minimum of ten periodic messages.
-
-PassThruDisconnect shall delete all periodic messages on that channel. PassThruClose shall delete all
-periodic messages on all channels for the device. All periodic messages will be stopped on a
-PassThruDisconnect for the associated protocol or a PassThruClose for the device.
-
-
-
-PASSTHRUSTARTMSGFILTER
-This function starts filtering of incoming messages. If the function is successful, a value of
-STATUS_NOERROR is returned. A minimum of ten message filters shall be supported by the interface
-for each supported protocol. PassThruDisconnect shall delete all message filters on that channel.
-
-PassThruClose shall delete all filters on all channels for the device. Pattern and Mask messages shall
-follow the protocol formats specified in Section 8. However, only the first twelve (12) bytes, including
-header or CAN ID, are used by the filter. ERR_INVALID_MSG shall be returned if the filter length
-exceeds 12. Note that this function does not clear any messages that may have been received and
-queued before the filter was set. Users are cautioned to consider performing a CLEAR_RX_BUFFER
-after starting a message filter to be sure that unwanted frames are purged from any receive buffers.
-
-
-
-
-
-
-
-
-FILTER RELATED STUFF
-For all protocols except ISO 15765:
-• PASS_FILTERs and BLOCK_FILTERs will be applied to all received messages. They shall not be
-applied to indications or loopback messages
-
-• FLOW_CONTROL_FILTERs must not be used and shall cause the interface to return
-ERR_INVALID_FILTER_ID
-
-• Both pMaskMsg and pPatternMsg must have the same DataSize and TxFlags. Otherwise, the
-interface shall return ERR_INVALID_MSG
-
-• The default filter behavior after PassThruConnect is to block all messages, which means no messages
-will be placed in the receive queue until a PASS_FILTER has been set. Messages that match a
-PASS_FILTER can still be blocked by a BLOCK_FILTER
-
-• Figure 16 and Figure 17 show how the message filtering mechanism operates
-
-For ISO 15765:
-• PASS_FILTERs and BLOCK_FILTERs must not be used and shall cause the interface to return
-ERR_INVALID_FILTER_ID
-
-• Filters shall not be applied to indications or loopback messages. When loopback is on, the original
-message shall be copied to the receive queue upon the last segment being transmitted on the bus.
-
-• Non-segmented messages do not need to match a FLOW_CONTROL_FILTER.
-
-• No segmented messages can be transmitted without matching an appropriate FLOW_CONTROL_FILTER.
-An appropriate filter is one in which the pFlowControlMsg CAN ID matches the messages to be
-transmitted. Also, the ISO 15765_ADDR_TYPE (reference TxFlags in Section 8.7.3) bits must match.
-If that bit is set, the first byte after the CAN IDs (the extended address)
-must match too.
-
-• No message (segmented or unsegmented) shall be received without matching an appropriate
-FLOW_CONTROL_FILTER. An appropriate filter is one in which the pPatternMsg CAN ID matches
-the incoming message ID. If the ISO 15765_ADDR_TYPE (reference TxFlags in Section 8.7.3) bit is
-set in the filter, the first byte after the CAN IDs (the extended address) must match too.
-
-• All 3 message pointers must have the same DataSize and TxFlags. Otherwise, the interface shall
-return ERR_INVALID_MSG.
-
-• Both the pFlowControlMsg ID and the pPatternMsg ID must be unique (not match any IDs in any other
-filters). The only exception is that pPatternMsg can equal pFlowControlMsg to allow for receiving
-functionally addressed messages. In this case, only non-segmented messages can be received.
-
-• See Appendix A for a detailed description of flow control filter usage.
-
-
-
-
-8.4 Format Checks for Messages Passed to the API
-The vendor DLL shall validate all PASSTHRU_MSG structures, and return an ERR_INVALID_MSG in the following cases:
-• DataSize violates Min Tx or Max Tx columns in Figure 42
-
-• Source address (Data[3]) is different from the Node ID (Ioctl SET_CONFIG, Parameter NODE_ADDRESS) on J1850PWM
-
-• The header length field is incorrect for the number of bytes in the message on ISO14230
-
-• The CAN_29_BIT flag of the message does not match the CAN_29_BIT flag passed to
-PassThruConnect, unless the CAN_ID_BOTH bit was set on connect
-
-The vendor DLL shall return ERR_MSG_PROTOCOL_ID when the ProtocolID field in the message does
-not match the Protocol ID specified when opening the channel.
-
-
-
-8.5 Conventions for Returning Messages from the API
-When returning a message in PassThruReadMsg:
-– DataSize shall tell the application how many bytes in the Data array are valid. ExtraDataIndex will be
-the (non-zero) index of the last byte of the message. If ExtraDataIndex is not equal to DataSize there
-are extra data bytes after the message. If loopback is on, RxStatus must be consulted to tell if the
-message came via loopback.
-
-– DataSize will be in the range shown in the Min Rx and Max Rx columns of Figure 42. If the device
-receives a message from the vehicle bus that is too long or too short, the message shall be discarded
-with no error.
-
-– For received messages, ExtraDataIndex shall be equal to DataSize, except when the interface is
-returning SAE J1850 PWM IFR bytes. In no case shall ExtraDataIndex be larger than DataSize.
-
-– When receiving a message on an SAE J1850 PWM channel, the message shall have any IFR bytes
-appended. In this case, ExtraDataIndex shall be the index of the first IFR byte, and DataSize shall be
-the total length of the original message plus all IFR bytes. For example, if there are two IFR bytes,
-DataSize will be incremented by two, and ExtraDataIndex will be DataSize - 2. When loopback is on,
-the loopback message shall contain any IFR bytes.
-
-
-
-8.6 Conventions for Retuning Indications from the API
-When returning an indication in PassThruReadMsg:
-– ExtraDataIndex must be zero
-
-– DataSize shall tell the application how many bytes in the Data array are valid
-
-– RxStatus must be consulted to determine the indication type (See Section 8.4).
-
-– A TxDone indication (ISO 15765 only) is generated by the DLL after a SingleFrame message is sent,
-or the last frame of a multi-segment transmission is sent. DataSize shall be 4 (or 5 when the message
-was using Extended Addressing). Data shall contain the CAN ID (and possible Extended Address) of
-the message just sent. If loopback is on, the TxDone indication shall precede the loopback message in
-the receive queue.
-
-– An RxBreak indication (SAE J2610/SCI and SAE J1850VPW only) is generated by the DLL if a break
-is received.
-
-– An RxStart indication is generated by the DLL when starting to receive a message on ISO9141 or
-ISO14230, or when receiving the FirstFrame signal of a multi-segment ISO 15765 message.
-
-
-
-9.1 Naming of Files
-Each vendor will provide a different name implementation of the API DLL and a number of these
-implementations could simultaneously reside on the same PC. No vendor shall name its implementation
-“J2534.DLL”. All implementations shall have the string “32” suffixed to end of the name of the API DLL to
-indicate 32-bit. For example, if the company name is “Vendor X” the name could be VENDRX32.DLL.
-
-For simplicity, an API DLL shall be named in accordance with the file allocation table (FAT) file system
-naming convention (which allows up to eight characters for the file name and three characters for the
-extension with no spaces anywhere). Note that, given this criteria, the major name of an API DLL can be
-no greater than six characters. The OEM application can determine the name of the appropriate vendor’s
-DLL using the Win32 Registry mechanism described in this section.
-
-
-
-
-A.1 Flow Control Overview
-ISO 15765-2 was designed to send blocks of up to 4095 bytes on top of the limited 8-byte payload of raw
-CAN frames. If the data is small enough, it can fit in a single frame and be transmitted like a raw CAN
-message with additional headers. Otherwise, the block is broken up into segments and becomes a
-segmented transmission, generating CAN frames in both directions. For flexibility, the receiver of the
-segments can control the rate at which the segments are sent.
-
-Each transmission is actually part of a conversation between two nodes. There is no discovery
-mechanism for conversation partners. Therefore, each desired conversation must be pre-defined on each
-side before the conversation can start. Conversations are symmetric, meaning that either side can send a
-block of data to the other. A conversation can only have one transfer (in one direction) in progress at a
-time. One transfer must complete before the next transfer (in the same or in a different direction) can
-start. The device must support multiple transfers at once, as long as each one is part of a different
-conversation. Raw CAN frames are not allowed when using ISO15765-2.
-
-A key feature of a conversation is that each side has a unique CAN ID, and each side uses their unique
-CAN ID for all transmissions during the conversation. No other CAN IDs are part of the conversation.
-Even though the useful data is only flowing in one direction, both sides are transmitting. One side is
-sending the flow control message to pace the segments of data coming from the other side.
-
-For example, during OBD communication, a pass-thru device and an ECU might have a conversation.
-The pass-thru device will use the "Tester1" physical CAN ID ($241), and the first ECU will use the
-"ECU1" physical CAN ID ($641). During a multi-segment transfer, both sides will be transmitting using
-only their respective IDs. It does not matter if the data is being sent by the ECU or by the Tester, the IDs
-remain the same.
-
-It is important to understand the difference between OBD Requests/Responses and ISO 15765-2
-transfers. The OBD Request is transmitted from the Tester to the ECU using functional addressing.
-Because segmented transfer is not possible on functional addresses, the message must fit in a single
-frame. The OBD Response is a message from the ECU to the Tester using physical addressing. Unlike
-other protocols, the responses are not sequential. In fact, the responses can overlap, as if each ECU
-were having a private conversation with the Tester. Some of the responses may fit in a single frame,
-while others will require a segmented transfer from the ECU to the tester.
-
-
-A.2 Transmitting a Segmented Message
-When PassThruWrite is called, the API will search the list of flow control filters, looking for a
-pFlowControlMsg that matches the CAN ID (and possible extended address) of the message being sent.
-Upon matching a filter, the pass-thru device will:
-
-• Start the ISO 15765 transfer by sending a FirstFrame on the bus. The CAN ID of this segment was
-specified in both the message and the matching pFlowControlMsg. In our example, this is $241.
-
-• Wait for a FlowControl frame from the conversation partner. The CAN ID to look for is specified in the
-corresponding pPatternMsg. In our example, this is $641.
-
-• Transmit the message data in ConsecutiveFrames according to the FlowControl frame’s instructions
-for BS (BlockSize) and STmin (SeparationTime minimum). Again, the pass-thru device transmits using
-CAN ID specified in pFlowControlMsg. In our example, this is $241.
-
-• Repeat the previous two steps as required.
-
-• When finished, the pass-thru device will place a TxDone indication in the API receive queue. The data
-will contain the CAN ID specified in pFlowControlMsg. In our example, this is $241.
-
-• If loopback is on, the entire message sent will appear in the API receive queue with the
-TX_MSG_TYPE bit set to 1 in RxStatus. The loopback shall not precede the TxDone indication.
-
-Before any multi-segment transfer can take place, the conversation must be set up on both sides. It’s
-assumed that the ECU is already setup. The application is responsible for setting up the pass-thru device.
-This setup must be done once (and only once) per conversation. The setup involves a single call to
-PassThruStartMsgFilter, with the following parameters:
-
-A.2.2 Data Transmission
-Once the conversation is set up, any number of messages (to the conversation partner) can be
-transmitted using PassThruWriteMsg. The interface shall handle all aspects of the transfer, including
-pacing (slowing) the transmission to the requirements of the receiver.
-
-When there are multiple conversations setup, the pass-thru device will search all of the flow control filters
-for a matching pFlowControlMsg. If there is no match, the message cannot be sent because the pass-
-thru device doesn’t know which partner will be pacing the conversation.
-
-When doing blocking writes, it is important to pick a timeout long enough to cover entire transfer, even if
-the ECU is pacing things slowly. Otherwise PassThruWriteMsg will return with a timeout, even though the
-transmission is proceeding normally.
-
-
-A.3 Transmitting an Unsegmented Message
-As a special case, transfers that fit in a single frame can be transmitted without setting up a conversation.
-This is useful during an OBD Request, which is a functionally addressed message that is broadcast to all
-ECUs. This message must be small enough to fit into a single frame (including headers) because it is not
-possible to do one segmented transfer to multiple ECUs.
-
-When using functional addressing for an OBD Request, it is important to remember that there can be no
-direct reply. Instead, each ECU will send their OBD Response using physical addressing to their
-conversation partner (e.g. ECU1 to Tester1, ECU2 to Tester2) as defined by ISO 15765-4. The OBD
-Response may be a segmented transfer, or it may be a single frame.
-
-In this case, no conversation setup is necessary. The call to PassThruWriteMsg is the same as above,
-except that the DataSize must be 7 bytes or less (6 bytes or less if extended addressing is turned on).
-The pass-thru device will automatically insert a PCI byte before transmission.
-
-
-A.4 Receiving a Segmented Message
-Message reception is asynchronous to the application. When a FirstFrame is seen on the bus, the pass-
-thru device will search the list of flow control filters, looking for a pPatternMsg message with the same
-CAN ID (and possible extended address) as the FirstFrame. Upon matching a filter, the pass-thru device will:
-
-• Place an RxStart indication in the API receive queue. This indication has the START_OF_MESSAGE
-bit set in RxFlags. The message data will contain the CAN ID of the sender. In our example, this is
-$641. DataSize will be 4 bytes (5 with extended addressing), and ExtraDataIndex will be zero.
-
-• Send a FlowControl frame to the conversation partner. The FlowStatus field shall be set to
-ontinueToSend. The CAN ID of this segment comes from the filter’s corresponding
-pFlowControlMsg. In our example, this CAN ID is $241. The BS (BlockSize) and STmin
-(SeparationTime minimum) parameters default to zero, but can be changed with the SET_CONFIGIoctl.
-
-• Wait for the conversation partner to send C
-onsecutiveFrames containing the actual data. The
-partner’s CAN ID is specified in pPatternMsg. In our example, this CAN ID is $641.
-
-• Repeat as necessary until the entire block has been received. When finished, the pass-thru device will
-put the assembled message into the API receive queue. The CAN ID of the assembled message will
-be the CAN ID of the sender. In our example, this CAN ID is $641.
-
-If the FirstFrame does not match any flow control filters, then the message must be ignored by the
-device.
-
-Segmented messages cause the API to generate an RxStart indication. This lets the application know
-that the device has started message reception. It may take a while before message reception is
-complete, especially if the application has increased BS and STmin.
-
-Once the transfer is complete, the entire message can be read like on any other protocol. Usually,
-applications will call PassThruReadMsg again immediately after getting an RxStart indication. Application
-writers should not assume that the complete message will always follow the RxStart indication. If multiple
-conversations are setup, indications and messages from other conversations can be received in between
-the RxStart indication and the actual message. The parameters for PassThruReadMsg are exactly the
-same as in the previous section. The only difference is that the DataSize will be larger and
-ExtraDataIndex will be non-zero.
-
-
-
-A.5 Receiving an Unsegmented Message
-No messages can be received until a conversation is setup. Each conversation setup will receive
-messages from exactly one CAN ID (and extended address if present). Because setup is bi-directional,
-the same PassThruStartMsgFilter call used for transmission will allow for message reception.
-
-When a SingleFrame is seen on the bus, the pass-thru device will search the list of flow control filters,
-looking for a pPatternMsg message with the same C
-AN ID (and possible extended address) as the
-SingleFrame. Upon matching a filter, the pass-thru device will strip the PCI byte and queue the packet for
-reception. If the SingleFrame does not match a flow control filter, it must be discarded.
-
-The only difference between the previous cases is that single-frame messages do not generate an
-RxStart indication.
-
-
-
-
-
-
-
-
-
diff --git a/panda/drivers/windows/docs/read_msg_flags.png b/panda/drivers/windows/docs/read_msg_flags.png
deleted file mode 100644
index 6d0a1f87422713..00000000000000
Binary files a/panda/drivers/windows/docs/read_msg_flags.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/reginfo.txt b/panda/drivers/windows/docs/reginfo.txt
deleted file mode 100644
index 03182832b21fa9..00000000000000
--- a/panda/drivers/windows/docs/reginfo.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-#32 bit: HKEY_LOCAL_MACHINE\SOFTWARE\PassThruSupport
-#64 bit: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PassThruSupport
diff --git a/panda/drivers/windows/docs/start_msg_filter.png b/panda/drivers/windows/docs/start_msg_filter.png
deleted file mode 100644
index 7cb1a7a4c8e742..00000000000000
Binary files a/panda/drivers/windows/docs/start_msg_filter.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/start_msg_filter2.png b/panda/drivers/windows/docs/start_msg_filter2.png
deleted file mode 100644
index 54063a507427bc..00000000000000
Binary files a/panda/drivers/windows/docs/start_msg_filter2.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/start_msg_filter3.png b/panda/drivers/windows/docs/start_msg_filter3.png
deleted file mode 100644
index ffc8e34820eec5..00000000000000
Binary files a/panda/drivers/windows/docs/start_msg_filter3.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/start_msg_filter4.png b/panda/drivers/windows/docs/start_msg_filter4.png
deleted file mode 100644
index 9c21fb014d2349..00000000000000
Binary files a/panda/drivers/windows/docs/start_msg_filter4.png and /dev/null differ
diff --git a/panda/drivers/windows/docs/timeout_info.txt b/panda/drivers/windows/docs/timeout_info.txt
deleted file mode 100644
index 22cfa2c5d5c8e5..00000000000000
--- a/panda/drivers/windows/docs/timeout_info.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-From focum information on NI hardware: https://forums.ni.com/t5/Automotive-and-Embedded-Networks/15765-2-with-NI-products/td-p/1454256
-
-/////////////////////////////////////////////////////////////////////
-Timeout Diag Command is the timeout in milliseconds the master
-waits for the response to a diagnostic request message. The default is
-1000 ms.
-
-Timeout FC (Bs) is the timeout in milliseconds the master waits
-for a Flow Control frame after sending a First Frame or the last
-Consecutive Frame of a block. The default is 250 ms.
-
-Timeout CF (Cr) is the timeout in milliseconds the master waits
-for a Consecutive Frame in a multiframe response. The default is
-250 ms.
-
-Receive Block Size (BS) is the number of Consecutive Frames the
-slave sends in one block before waiting for the next Flow Control
-frame. A value of 0 (default) means all Consecutive Frames are sent
-in one run without interruption.
-
-Wait Time CF (STmin) defines the minimum time for the slave to
-wait between sending two Consecutive Frames of a block. Values
-from 0 to 127 are wait times in milliseconds. Values 241 to 249
-(Hex F1 to F9) mean wait times of 100 μs to 900 μs, respectively.
-All other values are reserved. The default is 5 ms.
-
-Max Wait Frames (N_WFTmax) is the maximum number of WAIT
-frames the master accepts before terminating the connection. The
-default is 10.
-
-
-There are no defined lower limits for these values; you can specify any
-value down to 0. However, as you correctly pointed out, the timing is
-done by Windows, and will be subject to the jitter introduced by the OS
-which can easily be in the order of 10s of milliseconds. It is however
-hard to give more accurate numbers as the actual jitter is dependent on
-the workload of the computer
-/////////////////////////////////////////////////////////////////////
-
-J2534 04.04 does not appear to have default adjustable parameters for
-the timeout related fields. For now, these default values shall be used
-in the Panda J2534 implementation.
diff --git a/panda/drivers/windows/panda Driver Package/panda Driver Package.vcxproj b/panda/drivers/windows/panda Driver Package/panda Driver Package.vcxproj
deleted file mode 100644
index 5b448e96a850f4..00000000000000
--- a/panda/drivers/windows/panda Driver Package/panda Driver Package.vcxproj
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-