diff --git a/CHANGELOGS.md b/CHANGELOGS.md
index 40681e985..4c663bf59 100644
--- a/CHANGELOGS.md
+++ b/CHANGELOGS.md
@@ -1,8 +1,10 @@
dragonpilot [latest] - EON/C2 Release
========================
-* NEW: Synced to openpilot master 2022.08.15 commits.
+* NEW: Synced to openpilot master 2022.08.23 commits.
* New driving model.
* NEW: Added back honda eps mod toggle.
+* NEW: Added back camera offset toggle.
+* TWEAK: Resume logic to adapt ATL mode.
dragonpilot 2022.08.17 - EON/C2 Release
========================
diff --git a/README.md b/README.md
index 94837575b..0b6fc2010 100755
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ Table of Contents
What is openpilot?
------
-[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](docs/CARS.md). In addition, while openpilot is engaged, a camera based Driver Monitoring (DM) feature alerts distracted and asleep drivers. See more about [the vehicle integration](docs/INTEGRATION.md) and [limitations](docs/LIMITATIONS.md).
+[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](docs/CARS.md). In addition, while openpilot is engaged, a camera-based Driver Monitoring (DM) feature alerts distracted and asleep drivers. See more about [the vehicle integration](docs/INTEGRATION.md) and [limitations](docs/LIMITATIONS.md).
@@ -40,9 +40,9 @@ Running on a dedicated device in a car
To use openpilot in a car, you need four things
* A supported device to run this software: a [comma three](https://comma.ai/shop/products/three).
-* This software. The setup procedure of the comma three allows the user to enter a url for custom software.
-The url, openpilot.comma.ai will install the release version of openpilot. To install openpilot master, you can use installer.comma.ai/commaai/master, and replacing commaai with another github username can install a fork.
-* One of [the 150+ supported cars](docs/CARS.md). We support Honda, Toyota, Hyundai, Nissan, Kia, Chrysler, Lexus, Acura, Audi, VW, and more. If your car is not supported, but has adaptive cruise control and lane keeping assist, it's likely able to run openpilot.
+* This software. The setup procedure of the comma three allows the user to enter a URL for custom software.
+The URL, openpilot.comma.ai will install the release version of openpilot. To install openpilot master, you can use installer.comma.ai/commaai/master, and replacing commaai with another GitHub username can install a fork.
+* One of [the 150+ supported cars](docs/CARS.md). We support Honda, Toyota, Hyundai, Nissan, Kia, Chrysler, Lexus, Acura, Audi, VW, and more. If your car is not supported but has adaptive cruise control and lane-keeping assist, it's likely able to run openpilot.
* A [car harness](https://comma.ai/shop/products/car-harness) to connect to your car.
We have detailed instructions for [how to mount the device in a car](https://comma.ai/setup).
@@ -52,11 +52,11 @@ Running on PC
All of openpilot's services can run as normal on a PC, even without special hardware or a car. To develop or experiment with openpilot you can run openpilot on recorded or simulated data.
-With openpilot's tools you can plot logs, replay drives and watch the full-res camera streams. See [the tools README](tools/README.md) for more information.
+With openpilot's tools, you can plot logs, replay drives, and watch the full-res camera streams. See [the tools README](tools/README.md) for more information.
-You can also run openpilot in simulation [with the CARLA simulator](tools/sim/README.md). This allows openpilot to drive around a virtual car on your Ubuntu machine. The whole setup should only take a few minutes, but does require a decent GPU.
+You can also run openpilot in simulation [with the CARLA simulator](tools/sim/README.md). This allows openpilot to drive around a virtual car on your Ubuntu machine. The whole setup should only take a few minutes but does require a decent GPU.
-A PC running openpilot can also control your vehicle if it is connected to a [a webcam](https://github.com/commaai/openpilot/tree/master/tools/webcam), a [black panda](https://comma.ai/shop/products/panda), and [a harness](https://comma.ai/shop/products/car-harness).
+A PC running openpilot can also control your vehicle if it is connected to a [webcam](https://github.com/commaai/openpilot/tree/master/tools/webcam), a [black panda](https://comma.ai/shop/products/panda), and a [harness](https://comma.ai/shop/products/car-harness).
Community and Contributing
------
@@ -78,8 +78,8 @@ By default, openpilot uploads the driving data to our servers. You can also acce
openpilot is open source software: the user is free to disable data collection if they wish to do so.
-openpilot logs the road facing cameras, 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.
+openpilot logs the road-facing cameras, 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://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.
@@ -87,11 +87,11 @@ Safety and Testing
----
* openpilot observes ISO26262 guidelines, see [SAFETY.md](docs/SAFETY.md) for more details.
-* openpilot has software in the loop [tests](.github/workflows/selfdrive_tests.yaml) that run on every commit.
+* openpilot has software-in-the-loop [tests](.github/workflows/selfdrive_tests.yaml) that run on every commit.
* The code enforcing the safety model 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).
+* 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 comma devices continuously replaying routes.
Directory Structure
diff --git a/RELEASES.md b/RELEASES.md
index bcd6aa7aa..3ac6c8e41 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,8 +1,22 @@
-Version 0.8.16 (2022-XX-XX)
+Version 0.8.17 (2022-XX-XX)
========================
+
+Version 0.8.16 (2022-08-26)
+========================
+* New driving model
+ * Reduced turn cutting
+* Auto-detect right hand drive setting with driver monitoring model
+* Improved fan controller for comma three
+* New translations
+ * Japanese thanks to cydia2020!
+ * Brazilian Portuguese thanks to AlexandreSato!
* Chevrolet Bolt EUV 2022-23 support thanks to JasonJShuler!
+* Chevrolet Silverado 1500 2020-21 support thanks to JasonJShuler!
+* GMC Sierra 1500 2020-21 support thanks to JasonJShuler!
* Hyundai Ioniq 5 2022 support thanks to sunnyhaibin!
* Hyundai Kona Electric 2022 support thanks to sunnyhaibin!
+* Hyundai Tucson Hybrid 2022 support thanks to sunnyhaibin!
+* Subaru Legacy 2020-22 support thanks to martinl!
* Subaru Outback 2020-22 support
Version 0.8.15 (2022-07-20)
diff --git a/cereal/car.capnp b/cereal/car.capnp
index 73b2f12f6..2fc8227c3 100644
--- a/cereal/car.capnp
+++ b/cereal/car.capnp
@@ -111,10 +111,11 @@ struct CarEvent @0x9b1657f34caf3ad3 {
lkasDisabled @107;
canBusMissing @111;
controlsdLagging @112;
+ resumeBlocked @113;
#dp
- speedLimitActive @113;
- speedLimitValueChange @114;
+ speedLimitActive @114;
+ speedLimitValueChange @115;
radarCanErrorDEPRECATED @15;
communityFeatureDisallowedDEPRECATED @62;
diff --git a/cereal/dp.capnp b/cereal/dp.capnp
index 11e2e13c5..e777c1c68 100644
--- a/cereal/dp.capnp
+++ b/cereal/dp.capnp
@@ -26,4 +26,5 @@ struct DragonConf {
dpMapd @18 :Bool;
dpDashcamd @19 :Bool;
dpMazdaSteerAlert @20 :Bool;
+ dpCameraOffset @21 :Int8;
}
diff --git a/cereal/libcereal_shared.so b/cereal/libcereal_shared.so
index b5d8baadc..83884e295 100755
Binary files a/cereal/libcereal_shared.so and b/cereal/libcereal_shared.so differ
diff --git a/cereal/log.capnp b/cereal/log.capnp
index a4e2136e2..5d395f9f7 100644
--- a/cereal/log.capnp
+++ b/cereal/log.capnp
@@ -38,6 +38,8 @@ struct InitData {
passive @12 :Bool;
params @17 :Map(Text, Data);
+ commands @19 :Map(Text, Data);
+
enum DeviceType {
unknown @0;
neo @1;
@@ -410,6 +412,7 @@ struct PandaState @0xa7649e2575e4591e {
heartbeatLost @22 :Bool;
blockedCnt @24 :UInt32;
interruptLoad @25 :Float32;
+ fanPower @28 :UInt8;
enum FaultStatus {
none @0;
@@ -1928,6 +1931,9 @@ struct EncodeData {
unixTimestampNanos @3 :UInt64;
}
+struct UserFlag {
+}
+
struct Event {
logMonoTime @0 :UInt64; # nanoseconds
valid @67 :Bool = true;
@@ -1995,6 +2001,9 @@ struct Event {
navRoute @83 :NavRoute;
navThumbnail @84: Thumbnail;
+ # user flags
+ userFlag @93 :UserFlag;
+
# *********** debug ***********
testJoystick @52 :Joystick;
roadEncodeData @86 :EncodeData;
@@ -2002,8 +2011,8 @@ struct Event {
wideRoadEncodeData @88 :EncodeData;
qRoadEncodeData @89 :EncodeData;
- dragonConf @93 :Dp.DragonConf;
- liveMapData @94: LiveMapData;
+ dragonConf @94 :Dp.DragonConf;
+ liveMapData @95: LiveMapData;
# *********** legacy + deprecated ***********
model @9 :Legacy.ModelData; # TODO: rename modelV2 and mark this as deprecated
diff --git a/cereal/messaging/bridge b/cereal/messaging/bridge
index 4857306dd..c0dfb59bd 100755
Binary files a/cereal/messaging/bridge and b/cereal/messaging/bridge differ
diff --git a/cereal/messaging/messaging_pyx.cpp b/cereal/messaging/messaging_pyx.cpp
index e6cf5df84..534740c01 100644
--- a/cereal/messaging/messaging_pyx.cpp
+++ b/cereal/messaging/messaging_pyx.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.24 */
+/* Generated by Cython 0.29.26 */
/* BEGIN: Cython Metadata
{
@@ -28,8 +28,8 @@ END: Cython Metadata */
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
#error Cython requires Python 2.6+ or Python 3.3+.
#else
-#define CYTHON_ABI "0_29_24"
-#define CYTHON_HEX_VERSION 0x001D18F0
+#define CYTHON_ABI "0_29_26"
+#define CYTHON_HEX_VERSION 0x001D1AF0
#define CYTHON_FUTURE_DIVISION 1
#include
#ifndef offsetof
@@ -176,7 +176,7 @@ END: Cython Metadata */
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
- #if PY_VERSION_HEX < 0x030300F0
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -195,7 +195,7 @@ END: Cython Metadata */
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 1
+ #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1)
#endif
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -214,7 +214,9 @@ END: Cython Metadata */
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
- #include "longintrepr.h"
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
#undef SHIFT
#undef BASE
#undef MASK
@@ -345,9 +347,68 @@ class __Pyx_FakeReference {
#define __Pyx_DefaultClassType PyClass_Type
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
- #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
- PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+ PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+ const char *fn_cstr=NULL;
+ const char *name_cstr=NULL;
+ PyCodeObject* co=NULL;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (!(kwds=PyDict_New())) goto end;
+ if (!(argcount=PyLong_FromLong(a))) goto end;
+ if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+ if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+ if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+ if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+ if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+ if (!(nlocals=PyLong_FromLong(l))) goto end;
+ if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+ if (!(stacksize=PyLong_FromLong(s))) goto end;
+ if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+ if (!(flags=PyLong_FromLong(f))) goto end;
+ if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+ if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+ if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+ if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+ if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+ if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+ if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+ Py_XDECREF((PyObject*)co);
+ co = (PyCodeObject*)call_result;
+ call_result = NULL;
+ if (0) {
+ cleanup_code_too:
+ Py_XDECREF((PyObject*)co);
+ co = NULL;
+ }
+ end:
+ Py_XDECREF(kwds);
+ Py_XDECREF(argcount);
+ Py_XDECREF(posonlyargcount);
+ Py_XDECREF(kwonlyargcount);
+ Py_XDECREF(nlocals);
+ Py_XDECREF(stacksize);
+ Py_XDECREF(replace);
+ Py_XDECREF(call_result);
+ Py_XDECREF(empty);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return co;
+ }
#else
#define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
@@ -585,10 +646,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
- #define __Pyx_PyInt_AsHash_t PyInt_AsLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
- #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -753,6 +814,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
@@ -1120,6 +1182,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
+#if CYTHON_FAST_PYCALL
static size_t __pyx_pyframe_localsplus_offset = 0;
#include "frameobject.h"
#define __Pxy_PyFrame_Initialize_Offsets()\
@@ -1127,6 +1190,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
(void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
#define __Pyx_PyFrame_GetLocalsplus(frame)\
(assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif // CYTHON_FAST_PYCALL
#endif
/* PyObjectCallMethO.proto */
@@ -3922,6 +3986,9 @@ static PyTypeObject __pyx_type_6cereal_9messaging_13messaging_pyx_Context = {
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
0, /*tp_print*/
#endif
+ #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+ 0, /*tp_pypy_flags*/
+ #endif
};
static PyObject *__pyx_tp_new_6cereal_9messaging_13messaging_pyx_Poller(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -4055,6 +4122,9 @@ static PyTypeObject __pyx_type_6cereal_9messaging_13messaging_pyx_Poller = {
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
0, /*tp_print*/
#endif
+ #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+ 0, /*tp_pypy_flags*/
+ #endif
};
static struct __pyx_vtabstruct_6cereal_9messaging_13messaging_pyx_SubSocket __pyx_vtable_6cereal_9messaging_13messaging_pyx_SubSocket;
@@ -4169,6 +4239,9 @@ static PyTypeObject __pyx_type_6cereal_9messaging_13messaging_pyx_SubSocket = {
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
0, /*tp_print*/
#endif
+ #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+ 0, /*tp_pypy_flags*/
+ #endif
};
static PyObject *__pyx_tp_new_6cereal_9messaging_13messaging_pyx_PubSocket(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -4279,6 +4352,9 @@ static PyTypeObject __pyx_type_6cereal_9messaging_13messaging_pyx_PubSocket = {
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
0, /*tp_print*/
#endif
+ #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+ 0, /*tp_pypy_flags*/
+ #endif
};
static PyMethodDef __pyx_methods[] = {
@@ -6080,7 +6156,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
}
if (!use_cline) {
c_line = 0;
- PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+ (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
}
else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
c_line = 0;
@@ -6177,30 +6253,31 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
const char *funcname, int c_line,
int py_line, const char *filename) {
- PyCodeObject *py_code = 0;
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
+ PyCodeObject *py_code = NULL;
+ PyObject *py_funcname = NULL;
#if PY_MAJOR_VERSION < 3
+ PyObject *py_srcfile = NULL;
py_srcfile = PyString_FromString(filename);
- #else
- py_srcfile = PyUnicode_FromString(filename);
- #endif
if (!py_srcfile) goto bad;
+ #endif
if (c_line) {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
#else
py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ funcname = PyUnicode_AsUTF8(py_funcname);
+ if (!funcname) goto bad;
#endif
}
else {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromString(funcname);
- #else
- py_funcname = PyUnicode_FromString(funcname);
+ if (!py_funcname) goto bad;
#endif
}
- if (!py_funcname) goto bad;
+ #if PY_MAJOR_VERSION < 3
py_code = __Pyx_PyCode_New(
0,
0,
@@ -6219,11 +6296,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
__pyx_empty_bytes /*PyObject *lnotab*/
);
Py_DECREF(py_srcfile);
- Py_DECREF(py_funcname);
+ #else
+ py_code = PyCode_NewEmpty(filename, funcname, py_line);
+ #endif
+ Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline
return py_code;
bad:
- Py_XDECREF(py_srcfile);
Py_XDECREF(py_funcname);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_srcfile);
+ #endif
return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -7071,6 +7153,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
Py_DECREF(x);
return ival;
}
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+ return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+ } else if (likely(PyInt_CheckExact(o))) {
+ return PyInt_AS_LONG(o);
+#endif
+ } else {
+ Py_ssize_t ival;
+ PyObject *x;
+ x = PyNumber_Index(o);
+ if (!x) return -1;
+ ival = PyInt_AsLong(x);
+ Py_DECREF(x);
+ return ival;
+ }
+}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
diff --git a/cereal/messaging/messaging_pyx.so b/cereal/messaging/messaging_pyx.so
index 468a30848..b272d52a4 100755
Binary files a/cereal/messaging/messaging_pyx.so and b/cereal/messaging/messaging_pyx.so differ
diff --git a/cereal/services.h b/cereal/services.h
index d27ae46e2..be495a751 100644
--- a/cereal/services.h
+++ b/cereal/services.h
@@ -23,39 +23,41 @@ static struct service services[] = {
{ "longitudinalPlan", 8018, true, 20, 5 },
{ "procLog", 8019, true, 0, -1 },
{ "gpsLocationExternal", 8020, true, 10, 10 },
- { "ubloxGnss", 8021, true, 10, -1 },
- { "qcomGnss", 8023, true, 2, -1 },
- { "gnssMeasurements", 8024, true, 10, -1 },
- { "clocks", 8025, true, 1, 1 },
- { "ubloxRaw", 8026, true, 20, -1 },
- { "liveLocationKalman", 8027, true, 20, 5 },
- { "liveParameters", 8028, true, 20, 5 },
- { "cameraOdometry", 8029, true, 20, 5 },
- { "lateralPlan", 8030, true, 20, 5 },
- { "thumbnail", 8031, true, 0, 1 },
- { "carEvents", 8032, true, 1, 1 },
- { "carParams", 8033, true, 0, 1 },
- { "roadCameraState", 8034, true, 20, 20 },
- { "driverCameraState", 8035, true, 20, 20 },
- { "driverEncodeIdx", 8036, false, 20, 1 },
- { "driverStateV2", 8037, true, 20, 10 },
- { "driverMonitoringState", 8038, true, 20, 10 },
- { "wideRoadEncodeIdx", 8039, false, 20, 1 },
- { "wideRoadCameraState", 8040, true, 20, 20 },
- { "modelV2", 8041, true, 20, 40 },
- { "managerState", 8042, true, 2, 1 },
- { "uploaderState", 8043, true, 0, 1 },
- { "navInstruction", 8044, true, 1, 10 },
- { "navRoute", 8045, true, 0, -1 },
- { "navThumbnail", 8046, true, 0, -1 },
- { "qRoadEncodeIdx", 8047, false, 20, -1 },
- { "testJoystick", 8048, true, 0, -1 },
- { "roadEncodeData", 8049, false, 20, -1 },
- { "driverEncodeData", 8050, false, 20, -1 },
- { "wideRoadEncodeData", 8051, false, 20, -1 },
- { "qRoadEncodeData", 8052, false, 20, -1 },
- { "dragonConf", 8053, false, 1, -1 },
- { "liveMapData", 8054, true, 0, -1 },
+ { "gpsLocation", 8021, true, 1, 1 },
+ { "ubloxGnss", 8023, true, 10, -1 },
+ { "qcomGnss", 8024, true, 2, -1 },
+ { "gnssMeasurements", 8025, true, 10, 10 },
+ { "clocks", 8026, true, 1, 1 },
+ { "ubloxRaw", 8027, true, 20, -1 },
+ { "liveLocationKalman", 8028, true, 20, 5 },
+ { "liveParameters", 8029, true, 20, 5 },
+ { "cameraOdometry", 8030, true, 20, 5 },
+ { "lateralPlan", 8031, true, 20, 5 },
+ { "thumbnail", 8032, true, 0, 1 },
+ { "carEvents", 8033, true, 1, 1 },
+ { "carParams", 8034, true, 0, 1 },
+ { "roadCameraState", 8035, true, 20, 20 },
+ { "driverCameraState", 8036, true, 20, 20 },
+ { "driverEncodeIdx", 8037, false, 20, 1 },
+ { "driverStateV2", 8038, true, 20, 10 },
+ { "driverMonitoringState", 8039, true, 20, 10 },
+ { "wideRoadEncodeIdx", 8040, false, 20, 1 },
+ { "wideRoadCameraState", 8041, true, 20, 20 },
+ { "modelV2", 8042, true, 20, 40 },
+ { "managerState", 8043, true, 2, 1 },
+ { "uploaderState", 8044, true, 0, 1 },
+ { "navInstruction", 8045, true, 1, 10 },
+ { "navRoute", 8046, true, 0, -1 },
+ { "navThumbnail", 8047, true, 0, -1 },
+ { "qRoadEncodeIdx", 8048, false, 20, -1 },
+ { "userFlag", 8049, true, 0, 1 },
+ { "testJoystick", 8050, true, 0, -1 },
+ { "roadEncodeData", 8051, false, 20, -1 },
+ { "driverEncodeData", 8052, false, 20, -1 },
+ { "wideRoadEncodeData", 8053, false, 20, -1 },
+ { "qRoadEncodeData", 8054, false, 20, -1 },
+ { "dragonConf", 8055, false, 1, -1 },
+ { "liveMapData", 8056, true, 0, -1 },
};
#endif
diff --git a/cereal/services.py b/cereal/services.py
index 8d8f48cde..c1ae59831 100755
--- a/cereal/services.py
+++ b/cereal/services.py
@@ -41,9 +41,10 @@ services = {
"longitudinalPlan": (True, 20., 5),
"procLog": (True, 0.5),
"gpsLocationExternal": (True, 10., 10),
+ "gpsLocation": (True, 1., 1),
"ubloxGnss": (True, 10.),
"qcomGnss": (True, 2.),
- "gnssMeasurements": (True, 10.),
+ "gnssMeasurements": (True, 10., 10),
"clocks": (True, 1., 1),
"ubloxRaw": (True, 20.),
"liveLocationKalman": (True, 20., 5),
@@ -67,6 +68,7 @@ services = {
"navRoute": (True, 0.),
"navThumbnail": (True, 0.),
"qRoadEncodeIdx": (False, 20.),
+ "userFlag": (True, 0., 1),
# debug
"testJoystick": (True, 0.),
diff --git a/cereal/visionipc/visionipc_pyx.so b/cereal/visionipc/visionipc_pyx.so
index 906328725..353af5bae 100755
Binary files a/cereal/visionipc/visionipc_pyx.so and b/cereal/visionipc/visionipc_pyx.so differ
diff --git a/common/clock.cpp b/common/clock.cpp
index 887714eb4..c2a5b2412 100644
--- a/common/clock.cpp
+++ b/common/clock.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.24 */
+/* Generated by Cython 0.29.26 */
/* BEGIN: Cython Metadata
{
@@ -23,8 +23,8 @@ END: Cython Metadata */
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
#error Cython requires Python 2.6+ or Python 3.3+.
#else
-#define CYTHON_ABI "0_29_24"
-#define CYTHON_HEX_VERSION 0x001D18F0
+#define CYTHON_ABI "0_29_26"
+#define CYTHON_HEX_VERSION 0x001D1AF0
#define CYTHON_FUTURE_DIVISION 1
#include
#ifndef offsetof
@@ -171,7 +171,7 @@ END: Cython Metadata */
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
- #if PY_VERSION_HEX < 0x030300F0
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -190,7 +190,7 @@ END: Cython Metadata */
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 1
+ #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1)
#endif
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -209,7 +209,9 @@ END: Cython Metadata */
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
- #include "longintrepr.h"
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
#undef SHIFT
#undef BASE
#undef MASK
@@ -340,9 +342,68 @@ class __Pyx_FakeReference {
#define __Pyx_DefaultClassType PyClass_Type
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
- #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
- PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+ PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+ const char *fn_cstr=NULL;
+ const char *name_cstr=NULL;
+ PyCodeObject* co=NULL;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (!(kwds=PyDict_New())) goto end;
+ if (!(argcount=PyLong_FromLong(a))) goto end;
+ if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+ if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+ if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+ if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+ if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+ if (!(nlocals=PyLong_FromLong(l))) goto end;
+ if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+ if (!(stacksize=PyLong_FromLong(s))) goto end;
+ if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+ if (!(flags=PyLong_FromLong(f))) goto end;
+ if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+ if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+ if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+ if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+ if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+ if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+ if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+ Py_XDECREF((PyObject*)co);
+ co = (PyCodeObject*)call_result;
+ call_result = NULL;
+ if (0) {
+ cleanup_code_too:
+ Py_XDECREF((PyObject*)co);
+ co = NULL;
+ }
+ end:
+ Py_XDECREF(kwds);
+ Py_XDECREF(argcount);
+ Py_XDECREF(posonlyargcount);
+ Py_XDECREF(kwonlyargcount);
+ Py_XDECREF(nlocals);
+ Py_XDECREF(stacksize);
+ Py_XDECREF(replace);
+ Py_XDECREF(call_result);
+ Py_XDECREF(empty);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return co;
+ }
#else
#define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
@@ -580,10 +641,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
- #define __Pyx_PyInt_AsHash_t PyInt_AsLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
- #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -742,6 +803,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
@@ -1802,7 +1864,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
}
if (!use_cline) {
c_line = 0;
- PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+ (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
}
else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
c_line = 0;
@@ -1899,30 +1961,31 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
const char *funcname, int c_line,
int py_line, const char *filename) {
- PyCodeObject *py_code = 0;
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
+ PyCodeObject *py_code = NULL;
+ PyObject *py_funcname = NULL;
#if PY_MAJOR_VERSION < 3
+ PyObject *py_srcfile = NULL;
py_srcfile = PyString_FromString(filename);
- #else
- py_srcfile = PyUnicode_FromString(filename);
- #endif
if (!py_srcfile) goto bad;
+ #endif
if (c_line) {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
#else
py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ funcname = PyUnicode_AsUTF8(py_funcname);
+ if (!funcname) goto bad;
#endif
}
else {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromString(funcname);
- #else
- py_funcname = PyUnicode_FromString(funcname);
+ if (!py_funcname) goto bad;
#endif
}
- if (!py_funcname) goto bad;
+ #if PY_MAJOR_VERSION < 3
py_code = __Pyx_PyCode_New(
0,
0,
@@ -1941,11 +2004,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
__pyx_empty_bytes /*PyObject *lnotab*/
);
Py_DECREF(py_srcfile);
- Py_DECREF(py_funcname);
+ #else
+ py_code = PyCode_NewEmpty(filename, funcname, py_line);
+ #endif
+ Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline
return py_code;
bad:
- Py_XDECREF(py_srcfile);
Py_XDECREF(py_funcname);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_srcfile);
+ #endif
return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -2793,6 +2861,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
Py_DECREF(x);
return ival;
}
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+ return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+ } else if (likely(PyInt_CheckExact(o))) {
+ return PyInt_AS_LONG(o);
+#endif
+ } else {
+ Py_ssize_t ival;
+ PyObject *x;
+ x = PyNumber_Index(o);
+ if (!x) return -1;
+ ival = PyInt_AsLong(x);
+ Py_DECREF(x);
+ return ival;
+ }
+}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
diff --git a/common/clock.so b/common/clock.so
index 849db7ad2..93fbdf0cb 100755
Binary files a/common/clock.so and b/common/clock.so differ
diff --git a/common/dp_conf.py b/common/dp_conf.py
index bf6d16f1d..25a105c70 100644
--- a/common/dp_conf.py
+++ b/common/dp_conf.py
@@ -5,6 +5,7 @@ import sys
import json
import time
from math import floor
+from selfdrive.controls.lib.lane_planner import CAMERA_OFFSET
'''
* type: Bool, Int8, UInt8, UInt16, Float32
@@ -21,20 +22,19 @@ confs = [
{'name': 'dp_locale', 'default': 'en-US', 'type': 'Text', 'conf_type': ['param', 'struct'], 'update_once': True},
{'name': 'dp_jetson', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- {'name': 'dp_hotspot_on_boot', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
# nav service
{'name': 'dp_otisserv', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- #{'name': 'dp_nav_mapbox_token_pk', 'default': '', 'type': 'Text', 'conf_type': ['param']},
- #{'name': 'dp_nav_mapbox_token_sk', 'default': '', 'type': 'Text', 'conf_type': ['param']},
- #{'name': 'dp_nav_full_screen', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- #{'name': 'dp_nav_gmap_enable', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- #{'name': 'dp_nav_gmap_key', 'default': '', 'type': 'Text', 'conf_type': ['param']},
- #{'name': 'dp_nav_amap_enable', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- #{'name': 'dp_nav_amap_key', 'default': '', 'type': 'Text', 'conf_type': ['param']},
- #{'name': 'dp_nav_amap_key_2', 'default': '', 'type': 'Text', 'conf_type': ['param']},
- #{'name': 'dp_nav_style_day', 'default': 'mapbox://styles/rav4kumar/ckv7dtfba6oik15r0w8dh1c1q', 'type': 'Text', 'conf_type': ['param']},
- #{'name': 'dp_nav_style_night', 'default': 'mapbox://styles/rav4kumar/ckvsf3f4u0zb414tcz9vof5jc', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_mapbox_token_pk', 'default': '', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_mapbox_token_sk', 'default': '', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_full_screen', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
+ {'name': 'dp_nav_gmap_enable', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
+ {'name': 'dp_nav_gmap_key', 'default': '', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_amap_enable', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
+ {'name': 'dp_nav_amap_key', 'default': '', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_amap_key_2', 'default': '', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_style_day', 'default': 'mapbox://styles/rav4kumar/ckv7dtfba6oik15r0w8dh1c1q', 'type': 'Text', 'conf_type': ['param']},
+ {'name': 'dp_nav_style_night', 'default': 'mapbox://styles/rav4kumar/ckvsf3f4u0zb414tcz9vof5jc', 'type': 'Text', 'conf_type': ['param']},
# gpxd
{'name': 'dp_gpxd', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
@@ -55,7 +55,7 @@ confs = [
#ui
{'name': 'dp_ip_addr', 'default': '', 'type': 'Text', 'conf_type': ['struct']},
- {'name': 'dp_quiet_drive', 'default': False, 'type': 'Boolean', 'conf_type': ['param']},
+ {'name': 'dp_quiet_drive', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
{'name': 'dp_ui_top', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
{'name': 'dp_ui_side', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
{'name': 'dp_ui_volume', 'default': -5, 'type': 'Int8', 'min': -5, 'max': 100, 'conf_type': ['param', 'struct']},
@@ -68,14 +68,14 @@ confs = [
{'name': 'dp_accel_profile', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 2, 'depends': [{'name': 'dp_accel_profile_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
{'name': 'dp_toyota_ap_btn_link', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
{'name': 'dp_toyota_cruise_override', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
- {'name': 'dp_toyota_cruise_override_speed', 'default': 30, 'type': 'UInt8', 'min': 5, 'max': 60, 'conf_type': ['param', 'struct']},
+ {'name': 'dp_toyota_cruise_override_speed', 'default': 30, 'type': 'UInt8', 'min': 5, 'max': 60, 'depends': [{'name': 'dp_accel_profile_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
{'name': 'dp_use_lanelines', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
{'name': 'dp_mapd', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
{'name': 'dp_lateral_lqr', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- # # dashcam related
+ # dashcam related
{'name': 'dp_dashcamd', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
# # auto shutdown
{'name': 'dp_auto_shutdown', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
@@ -88,7 +88,7 @@ confs = [
# {'name': 'dp_athenad', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct'], 'update_once': True},
# {'name': 'dp_uploader', 'default': False, 'type': 'Bool', 'depends': [{'name': 'dp_atl', 'vals': [False]}], 'conf_type': ['param', 'struct'], 'update_once': True},
# # {'name': 'dp_gpxd', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
- #
+ {'name': 'dp_hotspot_on_boot', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
# # lat ctrl
# {'name': 'dp_lane_less_mode_ctrl', 'default': False, 'type': 'Bool', 'conf_type': ['param', 'struct']},
# {'name': 'dp_lane_less_mode', 'default': 2, 'type': 'UInt8', 'min': 0, 'max': 2, 'depends': [{'name': 'dp_lane_less_mode_ctrl', 'vals': [True]}], 'conf_type': ['param', 'struct']},
@@ -137,7 +137,7 @@ confs = [
# {'name': 'dp_ip_addr', 'default': '', 'type': 'Text', 'conf_type': ['struct']},
# {'name': 'dp_fan_mode', 'default': 0, 'type': 'UInt8', 'min': 0, 'max': 2, 'conf_type': ['param']},
# {'name': 'dp_last_modified', 'default': str(floor(time.time())), 'type': 'Text', 'conf_type': ['param']},
- # {'name': 'dp_camera_offset', 'default': 6 if EON else -4 if TICI else 0, 'type': 'Int8', 'min': -100, 'max': 100, 'conf_type': ['param', 'struct']},
+ {'name': 'dp_camera_offset', 'default': CAMERA_OFFSET, 'type': 'Int8', 'min': -100, 'max': 100, 'conf_type': ['param', 'struct']},
# {'name': 'dp_path_offset', 'default': 0 if EON else -4 if TICI else 0, 'type': 'Int8', 'min': -100, 'max': 100, 'conf_type': ['param', 'struct']},
#
# {'name': 'dp_reg', 'default': False, 'type': 'Bool', 'conf_type': ['param']},
diff --git a/common/kalman/simple_kalman_impl.cpp b/common/kalman/simple_kalman_impl.cpp
index 5d5b9ee54..faa41d50f 100644
--- a/common/kalman/simple_kalman_impl.cpp
+++ b/common/kalman/simple_kalman_impl.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.24 */
+/* Generated by Cython 0.29.26 */
/* BEGIN: Cython Metadata
{
@@ -22,8 +22,8 @@ END: Cython Metadata */
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
#error Cython requires Python 2.6+ or Python 3.3+.
#else
-#define CYTHON_ABI "0_29_24"
-#define CYTHON_HEX_VERSION 0x001D18F0
+#define CYTHON_ABI "0_29_26"
+#define CYTHON_HEX_VERSION 0x001D1AF0
#define CYTHON_FUTURE_DIVISION 1
#include
#ifndef offsetof
@@ -170,7 +170,7 @@ END: Cython Metadata */
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
- #if PY_VERSION_HEX < 0x030300F0
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -189,7 +189,7 @@ END: Cython Metadata */
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 1
+ #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1)
#endif
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -208,7 +208,9 @@ END: Cython Metadata */
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
- #include "longintrepr.h"
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
#undef SHIFT
#undef BASE
#undef MASK
@@ -339,9 +341,68 @@ class __Pyx_FakeReference {
#define __Pyx_DefaultClassType PyClass_Type
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
- #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
- PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+ PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+ const char *fn_cstr=NULL;
+ const char *name_cstr=NULL;
+ PyCodeObject* co=NULL;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (!(kwds=PyDict_New())) goto end;
+ if (!(argcount=PyLong_FromLong(a))) goto end;
+ if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+ if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+ if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+ if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+ if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+ if (!(nlocals=PyLong_FromLong(l))) goto end;
+ if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+ if (!(stacksize=PyLong_FromLong(s))) goto end;
+ if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+ if (!(flags=PyLong_FromLong(f))) goto end;
+ if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+ if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+ if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+ if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+ if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+ if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+ if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+ Py_XDECREF((PyObject*)co);
+ co = (PyCodeObject*)call_result;
+ call_result = NULL;
+ if (0) {
+ cleanup_code_too:
+ Py_XDECREF((PyObject*)co);
+ co = NULL;
+ }
+ end:
+ Py_XDECREF(kwds);
+ Py_XDECREF(argcount);
+ Py_XDECREF(posonlyargcount);
+ Py_XDECREF(kwonlyargcount);
+ Py_XDECREF(nlocals);
+ Py_XDECREF(stacksize);
+ Py_XDECREF(replace);
+ Py_XDECREF(call_result);
+ Py_XDECREF(empty);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return co;
+ }
#else
#define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
@@ -579,10 +640,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
- #define __Pyx_PyInt_AsHash_t PyInt_AsLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
- #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -738,6 +799,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
@@ -1116,6 +1178,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
+#if CYTHON_FAST_PYCALL
static size_t __pyx_pyframe_localsplus_offset = 0;
#include "frameobject.h"
#define __Pxy_PyFrame_Initialize_Offsets()\
@@ -1123,6 +1186,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
(void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
#define __Pyx_PyFrame_GetLocalsplus(frame)\
(assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif // CYTHON_FAST_PYCALL
#endif
/* PyObjectCall.proto */
@@ -4329,6 +4393,9 @@ static PyTypeObject __pyx_type_6common_6kalman_18simple_kalman_impl_KF1D = {
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
0, /*tp_print*/
#endif
+ #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+ 0, /*tp_pypy_flags*/
+ #endif
};
static PyMethodDef __pyx_methods[] = {
@@ -5873,7 +5940,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
}
if (!use_cline) {
c_line = 0;
- PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+ (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
}
else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
c_line = 0;
@@ -5970,30 +6037,31 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
const char *funcname, int c_line,
int py_line, const char *filename) {
- PyCodeObject *py_code = 0;
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
+ PyCodeObject *py_code = NULL;
+ PyObject *py_funcname = NULL;
#if PY_MAJOR_VERSION < 3
+ PyObject *py_srcfile = NULL;
py_srcfile = PyString_FromString(filename);
- #else
- py_srcfile = PyUnicode_FromString(filename);
- #endif
if (!py_srcfile) goto bad;
+ #endif
if (c_line) {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
#else
py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ funcname = PyUnicode_AsUTF8(py_funcname);
+ if (!funcname) goto bad;
#endif
}
else {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromString(funcname);
- #else
- py_funcname = PyUnicode_FromString(funcname);
+ if (!py_funcname) goto bad;
#endif
}
- if (!py_funcname) goto bad;
+ #if PY_MAJOR_VERSION < 3
py_code = __Pyx_PyCode_New(
0,
0,
@@ -6012,11 +6080,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
__pyx_empty_bytes /*PyObject *lnotab*/
);
Py_DECREF(py_srcfile);
- Py_DECREF(py_funcname);
+ #else
+ py_code = PyCode_NewEmpty(filename, funcname, py_line);
+ #endif
+ Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline
return py_code;
bad:
- Py_XDECREF(py_srcfile);
Py_XDECREF(py_funcname);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_srcfile);
+ #endif
return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -6864,6 +6937,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
Py_DECREF(x);
return ival;
}
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+ return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+ } else if (likely(PyInt_CheckExact(o))) {
+ return PyInt_AS_LONG(o);
+#endif
+ } else {
+ Py_ssize_t ival;
+ PyObject *x;
+ x = PyNumber_Index(o);
+ if (!x) return -1;
+ ival = PyInt_AsLong(x);
+ Py_DECREF(x);
+ return ival;
+ }
+}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
diff --git a/common/kalman/simple_kalman_impl.so b/common/kalman/simple_kalman_impl.so
index a6e48593a..4fb04cb93 100755
Binary files a/common/kalman/simple_kalman_impl.so and b/common/kalman/simple_kalman_impl.so differ
diff --git a/common/params_pyx.so b/common/params_pyx.so
index f74dd9a24..b3d93150e 100755
Binary files a/common/params_pyx.so and b/common/params_pyx.so differ
diff --git a/common/transformations/transformations.cpp b/common/transformations/transformations.cpp
index f08fb62f8..4080d4a8b 100644
--- a/common/transformations/transformations.cpp
+++ b/common/transformations/transformations.cpp
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.29.24 */
+/* Generated by Cython 0.29.26 */
/* BEGIN: Cython Metadata
{
@@ -32,8 +32,8 @@ END: Cython Metadata */
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
#error Cython requires Python 2.6+ or Python 3.3+.
#else
-#define CYTHON_ABI "0_29_24"
-#define CYTHON_HEX_VERSION 0x001D18F0
+#define CYTHON_ABI "0_29_26"
+#define CYTHON_HEX_VERSION 0x001D1AF0
#define CYTHON_FUTURE_DIVISION 1
#include
#ifndef offsetof
@@ -180,7 +180,7 @@ END: Cython Metadata */
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
- #if PY_VERSION_HEX < 0x030300F0
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -199,7 +199,7 @@ END: Cython Metadata */
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 1
+ #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1)
#endif
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -218,7 +218,9 @@ END: Cython Metadata */
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
- #include "longintrepr.h"
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
#undef SHIFT
#undef BASE
#undef MASK
@@ -349,9 +351,68 @@ class __Pyx_FakeReference {
#define __Pyx_DefaultClassType PyClass_Type
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
- #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
- PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+ PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+ const char *fn_cstr=NULL;
+ const char *name_cstr=NULL;
+ PyCodeObject* co=NULL;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (!(kwds=PyDict_New())) goto end;
+ if (!(argcount=PyLong_FromLong(a))) goto end;
+ if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+ if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+ if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+ if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+ if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+ if (!(nlocals=PyLong_FromLong(l))) goto end;
+ if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+ if (!(stacksize=PyLong_FromLong(s))) goto end;
+ if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+ if (!(flags=PyLong_FromLong(f))) goto end;
+ if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+ if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+ if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+ if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+ if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+ if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+ if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+ Py_XDECREF((PyObject*)co);
+ co = (PyCodeObject*)call_result;
+ call_result = NULL;
+ if (0) {
+ cleanup_code_too:
+ Py_XDECREF((PyObject*)co);
+ co = NULL;
+ }
+ end:
+ Py_XDECREF(kwds);
+ Py_XDECREF(argcount);
+ Py_XDECREF(posonlyargcount);
+ Py_XDECREF(kwonlyargcount);
+ Py_XDECREF(nlocals);
+ Py_XDECREF(stacksize);
+ Py_XDECREF(replace);
+ Py_XDECREF(call_result);
+ Py_XDECREF(empty);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return co;
+ }
#else
#define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
@@ -589,10 +650,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
- #define __Pyx_PyInt_AsHash_t PyInt_AsLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
- #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -762,6 +823,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
@@ -1345,6 +1407,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
+#if CYTHON_FAST_PYCALL
static size_t __pyx_pyframe_localsplus_offset = 0;
#include "frameobject.h"
#define __Pxy_PyFrame_Initialize_Offsets()\
@@ -1352,6 +1415,7 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
(void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
#define __Pyx_PyFrame_GetLocalsplus(frame)\
(assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif // CYTHON_FAST_PYCALL
#endif
/* PyObjectCall.proto */
@@ -6278,6 +6342,9 @@ static PyTypeObject __pyx_type_6common_15transformations_15transformations_Local
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
0, /*tp_print*/
#endif
+ #if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM+0 >= 0x06000000
+ 0, /*tp_pypy_flags*/
+ #endif
};
static PyMethodDef __pyx_methods[] = {
@@ -9042,7 +9109,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
}
if (!use_cline) {
c_line = 0;
- PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+ (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
}
else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
c_line = 0;
@@ -9139,30 +9206,31 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
const char *funcname, int c_line,
int py_line, const char *filename) {
- PyCodeObject *py_code = 0;
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
+ PyCodeObject *py_code = NULL;
+ PyObject *py_funcname = NULL;
#if PY_MAJOR_VERSION < 3
+ PyObject *py_srcfile = NULL;
py_srcfile = PyString_FromString(filename);
- #else
- py_srcfile = PyUnicode_FromString(filename);
- #endif
if (!py_srcfile) goto bad;
+ #endif
if (c_line) {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
#else
py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ funcname = PyUnicode_AsUTF8(py_funcname);
+ if (!funcname) goto bad;
#endif
}
else {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromString(funcname);
- #else
- py_funcname = PyUnicode_FromString(funcname);
+ if (!py_funcname) goto bad;
#endif
}
- if (!py_funcname) goto bad;
+ #if PY_MAJOR_VERSION < 3
py_code = __Pyx_PyCode_New(
0,
0,
@@ -9181,11 +9249,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
__pyx_empty_bytes /*PyObject *lnotab*/
);
Py_DECREF(py_srcfile);
- Py_DECREF(py_funcname);
+ #else
+ py_code = PyCode_NewEmpty(filename, funcname, py_line);
+ #endif
+ Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline
return py_code;
bad:
- Py_XDECREF(py_srcfile);
Py_XDECREF(py_funcname);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_srcfile);
+ #endif
return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -10361,6 +10434,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
Py_DECREF(x);
return ival;
}
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+ return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+ } else if (likely(PyInt_CheckExact(o))) {
+ return PyInt_AS_LONG(o);
+#endif
+ } else {
+ Py_ssize_t ival;
+ PyObject *x;
+ x = PyNumber_Index(o);
+ if (!x) return -1;
+ ival = PyInt_AsLong(x);
+ Py_DECREF(x);
+ return ival;
+ }
+}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
diff --git a/common/transformations/transformations.so b/common/transformations/transformations.so
index f168bb89b..dd810f7f0 100755
Binary files a/common/transformations/transformations.so and b/common/transformations/transformations.so differ
diff --git a/common/version.h b/common/version.h
index a5d4837b6..51848d91b 100644
--- a/common/version.h
+++ b/common/version.h
@@ -1 +1 @@
-#define COMMA_VERSION "2022.08.19"
+#define COMMA_VERSION "2022.08.26"
diff --git a/docs/CARS.md b/docs/CARS.md
index ff539f052..78b4d3b16 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -2,228 +2,217 @@
# Supported Cars
-A supported vehicle is one that just works when you install a comma device. Every car performs differently with openpilot, but all supported cars should provide a better experience than any stock system.
+A supported vehicle is one that just works when you install a comma three. All supported cars provide a better experience than any stock system.
-## How We Rate The Cars
+# 205 Supported Cars
-### Stop and Go
-- [](##) - openpilot operates down to 0 mph.
-- [](##) - openpilot operates only above a minimum speed. See your car's manual for the minimum speed.
-
-### Steer to 0
-- [](##) - openpilot can control the steering wheel down to 0 mph.
-- [](##) - No steering control below certain speeds. See your car's manual for the minimum speed.
-
-### Steering Torque
-- [](##) - Car has enough steering torque to comfortably take most highway turns.
-- [](##) - Limited ability to make tighter turns.
-
-
-# 201 Supported Cars
-
-|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|
-|---|---|---|:---:|:---:|:---:|:---:|
-|Acura|ILX 2016-19|AcuraWatch Plus|[](##)|[](##)|[](##)|[](##)|
-|Acura|RDX 2016-18|AcuraWatch Plus|[](##)|[](##)|[](##)|[](##)|
-|Acura|RDX 2019-22|All|[](##)|[](##)|[](##)|[](##)|
-|Audi|A3 2014-19|ACC + Lane Assist|[](##)|[](##)|[](##)|[](##)|
-|Audi|A3 Sportback e-tron 2017-18|ACC + Lane Assist|[](##)|[](##)|[](##)|[](##)|
-|Audi|Q2 2018|ACC + Lane Assist|[](##)|[](##)|[](##)|[](##)|
-|Audi|Q3 2020-21|ACC + Lane Assist|[](##)|[](##)|[](##)|[](##)|
-|Audi|RS3 2018|ACC + Lane Assist|[](##)|[](##)|[](##)|[](##)|
-|Audi|S3 2015-17|ACC + Lane Assist|[](##)|[](##)|[](##)|[](##)|
-|Cadillac|Escalade ESV 2016[1 ](#footnotes)|Adaptive Cruise Control (ACC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Chevrolet|Bolt EUV 2022-23|Premier/Premier Redline Trim|[](##)|[](##)|[](##)|[](##)|
-|Chevrolet|Volt 2017-18[1 ](#footnotes)|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Chrysler|Pacifica 2017-18|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Chrysler|Pacifica 2019-20|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Chrysler|Pacifica 2021|All|[](##)|[](##)|[](##)|[](##)|
-|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Chrysler|Pacifica Hybrid 2019-22|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|comma|body|All|[](##)|[](##)|[](##)|[](##)|
-|Genesis|G70 2018-19|All|[](##)|[](##)|[](##)|[](##)|
-|Genesis|G70 2020|All|[](##)|[](##)|[](##)|[](##)|
-|Genesis|G80 2017-19|All|[](##)|[](##)|[](##)|[](##)|
-|Genesis|G90 2017-18|All|[](##)|[](##)|[](##)|[](##)|
-|GMC|Acadia 2018[1 ](#footnotes)|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Honda|Accord 2018-22|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Accord Hybrid 2018-22|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Civic 2016-18|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|Civic 2019-21|All|[](##)|[](##)|[](##)[2 ](#footnotes)|[](##)|
-|Honda|Civic 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Civic Hatchback 2017-21|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|Civic Hatchback 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|CR-V 2015-16|Touring Trim|[](##)|[](##)|[](##)|[](##)|
-|Honda|CR-V 2017-22|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|CR-V Hybrid 2017-19|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|e 2020|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Fit 2018-20|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|Freed 2020|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|HR-V 2019-22|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|Insight 2019-22|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Inspire 2018|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Odyssey 2018-20|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|Passport 2019-21|All|[](##)|[](##)|[](##)|[](##)|
-|Honda|Pilot 2016-22|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Honda|Ridgeline 2017-22|Honda Sensing|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Elantra 2017-19|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Elantra 2021-22|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Elantra Hybrid 2021-22|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Genesis 2015-16|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq 5 2022|Highway Driving Assist II|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq Electric 2019|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq Electric 2020|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq Hybrid 2017-19|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq Hybrid 2020-22|Smart Cruise Control (SCC) & LFA|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq Plug-in Hybrid 2019|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Ioniq Plug-in Hybrid 2020-21|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Kona 2020|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Kona Electric 2022|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Kona Hybrid 2020|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Palisade 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Santa Fe 2019-20|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Santa Fe 2021-22|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Santa Fe Hybrid 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Santa Fe Plug-in Hybrid 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Sonata 2018-19|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Sonata 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Sonata Hybrid 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Tucson 2021|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Tucson Diesel 2019|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|Kia|Ceed 2019|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|EV6 2022|Highway Driving Assist II|[](##)|[](##)|[](##)|[](##)|
-|Kia|Forte 2018|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Forte 2019-21|All|[](##)|[](##)|[](##)|[](##)|
-|Kia|K5 2021-22|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Electric 2019|All|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Electric 2020|All|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Electric 2021|All|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Electric 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Hybrid 2021|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Hybrid 2022|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Niro Plug-in Hybrid 2018-19|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Optima 2017|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Optima 2019|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Seltos 2021|Smart Cruise Control (SCC)|[](##)|[](##)|[](##)|[](##)|
-|Kia|Sorento 2018|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Sorento 2019|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Stinger 2018-20|Smart Cruise Control (SCC) & LKAS|[](##)|[](##)|[](##)|[](##)|
-|Kia|Telluride 2020|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|CT Hybrid 2017-18|Lexus Safety System+|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Lexus|ES 2019-22|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|ES Hybrid 2017-18|Lexus Safety System+|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Lexus|ES Hybrid 2019-22|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|IS 2017-19|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|NX 2018-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Lexus|NX 2020-21|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|NX Hybrid 2018-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Lexus|NX Hybrid 2020-21|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|RC 2017-20|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|RX 2016-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Lexus|RX 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|RX Hybrid 2016-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Lexus|RX Hybrid 2020-21|All|[](##)|[](##)|[](##)|[](##)|
-|Lexus|UX Hybrid 2019-22|All|[](##)|[](##)|[](##)|[](##)|
-|Mazda|CX-5 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Mazda|CX-9 2021-22|All|[](##)|[](##)|[](##)|[](##)|
-|Nissan|Altima 2019-20|ProPILOT Assist|[](##)|[](##)|[](##)|[](##)|
-|Nissan|Leaf 2018-22|ProPILOT Assist|[](##)|[](##)|[](##)|[](##)|
-|Nissan|Rogue 2018-20|ProPILOT Assist|[](##)|[](##)|[](##)|[](##)|
-|Nissan|X-Trail 2017|ProPILOT Assist|[](##)|[](##)|[](##)|[](##)|
-|Ram|1500 2019-22|Adaptive Cruise Control|[](##)|[](##)|[](##)|[](##)|
-|SEAT|Ateca 2018|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|SEAT|Leon 2014-20|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Ascent 2019-21|All|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Crosstrek 2020-21|EyeSight Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Forester 2019-21|All|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Impreza 2017-19|EyeSight Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Impreza 2020-22|EyeSight Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Subaru|Outback 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Subaru|XV 2018-19|EyeSight Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Subaru|XV 2020-21|EyeSight Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Kamiq 2021[5 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Karoq 2019-21[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Kodiaq 2018-19|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Octavia 2015, 2018-19|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Octavia RS 2016|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Scala 2020|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Škoda|Superb 2015-18|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Alphard 2019-20|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Alphard Hybrid 2021|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Avalon 2016|Toyota Safety Sense P|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Avalon 2017-18|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Avalon 2019-21|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Avalon 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Avalon Hybrid 2019-21|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Avalon Hybrid 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|C-HR 2017-21|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|C-HR Hybrid 2017-19|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Camry 2018-20|All|[](##)|[](##)[4 ](#footnotes)|[](##)|[](##)|
-|Toyota|Camry 2021-22|All|[](##)|[](##)[4 ](#footnotes)|[](##)|[](##)|
-|Toyota|Camry Hybrid 2018-20|All|[](##)|[](##)[4 ](#footnotes)|[](##)|[](##)|
-|Toyota|Camry Hybrid 2021-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Corolla 2017-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Corolla 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Corolla Cross (Non-US only) 2020-21|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Corolla Hatchback 2019-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Corolla Hybrid 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Highlander 2017-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Highlander 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Highlander Hybrid 2017-19|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Highlander Hybrid 2020-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Mirai 2021|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Prius 2016|Toyota Safety Sense P|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Prius 2017-20|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Prius 2021-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Prius Prime 2017-20|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|Prius Prime 2021-22|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Prius v 2017|Toyota Safety Sense P|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 2016|Toyota Safety Sense P|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 2017-18|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 2019-21|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 Hybrid 2017-18|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 Hybrid 2019-21|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|RAV4 Hybrid 2022|All|[](##)|[](##)|[](##)|[](##)|
-|Toyota|Sienna 2018-20|All|[](##)[3 ](#footnotes)|[](##)|[](##)|[](##)|
-|Volkswagen|Arteon 2018-22[7,8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Arteon eHybrid 2020-22[7,8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Arteon R 2020-22[7,8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Atlas 2018-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Atlas Cross Sport 2021-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|California 2021[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Caravelle 2020[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|CC 2018-22[7,8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|e-Golf 2014-20|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf 2015-20[8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf Alltrack 2015-19|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf GTD 2015-20|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf GTE 2015-20|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf GTI 2015-21|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf R 2015-19[8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Golf SportsVan 2015-20|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Jetta 2018-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Jetta GLI 2021-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Passat 2015-22[6,7,8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Passat Alltrack 2015-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Passat GTE 2015-22[7,8 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Polo 2020-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Polo GTI 2020-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|T-Cross 2021[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|T-Roc 2021[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Taos 2022[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Teramont 2018-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Teramont Cross Sport 2021-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Teramont X 2021-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Tiguan 2019-22[7 ](#footnotes)|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
-|Volkswagen|Touran 2017|Driver Assistance|[](##)|[](##)|[](##)|[](##)|
+|Make|Model|Supported Package|ACC|No ACC accel below|No ALC below|Steering Torque|Harness|
+|---|---|---|:---:|:---:|:---:|:---:|:---:|
+|Acura|ILX 2016-19|AcuraWatch Plus|openpilot|25 mph|25 mph|[](##)|Honda Nidec|
+|Acura|RDX 2016-18|AcuraWatch Plus|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Acura|RDX 2019-22|All|Stock|0 mph|3 mph|[](##)|Honda Bosch A|
+|Audi|A3 2014-19|ACC + Lane Assist|Stock|0 mph|0 mph|[](##)|VW|
+|Audi|A3 Sportback e-tron 2017-18|ACC + Lane Assist|Stock|0 mph|0 mph|[](##)|VW|
+|Audi|Q2 2018|ACC + Lane Assist|Stock|0 mph|0 mph|[](##)|VW|
+|Audi|Q3 2020-21|ACC + Lane Assist|Stock|0 mph|0 mph|[](##)|VW|
+|Audi|RS3 2018|ACC + Lane Assist|Stock|0 mph|0 mph|[](##)|VW|
+|Audi|S3 2015-17|ACC + Lane Assist|Stock|0 mph|0 mph|[](##)|VW|
+|Cadillac|Escalade ESV 2016[1 ](#footnotes)|Adaptive Cruise Control (ACC) & LKAS|openpilot|0 mph|7 mph|[](##)|OBD-II|
+|Chevrolet|Bolt EUV 2022-23|Premier or Premier Redline Trim without Super Cruise Package|Stock|0 mph|7 mph|[](##)|GM|
+|Chevrolet|Silverado 1500 2020-21|Safety Package II|Stock|0 mph|7 mph|[](##)|GM|
+|Chevrolet|Volt 2017-18[1 ](#footnotes)|Adaptive Cruise Control|openpilot|0 mph|7 mph|[](##)|OBD-II|
+|Chrysler|Pacifica 2017-18|Adaptive Cruise Control|Stock|0 mph|9 mph|[](##)|FCA|
+|Chrysler|Pacifica 2019-20|Adaptive Cruise Control|Stock|0 mph|39 mph|[](##)|FCA|
+|Chrysler|Pacifica 2021|All|Stock|0 mph|39 mph|[](##)|FCA|
+|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise Control|Stock|0 mph|9 mph|[](##)|FCA|
+|Chrysler|Pacifica Hybrid 2019-22|Adaptive Cruise Control|Stock|0 mph|39 mph|[](##)|FCA|
+|comma|body|All|Stock|0 mph|0 mph|[](##)|None|
+|Genesis|G70 2018-19|All|Stock|0 mph|0 mph|[](##)|Hyundai F|
+|Genesis|G70 2020|All|openpilot|0 mph|0 mph|[](##)|Hyundai F|
+|Genesis|G80 2017-19|All|Stock|0 mph|0 mph|[](##)|Hyundai H|
+|Genesis|G90 2017-18|All|Stock|0 mph|0 mph|[](##)|Hyundai C|
+|GMC|Acadia 2018[1 ](#footnotes)|Adaptive Cruise Control|openpilot|0 mph|7 mph|[](##)|OBD-II|
+|GMC|Sierra 1500 2020-21|Driver Alert Package II|Stock|0 mph|7 mph|[](##)|GM|
+|Honda|Accord 2018-22|All|Stock|0 mph|3 mph|[](##)|Honda Bosch A|
+|Honda|Accord Hybrid 2018-22|All|Stock|0 mph|3 mph|[](##)|Honda Bosch A|
+|Honda|Civic 2016-18|Honda Sensing|openpilot|0 mph|12 mph|[](##)|Honda Nidec|
+|Honda|Civic 2019-21|All|Stock|0 mph|2 mph[2 ](#footnotes)|[](##)|Honda Bosch A|
+|Honda|Civic 2022|All|Stock|0 mph|0 mph|[](##)|Honda Bosch B|
+|Honda|Civic Hatchback 2017-21|Honda Sensing|Stock|0 mph|12 mph|[](##)|Honda Bosch A|
+|Honda|Civic Hatchback 2022|All|Stock|0 mph|0 mph|[](##)|Honda Bosch B|
+|Honda|CR-V 2015-16|Touring Trim|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Honda|CR-V 2017-22|Honda Sensing|Stock|0 mph|12 mph|[](##)|Honda Bosch A|
+|Honda|CR-V Hybrid 2017-19|Honda Sensing|Stock|0 mph|12 mph|[](##)|Honda Bosch A|
+|Honda|e 2020|All|Stock|0 mph|3 mph|[](##)|Honda Bosch A|
+|Honda|Fit 2018-20|Honda Sensing|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Honda|Freed 2020|Honda Sensing|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Honda|HR-V 2019-22|Honda Sensing|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Honda|Insight 2019-22|All|Stock|0 mph|3 mph|[](##)|Honda Bosch A|
+|Honda|Inspire 2018|All|Stock|0 mph|3 mph|[](##)|Honda Bosch A|
+|Honda|Odyssey 2018-20|Honda Sensing|openpilot|25 mph|0 mph|[](##)|Honda Nidec|
+|Honda|Passport 2019-21|All|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Honda|Pilot 2016-22|Honda Sensing|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Honda|Ridgeline 2017-22|Honda Sensing|openpilot|25 mph|12 mph|[](##)|Honda Nidec|
+|Hyundai|Elantra 2017-19|Smart Cruise Control (SCC) & LKAS|Stock|19 mph|32 mph|[](##)|Hyundai B|
+|Hyundai|Elantra 2021-22|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai K|
+|Hyundai|Elantra Hybrid 2021-22|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai K|
+|Hyundai|Genesis 2015-16|Smart Cruise Control (SCC) & LKAS|Stock|19 mph|37 mph|[](##)|Hyundai J|
+|Hyundai|Ioniq 5 2022|Highway Driving Assist II|Stock|0 mph|0 mph|[](##)|Hyundai Q|
+|Hyundai|Ioniq Electric 2019|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|32 mph|[](##)|Hyundai C|
+|Hyundai|Ioniq Electric 2020|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai H|
+|Hyundai|Ioniq Hybrid 2017-19|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|32 mph|[](##)|Hyundai C|
+|Hyundai|Ioniq Hybrid 2020-22|Smart Cruise Control (SCC) & LFA|Stock|0 mph|0 mph|[](##)|Hyundai H|
+|Hyundai|Ioniq Plug-in Hybrid 2019|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|32 mph|[](##)|Hyundai C|
+|Hyundai|Ioniq Plug-in Hybrid 2020-21|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai H|
+|Hyundai|Kona 2020|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai B|
+|Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai G|
+|Hyundai|Kona Electric 2022|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai O|
+|Hyundai|Kona Hybrid 2020|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai I|
+|Hyundai|Palisade 2020-22|All|openpilot|0 mph|0 mph|[](##)|Hyundai H|
+|Hyundai|Santa Fe 2019-20|All|openpilot|0 mph|0 mph|[](##)|Hyundai D|
+|Hyundai|Santa Fe 2021-22|All|Stock|0 mph|0 mph|[](##)|Hyundai L|
+|Hyundai|Santa Fe Hybrid 2022|All|Stock|0 mph|0 mph|[](##)|Hyundai L|
+|Hyundai|Santa Fe Plug-in Hybrid 2022|All|Stock|0 mph|0 mph|[](##)|Hyundai L|
+|Hyundai|Sonata 2018-19|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai E|
+|Hyundai|Sonata 2020-22|All|openpilot|0 mph|0 mph|[](##)|Hyundai A|
+|Hyundai|Sonata Hybrid 2020-22|All|openpilot|0 mph|0 mph|[](##)|Hyundai A|
+|Hyundai|Tucson 2021|Smart Cruise Control (SCC)|Stock|19 mph|0 mph|[](##)|Hyundai L|
+|Hyundai|Tucson Diesel 2019|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai L|
+|Hyundai|Tucson Hybrid 2022|All|Stock|0 mph|0 mph|[](##)|Hyundai N|
+|Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|Stock|5 mph|0 mph|[](##)|Hyundai E|
+|Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control|Stock|0 mph|9 mph|[](##)|FCA|
+|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control|Stock|0 mph|39 mph|[](##)|FCA|
+|Kia|Ceed 2019|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai E|
+|Kia|EV6 2022|Highway Driving Assist II|Stock|0 mph|0 mph|[](##)|Hyundai P|
+|Kia|Forte 2018|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai B|
+|Kia|Forte 2019-21|All|Stock|0 mph|0 mph|[](##)|Hyundai G|
+|Kia|K5 2021-22|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai A|
+|Kia|Niro Electric 2019|All|openpilot|0 mph|0 mph|[](##)|Hyundai H|
+|Kia|Niro Electric 2020|All|openpilot|0 mph|0 mph|[](##)|Hyundai F|
+|Kia|Niro Electric 2021|All|openpilot|0 mph|0 mph|[](##)|Hyundai C|
+|Kia|Niro Electric 2022|All|openpilot|0 mph|0 mph|[](##)|Hyundai H|
+|Kia|Niro Hybrid 2021|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai F|
+|Kia|Niro Hybrid 2022|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai H|
+|Kia|Niro Plug-in Hybrid 2018-19|Smart Cruise Control (SCC) & LKAS|openpilot|10 mph|32 mph|[](##)|Hyundai C|
+|Kia|Optima 2017|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|32 mph|[](##)|Hyundai B|
+|Kia|Optima 2019|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai G|
+|Kia|Seltos 2021|Smart Cruise Control (SCC)|Stock|0 mph|0 mph|[](##)|Hyundai A|
+|Kia|Sorento 2018|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai C|
+|Kia|Sorento 2019|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai E|
+|Kia|Stinger 2018-20|Smart Cruise Control (SCC) & LKAS|Stock|0 mph|0 mph|[](##)|Hyundai C|
+|Kia|Telluride 2020|All|openpilot|0 mph|0 mph|[](##)|Hyundai H|
+|Lexus|CT Hybrid 2017-18|Lexus Safety System+|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Lexus|ES 2019-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Lexus|ES Hybrid 2017-18|Lexus Safety System+|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Lexus|ES Hybrid 2019-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Lexus|IS 2017-19|All|Stock|19 mph|0 mph|[](##)|Toyota|
+|Lexus|NX 2018-19|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Lexus|NX 2020-21|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Lexus|NX Hybrid 2018-19|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Lexus|NX Hybrid 2020-21|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Lexus|RC 2017-20|All|Stock|19 mph|0 mph|[](##)|Toyota|
+|Lexus|RX 2016-19|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Lexus|RX 2020-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Lexus|RX Hybrid 2016-19|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Lexus|RX Hybrid 2020-21|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Lexus|UX Hybrid 2019-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Mazda|CX-5 2022|All|Stock|0 mph|0 mph|[](##)|Mazda|
+|Mazda|CX-9 2021-22|All|Stock|0 mph|28 mph|[](##)|Mazda|
+|Nissan|Altima 2019-20|ProPILOT Assist|Stock|0 mph|0 mph|[](##)|Nissan B|
+|Nissan|Leaf 2018-22|ProPILOT Assist|Stock|0 mph|0 mph|[](##)|Nissan A|
+|Nissan|Rogue 2018-20|ProPILOT Assist|Stock|0 mph|0 mph|[](##)|Nissan A|
+|Nissan|X-Trail 2017|ProPILOT Assist|Stock|0 mph|0 mph|[](##)|Nissan A|
+|Ram|1500 2019-22|Adaptive Cruise Control|Stock|0 mph|32 mph|[](##)|Ram|
+|SEAT|Ateca 2018|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|SEAT|Leon 2014-20|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Subaru|Ascent 2019-21|All|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|Crosstrek 2020-21|EyeSight Driver Assistance|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|Forester 2019-21|All|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|Impreza 2017-19|EyeSight Driver Assistance|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|Impreza 2020-22|EyeSight Driver Assistance|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|Legacy 2020-22|All|Stock|0 mph|0 mph|[](##)|Subaru B|
+|Subaru|Outback 2020-22|All|Stock|0 mph|0 mph|[](##)|Subaru B|
+|Subaru|XV 2018-19|EyeSight Driver Assistance|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Subaru|XV 2020-21|EyeSight Driver Assistance|Stock|0 mph|0 mph|[](##)|Subaru A|
+|Škoda|Kamiq 2021[5 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Škoda|Karoq 2019-21[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Škoda|Kodiaq 2018-19|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Škoda|Octavia 2015, 2018-19|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Škoda|Octavia RS 2016|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Škoda|Scala 2020|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Škoda|Superb 2015-18|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Toyota|Alphard 2019-20|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Alphard Hybrid 2021|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Avalon 2016|Toyota Safety Sense P|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Toyota|Avalon 2017-18|All|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Toyota|Avalon 2019-21|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Avalon 2022|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Avalon Hybrid 2019-21|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Avalon Hybrid 2022|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|C-HR 2017-21|All|Stock|0 mph|0 mph|[](##)|Toyota|
+|Toyota|C-HR Hybrid 2017-19|All|Stock|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Camry 2018-20|All|Stock|0 mph[4 ](#footnotes)|0 mph|[](##)|Toyota|
+|Toyota|Camry 2021-22|All|openpilot|0 mph[4 ](#footnotes)|0 mph|[](##)|Toyota|
+|Toyota|Camry Hybrid 2018-20|All|Stock|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Camry Hybrid 2021-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Corolla 2017-19|All|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Toyota|Corolla 2020-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Corolla Cross (Non-US only) 2020-21|All|openpilot|17 mph|0 mph|[](##)|Toyota|
+|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|openpilot|17 mph|0 mph|[](##)|Toyota|
+|Toyota|Corolla Hatchback 2019-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Corolla Hybrid 2020-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Highlander 2017-19|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Highlander 2020-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Highlander Hybrid 2017-19|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Highlander Hybrid 2020-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Mirai 2021|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Prius 2016|Toyota Safety Sense P|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Prius 2017-20|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Prius 2021-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Prius Prime 2017-20|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Prius Prime 2021-22|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Prius v 2017|Toyota Safety Sense P|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 2016|Toyota Safety Sense P|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 2017-18|All|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 2019-21|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 2022|All|Stock|0 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 Hybrid 2017-18|All|Stock[3 ](#footnotes)|0 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 Hybrid 2019-21|All|openpilot|0 mph|0 mph|[](##)|Toyota|
+|Toyota|RAV4 Hybrid 2022|All|Stock|0 mph|0 mph|[](##)|Toyota|
+|Toyota|Sienna 2018-20|All|Stock[3 ](#footnotes)|19 mph|0 mph|[](##)|Toyota|
+|Volkswagen|Arteon 2018-22[7,8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Arteon eHybrid 2020-22[7,8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Arteon R 2020-22[7,8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Atlas 2018-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Atlas Cross Sport 2021-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|California 2021[7 ](#footnotes)|Driver Assistance|Stock|0 mph|31 mph|[](##)|J533|
+|Volkswagen|Caravelle 2020[7 ](#footnotes)|Driver Assistance|Stock|0 mph|31 mph|[](##)|J533|
+|Volkswagen|CC 2018-22[7,8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|e-Golf 2014-20|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf 2015-20[8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf Alltrack 2015-19|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf GTD 2015-20|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf GTE 2015-20|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf GTI 2015-21|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf R 2015-19[8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Golf SportsVan 2015-20|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
+|Volkswagen|Jetta 2018-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Jetta GLI 2021-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Passat 2015-22[6,7,8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Passat Alltrack 2015-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Passat GTE 2015-22[7,8 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Polo 2020-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Polo GTI 2020-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|T-Cross 2021[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|T-Roc 2021[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Taos 2022[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Teramont 2018-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Teramont Cross Sport 2021-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Teramont X 2021-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Tiguan 2019-22[7 ](#footnotes)|Driver Assistance|Stock|0 mph|0 mph|[](##)|J533|
+|Volkswagen|Touran 2017|Driver Assistance|Stock|0 mph|0 mph|[](##)|VW|
1 Requires a community built ASCM harness . NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).
@@ -241,13 +230,13 @@ Although they're not upstream, the community has openpilot running on other make
# Don't see your car here?
**openpilot can support many more cars than it currently does.** There are a few reasons your car may not be supported.
-If your car doesn't fit into any of the incompatibility criteria here, then there's a good chance it can be supported! We're adding support for new cars all the time. We don't have a roadmap for car support, and in fact, most car support comes from users like you!
+If your car doesn't fit into any of the incompatibility criteria here, then there's a good chance it can be supported! We're adding support for new cars all the time. **We don't have a roadmap for car support**, and in fact, most car support comes from users like you!
### Which cars are able to be supported?
-openpilot uses the existing steering, gas, and brake interfaces in your car. If your car lacks any one of these interfaces, openpilot will not be able to control the car. If your car has any form of [LKAS](https://en.wikipedia.org/wiki/Automated_Lane_Keeping_Systems)/[LCA](https://en.wikipedia.org/wiki/Lane_centering) and [ACC](https://en.wikipedia.org/wiki/Adaptive_cruise_control), then it almost certainly has these interfaces. These interfaces generally started shipping on cars around 2016.
+openpilot uses the existing steering, gas, and brake interfaces in your car. If your car lacks any one of these interfaces, openpilot will not be able to control the car. If your car has [ACC](https://en.wikipedia.org/wiki/Adaptive_cruise_control) and any form of [LKAS](https://en.wikipedia.org/wiki/Automated_Lane_Keeping_Systems)/[LCA](https://en.wikipedia.org/wiki/Lane_centering), then it almost certainly has these interfaces. These features generally started shipping on cars around 2016. Note that manufacturers will often make their own [marketing terms](https://en.wikipedia.org/wiki/Adaptive_cruise_control#Vehicle_models_supporting_adaptive_cruise_control) for these features, such as Hyundai's "Smart Cruise Control" branding of Adaptive Cruise Control.
-If your car has the following packages or features, then it's a good candidate for support. If it does not, then it's unlikely able to be supported.
+If your car has the following packages or features, then it's a good candidate for support.
| Make | Required Package/Features |
| ---- | ------------------------- |
@@ -265,8 +254,9 @@ All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wi
### Toyota Security
-Specific new Toyota models are shipping with a new message authentication method that openpilot does not yet support.
-So far, this list includes:
+openpilot does not yet support these Toyota models due to a new message authentication method.
+[Vote](https://comma.ai/shop/products/vote) if you'd like to see openpilot support on these models.
+
* Toyota RAV4 Prime 2021+
* Toyota Sienna 2021+
* Toyota Venza 2021+
@@ -275,4 +265,4 @@ So far, this list includes:
* Toyota Corolla Cross 2022+ (only US model)
* Lexus NX 2022+
* Toyota bZ4x 2023+
-* Subaru Solterra 2023+
\ No newline at end of file
+* Subaru Solterra 2023+
diff --git a/opendbc/Dockerfile b/opendbc/Dockerfile
index 860100a51..f3d5e546c 100644
--- a/opendbc/Dockerfile
+++ b/opendbc/Dockerfile
@@ -29,6 +29,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
python-openssl \
xz-utils \
zlib1g-dev \
+ cmake \
&& rm -rf /var/lib/apt/lists/*
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
diff --git a/opendbc/can/common.h b/opendbc/can/common.h
index edaf1c881..bcd04f65d 100644
--- a/opendbc/can/common.h
+++ b/opendbc/can/common.h
@@ -18,6 +18,7 @@
//#define DEBUG printf
#define MAX_BAD_COUNTER 5
+#define CAN_INVALID_CNT 5
void init_crc_lookup_tables();
@@ -68,6 +69,7 @@ public:
uint64_t last_sec = 0;
uint64_t last_nonempty_sec = 0;
uint64_t bus_timeout_threshold = 0;
+ uint64_t can_invalid_cnt = CAN_INVALID_CNT;
CANParser(int abus, const std::string& dbc_name,
const std::vector &options,
diff --git a/opendbc/can/libdbc.so b/opendbc/can/libdbc.so
index 6c0d56d4b..29d20a2d6 100755
Binary files a/opendbc/can/libdbc.so and b/opendbc/can/libdbc.so differ
diff --git a/opendbc/can/packer_pyx.so b/opendbc/can/packer_pyx.so
index 532aad481..d28c841fe 100755
Binary files a/opendbc/can/packer_pyx.so and b/opendbc/can/packer_pyx.so differ
diff --git a/opendbc/can/parser_pyx.cpp b/opendbc/can/parser_pyx.cpp
index c0097ba2a..751dc0f2e 100644
--- a/opendbc/can/parser_pyx.cpp
+++ b/opendbc/can/parser_pyx.cpp
@@ -964,7 +964,7 @@ struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr;
*/
typedef unsigned int (*__pyx_t_7opendbc_3can_6common_calc_checksum_type)(uint32_t, struct Signal const &, std::vector const &);
-/* "opendbc/can/parser_pyx.pyx":21
+/* "opendbc/can/parser_pyx.pyx":19
*
*
* cdef class CANParser: # <<<<<<<<<<<<<<
@@ -980,14 +980,11 @@ struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser {
std::vector can_values;
PyObject *vl;
PyObject *vl_all;
- bool can_valid;
- bool bus_timeout;
std::string dbc_name;
- int can_invalid_cnt;
};
-/* "opendbc/can/parser_pyx.pyx":151
+/* "opendbc/can/parser_pyx.pyx":145
*
*
* cdef class CANDefine(): # <<<<<<<<<<<<<<
@@ -1002,8 +999,8 @@ struct __pyx_obj_7opendbc_3can_10parser_pyx_CANDefine {
};
-/* "opendbc/can/parser_pyx.pyx":36
- * int can_invalid_cnt
+/* "opendbc/can/parser_pyx.pyx":31
+ * string dbc_name
*
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True): # <<<<<<<<<<<<<<
* if checks is None:
@@ -1017,7 +1014,7 @@ struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__ {
};
-/* "opendbc/can/parser_pyx.pyx":90
+/* "opendbc/can/parser_pyx.pyx":83
* unchecked = signal_addrs - checked_addrs
* if len(unchecked):
* err_msg = ', '.join(f"{self.address_to_msg_name[addr].decode()} ({hex(addr)})" for addr in unchecked) # <<<<<<<<<<<<<<
@@ -1031,7 +1028,7 @@ struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr {
};
-/* "opendbc/can/parser_pyx.pyx":100
+/* "opendbc/can/parser_pyx.pyx":93
* signal_options_v.push_back(spo)
*
* message_options = dict((address, 0) for _, address in signals) # <<<<<<<<<<<<<<
@@ -1047,7 +1044,7 @@ struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr {
-/* "opendbc/can/parser_pyx.pyx":21
+/* "opendbc/can/parser_pyx.pyx":19
*
*
* cdef class CANParser: # <<<<<<<<<<<<<<
@@ -1624,9 +1621,6 @@ static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *);
/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
-
/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
@@ -1781,7 +1775,6 @@ static PyTypeObject *__pyx_ptype_7opendbc_3can_10parser_pyx_CANDefine = 0;
static PyTypeObject *__pyx_ptype_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__ = 0;
static PyTypeObject *__pyx_ptype_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr = 0;
static PyTypeObject *__pyx_ptype_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr = 0;
-static int __pyx_v_7opendbc_3can_10parser_pyx_CAN_INVALID_CNT;
static std::string __pyx_convert_string_from_py_std__in_string(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyObject_string_to_py_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyUnicode_string_to_py_std__in_string(std::string const &); /*proto*/
@@ -1922,12 +1915,11 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___3genex
static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self, PyObject *__pyx_v_dbc_name, PyObject *__pyx_v_signals, PyObject *__pyx_v_checks, PyObject *__pyx_v_bus, PyObject *__pyx_v_enforce_checks); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self, PyObject *__pyx_v_dat, PyObject *__pyx_v_sendcan); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self, PyObject *__pyx_v_strings, PyObject *__pyx_v_sendcan); /* proto */
-static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2vl___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_6vl_all___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_9can_valid___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2vl___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_6vl_all___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8dbc_name___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_15can_invalid_cnt___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANDefine *__pyx_v_self, PyObject *__pyx_v_dbc_name); /* proto */
@@ -1956,8 +1948,8 @@ static PyObject *__pyx_tuple__9;
static PyObject *__pyx_tuple__10;
/* Late includes */
-/* "opendbc/can/parser_pyx.pyx":36
- * int can_invalid_cnt
+/* "opendbc/can/parser_pyx.pyx":31
+ * string dbc_name
*
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True): # <<<<<<<<<<<<<<
* if checks is None:
@@ -2010,7 +2002,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_1__init__(PyObject *__
case 1:
if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signals)) != 0)) kw_args--;
else {
- __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, 1); __PYX_ERR(0, 36, __pyx_L3_error)
+ __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, 1); __PYX_ERR(0, 31, __pyx_L3_error)
}
CYTHON_FALLTHROUGH;
case 2:
@@ -2032,7 +2024,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_1__init__(PyObject *__
}
}
if (unlikely(kw_args > 0)) {
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 36, __pyx_L3_error)
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 31, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2056,7 +2048,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_1__init__(PyObject *__
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 36, __pyx_L3_error)
+ __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 31, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
@@ -2070,7 +2062,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_1__init__(PyObject *__
}
static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
-/* "opendbc/can/parser_pyx.pyx":90
+/* "opendbc/can/parser_pyx.pyx":83
* unchecked = signal_addrs - checked_addrs
* if len(unchecked):
* err_msg = ', '.join(f"{self.address_to_msg_name[addr].decode()} ({hex(addr)})" for addr in unchecked) # <<<<<<<<<<<<<<
@@ -2090,7 +2082,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___genexp
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
- __PYX_ERR(0, 90, __pyx_L1_error)
+ __PYX_ERR(0, 83, __pyx_L1_error)
} else {
__Pyx_GOTREF(__pyx_cur_scope);
}
@@ -2098,7 +2090,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___genexp
__Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
{
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_init___locals_genexpr, __pyx_n_s_opendbc_can_parser_pyx); if (unlikely(!gen)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_init___locals_genexpr, __pyx_n_s_opendbc_can_parser_pyx); if (unlikely(!gen)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -2139,34 +2131,34 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2gener
return NULL;
}
__pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 90, __pyx_L1_error)
- __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 90, __pyx_L1_error)
+ if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 83, __pyx_L1_error)
+ __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
- if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked)) { __Pyx_RaiseClosureNameError("unchecked"); __PYX_ERR(0, 90, __pyx_L1_error) }
+ if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked)) { __Pyx_RaiseClosureNameError("unchecked"); __PYX_ERR(0, 83, __pyx_L1_error) }
if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked)) {
__pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
__pyx_t_3 = NULL;
} else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_unchecked); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 83, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_3)) {
if (likely(PyList_CheckExact(__pyx_t_1))) {
if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 83, __pyx_L1_error)
#else
- __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#endif
} else {
if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 83, __pyx_L1_error)
#else
- __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#endif
}
@@ -2176,7 +2168,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2gener
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 90, __pyx_L1_error)
+ else __PYX_ERR(0, 83, __pyx_L1_error)
}
break;
}
@@ -2186,13 +2178,13 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2gener
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_addr, __pyx_t_4);
__Pyx_GIVEREF(__pyx_t_4);
__pyx_t_4 = 0;
- __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_5 = 0;
__pyx_t_6 = 127;
- if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 90, __pyx_L1_error) }
- __pyx_t_7 = __Pyx_PyInt_As_uint32_t(__pyx_cur_scope->__pyx_v_addr); if (unlikely((__pyx_t_7 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L1_error)
- __pyx_t_8 = __Pyx_decode_cpp_string((__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->address_to_msg_name[__pyx_t_7]), 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 90, __pyx_L1_error)
+ if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 83, __pyx_L1_error) }
+ __pyx_t_7 = __Pyx_PyInt_As_uint32_t(__pyx_cur_scope->__pyx_v_addr); if (unlikely((__pyx_t_7 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L1_error)
+ __pyx_t_8 = __Pyx_decode_cpp_string((__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->address_to_msg_name[__pyx_t_7]), 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
__pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_6;
__pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
@@ -2203,9 +2195,9 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2gener
__pyx_t_5 += 2;
__Pyx_GIVEREF(__pyx_kp_u_);
PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_kp_u_);
- __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_hex, __pyx_cur_scope->__pyx_v_addr); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_hex, __pyx_cur_scope->__pyx_v_addr); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_8);
- __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
__pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_6;
@@ -2217,10 +2209,10 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2gener
__pyx_t_5 += 1;
__Pyx_GIVEREF(__pyx_kp_u__2);
PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_kp_u__2);
- __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 90, __pyx_L1_error)
+ if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -2247,7 +2239,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___2gener
}
static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
-/* "opendbc/can/parser_pyx.pyx":100
+/* "opendbc/can/parser_pyx.pyx":93
* signal_options_v.push_back(spo)
*
* message_options = dict((address, 0) for _, address in signals) # <<<<<<<<<<<<<<
@@ -2267,7 +2259,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___3genex
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr *)Py_None);
__Pyx_INCREF(Py_None);
- __PYX_ERR(0, 100, __pyx_L1_error)
+ __PYX_ERR(0, 93, __pyx_L1_error)
} else {
__Pyx_GOTREF(__pyx_cur_scope);
}
@@ -2275,7 +2267,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___3genex
__Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
__Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
{
- __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_init___locals_genexpr, __pyx_n_s_opendbc_can_parser_pyx); if (unlikely(!gen)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_init___locals_genexpr, __pyx_n_s_opendbc_can_parser_pyx); if (unlikely(!gen)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_DECREF(__pyx_cur_scope);
__Pyx_RefNannyFinishContext();
return (PyObject *) gen;
@@ -2315,34 +2307,34 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
return NULL;
}
__pyx_L3_first_run:;
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 100, __pyx_L1_error)
- __pyx_r = PyDict_New(); if (unlikely(!__pyx_r)) __PYX_ERR(0, 100, __pyx_L1_error)
+ if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 93, __pyx_L1_error)
+ __pyx_r = PyDict_New(); if (unlikely(!__pyx_r)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_r);
- if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals)) { __Pyx_RaiseClosureNameError("signals"); __PYX_ERR(0, 100, __pyx_L1_error) }
+ if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals)) { __Pyx_RaiseClosureNameError("signals"); __PYX_ERR(0, 93, __pyx_L1_error) }
if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals)) {
__pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
__pyx_t_3 = NULL;
} else {
- __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_signals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
- __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_3)) {
if (likely(PyList_CheckExact(__pyx_t_1))) {
if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 93, __pyx_L1_error)
#else
- __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#endif
} else {
if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 93, __pyx_L1_error)
#else
- __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
#endif
}
@@ -2352,7 +2344,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 100, __pyx_L1_error)
+ else __PYX_ERR(0, 93, __pyx_L1_error)
}
break;
}
@@ -2364,7 +2356,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
if (unlikely(size != 2)) {
if (size > 2) __Pyx_RaiseTooManyValuesError(2);
else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 100, __pyx_L1_error)
+ __PYX_ERR(0, 93, __pyx_L1_error)
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
if (likely(PyTuple_CheckExact(sequence))) {
@@ -2377,15 +2369,15 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
__Pyx_INCREF(__pyx_t_5);
__Pyx_INCREF(__pyx_t_6);
#else
- __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
#endif
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
} else {
Py_ssize_t index = -1;
- __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -2393,7 +2385,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
__Pyx_GOTREF(__pyx_t_5);
index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L6_unpacking_failed;
__Pyx_GOTREF(__pyx_t_6);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 100, __pyx_L1_error)
+ if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 93, __pyx_L1_error)
__pyx_t_8 = NULL;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
goto __pyx_L7_unpacking_done;
@@ -2401,7 +2393,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__pyx_t_8 = NULL;
if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 100, __pyx_L1_error)
+ __PYX_ERR(0, 93, __pyx_L1_error)
__pyx_L7_unpacking_done:;
}
__Pyx_XGOTREF(__pyx_cur_scope->__pyx_v__);
@@ -2412,7 +2404,7 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
__Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_address, __pyx_t_6);
__Pyx_GIVEREF(__pyx_t_6);
__pyx_t_6 = 0;
- if (unlikely(PyDict_SetItem(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_address, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 100, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_r, (PyObject*)__pyx_cur_scope->__pyx_v_address, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 93, __pyx_L1_error)
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
@@ -2438,8 +2430,8 @@ static PyObject *__pyx_gb_7opendbc_3can_10parser_pyx_9CANParser_8__init___5gener
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":36
- * int can_invalid_cnt
+/* "opendbc/can/parser_pyx.pyx":31
+ * string dbc_name
*
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True): # <<<<<<<<<<<<<<
* if checks is None:
@@ -2500,7 +2492,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
if (unlikely(!__pyx_cur_scope)) {
__pyx_cur_scope = ((struct __pyx_obj_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__ *)Py_None);
__Pyx_INCREF(Py_None);
- __PYX_ERR(0, 36, __pyx_L1_error)
+ __PYX_ERR(0, 31, __pyx_L1_error)
} else {
__Pyx_GOTREF(__pyx_cur_scope);
}
@@ -2513,7 +2505,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_INCREF(__pyx_v_checks);
__Pyx_INCREF(__pyx_v_enforce_checks);
- /* "opendbc/can/parser_pyx.pyx":37
+ /* "opendbc/can/parser_pyx.pyx":32
*
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
* if checks is None: # <<<<<<<<<<<<<<
@@ -2524,19 +2516,19 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
- /* "opendbc/can/parser_pyx.pyx":38
+ /* "opendbc/can/parser_pyx.pyx":33
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
* if checks is None:
* checks = [] # <<<<<<<<<<<<<<
*
* self.dbc_name = dbc_name
*/
- __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error)
+ __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_checks, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":37
+ /* "opendbc/can/parser_pyx.pyx":32
*
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
* if checks is None: # <<<<<<<<<<<<<<
@@ -2545,27 +2537,27 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":40
+ /* "opendbc/can/parser_pyx.pyx":35
* checks = []
*
* self.dbc_name = dbc_name # <<<<<<<<<<<<<<
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc:
*/
- __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 40, __pyx_L1_error)
+ __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 35, __pyx_L1_error)
__pyx_cur_scope->__pyx_v_self->dbc_name = __pyx_t_4;
- /* "opendbc/can/parser_pyx.pyx":41
+ /* "opendbc/can/parser_pyx.pyx":36
*
* self.dbc_name = dbc_name
* self.dbc = dbc_lookup(dbc_name) # <<<<<<<<<<<<<<
* if not self.dbc:
* raise RuntimeError(f"Can't find DBC: {dbc_name}")
*/
- __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 41, __pyx_L1_error)
+ __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L1_error)
__pyx_cur_scope->__pyx_v_self->dbc = dbc_lookup(__pyx_t_4);
- /* "opendbc/can/parser_pyx.pyx":42
+ /* "opendbc/can/parser_pyx.pyx":37
* self.dbc_name = dbc_name
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc: # <<<<<<<<<<<<<<
@@ -2575,26 +2567,26 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_2 = ((!(__pyx_cur_scope->__pyx_v_self->dbc != 0)) != 0);
if (unlikely(__pyx_t_2)) {
- /* "opendbc/can/parser_pyx.pyx":43
+ /* "opendbc/can/parser_pyx.pyx":38
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc:
* raise RuntimeError(f"Can't find DBC: {dbc_name}") # <<<<<<<<<<<<<<
*
* # dp - disable checks
*/
- __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_dbc_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_dbc_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Can_t_find_DBC, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 43, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Can_t_find_DBC, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 38, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 43, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __PYX_ERR(0, 43, __pyx_L1_error)
+ __PYX_ERR(0, 38, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":42
+ /* "opendbc/can/parser_pyx.pyx":37
* self.dbc_name = dbc_name
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc: # <<<<<<<<<<<<<<
@@ -2603,19 +2595,19 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":46
+ /* "opendbc/can/parser_pyx.pyx":41
*
* # dp - disable checks
* checks = [] # <<<<<<<<<<<<<<
* enforce_checks = False
*
*/
- __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error)
+ __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 41, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF_SET(__pyx_v_checks, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":47
+ /* "opendbc/can/parser_pyx.pyx":42
* # dp - disable checks
* checks = []
* enforce_checks = False # <<<<<<<<<<<<<<
@@ -2625,14 +2617,14 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_INCREF(Py_False);
__Pyx_DECREF_SET(__pyx_v_enforce_checks, Py_False);
- /* "opendbc/can/parser_pyx.pyx":49
+ /* "opendbc/can/parser_pyx.pyx":44
* enforce_checks = False
*
* self.vl = {} # <<<<<<<<<<<<<<
* self.vl_all = {}
- * self.can_valid = False
+ * msg_name_to_address = {}
*/
- __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->vl);
@@ -2640,14 +2632,14 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_cur_scope->__pyx_v_self->vl = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":50
+ /* "opendbc/can/parser_pyx.pyx":45
*
* self.vl = {}
* self.vl_all = {} # <<<<<<<<<<<<<<
- * self.can_valid = False
- * self.can_invalid_cnt = CAN_INVALID_CNT
+ * msg_name_to_address = {}
+ *
*/
- __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_3);
__Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->vl_all);
@@ -2655,37 +2647,19 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_cur_scope->__pyx_v_self->vl_all = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":51
+ /* "opendbc/can/parser_pyx.pyx":46
* self.vl = {}
* self.vl_all = {}
- * self.can_valid = False # <<<<<<<<<<<<<<
- * self.can_invalid_cnt = CAN_INVALID_CNT
- * msg_name_to_address = {}
- */
- __pyx_cur_scope->__pyx_v_self->can_valid = 0;
-
- /* "opendbc/can/parser_pyx.pyx":52
- * self.vl_all = {}
- * self.can_valid = False
- * self.can_invalid_cnt = CAN_INVALID_CNT # <<<<<<<<<<<<<<
- * msg_name_to_address = {}
- *
- */
- __pyx_cur_scope->__pyx_v_self->can_invalid_cnt = __pyx_v_7opendbc_3can_10parser_pyx_CAN_INVALID_CNT;
-
- /* "opendbc/can/parser_pyx.pyx":53
- * self.can_valid = False
- * self.can_invalid_cnt = CAN_INVALID_CNT
* msg_name_to_address = {} # <<<<<<<<<<<<<<
*
* for i in range(self.dbc[0].msgs.size()):
*/
- __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_v_msg_name_to_address = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":55
+ /* "opendbc/can/parser_pyx.pyx":48
* msg_name_to_address = {}
*
* for i in range(self.dbc[0].msgs.size()): # <<<<<<<<<<<<<<
@@ -2697,7 +2671,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
__pyx_v_i = __pyx_t_8;
- /* "opendbc/can/parser_pyx.pyx":56
+ /* "opendbc/can/parser_pyx.pyx":49
*
* for i in range(self.dbc[0].msgs.size()):
* msg = self.dbc[0].msgs[i] # <<<<<<<<<<<<<<
@@ -2706,60 +2680,60 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
__pyx_v_msg = ((__pyx_cur_scope->__pyx_v_self->dbc[0]).msgs[__pyx_v_i]);
- /* "opendbc/can/parser_pyx.pyx":57
+ /* "opendbc/can/parser_pyx.pyx":50
* for i in range(self.dbc[0].msgs.size()):
* msg = self.dbc[0].msgs[i]
* name = msg.name.decode('utf8') # <<<<<<<<<<<<<<
*
* msg_name_to_address[name] = msg.address
*/
- __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_msg.name, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_msg.name, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":59
+ /* "opendbc/can/parser_pyx.pyx":52
* name = msg.name.decode('utf8')
*
* msg_name_to_address[name] = msg.address # <<<<<<<<<<<<<<
* self.address_to_msg_name[msg.address] = name
* self.vl[msg.address] = {}
*/
- __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- if (unlikely(PyDict_SetItem(__pyx_v_msg_name_to_address, __pyx_v_name, __pyx_t_3) < 0)) __PYX_ERR(0, 59, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_v_msg_name_to_address, __pyx_v_name, __pyx_t_3) < 0)) __PYX_ERR(0, 52, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":60
+ /* "opendbc/can/parser_pyx.pyx":53
*
* msg_name_to_address[name] = msg.address
* self.address_to_msg_name[msg.address] = name # <<<<<<<<<<<<<<
* self.vl[msg.address] = {}
* self.vl[name] = self.vl[msg.address]
*/
- __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 60, __pyx_L1_error)
+ __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 53, __pyx_L1_error)
(__pyx_cur_scope->__pyx_v_self->address_to_msg_name[__pyx_v_msg.address]) = __pyx_t_4;
- /* "opendbc/can/parser_pyx.pyx":61
+ /* "opendbc/can/parser_pyx.pyx":54
* msg_name_to_address[name] = msg.address
* self.address_to_msg_name[msg.address] = name
* self.vl[msg.address] = {} # <<<<<<<<<<<<<<
* self.vl[name] = self.vl[msg.address]
* self.vl_all[msg.address] = defaultdict(list)
*/
- __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
if (unlikely(__pyx_cur_scope->__pyx_v_self->vl == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 61, __pyx_L1_error)
+ __PYX_ERR(0, 54, __pyx_L1_error)
}
- __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 61, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl, __pyx_t_5, __pyx_t_3) < 0)) __PYX_ERR(0, 61, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl, __pyx_t_5, __pyx_t_3) < 0)) __PYX_ERR(0, 54, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":62
+ /* "opendbc/can/parser_pyx.pyx":55
* self.address_to_msg_name[msg.address] = name
* self.vl[msg.address] = {}
* self.vl[name] = self.vl[msg.address] # <<<<<<<<<<<<<<
@@ -2768,28 +2742,28 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
if (unlikely(__pyx_cur_scope->__pyx_v_self->vl == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 62, __pyx_L1_error)
+ __PYX_ERR(0, 55, __pyx_L1_error)
}
- __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->vl, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->vl, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 55, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(__pyx_cur_scope->__pyx_v_self->vl == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 62, __pyx_L1_error)
+ __PYX_ERR(0, 55, __pyx_L1_error)
}
- if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 62, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl, __pyx_v_name, __pyx_t_5) < 0)) __PYX_ERR(0, 55, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":63
+ /* "opendbc/can/parser_pyx.pyx":56
* self.vl[msg.address] = {}
* self.vl[name] = self.vl[msg.address]
* self.vl_all[msg.address] = defaultdict(list) # <<<<<<<<<<<<<<
* self.vl_all[name] = self.vl_all[msg.address]
*
*/
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_9 = NULL;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -2803,20 +2777,20 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
}
__pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, ((PyObject *)(&PyList_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)(&PyList_Type)));
__Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
+ if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 56, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (unlikely(__pyx_cur_scope->__pyx_v_self->vl_all == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 63, __pyx_L1_error)
+ __PYX_ERR(0, 56, __pyx_L1_error)
}
- __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl_all, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 63, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl_all, __pyx_t_3, __pyx_t_5) < 0)) __PYX_ERR(0, 56, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":64
+ /* "opendbc/can/parser_pyx.pyx":57
* self.vl[name] = self.vl[msg.address]
* self.vl_all[msg.address] = defaultdict(list)
* self.vl_all[name] = self.vl_all[msg.address] # <<<<<<<<<<<<<<
@@ -2825,22 +2799,22 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
if (unlikely(__pyx_cur_scope->__pyx_v_self->vl_all == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 64, __pyx_L1_error)
+ __PYX_ERR(0, 57, __pyx_L1_error)
}
- __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_msg.address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 57, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->vl_all, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->vl_all, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (unlikely(__pyx_cur_scope->__pyx_v_self->vl_all == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 64, __pyx_L1_error)
+ __PYX_ERR(0, 57, __pyx_L1_error)
}
- if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl_all, __pyx_v_name, __pyx_t_3) < 0)) __PYX_ERR(0, 64, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_cur_scope->__pyx_v_self->vl_all, __pyx_v_name, __pyx_t_3) < 0)) __PYX_ERR(0, 57, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
- /* "opendbc/can/parser_pyx.pyx":67
+ /* "opendbc/can/parser_pyx.pyx":60
*
* # Convert message names into addresses
* for i in range(len(signals)): # <<<<<<<<<<<<<<
@@ -2849,75 +2823,75 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
__pyx_t_3 = __pyx_cur_scope->__pyx_v_signals;
__Pyx_INCREF(__pyx_t_3);
- __pyx_t_10 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 67, __pyx_L1_error)
+ __pyx_t_10 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 60, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_11 = __pyx_t_10;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_11; __pyx_t_6+=1) {
__pyx_v_i = __pyx_t_6;
- /* "opendbc/can/parser_pyx.pyx":68
+ /* "opendbc/can/parser_pyx.pyx":61
* # Convert message names into addresses
* for i in range(len(signals)):
* s = signals[i] # <<<<<<<<<<<<<<
* if not isinstance(s[1], numbers.Number):
* if name not in msg_name_to_address:
*/
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_signals, __pyx_v_i, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_cur_scope->__pyx_v_signals, __pyx_v_i, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":69
+ /* "opendbc/can/parser_pyx.pyx":62
* for i in range(len(signals)):
* s = signals[i]
* if not isinstance(s[1], numbers.Number): # <<<<<<<<<<<<<<
* if name not in msg_name_to_address:
* print(msg_name_to_address)
*/
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_s, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_s, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numbers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 69, __pyx_L1_error)
+ __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numbers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Number); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 69, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Number); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_2 = PyObject_IsInstance(__pyx_t_3, __pyx_t_9); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 69, __pyx_L1_error)
+ __pyx_t_2 = PyObject_IsInstance(__pyx_t_3, __pyx_t_9); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 62, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
if (__pyx_t_1) {
- /* "opendbc/can/parser_pyx.pyx":70
+ /* "opendbc/can/parser_pyx.pyx":63
* s = signals[i]
* if not isinstance(s[1], numbers.Number):
* if name not in msg_name_to_address: # <<<<<<<<<<<<<<
* print(msg_name_to_address)
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
*/
- if (unlikely(!__pyx_v_name)) { __Pyx_RaiseUnboundLocalError("name"); __PYX_ERR(0, 70, __pyx_L1_error) }
- __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_name, __pyx_v_msg_name_to_address, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 70, __pyx_L1_error)
+ if (unlikely(!__pyx_v_name)) { __Pyx_RaiseUnboundLocalError("name"); __PYX_ERR(0, 63, __pyx_L1_error) }
+ __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_name, __pyx_v_msg_name_to_address, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 63, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (unlikely(__pyx_t_2)) {
- /* "opendbc/can/parser_pyx.pyx":71
+ /* "opendbc/can/parser_pyx.pyx":64
* if not isinstance(s[1], numbers.Number):
* if name not in msg_name_to_address:
* print(msg_name_to_address) # <<<<<<<<<<<<<<
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
* s = (s[0], msg_name_to_address[s[1]])
*/
- __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_v_msg_name_to_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 71, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_v_msg_name_to_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 64, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- /* "opendbc/can/parser_pyx.pyx":72
+ /* "opendbc/can/parser_pyx.pyx":65
* if name not in msg_name_to_address:
* print(msg_name_to_address)
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}") # <<<<<<<<<<<<<<
* s = (s[0], msg_name_to_address[s[1]])
* signals[i] = s
*/
- __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 72, __pyx_L1_error)
+ __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_12 = 0;
__pyx_t_13 = 127;
@@ -2925,10 +2899,10 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_12 += 23;
__Pyx_GIVEREF(__pyx_kp_u_could_not_find_message);
PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_could_not_find_message);
- if (unlikely(!__pyx_v_name)) { __Pyx_RaiseUnboundLocalError("name"); __PYX_ERR(0, 72, __pyx_L1_error) }
- __pyx_t_3 = PyObject_Repr(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error)
+ if (unlikely(!__pyx_v_name)) { __Pyx_RaiseUnboundLocalError("name"); __PYX_ERR(0, 65, __pyx_L1_error) }
+ __pyx_t_3 = PyObject_Repr(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 72, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_13;
@@ -2940,9 +2914,9 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_12 += 8;
__Pyx_GIVEREF(__pyx_kp_u_in_DBC);
PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u_in_DBC);
- __pyx_t_5 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_cur_scope->__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 72, __pyx_L1_error)
+ __pyx_t_5 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_cur_scope->__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13;
@@ -2950,17 +2924,17 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_3);
__pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 72, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 72, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 65, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_Raise(__pyx_t_9, 0, 0, 0);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __PYX_ERR(0, 72, __pyx_L1_error)
+ __PYX_ERR(0, 65, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":70
+ /* "opendbc/can/parser_pyx.pyx":63
* s = signals[i]
* if not isinstance(s[1], numbers.Number):
* if name not in msg_name_to_address: # <<<<<<<<<<<<<<
@@ -2969,21 +2943,21 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":73
+ /* "opendbc/can/parser_pyx.pyx":66
* print(msg_name_to_address)
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
* s = (s[0], msg_name_to_address[s[1]]) # <<<<<<<<<<<<<<
* signals[i] = s
*
*/
- __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_s, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 73, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_s, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 66, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_s, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_s, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_msg_name_to_address, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 73, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_msg_name_to_address, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 66, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error)
+ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_9);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
@@ -2994,16 +2968,16 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_DECREF_SET(__pyx_v_s, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":74
+ /* "opendbc/can/parser_pyx.pyx":67
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
* s = (s[0], msg_name_to_address[s[1]])
* signals[i] = s # <<<<<<<<<<<<<<
*
* for i in range(len(checks)):
*/
- if (unlikely(__Pyx_SetItemInt(__pyx_cur_scope->__pyx_v_signals, __pyx_v_i, __pyx_v_s, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1) < 0)) __PYX_ERR(0, 74, __pyx_L1_error)
+ if (unlikely(__Pyx_SetItemInt(__pyx_cur_scope->__pyx_v_signals, __pyx_v_i, __pyx_v_s, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1) < 0)) __PYX_ERR(0, 67, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":69
+ /* "opendbc/can/parser_pyx.pyx":62
* for i in range(len(signals)):
* s = signals[i]
* if not isinstance(s[1], numbers.Number): # <<<<<<<<<<<<<<
@@ -3013,83 +2987,83 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
}
}
- /* "opendbc/can/parser_pyx.pyx":76
+ /* "opendbc/can/parser_pyx.pyx":69
* signals[i] = s
*
* for i in range(len(checks)): # <<<<<<<<<<<<<<
* c = checks[i]
* if not isinstance(c[0], numbers.Number):
*/
- __pyx_t_10 = PyObject_Length(__pyx_v_checks); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 76, __pyx_L1_error)
+ __pyx_t_10 = PyObject_Length(__pyx_v_checks); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 69, __pyx_L1_error)
__pyx_t_11 = __pyx_t_10;
for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_11; __pyx_t_6+=1) {
__pyx_v_i = __pyx_t_6;
- /* "opendbc/can/parser_pyx.pyx":77
+ /* "opendbc/can/parser_pyx.pyx":70
*
* for i in range(len(checks)):
* c = checks[i] # <<<<<<<<<<<<<<
* if not isinstance(c[0], numbers.Number):
* if c[0] not in msg_name_to_address:
*/
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_checks, __pyx_v_i, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_checks, __pyx_v_i, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":78
+ /* "opendbc/can/parser_pyx.pyx":71
* for i in range(len(checks)):
* c = checks[i]
* if not isinstance(c[0], numbers.Number): # <<<<<<<<<<<<<<
* if c[0] not in msg_name_to_address:
* print(msg_name_to_address)
*/
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 71, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numbers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 78, __pyx_L1_error)
+ __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_numbers); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 71, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Number); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 78, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Number); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 71, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_2 = PyObject_IsInstance(__pyx_t_3, __pyx_t_9); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 78, __pyx_L1_error)
+ __pyx_t_2 = PyObject_IsInstance(__pyx_t_3, __pyx_t_9); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 71, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
if (__pyx_t_1) {
- /* "opendbc/can/parser_pyx.pyx":79
+ /* "opendbc/can/parser_pyx.pyx":72
* c = checks[i]
* if not isinstance(c[0], numbers.Number):
* if c[0] not in msg_name_to_address: # <<<<<<<<<<<<<<
* print(msg_name_to_address)
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
*/
- __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 79, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 72, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_t_9, __pyx_v_msg_name_to_address, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 79, __pyx_L1_error)
+ __pyx_t_1 = (__Pyx_PyDict_ContainsTF(__pyx_t_9, __pyx_v_msg_name_to_address, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 72, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_2 = (__pyx_t_1 != 0);
if (unlikely(__pyx_t_2)) {
- /* "opendbc/can/parser_pyx.pyx":80
+ /* "opendbc/can/parser_pyx.pyx":73
* if not isinstance(c[0], numbers.Number):
* if c[0] not in msg_name_to_address:
* print(msg_name_to_address) # <<<<<<<<<<<<<<
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
* c = (msg_name_to_address[c[0]], c[1])
*/
- __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_v_msg_name_to_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 80, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_v_msg_name_to_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 73, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- /* "opendbc/can/parser_pyx.pyx":81
+ /* "opendbc/can/parser_pyx.pyx":74
* if c[0] not in msg_name_to_address:
* print(msg_name_to_address)
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}") # <<<<<<<<<<<<<<
* c = (msg_name_to_address[c[0]], c[1])
* checks[i] = c
*/
- __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 81, __pyx_L1_error)
+ __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__pyx_t_12 = 0;
__pyx_t_13 = 127;
@@ -3097,10 +3071,10 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_12 += 23;
__Pyx_GIVEREF(__pyx_kp_u_could_not_find_message);
PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_u_could_not_find_message);
- if (unlikely(!__pyx_v_name)) { __Pyx_RaiseUnboundLocalError("name"); __PYX_ERR(0, 81, __pyx_L1_error) }
- __pyx_t_3 = PyObject_Repr(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error)
+ if (unlikely(!__pyx_v_name)) { __Pyx_RaiseUnboundLocalError("name"); __PYX_ERR(0, 74, __pyx_L1_error) }
+ __pyx_t_3 = PyObject_Repr(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 81, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_13;
@@ -3112,9 +3086,9 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_12 += 8;
__Pyx_GIVEREF(__pyx_kp_u_in_DBC);
PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_kp_u_in_DBC);
- __pyx_t_5 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_cur_scope->__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 81, __pyx_L1_error)
+ __pyx_t_5 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_cur_scope->__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_13 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_13) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_13;
@@ -3122,17 +3096,17 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_3);
__pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 81, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 81, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 74, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_Raise(__pyx_t_9, 0, 0, 0);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __PYX_ERR(0, 81, __pyx_L1_error)
+ __PYX_ERR(0, 74, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":79
+ /* "opendbc/can/parser_pyx.pyx":72
* c = checks[i]
* if not isinstance(c[0], numbers.Number):
* if c[0] not in msg_name_to_address: # <<<<<<<<<<<<<<
@@ -3141,21 +3115,21 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":82
+ /* "opendbc/can/parser_pyx.pyx":75
* print(msg_name_to_address)
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
* c = (msg_name_to_address[c[0]], c[1]) # <<<<<<<<<<<<<<
* checks[i] = c
*
*/
- __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 82, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 75, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_msg_name_to_address, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 82, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_msg_name_to_address, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
- __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_c, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 82, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_c, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 75, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 82, __pyx_L1_error)
+ __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_3);
PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -3166,16 +3140,16 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_DECREF_SET(__pyx_v_c, __pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":83
+ /* "opendbc/can/parser_pyx.pyx":76
* raise RuntimeError(f"could not find message {repr(name)} in DBC {self.dbc_name}")
* c = (msg_name_to_address[c[0]], c[1])
* checks[i] = c # <<<<<<<<<<<<<<
*
* if enforce_checks:
*/
- if (unlikely(__Pyx_SetItemInt(__pyx_v_checks, __pyx_v_i, __pyx_v_c, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1) < 0)) __PYX_ERR(0, 83, __pyx_L1_error)
+ if (unlikely(__Pyx_SetItemInt(__pyx_v_checks, __pyx_v_i, __pyx_v_c, std::vector ::size_type, 0, __Pyx_PyInt_FromSize_t, 0, 0, 1) < 0)) __PYX_ERR(0, 76, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":78
+ /* "opendbc/can/parser_pyx.pyx":71
* for i in range(len(checks)):
* c = checks[i]
* if not isinstance(c[0], numbers.Number): # <<<<<<<<<<<<<<
@@ -3185,17 +3159,17 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
}
}
- /* "opendbc/can/parser_pyx.pyx":85
+ /* "opendbc/can/parser_pyx.pyx":78
* checks[i] = c
*
* if enforce_checks: # <<<<<<<<<<<<<<
* checked_addrs = {c[0] for c in checks}
* signal_addrs = {s[1] for s in signals}
*/
- __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_enforce_checks); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 85, __pyx_L1_error)
+ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_enforce_checks); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 78, __pyx_L1_error)
if (__pyx_t_2) {
- /* "opendbc/can/parser_pyx.pyx":86
+ /* "opendbc/can/parser_pyx.pyx":79
*
* if enforce_checks:
* checked_addrs = {c[0] for c in checks} # <<<<<<<<<<<<<<
@@ -3203,32 +3177,32 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
* unchecked = signal_addrs - checked_addrs
*/
{ /* enter inner scope */
- __pyx_t_5 = PySet_New(NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_5 = PySet_New(NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_5);
if (likely(PyList_CheckExact(__pyx_v_checks)) || PyTuple_CheckExact(__pyx_v_checks)) {
__pyx_t_9 = __pyx_v_checks; __Pyx_INCREF(__pyx_t_9); __pyx_t_10 = 0;
__pyx_t_14 = NULL;
} else {
- __pyx_t_10 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_v_checks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_10 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_v_checks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 79, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 79, __pyx_L18_error)
}
for (;;) {
if (likely(!__pyx_t_14)) {
if (likely(PyList_CheckExact(__pyx_t_9))) {
if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_9)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 79, __pyx_L18_error)
#else
- __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
#endif
} else {
if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 79, __pyx_L18_error)
#else
- __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
#endif
}
@@ -3238,7 +3212,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 86, __pyx_L18_error)
+ else __PYX_ERR(0, 79, __pyx_L18_error)
}
break;
}
@@ -3246,9 +3220,9 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
}
__Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_c, __pyx_t_3);
__pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_7genexpr__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 86, __pyx_L18_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_7genexpr__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L18_error)
__Pyx_GOTREF(__pyx_t_3);
- if (unlikely(PySet_Add(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 86, __pyx_L18_error)
+ if (unlikely(PySet_Add(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 79, __pyx_L18_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -3262,7 +3236,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_v_checked_addrs = ((PyObject*)__pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":87
+ /* "opendbc/can/parser_pyx.pyx":80
* if enforce_checks:
* checked_addrs = {c[0] for c in checks}
* signal_addrs = {s[1] for s in signals} # <<<<<<<<<<<<<<
@@ -3270,32 +3244,32 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
* if len(unchecked):
*/
{ /* enter inner scope */
- __pyx_t_5 = PySet_New(NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_5 = PySet_New(NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_5);
if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_signals)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_signals)) {
__pyx_t_9 = __pyx_cur_scope->__pyx_v_signals; __Pyx_INCREF(__pyx_t_9); __pyx_t_10 = 0;
__pyx_t_14 = NULL;
} else {
- __pyx_t_10 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_signals); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_10 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_signals); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 80, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 80, __pyx_L24_error)
}
for (;;) {
if (likely(!__pyx_t_14)) {
if (likely(PyList_CheckExact(__pyx_t_9))) {
if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_9)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_3 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 80, __pyx_L24_error)
#else
- __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_3);
#endif
} else {
if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_3); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 80, __pyx_L24_error)
#else
- __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_3);
#endif
}
@@ -3305,7 +3279,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 87, __pyx_L24_error)
+ else __PYX_ERR(0, 80, __pyx_L24_error)
}
break;
}
@@ -3313,9 +3287,9 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
}
__Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_s, __pyx_t_3);
__pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_GetItemInt(__pyx_8genexpr1__pyx_v_s, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L24_error)
+ __pyx_t_3 = __Pyx_GetItemInt(__pyx_8genexpr1__pyx_v_s, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 80, __pyx_L24_error)
__Pyx_GOTREF(__pyx_t_3);
- if (unlikely(PySet_Add(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 87, __pyx_L24_error)
+ if (unlikely(PySet_Add(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 80, __pyx_L24_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -3329,20 +3303,20 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_v_signal_addrs = ((PyObject*)__pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":88
+ /* "opendbc/can/parser_pyx.pyx":81
* checked_addrs = {c[0] for c in checks}
* signal_addrs = {s[1] for s in signals}
* unchecked = signal_addrs - checked_addrs # <<<<<<<<<<<<<<
* if len(unchecked):
* err_msg = ', '.join(f"{self.address_to_msg_name[addr].decode()} ({hex(addr)})" for addr in unchecked)
*/
- __pyx_t_5 = PyNumber_Subtract(__pyx_v_signal_addrs, __pyx_v_checked_addrs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 88, __pyx_L1_error)
+ __pyx_t_5 = PyNumber_Subtract(__pyx_v_signal_addrs, __pyx_v_checked_addrs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 81, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_GIVEREF(__pyx_t_5);
__pyx_cur_scope->__pyx_v_unchecked = __pyx_t_5;
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":89
+ /* "opendbc/can/parser_pyx.pyx":82
* signal_addrs = {s[1] for s in signals}
* unchecked = signal_addrs - checked_addrs
* if len(unchecked): # <<<<<<<<<<<<<<
@@ -3351,49 +3325,49 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
__pyx_t_5 = __pyx_cur_scope->__pyx_v_unchecked;
__Pyx_INCREF(__pyx_t_5);
- __pyx_t_10 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 89, __pyx_L1_error)
+ __pyx_t_10 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 82, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_t_2 = (__pyx_t_10 != 0);
if (unlikely(__pyx_t_2)) {
- /* "opendbc/can/parser_pyx.pyx":90
+ /* "opendbc/can/parser_pyx.pyx":83
* unchecked = signal_addrs - checked_addrs
* if len(unchecked):
* err_msg = ', '.join(f"{self.address_to_msg_name[addr].decode()} ({hex(addr)})" for addr in unchecked) # <<<<<<<<<<<<<<
* raise RuntimeError(f"Unchecked addrs: {err_msg}")
*
*/
- __pyx_t_5 = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_5 = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = PyUnicode_Join(__pyx_kp_u__3, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_t_5 = PyUnicode_Join(__pyx_kp_u__3, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_v_err_msg = ((PyObject*)__pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":91
+ /* "opendbc/can/parser_pyx.pyx":84
* if len(unchecked):
* err_msg = ', '.join(f"{self.address_to_msg_name[addr].decode()} ({hex(addr)})" for addr in unchecked)
* raise RuntimeError(f"Unchecked addrs: {err_msg}") # <<<<<<<<<<<<<<
*
* cdef vector[SignalParseOptions] signal_options_v
*/
- __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_err_msg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 91, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_err_msg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 84, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Unchecked_addrs, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 91, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Unchecked_addrs, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 84, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 91, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 84, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_Raise(__pyx_t_5, 0, 0, 0);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __PYX_ERR(0, 91, __pyx_L1_error)
+ __PYX_ERR(0, 84, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":89
+ /* "opendbc/can/parser_pyx.pyx":82
* signal_addrs = {s[1] for s in signals}
* unchecked = signal_addrs - checked_addrs
* if len(unchecked): # <<<<<<<<<<<<<<
@@ -3402,7 +3376,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":85
+ /* "opendbc/can/parser_pyx.pyx":78
* checks[i] = c
*
* if enforce_checks: # <<<<<<<<<<<<<<
@@ -3411,7 +3385,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":95
+ /* "opendbc/can/parser_pyx.pyx":88
* cdef vector[SignalParseOptions] signal_options_v
* cdef SignalParseOptions spo
* for sig_name, sig_address in signals: # <<<<<<<<<<<<<<
@@ -3422,26 +3396,26 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_5 = __pyx_cur_scope->__pyx_v_signals; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0;
__pyx_t_14 = NULL;
} else {
- __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_signals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_signals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 88, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_14 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_14 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 88, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_14)) {
if (likely(PyList_CheckExact(__pyx_t_5))) {
if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 88, __pyx_L1_error)
#else
- __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 88, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
#endif
} else {
if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 88, __pyx_L1_error)
#else
- __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 88, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
#endif
}
@@ -3451,7 +3425,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 95, __pyx_L1_error)
+ else __PYX_ERR(0, 88, __pyx_L1_error)
}
break;
}
@@ -3463,7 +3437,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
if (unlikely(size != 2)) {
if (size > 2) __Pyx_RaiseTooManyValuesError(2);
else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
- __PYX_ERR(0, 95, __pyx_L1_error)
+ __PYX_ERR(0, 88, __pyx_L1_error)
}
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
if (likely(PyTuple_CheckExact(sequence))) {
@@ -3476,15 +3450,15 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(__pyx_t_15);
#else
- __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_15 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_15 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 88, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_15);
#endif
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
} else {
Py_ssize_t index = -1;
- __pyx_t_16 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 95, __pyx_L1_error)
+ __pyx_t_16 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 88, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_16);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__pyx_t_17 = Py_TYPE(__pyx_t_16)->tp_iternext;
@@ -3492,7 +3466,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_GOTREF(__pyx_t_3);
index = 1; __pyx_t_15 = __pyx_t_17(__pyx_t_16); if (unlikely(!__pyx_t_15)) goto __pyx_L31_unpacking_failed;
__Pyx_GOTREF(__pyx_t_15);
- if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_16), 2) < 0) __PYX_ERR(0, 95, __pyx_L1_error)
+ if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_16), 2) < 0) __PYX_ERR(0, 88, __pyx_L1_error)
__pyx_t_17 = NULL;
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
goto __pyx_L32_unpacking_done;
@@ -3500,7 +3474,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
__pyx_t_17 = NULL;
if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
- __PYX_ERR(0, 95, __pyx_L1_error)
+ __PYX_ERR(0, 88, __pyx_L1_error)
__pyx_L32_unpacking_done:;
}
__Pyx_XDECREF_SET(__pyx_v_sig_name, __pyx_t_3);
@@ -3508,27 +3482,27 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_XDECREF_SET(__pyx_v_sig_address, __pyx_t_15);
__pyx_t_15 = 0;
- /* "opendbc/can/parser_pyx.pyx":96
+ /* "opendbc/can/parser_pyx.pyx":89
* cdef SignalParseOptions spo
* for sig_name, sig_address in signals:
* spo.address = sig_address # <<<<<<<<<<<<<<
* spo.name = sig_name
* signal_options_v.push_back(spo)
*/
- __pyx_t_18 = __Pyx_PyInt_As_uint32_t(__pyx_v_sig_address); if (unlikely((__pyx_t_18 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L1_error)
+ __pyx_t_18 = __Pyx_PyInt_As_uint32_t(__pyx_v_sig_address); if (unlikely((__pyx_t_18 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L1_error)
__pyx_v_spo.address = __pyx_t_18;
- /* "opendbc/can/parser_pyx.pyx":97
+ /* "opendbc/can/parser_pyx.pyx":90
* for sig_name, sig_address in signals:
* spo.address = sig_address
* spo.name = sig_name # <<<<<<<<<<<<<<
* signal_options_v.push_back(spo)
*
*/
- __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_sig_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 97, __pyx_L1_error)
+ __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_sig_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 90, __pyx_L1_error)
__pyx_v_spo.name = __pyx_t_4;
- /* "opendbc/can/parser_pyx.pyx":98
+ /* "opendbc/can/parser_pyx.pyx":91
* spo.address = sig_address
* spo.name = sig_name
* signal_options_v.push_back(spo) # <<<<<<<<<<<<<<
@@ -3539,10 +3513,10 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_v_signal_options_v.push_back(__pyx_v_spo);
} catch(...) {
__Pyx_CppExn2PyErr();
- __PYX_ERR(0, 98, __pyx_L1_error)
+ __PYX_ERR(0, 91, __pyx_L1_error)
}
- /* "opendbc/can/parser_pyx.pyx":95
+ /* "opendbc/can/parser_pyx.pyx":88
* cdef vector[SignalParseOptions] signal_options_v
* cdef SignalParseOptions spo
* for sig_name, sig_address in signals: # <<<<<<<<<<<<<<
@@ -3552,36 +3526,36 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":100
+ /* "opendbc/can/parser_pyx.pyx":93
* signal_options_v.push_back(spo)
*
* message_options = dict((address, 0) for _, address in signals) # <<<<<<<<<<<<<<
* message_options.update(dict(checks))
*
*/
- __pyx_t_5 = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___3genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_5 = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__init___3genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 100, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_Generator_Next(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__pyx_v_message_options = ((PyObject*)__pyx_t_9);
__pyx_t_9 = 0;
- /* "opendbc/can/parser_pyx.pyx":101
+ /* "opendbc/can/parser_pyx.pyx":94
*
* message_options = dict((address, 0) for _, address in signals)
* message_options.update(dict(checks)) # <<<<<<<<<<<<<<
*
* cdef vector[MessageParseOptions] message_options_v
*/
- __pyx_t_9 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_checks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 101, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_checks); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 94, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
- __pyx_t_5 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_message_options, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 101, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_message_options, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 94, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":105
+ /* "opendbc/can/parser_pyx.pyx":98
* cdef vector[MessageParseOptions] message_options_v
* cdef MessageParseOptions mpo
* for msg_address, freq in message_options.items(): # <<<<<<<<<<<<<<
@@ -3591,9 +3565,9 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_t_10 = 0;
if (unlikely(__pyx_v_message_options == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
- __PYX_ERR(0, 105, __pyx_L1_error)
+ __PYX_ERR(0, 98, __pyx_L1_error)
}
- __pyx_t_9 = __Pyx_dict_iterator(__pyx_v_message_options, 1, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_19)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L1_error)
+ __pyx_t_9 = __Pyx_dict_iterator(__pyx_v_message_options, 1, __pyx_n_s_items, (&__pyx_t_11), (&__pyx_t_19)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 98, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_XDECREF(__pyx_t_5);
__pyx_t_5 = __pyx_t_9;
@@ -3601,7 +3575,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
while (1) {
__pyx_t_20 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_11, &__pyx_t_10, &__pyx_t_9, &__pyx_t_15, NULL, __pyx_t_19);
if (unlikely(__pyx_t_20 == 0)) break;
- if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 105, __pyx_L1_error)
+ if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 98, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_9);
__Pyx_GOTREF(__pyx_t_15);
__Pyx_XDECREF_SET(__pyx_v_msg_address, __pyx_t_9);
@@ -3609,27 +3583,27 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__Pyx_XDECREF_SET(__pyx_v_freq, __pyx_t_15);
__pyx_t_15 = 0;
- /* "opendbc/can/parser_pyx.pyx":106
+ /* "opendbc/can/parser_pyx.pyx":99
* cdef MessageParseOptions mpo
* for msg_address, freq in message_options.items():
* mpo.address = msg_address # <<<<<<<<<<<<<<
* mpo.check_frequency = freq
* message_options_v.push_back(mpo)
*/
- __pyx_t_18 = __Pyx_PyInt_As_uint32_t(__pyx_v_msg_address); if (unlikely((__pyx_t_18 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L1_error)
+ __pyx_t_18 = __Pyx_PyInt_As_uint32_t(__pyx_v_msg_address); if (unlikely((__pyx_t_18 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L1_error)
__pyx_v_mpo.address = __pyx_t_18;
- /* "opendbc/can/parser_pyx.pyx":107
+ /* "opendbc/can/parser_pyx.pyx":100
* for msg_address, freq in message_options.items():
* mpo.address = msg_address
* mpo.check_frequency = freq # <<<<<<<<<<<<<<
* message_options_v.push_back(mpo)
*
*/
- __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_v_freq); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 107, __pyx_L1_error)
+ __pyx_t_20 = __Pyx_PyInt_As_int(__pyx_v_freq); if (unlikely((__pyx_t_20 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L1_error)
__pyx_v_mpo.check_frequency = __pyx_t_20;
- /* "opendbc/can/parser_pyx.pyx":108
+ /* "opendbc/can/parser_pyx.pyx":101
* mpo.address = msg_address
* mpo.check_frequency = freq
* message_options_v.push_back(mpo) # <<<<<<<<<<<<<<
@@ -3640,23 +3614,23 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
__pyx_v_message_options_v.push_back(__pyx_v_mpo);
} catch(...) {
__Pyx_CppExn2PyErr();
- __PYX_ERR(0, 108, __pyx_L1_error)
+ __PYX_ERR(0, 101, __pyx_L1_error)
}
}
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":110
+ /* "opendbc/can/parser_pyx.pyx":103
* message_options_v.push_back(mpo)
*
* self.can = new cpp_CANParser(bus, dbc_name, message_options_v, signal_options_v) # <<<<<<<<<<<<<<
* self.update_vl()
*
*/
- __pyx_t_19 = __Pyx_PyInt_As_int(__pyx_v_bus); if (unlikely((__pyx_t_19 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L1_error)
- __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L1_error)
+ __pyx_t_19 = __Pyx_PyInt_As_int(__pyx_v_bus); if (unlikely((__pyx_t_19 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L1_error)
+ __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L1_error)
__pyx_cur_scope->__pyx_v_self->can = new CANParser(__pyx_t_19, __pyx_t_4, __pyx_v_message_options_v, __pyx_v_signal_options_v);
- /* "opendbc/can/parser_pyx.pyx":111
+ /* "opendbc/can/parser_pyx.pyx":104
*
* self.can = new cpp_CANParser(bus, dbc_name, message_options_v, signal_options_v)
* self.update_vl() # <<<<<<<<<<<<<<
@@ -3665,8 +3639,8 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
*/
(void)(((struct __pyx_vtabstruct_7opendbc_3can_10parser_pyx_CANParser *)__pyx_cur_scope->__pyx_v_self->__pyx_vtab)->update_vl(__pyx_cur_scope->__pyx_v_self));
- /* "opendbc/can/parser_pyx.pyx":36
- * int can_invalid_cnt
+ /* "opendbc/can/parser_pyx.pyx":31
+ * string dbc_name
*
* def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True): # <<<<<<<<<<<<<<
* if checks is None:
@@ -3708,7 +3682,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser___init__(struct __pyx_
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":113
+/* "opendbc/can/parser_pyx.pyx":106
* self.update_vl()
*
* cdef unordered_set[uint32_t] update_vl(self): # <<<<<<<<<<<<<<
@@ -3723,77 +3697,19 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
PyObject *__pyx_v_cv_name = NULL;
std::unordered_set __pyx_r;
__Pyx_RefNannyDeclarations
- int __pyx_t_1;
- bool __pyx_t_2;
- std::vector ::iterator __pyx_t_3;
- struct SignalValue __pyx_t_4;
+ std::vector ::iterator __pyx_t_1;
+ struct SignalValue __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
PyObject *__pyx_t_5 = NULL;
PyObject *__pyx_t_6 = NULL;
- PyObject *__pyx_t_7 = NULL;
- PyObject *__pyx_t_8 = NULL;
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("update_vl", 0);
- /* "opendbc/can/parser_pyx.pyx":117
- *
- * # Update invalid flag
- * self.can_invalid_cnt += 1 # <<<<<<<<<<<<<<
- * if self.can.can_valid:
- * self.can_invalid_cnt = 0
- */
- __pyx_v_self->can_invalid_cnt = (__pyx_v_self->can_invalid_cnt + 1);
-
- /* "opendbc/can/parser_pyx.pyx":118
- * # Update invalid flag
- * self.can_invalid_cnt += 1
- * if self.can.can_valid: # <<<<<<<<<<<<<<
- * self.can_invalid_cnt = 0
- * self.can_valid = self.can_invalid_cnt < CAN_INVALID_CNT
- */
- __pyx_t_1 = (__pyx_v_self->can->can_valid != 0);
- if (__pyx_t_1) {
-
- /* "opendbc/can/parser_pyx.pyx":119
- * self.can_invalid_cnt += 1
- * if self.can.can_valid:
- * self.can_invalid_cnt = 0 # <<<<<<<<<<<<<<
- * self.can_valid = self.can_invalid_cnt < CAN_INVALID_CNT
- * self.bus_timeout = self.can.bus_timeout
- */
- __pyx_v_self->can_invalid_cnt = 0;
-
- /* "opendbc/can/parser_pyx.pyx":118
- * # Update invalid flag
- * self.can_invalid_cnt += 1
- * if self.can.can_valid: # <<<<<<<<<<<<<<
- * self.can_invalid_cnt = 0
- * self.can_valid = self.can_invalid_cnt < CAN_INVALID_CNT
- */
- }
-
- /* "opendbc/can/parser_pyx.pyx":120
- * if self.can.can_valid:
- * self.can_invalid_cnt = 0
- * self.can_valid = self.can_invalid_cnt < CAN_INVALID_CNT # <<<<<<<<<<<<<<
- * self.bus_timeout = self.can.bus_timeout
- *
- */
- __pyx_v_self->can_valid = (__pyx_v_self->can_invalid_cnt < __pyx_v_7opendbc_3can_10parser_pyx_CAN_INVALID_CNT);
-
- /* "opendbc/can/parser_pyx.pyx":121
- * self.can_invalid_cnt = 0
- * self.can_valid = self.can_invalid_cnt < CAN_INVALID_CNT
- * self.bus_timeout = self.can.bus_timeout # <<<<<<<<<<<<<<
- *
- * new_vals = self.can.query_latest()
- */
- __pyx_t_2 = __pyx_v_self->can->bus_timeout;
- __pyx_v_self->bus_timeout = __pyx_t_2;
-
- /* "opendbc/can/parser_pyx.pyx":123
- * self.bus_timeout = self.can.bus_timeout
+ /* "opendbc/can/parser_pyx.pyx":109
+ * cdef unordered_set[uint32_t] updated_addrs
*
* new_vals = self.can.query_latest() # <<<<<<<<<<<<<<
* for cv in new_vals:
@@ -3801,58 +3717,58 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
*/
__pyx_v_new_vals = __pyx_v_self->can->query_latest();
- /* "opendbc/can/parser_pyx.pyx":124
+ /* "opendbc/can/parser_pyx.pyx":110
*
* new_vals = self.can.query_latest()
* for cv in new_vals: # <<<<<<<<<<<<<<
* # Cast char * directly to unicode
* cv_name = cv.name
*/
- __pyx_t_3 = __pyx_v_new_vals.begin();
+ __pyx_t_1 = __pyx_v_new_vals.begin();
for (;;) {
- if (!(__pyx_t_3 != __pyx_v_new_vals.end())) break;
- __pyx_t_4 = *__pyx_t_3;
- ++__pyx_t_3;
- __pyx_v_cv = __pyx_t_4;
+ if (!(__pyx_t_1 != __pyx_v_new_vals.end())) break;
+ __pyx_t_2 = *__pyx_t_1;
+ ++__pyx_t_1;
+ __pyx_v_cv = __pyx_t_2;
- /* "opendbc/can/parser_pyx.pyx":126
+ /* "opendbc/can/parser_pyx.pyx":112
* for cv in new_vals:
* # Cast char * directly to unicode
* cv_name = cv.name # <<<<<<<<<<<<<<
* self.vl[cv.address][cv_name] = cv.value
* self.vl_all[cv.address][cv_name].extend(cv.all_values)
*/
- __pyx_t_5 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_v_cv.name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 126, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_5);
- __pyx_t_6 = __pyx_t_5;
- __Pyx_INCREF(__pyx_t_6);
- __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_XDECREF_SET(__pyx_v_cv_name, ((PyObject*)__pyx_t_6));
- __pyx_t_6 = 0;
+ __pyx_t_3 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_v_cv.name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = __pyx_t_3;
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_XDECREF_SET(__pyx_v_cv_name, ((PyObject*)__pyx_t_4));
+ __pyx_t_4 = 0;
- /* "opendbc/can/parser_pyx.pyx":127
+ /* "opendbc/can/parser_pyx.pyx":113
* # Cast char * directly to unicode
* cv_name = cv.name
* self.vl[cv.address][cv_name] = cv.value # <<<<<<<<<<<<<<
* self.vl_all[cv.address][cv_name].extend(cv.all_values)
* updated_addrs.insert(cv.address)
*/
- __pyx_t_6 = PyFloat_FromDouble(__pyx_v_cv.value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 127, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_4 = PyFloat_FromDouble(__pyx_v_cv.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 113, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
if (unlikely(__pyx_v_self->vl == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 127, __pyx_L1_error)
+ __PYX_ERR(0, 113, __pyx_L1_error)
}
- __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_cv.address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_cv.address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->vl, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 113, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_self->vl, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 127, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (unlikely(PyObject_SetItem(__pyx_t_5, __pyx_v_cv_name, __pyx_t_4) < 0)) __PYX_ERR(0, 113, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- if (unlikely(PyObject_SetItem(__pyx_t_7, __pyx_v_cv_name, __pyx_t_6) < 0)) __PYX_ERR(0, 127, __pyx_L1_error)
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "opendbc/can/parser_pyx.pyx":128
+ /* "opendbc/can/parser_pyx.pyx":114
* cv_name = cv.name
* self.vl[cv.address][cv_name] = cv.value
* self.vl_all[cv.address][cv_name].extend(cv.all_values) # <<<<<<<<<<<<<<
@@ -3861,40 +3777,40 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
*/
if (unlikely(__pyx_v_self->vl_all == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
- __PYX_ERR(0, 128, __pyx_L1_error)
+ __PYX_ERR(0, 114, __pyx_L1_error)
}
- __pyx_t_7 = __Pyx_PyInt_From_uint32_t(__pyx_v_cv.address); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_5 = __Pyx_PyDict_GetItem(__pyx_v_self->vl_all, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_cv.address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_v_cv_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_self->vl_all, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_extend); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_v_cv_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- __pyx_t_7 = __pyx_convert_vector_to_py_double(__pyx_v_cv.all_values); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_7);
- __pyx_t_8 = NULL;
- if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
- __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
- if (likely(__pyx_t_8)) {
- PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
- __Pyx_INCREF(__pyx_t_8);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_extend); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_t_5 = __pyx_convert_vector_to_py_double(__pyx_v_cv.all_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+ __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
+ if (likely(__pyx_t_6)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(function);
- __Pyx_DECREF_SET(__pyx_t_5, function);
+ __Pyx_DECREF_SET(__pyx_t_3, function);
}
}
- __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
- __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
- __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 128, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
- __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
- /* "opendbc/can/parser_pyx.pyx":129
+ /* "opendbc/can/parser_pyx.pyx":115
* self.vl[cv.address][cv_name] = cv.value
* self.vl_all[cv.address][cv_name].extend(cv.all_values)
* updated_addrs.insert(cv.address) # <<<<<<<<<<<<<<
@@ -3903,7 +3819,7 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
*/
(void)(__pyx_v_updated_addrs.insert(__pyx_v_cv.address));
- /* "opendbc/can/parser_pyx.pyx":124
+ /* "opendbc/can/parser_pyx.pyx":110
*
* new_vals = self.can.query_latest()
* for cv in new_vals: # <<<<<<<<<<<<<<
@@ -3912,7 +3828,7 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
*/
}
- /* "opendbc/can/parser_pyx.pyx":131
+ /* "opendbc/can/parser_pyx.pyx":117
* updated_addrs.insert(cv.address)
*
* return updated_addrs # <<<<<<<<<<<<<<
@@ -3922,7 +3838,7 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
__pyx_r = __pyx_v_updated_addrs;
goto __pyx_L0;
- /* "opendbc/can/parser_pyx.pyx":113
+ /* "opendbc/can/parser_pyx.pyx":106
* self.update_vl()
*
* cdef unordered_set[uint32_t] update_vl(self): # <<<<<<<<<<<<<<
@@ -3932,10 +3848,10 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
/* function exit code */
__pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
- __Pyx_XDECREF(__pyx_t_7);
- __Pyx_XDECREF(__pyx_t_8);
__Pyx_WriteUnraisable("opendbc.can.parser_pyx.CANParser.update_vl", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
__Pyx_pretend_to_initialize(&__pyx_r);
__pyx_L0:;
@@ -3944,7 +3860,7 @@ static std::unordered_set __pyx_f_7opendbc_3can_10parser_pyx_9CANPars
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":133
+/* "opendbc/can/parser_pyx.pyx":119
* return updated_addrs
*
* def update_string(self, dat, sendcan=False): # <<<<<<<<<<<<<<
@@ -3991,7 +3907,7 @@ static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_3update_string(P
}
}
if (unlikely(kw_args > 0)) {
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_string") < 0)) __PYX_ERR(0, 133, __pyx_L3_error)
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_string") < 0)) __PYX_ERR(0, 119, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4007,7 +3923,7 @@ static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_3update_string(P
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("update_string", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 133, __pyx_L3_error)
+ __Pyx_RaiseArgtupleInvalid("update_string", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 119, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.update_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
@@ -4039,7 +3955,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(s
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("update_string", 0);
- /* "opendbc/can/parser_pyx.pyx":134
+ /* "opendbc/can/parser_pyx.pyx":120
*
* def update_string(self, dat, sendcan=False):
* for v in self.vl_all.values(): # <<<<<<<<<<<<<<
@@ -4049,9 +3965,9 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(s
__pyx_t_2 = 0;
if (unlikely(__pyx_v_self->vl_all == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
- __PYX_ERR(0, 134, __pyx_L1_error)
+ __PYX_ERR(0, 120, __pyx_L1_error)
}
- __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_self->vl_all, 1, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 134, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_self->vl_all, 1, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 120, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
@@ -4059,19 +3975,19 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(s
while (1) {
__pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_5, NULL, __pyx_t_4);
if (unlikely(__pyx_t_6 == 0)) break;
- if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 134, __pyx_L1_error)
+ if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 120, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":135
+ /* "opendbc/can/parser_pyx.pyx":121
* def update_string(self, dat, sendcan=False):
* for v in self.vl_all.values():
* v.clear() # <<<<<<<<<<<<<<
*
* self.can.update_string(dat, sendcan)
*/
- __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_clear); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L1_error)
+ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_clear); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 121, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_8 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
@@ -4085,25 +4001,25 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(s
}
__pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L1_error)
+ if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 121, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "opendbc/can/parser_pyx.pyx":137
+ /* "opendbc/can/parser_pyx.pyx":123
* v.clear()
*
* self.can.update_string(dat, sendcan) # <<<<<<<<<<<<<<
* return self.update_vl()
*
*/
- __pyx_t_9 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dat); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L1_error)
- __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_sendcan); if (unlikely((__pyx_t_10 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L1_error)
+ __pyx_t_9 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dat); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 123, __pyx_L1_error)
+ __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_sendcan); if (unlikely((__pyx_t_10 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 123, __pyx_L1_error)
__pyx_v_self->can->update_string(__pyx_t_9, __pyx_t_10);
- /* "opendbc/can/parser_pyx.pyx":138
+ /* "opendbc/can/parser_pyx.pyx":124
*
* self.can.update_string(dat, sendcan)
* return self.update_vl() # <<<<<<<<<<<<<<
@@ -4111,13 +4027,13 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(s
* def update_strings(self, strings, sendcan=False):
*/
__Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_convert_unordered_set_to_py_uint32_t(((struct __pyx_vtabstruct_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self->__pyx_vtab)->update_vl(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error)
+ __pyx_t_1 = __pyx_convert_unordered_set_to_py_uint32_t(((struct __pyx_vtabstruct_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self->__pyx_vtab)->update_vl(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
- /* "opendbc/can/parser_pyx.pyx":133
+ /* "opendbc/can/parser_pyx.pyx":119
* return updated_addrs
*
* def update_string(self, dat, sendcan=False): # <<<<<<<<<<<<<<
@@ -4140,7 +4056,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2update_string(s
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":140
+/* "opendbc/can/parser_pyx.pyx":126
* return self.update_vl()
*
* def update_strings(self, strings, sendcan=False): # <<<<<<<<<<<<<<
@@ -4187,7 +4103,7 @@ static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_5update_strings(
}
}
if (unlikely(kw_args > 0)) {
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_strings") < 0)) __PYX_ERR(0, 140, __pyx_L3_error)
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update_strings") < 0)) __PYX_ERR(0, 126, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4203,7 +4119,7 @@ static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_5update_strings(
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("update_strings", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 140, __pyx_L3_error)
+ __Pyx_RaiseArgtupleInvalid("update_strings", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 126, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.update_strings", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
@@ -4238,7 +4154,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("update_strings", 0);
- /* "opendbc/can/parser_pyx.pyx":141
+ /* "opendbc/can/parser_pyx.pyx":127
*
* def update_strings(self, strings, sendcan=False):
* for v in self.vl_all.values(): # <<<<<<<<<<<<<<
@@ -4248,9 +4164,9 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
__pyx_t_2 = 0;
if (unlikely(__pyx_v_self->vl_all == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
- __PYX_ERR(0, 141, __pyx_L1_error)
+ __PYX_ERR(0, 127, __pyx_L1_error)
}
- __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_self->vl_all, 1, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 141, __pyx_L1_error)
+ __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_self->vl_all, 1, __pyx_n_s_values, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 127, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_1);
__pyx_t_1 = __pyx_t_5;
@@ -4258,19 +4174,19 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
while (1) {
__pyx_t_6 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, NULL, &__pyx_t_5, NULL, __pyx_t_4);
if (unlikely(__pyx_t_6 == 0)) break;
- if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 141, __pyx_L1_error)
+ if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 127, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":142
+ /* "opendbc/can/parser_pyx.pyx":128
* def update_strings(self, strings, sendcan=False):
* for v in self.vl_all.values():
* v.clear() # <<<<<<<<<<<<<<
*
* updated_addrs = set()
*/
- __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_clear); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 142, __pyx_L1_error)
+ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_v, __pyx_n_s_clear); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__pyx_t_8 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
@@ -4284,26 +4200,26 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
}
__pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
- if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 142, __pyx_L1_error)
+ if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 128, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "opendbc/can/parser_pyx.pyx":144
+ /* "opendbc/can/parser_pyx.pyx":130
* v.clear()
*
* updated_addrs = set() # <<<<<<<<<<<<<<
* for s in strings:
* self.can.update_string(s, sendcan)
*/
- __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
+ __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_updated_addrs = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
- /* "opendbc/can/parser_pyx.pyx":145
+ /* "opendbc/can/parser_pyx.pyx":131
*
* updated_addrs = set()
* for s in strings: # <<<<<<<<<<<<<<
@@ -4314,26 +4230,26 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
__pyx_t_1 = __pyx_v_strings; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
__pyx_t_9 = NULL;
} else {
- __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_strings); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_strings); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
- __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 131, __pyx_L1_error)
}
for (;;) {
if (likely(!__pyx_t_9)) {
if (likely(PyList_CheckExact(__pyx_t_1))) {
if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 131, __pyx_L1_error)
#else
- __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#endif
} else {
if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 131, __pyx_L1_error)
#else
- __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 145, __pyx_L1_error)
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 131, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#endif
}
@@ -4343,7 +4259,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 145, __pyx_L1_error)
+ else __PYX_ERR(0, 131, __pyx_L1_error)
}
break;
}
@@ -4352,32 +4268,32 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
__Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_5);
__pyx_t_5 = 0;
- /* "opendbc/can/parser_pyx.pyx":146
+ /* "opendbc/can/parser_pyx.pyx":132
* updated_addrs = set()
* for s in strings:
* self.can.update_string(s, sendcan) # <<<<<<<<<<<<<<
* updated_addrs.update(self.update_vl())
* return updated_addrs
*/
- __pyx_t_10 = __pyx_convert_string_from_py_std__in_string(__pyx_v_s); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 146, __pyx_L1_error)
- __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_sendcan); if (unlikely((__pyx_t_11 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 146, __pyx_L1_error)
+ __pyx_t_10 = __pyx_convert_string_from_py_std__in_string(__pyx_v_s); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 132, __pyx_L1_error)
+ __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_sendcan); if (unlikely((__pyx_t_11 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 132, __pyx_L1_error)
__pyx_v_self->can->update_string(__pyx_t_10, __pyx_t_11);
- /* "opendbc/can/parser_pyx.pyx":147
+ /* "opendbc/can/parser_pyx.pyx":133
* for s in strings:
* self.can.update_string(s, sendcan)
* updated_addrs.update(self.update_vl()) # <<<<<<<<<<<<<<
* return updated_addrs
*
*/
- __pyx_t_5 = __pyx_convert_unordered_set_to_py_uint32_t(((struct __pyx_vtabstruct_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self->__pyx_vtab)->update_vl(__pyx_v_self)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error)
+ __pyx_t_5 = __pyx_convert_unordered_set_to_py_uint32_t(((struct __pyx_vtabstruct_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self->__pyx_vtab)->update_vl(__pyx_v_self)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
- __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PySet_Type_update, __pyx_v_updated_addrs, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 147, __pyx_L1_error)
+ __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PySet_Type_update, __pyx_v_updated_addrs, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 133, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
- /* "opendbc/can/parser_pyx.pyx":145
+ /* "opendbc/can/parser_pyx.pyx":131
*
* updated_addrs = set()
* for s in strings: # <<<<<<<<<<<<<<
@@ -4387,19 +4303,19 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
- /* "opendbc/can/parser_pyx.pyx":148
+ /* "opendbc/can/parser_pyx.pyx":134
* self.can.update_string(s, sendcan)
* updated_addrs.update(self.update_vl())
* return updated_addrs # <<<<<<<<<<<<<<
*
- *
+ * @property
*/
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_updated_addrs);
__pyx_r = __pyx_v_updated_addrs;
goto __pyx_L0;
- /* "opendbc/can/parser_pyx.pyx":140
+ /* "opendbc/can/parser_pyx.pyx":126
* return self.update_vl()
*
* def update_strings(self, strings, sendcan=False): # <<<<<<<<<<<<<<
@@ -4424,12 +4340,138 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_4update_strings(
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":29
+/* "opendbc/can/parser_pyx.pyx":137
+ *
+ * @property
+ * def can_valid(self): # <<<<<<<<<<<<<<
+ * return self.can.can_valid
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_9can_valid_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_9can_valid_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_9can_valid___get__(((struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_9can_valid___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "opendbc/can/parser_pyx.pyx":138
+ * @property
+ * def can_valid(self):
+ * return self.can.can_valid # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->can->can_valid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "opendbc/can/parser_pyx.pyx":137
+ *
+ * @property
+ * def can_valid(self): # <<<<<<<<<<<<<<
+ * return self.can.can_valid
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.can_valid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "opendbc/can/parser_pyx.pyx":141
+ *
+ * @property
+ * def bus_timeout(self): # <<<<<<<<<<<<<<
+ * return self.can.bus_timeout
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout___get__(((struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "opendbc/can/parser_pyx.pyx":142
+ * @property
+ * def bus_timeout(self):
+ * return self.can.bus_timeout # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->can->bus_timeout); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "opendbc/can/parser_pyx.pyx":141
+ *
+ * @property
+ * def bus_timeout(self): # <<<<<<<<<<<<<<
+ * return self.can.bus_timeout
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.bus_timeout.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "opendbc/can/parser_pyx.pyx":27
*
* cdef readonly:
* dict vl # <<<<<<<<<<<<<<
* dict vl_all
- * bool can_valid
+ * string dbc_name
*/
/* Python wrapper */
@@ -4461,12 +4503,12 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_2vl___get__(stru
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":30
+/* "opendbc/can/parser_pyx.pyx":28
* cdef readonly:
* dict vl
* dict vl_all # <<<<<<<<<<<<<<
- * bool can_valid
- * bool bus_timeout
+ * string dbc_name
+ *
*/
/* Python wrapper */
@@ -4498,106 +4540,12 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_6vl_all___get__(
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":31
+/* "opendbc/can/parser_pyx.pyx":29
* dict vl
* dict vl_all
- * bool can_valid # <<<<<<<<<<<<<<
- * bool bus_timeout
- * string dbc_name
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_9can_valid_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_9can_valid_1__get__(PyObject *__pyx_v_self) {
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
- __pyx_r = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_9can_valid___get__(((struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self));
-
- /* function exit code */
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
-}
-
-static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_9can_valid___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self) {
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("__get__", 0);
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->can_valid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
-
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.can_valid.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
-}
-
-/* "opendbc/can/parser_pyx.pyx":32
- * dict vl_all
- * bool can_valid
- * bool bus_timeout # <<<<<<<<<<<<<<
- * string dbc_name
- * int can_invalid_cnt
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout_1__get__(PyObject *__pyx_v_self) {
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
- __pyx_r = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout___get__(((struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self));
-
- /* function exit code */
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
-}
-
-static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self) {
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("__get__", 0);
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->bus_timeout); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
-
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.bus_timeout.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
-}
-
-/* "opendbc/can/parser_pyx.pyx":33
- * bool can_valid
- * bool bus_timeout
* string dbc_name # <<<<<<<<<<<<<<
- * int can_invalid_cnt
*
+ * def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
*/
/* Python wrapper */
@@ -4622,7 +4570,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8dbc_name___get_
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error)
+ __pyx_t_1 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
@@ -4639,53 +4587,6 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8dbc_name___get_
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":34
- * bool bus_timeout
- * string dbc_name
- * int can_invalid_cnt # <<<<<<<<<<<<<<
- *
- * def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
- */
-
-/* Python wrapper */
-static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_15can_invalid_cnt_1__get__(PyObject *__pyx_v_self); /*proto*/
-static PyObject *__pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_15can_invalid_cnt_1__get__(PyObject *__pyx_v_self) {
- PyObject *__pyx_r = 0;
- __Pyx_RefNannyDeclarations
- __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
- __pyx_r = __pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_15can_invalid_cnt___get__(((struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *)__pyx_v_self));
-
- /* function exit code */
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
-}
-
-static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_15can_invalid_cnt___get__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *__pyx_v_self) {
- PyObject *__pyx_r = NULL;
- __Pyx_RefNannyDeclarations
- PyObject *__pyx_t_1 = NULL;
- int __pyx_lineno = 0;
- const char *__pyx_filename = NULL;
- int __pyx_clineno = 0;
- __Pyx_RefNannySetupContext("__get__", 0);
- __Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->can_invalid_cnt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
- __Pyx_GOTREF(__pyx_t_1);
- __pyx_r = __pyx_t_1;
- __pyx_t_1 = 0;
- goto __pyx_L0;
-
- /* function exit code */
- __pyx_L1_error:;
- __Pyx_XDECREF(__pyx_t_1);
- __Pyx_AddTraceback("opendbc.can.parser_pyx.CANParser.can_invalid_cnt.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
- __pyx_r = NULL;
- __pyx_L0:;
- __Pyx_XGIVEREF(__pyx_r);
- __Pyx_RefNannyFinishContext();
- return __pyx_r;
-}
-
/* "(tree fragment)":1
* def __reduce_cython__(self): # <<<<<<<<<<<<<<
* raise TypeError("self.can,self.dbc cannot be converted to a Python object for pickling")
@@ -4799,7 +4700,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANParser_8__setstate_cyth
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":159
+/* "opendbc/can/parser_pyx.pyx":153
* string dbc_name
*
* def __init__(self, dbc_name): # <<<<<<<<<<<<<<
@@ -4836,7 +4737,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANDefine_1__init__(PyObject *__
else goto __pyx_L5_argtuple_error;
}
if (unlikely(kw_args > 0)) {
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 159, __pyx_L3_error)
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 153, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
goto __pyx_L5_argtuple_error;
@@ -4847,7 +4748,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANDefine_1__init__(PyObject *__
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
- __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 159, __pyx_L3_error)
+ __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 153, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("opendbc.can.parser_pyx.CANDefine.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
@@ -4862,7 +4763,7 @@ static int __pyx_pw_7opendbc_3can_10parser_pyx_9CANDefine_1__init__(PyObject *__
static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANDefine *__pyx_v_self, PyObject *__pyx_v_dbc_name) {
PyObject *__pyx_v_address_to_msg_name = NULL;
- std::vector ::size_type __pyx_v_i;
+ std::vector ::size_type __pyx_v_i;
struct Msg __pyx_v_msg;
PyObject *__pyx_v_name = NULL;
uint32_t __pyx_v_address;
@@ -4884,7 +4785,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
PyObject *__pyx_t_6 = NULL;
std::vector ::size_type __pyx_t_7;
std::vector ::size_type __pyx_t_8;
- std::vector ::size_type __pyx_t_9;
+ std::vector ::size_type __pyx_t_9;
uint32_t __pyx_t_10;
PyObject *__pyx_t_11 = NULL;
std::vector ::size_type __pyx_t_12;
@@ -4895,27 +4796,27 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("__init__", 0);
- /* "opendbc/can/parser_pyx.pyx":160
+ /* "opendbc/can/parser_pyx.pyx":154
*
* def __init__(self, dbc_name):
* self.dbc_name = dbc_name # <<<<<<<<<<<<<<
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc:
*/
- __pyx_t_1 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 160, __pyx_L1_error)
+ __pyx_t_1 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 154, __pyx_L1_error)
__pyx_v_self->dbc_name = __pyx_t_1;
- /* "opendbc/can/parser_pyx.pyx":161
+ /* "opendbc/can/parser_pyx.pyx":155
* def __init__(self, dbc_name):
* self.dbc_name = dbc_name
* self.dbc = dbc_lookup(dbc_name) # <<<<<<<<<<<<<<
* if not self.dbc:
* raise RuntimeError(f"Can't find DBC: '{dbc_name}'")
*/
- __pyx_t_1 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 161, __pyx_L1_error)
+ __pyx_t_1 = __pyx_convert_string_from_py_std__in_string(__pyx_v_dbc_name); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 155, __pyx_L1_error)
__pyx_v_self->dbc = dbc_lookup(__pyx_t_1);
- /* "opendbc/can/parser_pyx.pyx":162
+ /* "opendbc/can/parser_pyx.pyx":156
* self.dbc_name = dbc_name
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc: # <<<<<<<<<<<<<<
@@ -4925,14 +4826,14 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__pyx_t_2 = ((!(__pyx_v_self->dbc != 0)) != 0);
if (unlikely(__pyx_t_2)) {
- /* "opendbc/can/parser_pyx.pyx":163
+ /* "opendbc/can/parser_pyx.pyx":157
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc:
* raise RuntimeError(f"Can't find DBC: '{dbc_name}'") # <<<<<<<<<<<<<<
*
* address_to_msg_name = {}
*/
- __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error)
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = 0;
__pyx_t_5 = 127;
@@ -4940,7 +4841,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__pyx_t_4 += 17;
__Pyx_GIVEREF(__pyx_kp_u_Can_t_find_DBC_2);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Can_t_find_DBC_2);
- __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_dbc_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 163, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_dbc_name, __pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) > __pyx_t_5) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) : __pyx_t_5;
__pyx_t_4 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
@@ -4951,17 +4852,17 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__pyx_t_4 += 1;
__Pyx_GIVEREF(__pyx_kp_u__6);
PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__6);
- __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 163, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 157, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_Raise(__pyx_t_3, 0, 0, 0);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
- __PYX_ERR(0, 163, __pyx_L1_error)
+ __PYX_ERR(0, 157, __pyx_L1_error)
- /* "opendbc/can/parser_pyx.pyx":162
+ /* "opendbc/can/parser_pyx.pyx":156
* self.dbc_name = dbc_name
* self.dbc = dbc_lookup(dbc_name)
* if not self.dbc: # <<<<<<<<<<<<<<
@@ -4970,19 +4871,19 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
*/
}
- /* "opendbc/can/parser_pyx.pyx":165
+ /* "opendbc/can/parser_pyx.pyx":159
* raise RuntimeError(f"Can't find DBC: '{dbc_name}'")
*
* address_to_msg_name = {} # <<<<<<<<<<<<<<
*
* for i in range(self.dbc[0].msgs.size()):
*/
- __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_v_address_to_msg_name = ((PyObject*)__pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":167
+ /* "opendbc/can/parser_pyx.pyx":161
* address_to_msg_name = {}
*
* for i in range(self.dbc[0].msgs.size()): # <<<<<<<<<<<<<<
@@ -4994,7 +4895,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
__pyx_v_i = __pyx_t_9;
- /* "opendbc/can/parser_pyx.pyx":168
+ /* "opendbc/can/parser_pyx.pyx":162
*
* for i in range(self.dbc[0].msgs.size()):
* msg = self.dbc[0].msgs[i] # <<<<<<<<<<<<<<
@@ -5003,19 +4904,19 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
*/
__pyx_v_msg = ((__pyx_v_self->dbc[0]).msgs[__pyx_v_i]);
- /* "opendbc/can/parser_pyx.pyx":169
+ /* "opendbc/can/parser_pyx.pyx":163
* for i in range(self.dbc[0].msgs.size()):
* msg = self.dbc[0].msgs[i]
* name = msg.name.decode('utf8') # <<<<<<<<<<<<<<
* address = msg.address
* address_to_msg_name[address] = name
*/
- __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_msg.name, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_msg.name, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":170
+ /* "opendbc/can/parser_pyx.pyx":164
* msg = self.dbc[0].msgs[i]
* name = msg.name.decode('utf8')
* address = msg.address # <<<<<<<<<<<<<<
@@ -5025,27 +4926,27 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__pyx_t_10 = __pyx_v_msg.address;
__pyx_v_address = __pyx_t_10;
- /* "opendbc/can/parser_pyx.pyx":171
+ /* "opendbc/can/parser_pyx.pyx":165
* name = msg.name.decode('utf8')
* address = msg.address
* address_to_msg_name[address] = name # <<<<<<<<<<<<<<
*
* dv = defaultdict(dict)
*/
- __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- if (unlikely(PyDict_SetItem(__pyx_v_address_to_msg_name, __pyx_t_3, __pyx_v_name) < 0)) __PYX_ERR(0, 171, __pyx_L1_error)
+ if (unlikely(PyDict_SetItem(__pyx_v_address_to_msg_name, __pyx_t_3, __pyx_v_name) < 0)) __PYX_ERR(0, 165, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
- /* "opendbc/can/parser_pyx.pyx":173
+ /* "opendbc/can/parser_pyx.pyx":167
* address_to_msg_name[address] = name
*
* dv = defaultdict(dict) # <<<<<<<<<<<<<<
*
* for i in range(self.dbc[0].vals.size()):
*/
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 173, __pyx_L1_error)
+ __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_defaultdict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 167, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_11 = NULL;
if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
@@ -5059,25 +4960,25 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
}
__pyx_t_3 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_11, ((PyObject *)(&PyDict_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)(&PyDict_Type)));
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 173, __pyx_L1_error)
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_v_dv = __pyx_t_3;
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":175
+ /* "opendbc/can/parser_pyx.pyx":169
* dv = defaultdict(dict)
*
* for i in range(self.dbc[0].vals.size()): # <<<<<<<<<<<<<<
* val = self.dbc[0].vals[i]
*
*/
- __pyx_t_9 = (__pyx_v_self->dbc[0]).vals.size();
- __pyx_t_12 = __pyx_t_9;
- for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
- __pyx_v_i = __pyx_t_13;
+ __pyx_t_12 = (__pyx_v_self->dbc[0]).vals.size();
+ __pyx_t_13 = __pyx_t_12;
+ for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_13; __pyx_t_7+=1) {
+ __pyx_v_i = __pyx_t_7;
- /* "opendbc/can/parser_pyx.pyx":176
+ /* "opendbc/can/parser_pyx.pyx":170
*
* for i in range(self.dbc[0].vals.size()):
* val = self.dbc[0].vals[i] # <<<<<<<<<<<<<<
@@ -5086,31 +4987,31 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
*/
__pyx_v_val = ((__pyx_v_self->dbc[0]).vals[__pyx_v_i]);
- /* "opendbc/can/parser_pyx.pyx":178
+ /* "opendbc/can/parser_pyx.pyx":172
* val = self.dbc[0].vals[i]
*
* sgname = val.name.decode('utf8') # <<<<<<<<<<<<<<
* def_val = val.def_val.decode('utf8')
* address = val.address
*/
- __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_val.name, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_val.name, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_sgname, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":179
+ /* "opendbc/can/parser_pyx.pyx":173
*
* sgname = val.name.decode('utf8')
* def_val = val.def_val.decode('utf8') # <<<<<<<<<<<<<<
* address = val.address
* msgname = address_to_msg_name[address]
*/
- __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_val.def_val, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_decode_cpp_string(__pyx_v_val.def_val, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 173, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_XDECREF_SET(__pyx_v_def_val, __pyx_t_3);
__pyx_t_3 = 0;
- /* "opendbc/can/parser_pyx.pyx":180
+ /* "opendbc/can/parser_pyx.pyx":174
* sgname = val.name.decode('utf8')
* def_val = val.def_val.decode('utf8')
* address = val.address # <<<<<<<<<<<<<<
@@ -5120,29 +5021,29 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__pyx_t_10 = __pyx_v_val.address;
__pyx_v_address = __pyx_t_10;
- /* "opendbc/can/parser_pyx.pyx":181
+ /* "opendbc/can/parser_pyx.pyx":175
* def_val = val.def_val.decode('utf8')
* address = val.address
* msgname = address_to_msg_name[address] # <<<<<<<<<<<<<<
*
* # separate definition/value pairs
*/
- __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 175, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
- __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_address_to_msg_name, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 181, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_PyDict_GetItem(__pyx_v_address_to_msg_name, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 175, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_XDECREF_SET(__pyx_v_msgname, __pyx_t_6);
__pyx_t_6 = 0;
- /* "opendbc/can/parser_pyx.pyx":184
+ /* "opendbc/can/parser_pyx.pyx":178
*
* # separate definition/value pairs
* def_val = def_val.split() # <<<<<<<<<<<<<<
* values = [int(v) for v in def_val[::2]]
* defs = def_val[1::2]
*/
- __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_def_val, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_def_val, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_11 = NULL;
if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -5156,13 +5057,13 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
}
__pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 184, __pyx_L1_error)
+ if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 178, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v_def_val, __pyx_t_6);
__pyx_t_6 = 0;
- /* "opendbc/can/parser_pyx.pyx":185
+ /* "opendbc/can/parser_pyx.pyx":179
* # separate definition/value pairs
* def_val = def_val.split()
* values = [int(v) for v in def_val[::2]] # <<<<<<<<<<<<<<
@@ -5170,17 +5071,17 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
*
*/
{ /* enter inner scope */
- __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_6);
- __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_def_val, __pyx_slice__7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_def_val, __pyx_slice__7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_3);
if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
__pyx_t_11 = __pyx_t_3; __Pyx_INCREF(__pyx_t_11); __pyx_t_4 = 0;
__pyx_t_14 = NULL;
} else {
- __pyx_t_4 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_4 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_11);
- __pyx_t_14 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_14 = Py_TYPE(__pyx_t_11)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 179, __pyx_L10_error)
}
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
for (;;) {
@@ -5188,17 +5089,17 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
if (likely(PyList_CheckExact(__pyx_t_11))) {
if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_11)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_3 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 179, __pyx_L10_error)
#else
- __pyx_t_3 = PySequence_ITEM(__pyx_t_11, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_11, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_3);
#endif
} else {
if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_11)) break;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
- __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 179, __pyx_L10_error)
#else
- __pyx_t_3 = PySequence_ITEM(__pyx_t_11, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_11, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_3);
#endif
}
@@ -5208,7 +5109,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
PyObject* exc_type = PyErr_Occurred();
if (exc_type) {
if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
- else __PYX_ERR(0, 185, __pyx_L10_error)
+ else __PYX_ERR(0, 179, __pyx_L10_error)
}
break;
}
@@ -5216,9 +5117,9 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
}
__Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_v, __pyx_t_3);
__pyx_t_3 = 0;
- __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_8genexpr4__pyx_v_v); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L10_error)
+ __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_8genexpr4__pyx_v_v); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_GOTREF(__pyx_t_3);
- if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 185, __pyx_L10_error)
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 179, __pyx_L10_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
}
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
@@ -5232,26 +5133,26 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__Pyx_XDECREF_SET(__pyx_v_values, ((PyObject*)__pyx_t_6));
__pyx_t_6 = 0;
- /* "opendbc/can/parser_pyx.pyx":186
+ /* "opendbc/can/parser_pyx.pyx":180
* def_val = def_val.split()
* values = [int(v) for v in def_val[::2]]
* defs = def_val[1::2] # <<<<<<<<<<<<<<
*
* # two ways to lookup: address or msg name
*/
- __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_def_val, __pyx_slice__8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 186, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_def_val, __pyx_slice__8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 180, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_XDECREF_SET(__pyx_v_defs, __pyx_t_6);
__pyx_t_6 = 0;
- /* "opendbc/can/parser_pyx.pyx":189
+ /* "opendbc/can/parser_pyx.pyx":183
*
* # two ways to lookup: address or msg name
* dv[address][sgname] = dict(zip(values, defs)) # <<<<<<<<<<<<<<
* dv[msgname][sgname] = dv[address][sgname]
*
*/
- __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 189, __pyx_L1_error)
+ __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_INCREF(__pyx_v_values);
__Pyx_GIVEREF(__pyx_v_values);
@@ -5259,43 +5160,43 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__Pyx_INCREF(__pyx_v_defs);
__Pyx_GIVEREF(__pyx_v_defs);
PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_defs);
- __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_6, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 189, __pyx_L1_error)
+ __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_6, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 189, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
- __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_dv, __pyx_v_address, uint32_t, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 189, __pyx_L1_error)
+ __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_dv, __pyx_v_address, uint32_t, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
- if (unlikely(PyObject_SetItem(__pyx_t_11, __pyx_v_sgname, __pyx_t_6) < 0)) __PYX_ERR(0, 189, __pyx_L1_error)
+ if (unlikely(PyObject_SetItem(__pyx_t_11, __pyx_v_sgname, __pyx_t_6) < 0)) __PYX_ERR(0, 183, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- /* "opendbc/can/parser_pyx.pyx":190
+ /* "opendbc/can/parser_pyx.pyx":184
* # 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)
*/
- __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_dv, __pyx_v_address, uint32_t, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 190, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_dv, __pyx_v_address, uint32_t, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
- __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_sgname); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 190, __pyx_L1_error)
+ __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_sgname); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
- __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_dv, __pyx_v_msgname); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 190, __pyx_L1_error)
+ __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_dv, __pyx_v_msgname); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 184, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
- if (unlikely(PyObject_SetItem(__pyx_t_6, __pyx_v_sgname, __pyx_t_11) < 0)) __PYX_ERR(0, 190, __pyx_L1_error)
+ if (unlikely(PyObject_SetItem(__pyx_t_6, __pyx_v_sgname, __pyx_t_11) < 0)) __PYX_ERR(0, 184, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
}
- /* "opendbc/can/parser_pyx.pyx":192
+ /* "opendbc/can/parser_pyx.pyx":186
* dv[msgname][sgname] = dv[address][sgname]
*
* self.dv = dict(dv) # <<<<<<<<<<<<<<
*/
- __pyx_t_11 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_dv); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 192, __pyx_L1_error)
+ __pyx_t_11 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_dv); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 186, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_GIVEREF(__pyx_t_11);
__Pyx_GOTREF(__pyx_v_self->dv);
@@ -5303,7 +5204,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
__pyx_v_self->dv = ((PyObject*)__pyx_t_11);
__pyx_t_11 = 0;
- /* "opendbc/can/parser_pyx.pyx":159
+ /* "opendbc/can/parser_pyx.pyx":153
* string dbc_name
*
* def __init__(self, dbc_name): # <<<<<<<<<<<<<<
@@ -5334,7 +5235,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine___init__(struct __pyx_
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":156
+/* "opendbc/can/parser_pyx.pyx":150
*
* cdef public:
* dict dv # <<<<<<<<<<<<<<
@@ -5392,7 +5293,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine_2dv_2__set__(struct __
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("__set__", 0);
- if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 156, __pyx_L1_error)
+ if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 150, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
@@ -5442,7 +5343,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine_2dv_4__del__(struct __
return __pyx_r;
}
-/* "opendbc/can/parser_pyx.pyx":157
+/* "opendbc/can/parser_pyx.pyx":151
* cdef public:
* dict dv
* string dbc_name # <<<<<<<<<<<<<<
@@ -5472,7 +5373,7 @@ static PyObject *__pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine_8dbc_name___get_
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
- __pyx_t_1 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error)
+ __pyx_t_1 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->dbc_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
@@ -5510,7 +5411,7 @@ static int __pyx_pf_7opendbc_3can_10parser_pyx_9CANDefine_8dbc_name_2__set__(str
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
__Pyx_RefNannySetupContext("__set__", 0);
- __pyx_t_1 = __pyx_convert_string_from_py_std__in_string(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L1_error)
+ __pyx_t_1 = __pyx_convert_string_from_py_std__in_string(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 151, __pyx_L1_error)
__pyx_v_self->dbc_name = __pyx_t_1;
/* function exit code */
@@ -6182,14 +6083,6 @@ static int __pyx_tp_clear_7opendbc_3can_10parser_pyx_CANParser(PyObject *o) {
return 0;
}
-static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl(PyObject *o, CYTHON_UNUSED void *x) {
- return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_2vl_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl_all(PyObject *o, CYTHON_UNUSED void *x) {
- return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_6vl_all_1__get__(o);
-}
-
static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_can_valid(PyObject *o, CYTHON_UNUSED void *x) {
return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_9can_valid_1__get__(o);
}
@@ -6198,12 +6091,16 @@ static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_bus_timeout
return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_11bus_timeout_1__get__(o);
}
-static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_dbc_name(PyObject *o, CYTHON_UNUSED void *x) {
- return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_8dbc_name_1__get__(o);
+static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_2vl_1__get__(o);
}
-static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_can_invalid_cnt(PyObject *o, CYTHON_UNUSED void *x) {
- return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_15can_invalid_cnt_1__get__(o);
+static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl_all(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_6vl_all_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_dbc_name(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_7opendbc_3can_10parser_pyx_9CANParser_8dbc_name_1__get__(o);
}
static PyMethodDef __pyx_methods_7opendbc_3can_10parser_pyx_CANParser[] = {
@@ -6215,12 +6112,11 @@ static PyMethodDef __pyx_methods_7opendbc_3can_10parser_pyx_CANParser[] = {
};
static struct PyGetSetDef __pyx_getsets_7opendbc_3can_10parser_pyx_CANParser[] = {
- {(char *)"vl", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl, 0, (char *)0, 0},
- {(char *)"vl_all", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl_all, 0, (char *)0, 0},
{(char *)"can_valid", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_can_valid, 0, (char *)0, 0},
{(char *)"bus_timeout", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_bus_timeout, 0, (char *)0, 0},
+ {(char *)"vl", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl, 0, (char *)0, 0},
+ {(char *)"vl_all", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_vl_all, 0, (char *)0, 0},
{(char *)"dbc_name", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_dbc_name, 0, (char *)0, 0},
- {(char *)"can_invalid_cnt", __pyx_getprop_7opendbc_3can_10parser_pyx_9CANParser_can_invalid_cnt, 0, (char *)0, 0},
{0, 0, 0, 0, 0}
};
@@ -6922,12 +6818,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
{0, 0, 0, 0, 0, 0, 0}
};
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
- __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 43, __pyx_L1_error)
- __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 55, __pyx_L1_error)
- __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 71, __pyx_L1_error)
- __pyx_builtin_hex = __Pyx_GetBuiltinName(__pyx_n_s_hex); if (!__pyx_builtin_hex) __PYX_ERR(0, 90, __pyx_L1_error)
+ __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 38, __pyx_L1_error)
+ __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 48, __pyx_L1_error)
+ __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 64, __pyx_L1_error)
+ __pyx_builtin_hex = __Pyx_GetBuiltinName(__pyx_n_s_hex); if (!__pyx_builtin_hex) __PYX_ERR(0, 83, __pyx_L1_error)
__pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error)
- __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 189, __pyx_L1_error)
+ __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) __PYX_ERR(0, 183, __pyx_L1_error)
return 0;
__pyx_L1_error:;
return -1;
@@ -6956,25 +6852,25 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
__Pyx_GOTREF(__pyx_tuple__5);
__Pyx_GIVEREF(__pyx_tuple__5);
- /* "opendbc/can/parser_pyx.pyx":185
+ /* "opendbc/can/parser_pyx.pyx":179
* # separate definition/value pairs
* def_val = def_val.split()
* values = [int(v) for v in def_val[::2]] # <<<<<<<<<<<<<<
* defs = def_val[1::2]
*
*/
- __pyx_slice__7 = PySlice_New(Py_None, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__7)) __PYX_ERR(0, 185, __pyx_L1_error)
+ __pyx_slice__7 = PySlice_New(Py_None, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__7)) __PYX_ERR(0, 179, __pyx_L1_error)
__Pyx_GOTREF(__pyx_slice__7);
__Pyx_GIVEREF(__pyx_slice__7);
- /* "opendbc/can/parser_pyx.pyx":186
+ /* "opendbc/can/parser_pyx.pyx":180
* def_val = def_val.split()
* values = [int(v) for v in def_val[::2]]
* defs = def_val[1::2] # <<<<<<<<<<<<<<
*
* # two ways to lookup: address or msg name
*/
- __pyx_slice__8 = PySlice_New(__pyx_int_1, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 186, __pyx_L1_error)
+ __pyx_slice__8 = PySlice_New(__pyx_int_1, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 180, __pyx_L1_error)
__Pyx_GOTREF(__pyx_slice__8);
__Pyx_GIVEREF(__pyx_slice__8);
@@ -7056,28 +6952,28 @@ static int __Pyx_modinit_type_init_code(void) {
/*--- Type init code ---*/
__pyx_vtabptr_7opendbc_3can_10parser_pyx_CANParser = &__pyx_vtable_7opendbc_3can_10parser_pyx_CANParser;
__pyx_vtable_7opendbc_3can_10parser_pyx_CANParser.update_vl = (std::unordered_set (*)(struct __pyx_obj_7opendbc_3can_10parser_pyx_CANParser *))__pyx_f_7opendbc_3can_10parser_pyx_9CANParser_update_vl;
- if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
+ if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
#if PY_VERSION_HEX < 0x030800B1
__pyx_type_7opendbc_3can_10parser_pyx_CANParser.tp_print = 0;
#endif
if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7opendbc_3can_10parser_pyx_CANParser.tp_dictoffset && __pyx_type_7opendbc_3can_10parser_pyx_CANParser.tp_getattro == PyObject_GenericGetAttr)) {
__pyx_type_7opendbc_3can_10parser_pyx_CANParser.tp_getattro = __Pyx_PyObject_GenericGetAttr;
}
- if (__Pyx_SetVtable(__pyx_type_7opendbc_3can_10parser_pyx_CANParser.tp_dict, __pyx_vtabptr_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
- if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CANParser, (PyObject *)&__pyx_type_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
- if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
+ if (__Pyx_SetVtable(__pyx_type_7opendbc_3can_10parser_pyx_CANParser.tp_dict, __pyx_vtabptr_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+ if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CANParser, (PyObject *)&__pyx_type_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+ if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7opendbc_3can_10parser_pyx_CANParser) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
__pyx_ptype_7opendbc_3can_10parser_pyx_CANParser = &__pyx_type_7opendbc_3can_10parser_pyx_CANParser;
- if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx_CANDefine) < 0) __PYX_ERR(0, 151, __pyx_L1_error)
+ if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx_CANDefine) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
#if PY_VERSION_HEX < 0x030800B1
__pyx_type_7opendbc_3can_10parser_pyx_CANDefine.tp_print = 0;
#endif
if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7opendbc_3can_10parser_pyx_CANDefine.tp_dictoffset && __pyx_type_7opendbc_3can_10parser_pyx_CANDefine.tp_getattro == PyObject_GenericGetAttr)) {
__pyx_type_7opendbc_3can_10parser_pyx_CANDefine.tp_getattro = __Pyx_PyObject_GenericGetAttr;
}
- if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CANDefine, (PyObject *)&__pyx_type_7opendbc_3can_10parser_pyx_CANDefine) < 0) __PYX_ERR(0, 151, __pyx_L1_error)
- if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7opendbc_3can_10parser_pyx_CANDefine) < 0) __PYX_ERR(0, 151, __pyx_L1_error)
+ if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CANDefine, (PyObject *)&__pyx_type_7opendbc_3can_10parser_pyx_CANDefine) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
+ if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7opendbc_3can_10parser_pyx_CANDefine) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
__pyx_ptype_7opendbc_3can_10parser_pyx_CANDefine = &__pyx_type_7opendbc_3can_10parser_pyx_CANDefine;
- if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__) < 0) __PYX_ERR(0, 36, __pyx_L1_error)
+ if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
#if PY_VERSION_HEX < 0x030800B1
__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__.tp_print = 0;
#endif
@@ -7085,7 +6981,7 @@ static int __Pyx_modinit_type_init_code(void) {
__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
}
__pyx_ptype_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__ = &__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct____init__;
- if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
+ if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
#if PY_VERSION_HEX < 0x030800B1
__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr.tp_print = 0;
#endif
@@ -7093,7 +6989,7 @@ static int __Pyx_modinit_type_init_code(void) {
__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
}
__pyx_ptype_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr = &__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_1_genexpr;
- if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr) < 0) __PYX_ERR(0, 100, __pyx_L1_error)
+ if (PyType_Ready(&__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr) < 0) __PYX_ERR(0, 93, __pyx_L1_error)
#if PY_VERSION_HEX < 0x030800B1
__pyx_type_7opendbc_3can_10parser_pyx___pyx_scope_struct_2_genexpr.tp_print = 0;
#endif
@@ -7362,7 +7258,7 @@ if (!__Pyx_RefNanny) {
* import numbers
* from collections import defaultdict # <<<<<<<<<<<<<<
*
- * cdef int CAN_INVALID_CNT = 5
+ *
*/
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
@@ -7378,15 +7274,6 @@ if (!__Pyx_RefNanny) {
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
- /* "opendbc/can/parser_pyx.pyx":18
- * from collections import defaultdict
- *
- * cdef int CAN_INVALID_CNT = 5 # <<<<<<<<<<<<<<
- *
- *
- */
- __pyx_v_7opendbc_3can_10parser_pyx_CAN_INVALID_CNT = 5;
-
/* "opendbc/can/parser_pyx.pyx":1
* # distutils: language = c++ # <<<<<<<<<<<<<<
* # cython: c_string_encoding=ascii, language_level=3
@@ -10074,44 +9961,6 @@ raise_neg_overflow:
return (int) -1;
}
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wconversion"
-#endif
- const int neg_one = (int) -1, const_zero = (int) 0;
-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
-#pragma GCC diagnostic pop
-#endif
- const int is_unsigned = neg_one > const_zero;
- if (is_unsigned) {
- if (sizeof(int) < sizeof(long)) {
- return PyInt_FromLong((long) value);
- } else if (sizeof(int) <= sizeof(unsigned long)) {
- return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
- } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
- return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
- }
- } else {
- if (sizeof(int) <= sizeof(long)) {
- return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
- } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
- return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
- }
- }
- {
- int one = 1; int little = (int)*(unsigned char *)&one;
- unsigned char *bytes = (unsigned char *)&value;
- return _PyLong_FromByteArray(bytes, sizeof(int),
- little, !is_unsigned);
- }
-}
-
/* CIntFromPy */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
diff --git a/opendbc/can/parser_pyx.so b/opendbc/can/parser_pyx.so
index bd47c2e69..89ec8f733 100755
Binary files a/opendbc/can/parser_pyx.so and b/opendbc/can/parser_pyx.so differ
diff --git a/opendbc/generator/gm/gm_global_a_powertrain.dbc b/opendbc/generator/gm/gm_global_a_powertrain.dbc
index 85bdc438f..2b6866b3f 100644
--- a/opendbc/generator/gm/gm_global_a_powertrain.dbc
+++ b/opendbc/generator/gm/gm_global_a_powertrain.dbc
@@ -73,6 +73,7 @@ BO_ 201 ECMEngineStatus: 8 K20_ECM
SG_ CruiseMainOn : 29|1@0+ (1,0) [0|1] "" NEO
SG_ Brake_Pressed : 40|1@0+ (1,0) [0|1] "" NEO
SG_ Standstill : 2|1@0+ (1,0) [0|1] "" NEO
+ SG_ CruiseActive : 31|2@0+ (1,0) [0|3] "" NEO
BO_ 209 EBCMBrakePedalSensors: 7 K17_EBCM
SG_ Counter1 : 7|2@0+ (1,0) [0|3] "" XXX
@@ -191,9 +192,10 @@ BO_ 789 EBCMFrictionBrakeCmd: 5 K124_ASCM
BO_ 800 AEBCmd: 6 K124_ASCM
SG_ RollingCounter : 5|2@0+ (1,0) [0|3] "" NEO
- SG_ Checksum : 27|20@0+ (1,0) [0|2047] "" NEO
- SG_ BrakeCmdActive : 3|1@1+ (1,0) [0|1] "" NEO
- SG_ BrakingForce : 2|7@0+ (1,0) [0|7] "" NEO
+ SG_ AEBChecksum : 27|20@0+ (1,0) [0|0] "" NEO
+ SG_ AEBCmdActive : 3|1@1+ (1,0) [0|1] "" NEO
+ SG_ AEBCmd : 2|11@0+ (1,0) [0|0] "" NEO
+ SG_ AEBCmd2 : 23|8@0+ (1,0) [0|0] "" NEO
BO_ 810 TCICOnStarGPSPosition: 8 K73_TCIC
SG_ GPSLongitude : 39|32@0+ (1,-2147483648) [0|0] "milliarcsecond" NEO
@@ -219,8 +221,13 @@ BO_ 880 ASCMActiveCruiseControlStatus: 6 K124_ASCM
SG_ ACCCmdActive : 23|1@0+ (1,0) [0|0] "" NEO
SG_ FCWAlert : 41|2@0+ (1,0) [0|3] "" XXX
+BO_ 977 ECMCruiseControl: 8 K20_ECM
+ SG_ CruiseActive : 39|1@0+ (1,0) [0|3] "" NEO
+ SG_ CruiseSetSpeed : 19|12@0+ (0.0625,0) [0|0] "km/h" NEO
+
BO_ 1001 ECMVehicleSpeed: 8 K20_ECM
SG_ VehicleSpeed : 7|16@0+ (0.01,0) [0|0] "mph" NEO
+ SG_ VehicleSpeedLeft : 39|16@0+ (0.01,0) [0|0] "mph" NEO
BO_ 1033 ASCMKeepAlive: 7 NEO
SG_ ASCMKeepAliveAllZero : 7|56@0+ (1,0) [0|0] "" NEO
@@ -265,6 +272,7 @@ CM_ SG_ 352 Ignition "Non-zero when ignition is on";
CM_ SG_ 451 GasPedalAndAcc2 "ACC baseline is 62";
CM_ SG_ 497 Ignition "Describes ignition + preconditioning mode, noisy";
CM_ SG_ 501 PRNDL2 "When ManualMode is Active, Value is 13=L1 12=L2 11=L3 ... 4=L10";
+CM_ SG_ 1001 VehicleSpeed "Spinouts show here on 2wd. Speed derived from right front wheel (drive tire)";
BA_DEF_ "UseGMParameterIDs" INT 0 0;
BA_DEF_ "ProtocolType" STRING ;
BA_DEF_ "BusType" STRING ;
diff --git a/opendbc/generator/test_generator.py b/opendbc/generator/test_generator.py
index dcca4d5bb..145bb2724 100755
--- a/opendbc/generator/test_generator.py
+++ b/opendbc/generator/test_generator.py
@@ -11,7 +11,11 @@ def test_generator():
ignore = [f for f in os.listdir(opendbc_root) if not f.endswith('_generated.dbc')]
comp = filecmp.dircmp(opendbc_root, d, ignore=ignore)
- assert len(comp.diff_files) == 0, f"Different files: {comp.diff_files}"
+
+ err = "Generated DBC mismatch\n\n"
+ err += f"Different files: {comp.diff_files}\n\n"
+ err += "Run opendbc/generator/generator.py to regenerate DBC files."
+ assert len(comp.diff_files) == 0, err
if __name__ == "__main__":
diff --git a/opendbc/generator/toyota/_toyota_2017.dbc b/opendbc/generator/toyota/_toyota_2017.dbc
index 703dcf283..178abdbfc 100644
--- a/opendbc/generator/toyota/_toyota_2017.dbc
+++ b/opendbc/generator/toyota/_toyota_2017.dbc
@@ -117,7 +117,7 @@ BO_ 614 STEERING_IPAS: 8 IPAS
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_ _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
@@ -163,6 +163,10 @@ BO_ 835 ACC_CONTROL: 8 DSU
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
+BO_ 865 CLUTCH: 8 XXX
+ SG_ CLUTCH_RELEASED : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL_ALT : 23|8@0+ (0.005,0) [0|1] "" 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
@@ -385,8 +389,11 @@ CM_ SG_ 835 ITS_CONNECT_LEAD "Displayed when lead car is capable of ITS Connect"
CM_ SG_ 835 ALLOW_LONG_PRESS "Enable Toyota's factory set speed increment behaviour, available on both metrics cars and imperial unit cars";
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_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
+CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
+CM_ SG_ 956 GEAR "on 6MT, only R shows.";
CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
CM_ SG_ 1041 PCS_INDICATOR "Pre-Collision System Indicator";
CM_ SG_ 1041 PCS_SENSITIVITY "Pre-Collision System Sensitivity";
@@ -440,6 +447,7 @@ VAL_ 835 ACC_TYPE 2 "permanent low speed lockout" 1 "ok";
VAL_ 835 ACC_MALFUNCTION 1 "faulted" 0 "ok";
VAL_ 835 ACC_CUT_IN 1 "CUT-IN Detected" 0 "clear";
VAL_ 835 ALLOW_LONG_PRESS 2 "set speed increase by 5 speed units regardless" 1 "set speed increase by 1 speed unit on short press, 5 speed units on long press";
+VAL_ 865 CLUTCH_RELEASED 0 "clutch pressed any amount" 1 "clutch released"
VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
VAL_ 956 SPORT_ON 0 "off" 1 "on";
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/gm_global_a_powertrain_generated.dbc b/opendbc/gm_global_a_powertrain_generated.dbc
index 7aea559f8..1e2b76afa 100644
--- a/opendbc/gm_global_a_powertrain_generated.dbc
+++ b/opendbc/gm_global_a_powertrain_generated.dbc
@@ -93,6 +93,7 @@ BO_ 201 ECMEngineStatus: 8 K20_ECM
SG_ CruiseMainOn : 29|1@0+ (1,0) [0|1] "" NEO
SG_ Brake_Pressed : 40|1@0+ (1,0) [0|1] "" NEO
SG_ Standstill : 2|1@0+ (1,0) [0|1] "" NEO
+ SG_ CruiseActive : 31|2@0+ (1,0) [0|3] "" NEO
BO_ 209 EBCMBrakePedalSensors: 7 K17_EBCM
SG_ Counter1 : 7|2@0+ (1,0) [0|3] "" XXX
@@ -211,9 +212,10 @@ BO_ 789 EBCMFrictionBrakeCmd: 5 K124_ASCM
BO_ 800 AEBCmd: 6 K124_ASCM
SG_ RollingCounter : 5|2@0+ (1,0) [0|3] "" NEO
- SG_ Checksum : 27|20@0+ (1,0) [0|2047] "" NEO
- SG_ BrakeCmdActive : 3|1@1+ (1,0) [0|1] "" NEO
- SG_ BrakingForce : 2|7@0+ (1,0) [0|7] "" NEO
+ SG_ AEBChecksum : 27|20@0+ (1,0) [0|0] "" NEO
+ SG_ AEBCmdActive : 3|1@1+ (1,0) [0|1] "" NEO
+ SG_ AEBCmd : 2|11@0+ (1,0) [0|0] "" NEO
+ SG_ AEBCmd2 : 23|8@0+ (1,0) [0|0] "" NEO
BO_ 810 TCICOnStarGPSPosition: 8 K73_TCIC
SG_ GPSLongitude : 39|32@0+ (1,-2147483648) [0|0] "milliarcsecond" NEO
@@ -239,8 +241,13 @@ BO_ 880 ASCMActiveCruiseControlStatus: 6 K124_ASCM
SG_ ACCCmdActive : 23|1@0+ (1,0) [0|0] "" NEO
SG_ FCWAlert : 41|2@0+ (1,0) [0|3] "" XXX
+BO_ 977 ECMCruiseControl: 8 K20_ECM
+ SG_ CruiseActive : 39|1@0+ (1,0) [0|3] "" NEO
+ SG_ CruiseSetSpeed : 19|12@0+ (0.0625,0) [0|0] "km/h" NEO
+
BO_ 1001 ECMVehicleSpeed: 8 K20_ECM
SG_ VehicleSpeed : 7|16@0+ (0.01,0) [0|0] "mph" NEO
+ SG_ VehicleSpeedLeft : 39|16@0+ (0.01,0) [0|0] "mph" NEO
BO_ 1033 ASCMKeepAlive: 7 NEO
SG_ ASCMKeepAliveAllZero : 7|56@0+ (1,0) [0|0] "" NEO
@@ -285,6 +292,7 @@ CM_ SG_ 352 Ignition "Non-zero when ignition is on";
CM_ SG_ 451 GasPedalAndAcc2 "ACC baseline is 62";
CM_ SG_ 497 Ignition "Describes ignition + preconditioning mode, noisy";
CM_ SG_ 501 PRNDL2 "When ManualMode is Active, Value is 13=L1 12=L2 11=L3 ... 4=L10";
+CM_ SG_ 1001 VehicleSpeed "Spinouts show here on 2wd. Speed derived from right front wheel (drive tire)";
BA_DEF_ "UseGMParameterIDs" INT 0 0;
BA_DEF_ "ProtocolType" STRING ;
BA_DEF_ "BusType" STRING ;
diff --git a/opendbc/kia_ev6.dbc b/opendbc/hyundai_canfd.dbc
similarity index 70%
rename from opendbc/kia_ev6.dbc
rename to opendbc/hyundai_canfd.dbc
index 1def4dc12..83c5f833f 100644
--- a/opendbc/kia_ev6.dbc
+++ b/opendbc/hyundai_canfd.dbc
@@ -42,6 +42,11 @@ BO_ 53 ACCELERATOR: 32 XXX
SG_ GEAR : 192|3@1+ (1,0) [0|7] "" XXX
SG_ ACCELERATOR_PEDAL : 40|8@1+ (1,0) [0|255] "" XXX
+BO_ 69 GEAR: 24 XXX
+ SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
+ SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ GEAR : 44|3@1+ (1,0) [0|7] "" XXX
+
BO_ 80 LKAS: 16 XXX
SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX
SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX
@@ -85,6 +90,11 @@ BO_ 234 MDPS: 24 XXX
SG_ STEERING_ANGLE : 96|16@1- (-0.1,0) [0|255] "deg" XXX
SG_ STEERING_ANGLE_2 : 128|16@1- (-0.1,0) [0|65535] "deg" XXX
+BO_ 261 ACCELERATOR_ALT: 32 XXX
+ SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
+ SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ ACCELERATOR_PEDAL : 103|10@1+ (0.25,0) [0|1022] "" XXX
+
BO_ 293 STEERING_SENSORS: 16 XXX
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
@@ -107,6 +117,13 @@ BO_ 298 LFA: 16 XXX
SG_ SET_ME_1 : 80|1@0+ (1,0) [0|1] "" XXX
SG_ NEW_SIGNAL_3 : 111|8@0+ (1,0) [0|255] "" XXX
+BO_ 304 GEAR_SHIFTER: 16 XXX
+ SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
+ SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ PARK_BUTTON : 32|2@1+ (1,0) [0|3] "" XXX
+ SG_ GEAR : 64|3@1+ (1,0) [0|7] "" XXX
+ SG_ KNOB_POSITION : 40|3@1+ (1,0) [0|3] "" XXX
+
BO_ 373 SCC1: 24 XXX
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
@@ -144,9 +161,66 @@ BO_ 389 CAM_0x185: 8 CAMERA
BO_ 416 CRUISE_INFO: 32 XXX
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE3 : 24|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE4 : 32|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE5 : 40|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE6 : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE7 : 56|8@1+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 64|2@1+ (1,0) [0|3] "" XXX
+ SG_ CRUISE_MAIN : 66|1@1+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_STATUS : 67|3@1+ (1,0) [0|7] "" XXX
+ SG_ CRUISE_INACTIVE : 70|1@1+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_2 : 71|5@1+ (1,0) [0|15] "" XXX
SG_ CRUISE_STANDSTILL : 76|1@1+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 77|11@1+ (1,0) [0|2047] "" XXX
+ SG_ BYTE11 : 88|8@1+ (1,0) [0|127] "" XXX
SG_ SET_SPEED : 102|7@0+ (1,0) [0|127] "km/h or mph" XXX
- SG_ CRUISE_ACTIVE : 184|1@1+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_4 : 103|1@1+ (1,0) [0|1] "" XXX
+ SG_ BYTE13 : 104|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE14 : 112|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE15 : 120|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE16 : 128|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE17 : 136|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE18 : 144|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE19 : 152|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE20 : 160|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE21 : 168|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE22 : 176|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE23 : 184|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE24 : 192|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE25 : 200|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE26 : 208|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE27 : 216|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE28 : 224|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE29 : 232|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE30 : 240|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE31 : 248|8@1+ (1,0) [0|255] "" XXX
+
+BO_ 426 CRUISE_BUTTONS_ALT: 16 XXX
+ SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
+ SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
+ SG_ NEW_SIGNAL_1 : 24|4@1+ (1,0) [0|15] "" XXX
+ SG_ SET_ME_1 : 28|3@1+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_2 : 31|3@1+ (1,0) [0|7] "" XXX
+ SG_ ADAPTIVE_CRUISE_MAIN_BTN : 34|1@1+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_3 : 35|1@1+ (1,0) [0|1] "" XXX
+ SG_ LFA_BTN : 39|1@1+ (1,0) [0|1] "" XXX
+ SG_ CRUISE_BUTTONS : 36|3@1+ (1,0) [0|4] "" XXX
+ SG_ NEW_SIGNAL_4 : 40|1@1+ (1,0) [0|1] "" XXX
+ SG_ NORMAL_CRUISE_MAIN_BTN : 41|1@1+ (1,0) [0|1] "" XXX
+ SG_ NEW_SIGNAL_5 : 42|2@1+ (1,0) [0|3] "" XXX
+ SG_ SET_ME_2 : 44|3@1+ (1,0) [0|7] "" XXX
+ SG_ NEW_SIGNAL_6 : 47|1@1+ (1,0) [0|1] "" XXX
+ SG_ BYTE6 : 48|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE7 : 56|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE8 : 64|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE9 : 72|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE10 : 80|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE11 : 88|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE12 : 96|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE13 : 104|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE14 : 112|8@1+ (1,0) [0|255] "" XXX
+ SG_ BYTE15 : 120|8@1+ (1,0) [0|255] "" XXX
BO_ 438 CAM_0x1b6: 32 CAMERA
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
@@ -173,10 +247,11 @@ BO_ 463 CRUISE_BUTTONS: 8 XXX
SG_ COUNTER : 12|4@1+ (1,0) [0|255] "" XXX
SG_ CRUISE_BUTTONS : 16|3@1+ (1,0) [0|3] "" XXX
-BO_ 480 NEW_MSG_1: 16 XXX
+BO_ 480 LFAHDA_CLUSTER: 16 XXX
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
- SG_ LFA_GREY : 47|1@0+ (1,0) [0|1] "" XXX
+ SG_ HDA_ICON : 31|1@1+ (1,0) [0|1] "" XXX
+ SG_ LFA_ICON : 47|2@1+ (1,0) [0|3] "" XXX
BO_ 507 CAM_0x1fb: 32 CAMERA
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
@@ -259,7 +334,14 @@ BO_ 1240 CLUSTER_INFO: 8 XXX
CM_ SG_ 961 COUNTER_ALT "only increments on change";
CM_ SG_ 1041 COUNTER_ALT "only increments on change";
CM_ SG_ 1043 COUNTER_ALT "only increments on change";
+
VAL_ 53 GEAR 0 "P" 5 "D" 6 "N" 7 "R" ;
+VAL_ 69 GEAR 0 "P" 5 "D" 6 "N" 7 "R" ;
+VAL_ 304 GEAR 1 "P" 2 "R" 3 "N" 4 "D";
VAL_ 80 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green" ;
VAL_ 80 LKA_MODE 1 "warning only" 2 "assist" 6 "off" ;
+VAL_ 298 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green" ;
+VAL_ 298 LKA_MODE 1 "warning only" 2 "assist" 6 "off" ;
+VAL_ 416 CRUISE_STATUS 0 "cruise_inactive" 2 "cruise_active" 4 "driver_override" ;
+VAL_ 426 CRUISE_BUTTONS 0 "none" 1 "res_accel" 2 "set_decel" 3 "gap_distance" 4 "pause_resume" ;
VAL_ 463 CRUISE_BUTTONS 0 "none" 1 "res_accel" 2 "set_decel" 3 "gap_distance" 4 "pause_resume" ;
diff --git a/opendbc/toyota_new_mc_pt_generated.dbc b/opendbc/toyota_new_mc_pt_generated.dbc
index adb419896..e28893e4c 100644
--- a/opendbc/toyota_new_mc_pt_generated.dbc
+++ b/opendbc/toyota_new_mc_pt_generated.dbc
@@ -162,7 +162,7 @@ BO_ 614 STEERING_IPAS: 8 IPAS
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_ _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
@@ -208,6 +208,10 @@ BO_ 835 ACC_CONTROL: 8 DSU
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
+BO_ 865 CLUTCH: 8 XXX
+ SG_ CLUTCH_RELEASED : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL_ALT : 23|8@0+ (0.005,0) [0|1] "" 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
@@ -430,8 +434,11 @@ CM_ SG_ 835 ITS_CONNECT_LEAD "Displayed when lead car is capable of ITS Connect"
CM_ SG_ 835 ALLOW_LONG_PRESS "Enable Toyota's factory set speed increment behaviour, available on both metrics cars and imperial unit cars";
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_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
+CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
+CM_ SG_ 956 GEAR "on 6MT, only R shows.";
CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
CM_ SG_ 1041 PCS_INDICATOR "Pre-Collision System Indicator";
CM_ SG_ 1041 PCS_SENSITIVITY "Pre-Collision System Sensitivity";
@@ -485,6 +492,7 @@ VAL_ 835 ACC_TYPE 2 "permanent low speed lockout" 1 "ok";
VAL_ 835 ACC_MALFUNCTION 1 "faulted" 0 "ok";
VAL_ 835 ACC_CUT_IN 1 "CUT-IN Detected" 0 "clear";
VAL_ 835 ALLOW_LONG_PRESS 2 "set speed increase by 5 speed units regardless" 1 "set speed increase by 1 speed unit on short press, 5 speed units on long press";
+VAL_ 865 CLUTCH_RELEASED 0 "clutch pressed any amount" 1 "clutch released"
VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
VAL_ 956 SPORT_ON 0 "off" 1 "on";
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/toyota_nodsu_pt_generated.dbc b/opendbc/toyota_nodsu_pt_generated.dbc
index 5776d0db5..866debddc 100644
--- a/opendbc/toyota_nodsu_pt_generated.dbc
+++ b/opendbc/toyota_nodsu_pt_generated.dbc
@@ -162,7 +162,7 @@ BO_ 614 STEERING_IPAS: 8 IPAS
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_ _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
@@ -208,6 +208,10 @@ BO_ 835 ACC_CONTROL: 8 DSU
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
+BO_ 865 CLUTCH: 8 XXX
+ SG_ CLUTCH_RELEASED : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL_ALT : 23|8@0+ (0.005,0) [0|1] "" 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
@@ -431,8 +435,11 @@ CM_ SG_ 835 ITS_CONNECT_LEAD "Displayed when lead car is capable of ITS Connect"
CM_ SG_ 835 ALLOW_LONG_PRESS "Enable Toyota's factory set speed increment behaviour, available on both metrics cars and imperial unit cars";
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_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
+CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
+CM_ SG_ 956 GEAR "on 6MT, only R shows.";
CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
CM_ SG_ 1041 PCS_INDICATOR "Pre-Collision System Indicator";
CM_ SG_ 1041 PCS_SENSITIVITY "Pre-Collision System Sensitivity";
@@ -486,6 +493,7 @@ VAL_ 835 ACC_TYPE 2 "permanent low speed lockout" 1 "ok";
VAL_ 835 ACC_MALFUNCTION 1 "faulted" 0 "ok";
VAL_ 835 ACC_CUT_IN 1 "CUT-IN Detected" 0 "clear";
VAL_ 835 ALLOW_LONG_PRESS 2 "set speed increase by 5 speed units regardless" 1 "set speed increase by 1 speed unit on short press, 5 speed units on long press";
+VAL_ 865 CLUTCH_RELEASED 0 "clutch pressed any amount" 1 "clutch released"
VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
VAL_ 956 SPORT_ON 0 "off" 1 "on";
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/toyota_tnga_k_pt_generated.dbc b/opendbc/toyota_tnga_k_pt_generated.dbc
index 955a116ea..f0e40dc4a 100644
--- a/opendbc/toyota_tnga_k_pt_generated.dbc
+++ b/opendbc/toyota_tnga_k_pt_generated.dbc
@@ -162,7 +162,7 @@ BO_ 614 STEERING_IPAS: 8 IPAS
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_ _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
@@ -208,6 +208,10 @@ BO_ 835 ACC_CONTROL: 8 DSU
BO_ 836 PRE_COLLISION_2: 8 DSU
SG_ CHECKSUM : 63|8@0+ (1,0) [0|0] "" XXX
+BO_ 865 CLUTCH: 8 XXX
+ SG_ CLUTCH_RELEASED : 38|1@0+ (1,0) [0|1] "" XXX
+ SG_ GAS_PEDAL_ALT : 23|8@0+ (0.005,0) [0|1] "" 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
@@ -430,8 +434,11 @@ CM_ SG_ 835 ITS_CONNECT_LEAD "Displayed when lead car is capable of ITS Connect"
CM_ SG_ 835 ALLOW_LONG_PRESS "Enable Toyota's factory set speed increment behaviour, available on both metrics cars and imperial unit cars";
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_ 865 GAS_PEDAL_ALT "copy of main GAS_PEDAL. Both use 8 bits. Might indicate that this message is for pedals.";
+CM_ SG_ 865 CLUTCH_RELEASED "boolean of clutch for 6MT.";
CM_ SG_ 921 UI_SET_SPEED "set speed shown in the vehicle's UI with the vehicle's unit";
CM_ SG_ 951 BRAKE_LIGHTS_ACC "brake lights when ACC commands decel";
+CM_ SG_ 956 GEAR "on 6MT, only R shows.";
CM_ SG_ 1009 SET_SPEED "units seem to be whatever the car is set to";
CM_ SG_ 1041 PCS_INDICATOR "Pre-Collision System Indicator";
CM_ SG_ 1041 PCS_SENSITIVITY "Pre-Collision System Sensitivity";
@@ -485,6 +492,7 @@ VAL_ 835 ACC_TYPE 2 "permanent low speed lockout" 1 "ok";
VAL_ 835 ACC_MALFUNCTION 1 "faulted" 0 "ok";
VAL_ 835 ACC_CUT_IN 1 "CUT-IN Detected" 0 "clear";
VAL_ 835 ALLOW_LONG_PRESS 2 "set speed increase by 5 speed units regardless" 1 "set speed increase by 1 speed unit on short press, 5 speed units on long press";
+VAL_ 865 CLUTCH_RELEASED 0 "clutch pressed any amount" 1 "clutch released"
VAL_ 921 CRUISE_CONTROL_STATE 2 "disabled" 11 "hold" 10 "hold_waiting_user_cmd" 6 "enabled" 5 "faulted";
VAL_ 956 SPORT_ON 0 "off" 1 "on";
VAL_ 956 GEAR 0 "D" 1 "S" 8 "N" 16 "R" 32 "P";
diff --git a/opendbc/vw_golf_mk4.dbc b/opendbc/vw_golf_mk4.dbc
index 66681dbd5..39d518df4 100644
--- a/opendbc/vw_golf_mk4.dbc
+++ b/opendbc/vw_golf_mk4.dbc
@@ -1121,7 +1121,7 @@ BO_ 208 Lenkhilfe_3: 6 XXX
SG_ LH3_BLWValid : 45|1@1+ (1,0) [0|1] "" XXX
SG_ LH3_Lenkungstyp : 46|2@1+ (1,0) [0|3] "" XXX
-BO_ 978 Lenkhilfe_2: 8 XXX
+BO_ 978 Lenkhilfe_2: 7 XXX
SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX
SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX
SG_ LH2_Geradeaus : 12|1@1+ (1,0) [0|1] "" XXX
diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin
index eaa20f843..5e813c10d 100755
Binary files a/panda/board/obj/bootstub.panda.bin and b/panda/board/obj/bootstub.panda.bin differ
diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed
index c9e72fc3d..f11590344 100644
Binary files a/panda/board/obj/panda.bin.signed and b/panda/board/obj/panda.bin.signed differ
diff --git a/panda/board/obj/panda.bin.sspoof.signed b/panda/board/obj/panda.bin.sspoof.signed
index bf3474f28..7d8ba5b93 100644
Binary files a/panda/board/obj/panda.bin.sspoof.signed and b/panda/board/obj/panda.bin.sspoof.signed differ
diff --git a/panda/board/obj/panda.bin.testing.signed b/panda/board/obj/panda.bin.testing.signed
index 9cf87b5af..ce026165b 100644
Binary files a/panda/board/obj/panda.bin.testing.signed and b/panda/board/obj/panda.bin.testing.signed differ
diff --git a/panda/board/obj/panda.bin.testing.sspoof.signed b/panda/board/obj/panda.bin.testing.sspoof.signed
index df80d47d0..41bf7018b 100644
Binary files a/panda/board/obj/panda.bin.testing.sspoof.signed and b/panda/board/obj/panda.bin.testing.sspoof.signed differ
diff --git a/panda/examples/query_fw_versions.py b/panda/examples/query_fw_versions.py
index 4132959be..2d4509745 100755
--- a/panda/examples/query_fw_versions.py
+++ b/panda/examples/query_fw_versions.py
@@ -4,12 +4,14 @@ from tqdm import tqdm
from panda import Panda
from panda.python.uds import UdsClient, MessageTimeoutError, NegativeResponseError, SESSION_TYPE, DATA_IDENTIFIER_TYPE
+
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--rxoffset', default="")
parser.add_argument('--nonstandard', action='store_true')
parser.add_argument('--debug', action='store_true')
parser.add_argument('--addr')
+ parser.add_argument('--bus')
args = parser.parse_args()
if args.addr:
@@ -39,9 +41,11 @@ if __name__ == "__main__":
if addr == 0x7df or addr == 0x18db33f1:
continue
t.set_description(hex(addr))
- panda.send_heartbeat()
- bus = 1 if panda.has_obd() else 0
+ if args.bus:
+ bus = int(args.bus)
+ else:
+ bus = 1 if panda.has_obd() else 0
rx_addr = addr + int(args.rxoffset, base=16) if args.rxoffset else None
uds_client = UdsClient(panda, addr, rx_addr, bus, timeout=0.2, debug=args.debug)
# Check for anything alive at this address, and switch to the highest
diff --git a/panda/python/__init__.py b/panda/python/__init__.py
index 4e6ed2417..de382f384 100644
--- a/panda/python/__init__.py
+++ b/panda/python/__init__.py
@@ -173,8 +173,8 @@ class Panda:
HW_TYPE_RED_PANDA = b'\x07'
CAN_PACKET_VERSION = 2
- HEALTH_PACKET_VERSION = 7
- HEALTH_STRUCT = struct.Struct("
#ifndef offsetof
@@ -171,7 +171,7 @@ END: Cython Metadata */
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
- #if PY_VERSION_HEX < 0x030300F0
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -190,7 +190,7 @@ END: Cython Metadata */
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_PYCALL
- #define CYTHON_FAST_PYCALL 1
+ #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1)
#endif
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -209,7 +209,9 @@ END: Cython Metadata */
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
- #include "longintrepr.h"
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
#undef SHIFT
#undef BASE
#undef MASK
@@ -340,9 +342,68 @@ class __Pyx_FakeReference {
#define __Pyx_DefaultClassType PyClass_Type
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
- #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
- PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+ PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+ const char *fn_cstr=NULL;
+ const char *name_cstr=NULL;
+ PyCodeObject* co=NULL;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (!(kwds=PyDict_New())) goto end;
+ if (!(argcount=PyLong_FromLong(a))) goto end;
+ if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+ if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+ if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+ if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+ if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+ if (!(nlocals=PyLong_FromLong(l))) goto end;
+ if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+ if (!(stacksize=PyLong_FromLong(s))) goto end;
+ if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+ if (!(flags=PyLong_FromLong(f))) goto end;
+ if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+ if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+ if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+ if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+ if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+ if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+ if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+ Py_XDECREF((PyObject*)co);
+ co = (PyCodeObject*)call_result;
+ call_result = NULL;
+ if (0) {
+ cleanup_code_too:
+ Py_XDECREF((PyObject*)co);
+ co = NULL;
+ }
+ end:
+ Py_XDECREF(kwds);
+ Py_XDECREF(argcount);
+ Py_XDECREF(posonlyargcount);
+ Py_XDECREF(kwonlyargcount);
+ Py_XDECREF(nlocals);
+ Py_XDECREF(stacksize);
+ Py_XDECREF(replace);
+ Py_XDECREF(call_result);
+ Py_XDECREF(empty);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return co;
+ }
#else
#define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
@@ -580,10 +641,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
- #define __Pyx_PyInt_AsHash_t PyInt_AsLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
- #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -746,6 +807,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
@@ -2568,7 +2630,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
}
if (!use_cline) {
c_line = 0;
- PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+ (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
}
else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
c_line = 0;
@@ -2665,30 +2727,31 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
const char *funcname, int c_line,
int py_line, const char *filename) {
- PyCodeObject *py_code = 0;
- PyObject *py_srcfile = 0;
- PyObject *py_funcname = 0;
+ PyCodeObject *py_code = NULL;
+ PyObject *py_funcname = NULL;
#if PY_MAJOR_VERSION < 3
+ PyObject *py_srcfile = NULL;
py_srcfile = PyString_FromString(filename);
- #else
- py_srcfile = PyUnicode_FromString(filename);
- #endif
if (!py_srcfile) goto bad;
+ #endif
if (c_line) {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
#else
py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ funcname = PyUnicode_AsUTF8(py_funcname);
+ if (!funcname) goto bad;
#endif
}
else {
#if PY_MAJOR_VERSION < 3
py_funcname = PyString_FromString(funcname);
- #else
- py_funcname = PyUnicode_FromString(funcname);
+ if (!py_funcname) goto bad;
#endif
}
- if (!py_funcname) goto bad;
+ #if PY_MAJOR_VERSION < 3
py_code = __Pyx_PyCode_New(
0,
0,
@@ -2707,11 +2770,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
__pyx_empty_bytes /*PyObject *lnotab*/
);
Py_DECREF(py_srcfile);
- Py_DECREF(py_funcname);
+ #else
+ py_code = PyCode_NewEmpty(filename, funcname, py_line);
+ #endif
+ Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline
return py_code;
bad:
- Py_XDECREF(py_srcfile);
Py_XDECREF(py_funcname);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_srcfile);
+ #endif
return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -3559,6 +3627,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
Py_DECREF(x);
return ival;
}
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+ return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+ } else if (likely(PyInt_CheckExact(o))) {
+ return PyInt_AS_LONG(o);
+#endif
+ } else {
+ Py_ssize_t ival;
+ PyObject *x;
+ x = PyNumber_Index(o);
+ if (!x) return -1;
+ ival = PyInt_AsLong(x);
+ Py_DECREF(x);
+ return ival;
+ }
+}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
diff --git a/selfdrive/boardd/boardd_api_impl.so b/selfdrive/boardd/boardd_api_impl.so
index e2ce62444..aa872a992 100755
Binary files a/selfdrive/boardd/boardd_api_impl.so and b/selfdrive/boardd/boardd_api_impl.so differ
diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py
index c77e40daa..f2d198338 100644
--- a/selfdrive/car/__init__.py
+++ b/selfdrive/car/__init__.py
@@ -38,7 +38,7 @@ def create_button_enable_events(buttonEvents: capnp.lib.capnp._DynamicListBuilde
def gen_empty_fingerprint():
- return {i: {} for i in range(0, 4)}
+ return {i: {} for i in range(0, 8)}
# FIXME: hardcoding honda civic 2016 touring params so they can be used to
diff --git a/selfdrive/car/body/values.py b/selfdrive/car/body/values.py
index 0caf93b61..61b72d5ad 100644
--- a/selfdrive/car/body/values.py
+++ b/selfdrive/car/body/values.py
@@ -2,7 +2,7 @@ from typing import Dict
from cereal import car
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo, Harness
+from selfdrive.car.docs_definitions import CarInfo
Ecu = car.CarParams.Ecu
SPEED_FROM_RPM = 0.008587
@@ -18,7 +18,7 @@ class CAR:
BODY = "COMMA BODY"
CAR_INFO: Dict[str, CarInfo] = {
- CAR.BODY: CarInfo("comma body", package="All", harness=Harness.none),
+ CAR.BODY: CarInfo("comma body", package="All"),
}
FW_VERSIONS = {
diff --git a/selfdrive/car/chrysler/carcontroller.py b/selfdrive/car/chrysler/carcontroller.py
index 22abf1b67..5a2d90c64 100644
--- a/selfdrive/car/chrysler/carcontroller.py
+++ b/selfdrive/car/chrysler/carcontroller.py
@@ -22,23 +22,8 @@ class CarController:
def update(self, CC, CS):
can_sends = []
- # TODO: can we make this more sane? why is it different for all the cars?
- lkas_control_bit = self.lkas_control_bit_prev
- if CS.out.vEgo > self.CP.minSteerSpeed:
- lkas_control_bit = True
- elif self.CP.carFingerprint in (CAR.PACIFICA_2019_HYBRID, CAR.PACIFICA_2020, CAR.JEEP_CHEROKEE_2019):
- if CS.out.vEgo < (self.CP.minSteerSpeed - 3.0):
- lkas_control_bit = False
- elif self.CP.carFingerprint in RAM_CARS:
- if CS.out.vEgo < (self.CP.minSteerSpeed - 0.5):
- lkas_control_bit = False
-
- # EPS faults if LKAS re-enables too quickly
- lkas_control_bit = lkas_control_bit and (self.frame - self.last_lkas_falling_edge > 200)
lkas_active = CC.latActive and self.lkas_control_bit_prev
- # *** control msgs ***
-
# cruise buttons
if (self.frame - self.last_button_frame)*DT_CTRL > 0.05:
das_bus = 2 if self.CP.carFingerprint in RAM_CARS else 0
@@ -61,19 +46,35 @@ class CarController:
# steering
if self.frame % 2 == 0:
+
+ # TODO: can we make this more sane? why is it different for all the cars?
+ lkas_control_bit = self.lkas_control_bit_prev
+ if CS.out.vEgo > self.CP.minSteerSpeed:
+ lkas_control_bit = True
+ elif self.CP.carFingerprint in (CAR.PACIFICA_2019_HYBRID, CAR.PACIFICA_2020, CAR.JEEP_CHEROKEE_2019):
+ if CS.out.vEgo < (self.CP.minSteerSpeed - 3.0):
+ lkas_control_bit = False
+ elif self.CP.carFingerprint in RAM_CARS:
+ if CS.out.vEgo < (self.CP.minSteerSpeed - 0.5):
+ lkas_control_bit = False
+
+ # EPS faults if LKAS re-enables too quickly
+ lkas_control_bit = lkas_control_bit and (self.frame - self.last_lkas_falling_edge > 200)
+
+ if not lkas_control_bit and self.lkas_control_bit_prev:
+ self.last_lkas_falling_edge = self.frame
+ self.lkas_control_bit_prev = lkas_control_bit
+
# steer torque
new_steer = int(round(CC.actuators.steer * self.params.STEER_MAX))
apply_steer = apply_toyota_steer_torque_limits(new_steer, self.apply_steer_last, CS.out.steeringTorqueEps, self.params)
- if not lkas_active:
+ if not lkas_active or not lkas_control_bit:
apply_steer = 0
self.apply_steer_last = apply_steer
can_sends.append(create_lkas_command(self.packer, self.CP, int(apply_steer), lkas_control_bit))
self.frame += 1
- if not lkas_control_bit and self.lkas_control_bit_prev:
- self.last_lkas_falling_edge = self.frame
- self.lkas_control_bit_prev = lkas_control_bit
new_actuators = CC.actuators.copy()
new_actuators.steer = self.apply_steer_last / self.params.STEER_MAX
diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py
index 0605ec1f2..52d6388d7 100644
--- a/selfdrive/car/docs_definitions.py
+++ b/selfdrive/car/docs_definitions.py
@@ -2,7 +2,7 @@ import re
from collections import namedtuple
from dataclasses import dataclass, field
from enum import Enum
-from typing import Dict, List, Optional, Tuple, Union, no_type_check
+from typing import Dict, List, Optional, Tuple, Union
from cereal import car
from common.conversions import Conversions as CV
@@ -15,20 +15,15 @@ NO_AUTO_RESUME_STOCK_LONG = {"toyota", "gm"}
NO_AUTO_RESUME = NO_AUTO_RESUME_STOCK_LONG | {"nissan", "subaru"}
-class Tier(Enum):
- GOLD = 0
- SILVER = 1
- BRONZE = 2
-
-
class Column(Enum):
MAKE = "Make"
MODEL = "Model"
PACKAGE = "Supported Package"
- LONGITUDINAL = "openpilot ACC"
- FSR_LONGITUDINAL = "Stop and Go"
- FSR_STEERING = "Steer to 0"
+ LONGITUDINAL = "ACC"
+ FSR_LONGITUDINAL = "No ACC accel below"
+ FSR_STEERING = "No ALC below"
STEERING_TORQUE = "Steering Torque"
+ HARNESS = "Harness"
class Star(Enum):
@@ -37,9 +32,46 @@ class Star(Enum):
EMPTY = "empty"
-StarColumns = list(Column)[3:]
-TierColumns = (Column.FSR_LONGITUDINAL, Column.FSR_STEERING, Column.STEERING_TORQUE)
-CarFootnote = namedtuple("CarFootnote", ["text", "column", "star"], defaults=[None])
+class Harness(Enum):
+ nidec = "Honda Nidec"
+ bosch_a = "Honda Bosch A"
+ bosch_b = "Honda Bosch B"
+ toyota = "Toyota"
+ subaru_a = "Subaru A"
+ subaru_b = "Subaru B"
+ fca = "FCA"
+ ram = "Ram"
+ vw = "VW"
+ j533 = "J533"
+ hyundai_a = "Hyundai A"
+ hyundai_b = "Hyundai B"
+ hyundai_c = "Hyundai C"
+ hyundai_d = "Hyundai D"
+ hyundai_e = "Hyundai E"
+ hyundai_f = "Hyundai F"
+ hyundai_g = "Hyundai G"
+ hyundai_h = "Hyundai H"
+ hyundai_i = "Hyundai I"
+ hyundai_j = "Hyundai J"
+ hyundai_k = "Hyundai K"
+ hyundai_l = "Hyundai L"
+ hyundai_m = "Hyundai M"
+ hyundai_n = "Hyundai N"
+ hyundai_o = "Hyundai O"
+ hyundai_p = "Hyundai P"
+ hyundai_q = "Hyundai Q"
+ custom = "Developer"
+ obd_ii = "OBD-II"
+ gm = "GM"
+ nissan_a = "Nissan A"
+ nissan_b = "Nissan B"
+ mazda = "Mazda"
+ ford_q3 = "Ford Q3"
+ ford_q4 = "Ford Q4"
+ none = "None"
+
+
+CarFootnote = namedtuple("CarFootnote", ["text", "column"], defaults=[None])
def get_footnotes(footnotes: List[Enum], column: Column) -> List[Enum]:
@@ -83,7 +115,7 @@ class CarInfo:
footnotes: List[Enum] = field(default_factory=list)
min_steer_speed: Optional[float] = None
min_enable_speed: Optional[float] = None
- harness: Optional[Enum] = None
+ harness: Enum = Harness.none
def init(self, CP: car.CarParams, all_footnotes: Dict[Enum, int]):
# TODO: set all the min steer speeds in carParams and remove this
@@ -92,8 +124,6 @@ class CarInfo:
else:
self.min_steer_speed = CP.minSteerSpeed
- assert self.harness is not None, f"{CP.carFingerprint}: Need to specify car harness"
-
# TODO: set all the min enable speeds in carParams correctly and remove this
if self.min_enable_speed is None:
self.min_enable_speed = CP.minEnableSpeed
@@ -105,11 +135,11 @@ class CarInfo:
Column.MAKE: self.make,
Column.MODEL: self.model,
Column.PACKAGE: self.package,
- # StarColumns
- Column.LONGITUDINAL: Star.FULL if CP.openpilotLongitudinalControl and not CP.radarOffCan else Star.EMPTY,
- Column.FSR_LONGITUDINAL: Star.FULL if self.min_enable_speed <= 0. else Star.EMPTY,
- Column.FSR_STEERING: Star.FULL if self.min_steer_speed <= 0. else Star.EMPTY,
+ Column.LONGITUDINAL: "openpilot" if CP.openpilotLongitudinalControl and not CP.radarOffCan else "Stock",
+ Column.FSR_LONGITUDINAL: f"{max(self.min_enable_speed * CV.MS_TO_MPH, 0):.0f} mph",
+ Column.FSR_STEERING: f"{max(self.min_steer_speed * CV.MS_TO_MPH, 0):.0f} mph",
Column.STEERING_TORQUE: Star.EMPTY,
+ Column.HARNESS: self.harness.value,
}
# Set steering torque star from max lateral acceleration
@@ -117,26 +147,7 @@ class CarInfo:
if CP.maxLateralAccel >= GOOD_TORQUE_THRESHOLD:
self.row[Column.STEERING_TORQUE] = Star.FULL
- if CP.notCar:
- for col in StarColumns:
- self.row[col] = Star.FULL
-
self.all_footnotes = all_footnotes
- for column in StarColumns:
- # Demote if footnote specifies a star
- for fn in get_footnotes(self.footnotes, column):
- if fn.value.star is not None:
- self.row[column] = fn.value.star
-
- # openpilot ACC star doesn't count for tiers
- full_stars = [s for col, s in self.row.items() if col in TierColumns].count(Star.FULL)
- if full_stars == len(TierColumns):
- self.tier = Tier.GOLD
- elif full_stars == len(TierColumns) - 1:
- self.tier = Tier.SILVER
- else:
- self.tier = Tier.BRONZE
-
self.year_list = get_year_list(self.years)
self.detail_sentence = self.get_detail_sentence(CP)
@@ -169,10 +180,9 @@ class CarInfo:
else:
raise Exception(f"This notCar does not have a detail sentence: {CP.carFingerprint}")
- @no_type_check
def get_column(self, column: Column, star_icon: str, footnote_tag: str) -> str:
item: Union[str, Star] = self.row[column]
- if column in StarColumns:
+ if isinstance(item, Star):
item = star_icon.format(item.value)
elif column == Column.MODEL and len(self.years):
item += f" {self.years}"
@@ -184,58 +194,3 @@ class CarInfo:
return item
-
-class Harness(Enum):
- nidec = "Honda Nidec"
- bosch_a = "Honda Bosch A"
- bosch_b = "Honda Bosch B"
- toyota = "Toyota"
- subaru_a = "Subaru A"
- subaru_b = "Subaru B"
- fca = "FCA"
- ram = "Ram"
- vw = "VW"
- j533 = "J533"
- hyundai_a = "Hyundai A"
- hyundai_b = "Hyundai B"
- hyundai_c = "Hyundai C"
- hyundai_d = "Hyundai D"
- hyundai_e = "Hyundai E"
- hyundai_f = "Hyundai F"
- hyundai_g = "Hyundai G"
- hyundai_h = "Hyundai H"
- hyundai_i = "Hyundai I"
- hyundai_j = "Hyundai J"
- hyundai_k = "Hyundai K"
- hyundai_l = "Hyundai L"
- hyundai_m = "Hyundai M"
- hyundai_n = "Hyundai N"
- hyundai_o = "Hyundai O"
- hyundai_p = "Hyundai P"
- custom = "Developer"
- obd_ii = "OBD-II"
- gm = "GM"
- nissan_a = "Nissan A"
- nissan_b = "Nissan B"
- mazda = "Mazda"
- none = "None"
-
-
-STAR_DESCRIPTIONS = {
- "Gas & Brakes": { # icon and row name
- Column.FSR_LONGITUDINAL.value: [
- [Star.FULL.value, "openpilot operates down to 0 mph."],
- [Star.EMPTY.value, "openpilot operates only above a minimum speed. See your car's manual for the minimum speed."],
- ],
- },
- "Steering": {
- Column.FSR_STEERING.value: [
- [Star.FULL.value, "openpilot can control the steering wheel down to 0 mph."],
- [Star.EMPTY.value, "No steering control below certain speeds. See your car's manual for the minimum speed."],
- ],
- Column.STEERING_TORQUE.value: [
- [Star.FULL.value, "Car has enough steering torque to comfortably take most highway turns."],
- [Star.EMPTY.value, "Limited ability to make tighter turns."],
- ],
- },
-}
diff --git a/selfdrive/car/ford/radar_interface.py b/selfdrive/car/ford/radar_interface.py
index 866602cf0..c94270300 100644
--- a/selfdrive/car/ford/radar_interface.py
+++ b/selfdrive/car/ford/radar_interface.py
@@ -1,33 +1,63 @@
#!/usr/bin/env python3
+from math import cos, sin
from cereal import car
-from common.conversions import Conversions as CV
from opendbc.can.parser import CANParser
-from selfdrive.car.ford.values import CANBUS, DBC
+from common.conversions import Conversions as CV
+from selfdrive.car.ford.values import CANBUS, DBC, RADAR
from selfdrive.car.interfaces import RadarInterfaceBase
-RADAR_MSGS = list(range(0x500, 0x540))
+DELPHI_ESR_RADAR_MSGS = list(range(0x500, 0x540))
+
+DELPHI_MRR_RADAR_START_ADDR = 0x120
+DELPHI_MRR_RADAR_MSG_COUNT = 64
-def _create_radar_can_parser(car_fingerprint):
- if DBC[car_fingerprint]['radar'] is None:
- return None
-
- msg_n = len(RADAR_MSGS)
+def _create_delphi_esr_radar_can_parser():
+ msg_n = len(DELPHI_ESR_RADAR_MSGS)
signals = list(zip(['X_Rel'] * msg_n + ['Angle'] * msg_n + ['V_Rel'] * msg_n,
- RADAR_MSGS * 3))
- checks = list(zip(RADAR_MSGS, [20] * msg_n))
+ DELPHI_ESR_RADAR_MSGS * 3))
+ checks = list(zip(DELPHI_ESR_RADAR_MSGS, [20] * msg_n))
+
+ return CANParser(RADAR.DELPHI_ESR, signals, checks, CANBUS.radar)
+
+
+def _create_delphi_mrr_radar_can_parser():
+ signals = []
+ checks = []
+
+ for i in range(1, DELPHI_MRR_RADAR_MSG_COUNT + 1):
+ msg = f"MRR_Detection_{i:03d}"
+ signals += [
+ (f"CAN_DET_VALID_LEVEL_{i:02d}", msg),
+ (f"CAN_DET_AZIMUTH_{i:02d}", msg),
+ (f"CAN_DET_RANGE_{i:02d}", msg),
+ (f"CAN_DET_RANGE_RATE_{i:02d}", msg),
+ (f"CAN_DET_AMPLITUDE_{i:02d}", msg),
+ (f"CAN_SCAN_INDEX_2LSB_{i:02d}", msg),
+ ]
+ checks += [(msg, 20)]
+
+ return CANParser(RADAR.DELPHI_MRR, signals, checks, CANBUS.radar)
- return CANParser(DBC[car_fingerprint]['radar'], signals, checks, CANBUS.radar)
class RadarInterface(RadarInterfaceBase):
def __init__(self, CP):
super().__init__(CP)
- self.validCnt = {key: 0 for key in RADAR_MSGS}
- self.track_id = 0
- self.rcp = _create_radar_can_parser(CP.carFingerprint)
- self.trigger_msg = 0x53f
self.updated_messages = set()
+ self.track_id = 0
+ self.radar = DBC[CP.carFingerprint]['radar']
+ if self.radar is None:
+ self.rcp = None
+ elif self.radar == RADAR.DELPHI_ESR:
+ self.rcp = _create_delphi_esr_radar_can_parser()
+ self.trigger_msg = DELPHI_ESR_RADAR_MSGS[-1]
+ self.valid_cnt = {key: 0 for key in DELPHI_ESR_RADAR_MSGS}
+ elif self.radar == RADAR.DELPHI_MRR:
+ self.rcp = _create_delphi_mrr_radar_can_parser()
+ self.trigger_msg = DELPHI_MRR_RADAR_START_ADDR + DELPHI_MRR_RADAR_MSG_COUNT - 1
+ else:
+ raise ValueError(f"Unsupported radar: {self.radar}")
def update(self, can_strings):
if self.rcp is None:
@@ -45,20 +75,30 @@ class RadarInterface(RadarInterfaceBase):
errors.append("canError")
ret.errors = errors
+ if self.radar == RADAR.DELPHI_ESR:
+ self._update_delphi_esr()
+ elif self.radar == RADAR.DELPHI_MRR:
+ self._update_delphi_mrr()
+
+ ret.points = list(self.pts.values())
+ self.updated_messages.clear()
+ return ret
+
+ def _update_delphi_esr(self):
for ii in sorted(self.updated_messages):
cpt = self.rcp.vl[ii]
if cpt['X_Rel'] > 0.00001:
- self.validCnt[ii] = 0 # reset counter
+ self.valid_cnt[ii] = 0 # reset counter
if cpt['X_Rel'] > 0.00001:
- self.validCnt[ii] += 1
+ self.valid_cnt[ii] += 1
else:
- self.validCnt[ii] = max(self.validCnt[ii] - 1, 0)
- #print ii, self.validCnt[ii], cpt['VALID'], cpt['X_Rel'], cpt['Angle']
+ self.valid_cnt[ii] = max(self.valid_cnt[ii] - 1, 0)
+ #print ii, self.valid_cnt[ii], cpt['VALID'], cpt['X_Rel'], cpt['Angle']
# radar point only valid if there have been enough valid measurements
- if self.validCnt[ii] > 0:
+ if self.valid_cnt[ii] > 0:
if ii not in self.pts:
self.pts[ii] = car.RadarData.RadarPoint.new_message()
self.pts[ii].trackId = self.track_id
@@ -73,6 +113,36 @@ class RadarInterface(RadarInterfaceBase):
if ii in self.pts:
del self.pts[ii]
- ret.points = list(self.pts.values())
- self.updated_messages.clear()
- return ret
+ def _update_delphi_mrr(self):
+ for ii in range(1, DELPHI_MRR_RADAR_MSG_COUNT + 1):
+ msg = self.rcp.vl[f"MRR_Detection_{ii:03d}"]
+
+ # SCAN_INDEX rotates through 0..3 on each message
+ # treat these as separate points
+ scanIndex = msg[f"CAN_SCAN_INDEX_2LSB_{ii:02d}"]
+ i = (ii - 1) * 4 + scanIndex
+
+ if i not in self.pts:
+ self.pts[i] = car.RadarData.RadarPoint.new_message()
+ self.pts[i].trackId = self.track_id
+ self.pts[i].aRel = float('nan')
+ self.pts[i].yvRel = float('nan')
+ self.track_id += 1
+
+ valid = bool(msg[f"CAN_DET_VALID_LEVEL_{ii:02d}"])
+ amplitude = msg[f"CAN_DET_AMPLITUDE_{ii:02d}"] # dBsm [-64|63]
+
+ if valid and 0 < amplitude <= 15:
+ azimuth = msg[f"CAN_DET_AZIMUTH_{ii:02d}"] # rad [-3.1416|3.13964]
+ dist = msg[f"CAN_DET_RANGE_{ii:02d}"] # m [0|255.984]
+ distRate = msg[f"CAN_DET_RANGE_RATE_{ii:02d}"] # m/s [-128|127.984]
+
+ # *** openpilot radar point ***
+ self.pts[i].dRel = cos(azimuth) * dist # m from front of car
+ self.pts[i].yRel = -sin(azimuth) * dist # in car frame's y axis, left is positive
+ self.pts[i].vRel = distRate # m/s
+
+ self.pts[i].measured = True
+
+ else:
+ del self.pts[i]
diff --git a/selfdrive/car/ford/values.py b/selfdrive/car/ford/values.py
index 6b8396cf0..825d515da 100644
--- a/selfdrive/car/ford/values.py
+++ b/selfdrive/car/ford/values.py
@@ -24,6 +24,11 @@ class CarControllerParams:
STEER_RATE_LIMIT_DOWN = AngleRateLimit(speed_points=[0., 5., 15.], max_angle_diff_points=[5., 3.5, 0.4])
+class RADAR:
+ DELPHI_ESR = 'ford_fusion_2018_adas'
+ DELPHI_MRR = 'FORD_CADS'
+
+
class CANBUS:
main = 0
radar = 1
@@ -80,6 +85,6 @@ FW_VERSIONS = {
DBC = {
- CAR.ESCAPE_MK4: dbc_dict('ford_lincoln_base_pt', None),
- CAR.FOCUS_MK4: dbc_dict('ford_lincoln_base_pt', None),
+ CAR.ESCAPE_MK4: dbc_dict('ford_lincoln_base_pt', RADAR.DELPHI_MRR),
+ CAR.FOCUS_MK4: dbc_dict('ford_lincoln_base_pt', RADAR.DELPHI_MRR),
}
diff --git a/selfdrive/car/gm/carcontroller.py b/selfdrive/car/gm/carcontroller.py
index 10e602797..977d20c5b 100644
--- a/selfdrive/car/gm/carcontroller.py
+++ b/selfdrive/car/gm/carcontroller.py
@@ -109,10 +109,10 @@ class CarController:
else:
# Stock longitudinal, integrated at camera
- if (self.frame - self.last_button_frame) * DT_CTRL > 0.1:
+ if (self.frame - self.last_button_frame) * DT_CTRL > 0.04:
if CC.cruiseControl.cancel:
self.last_button_frame = self.frame
- can_sends.append(gmcan.create_buttons(self.packer_pt, CanBus.CAMERA, CruiseButtons.CANCEL))
+ can_sends.append(gmcan.create_buttons(self.packer_pt, CanBus.CAMERA, CS.buttons_counter, CruiseButtons.CANCEL))
# Show green icon when LKA torque is applied, and
# alarming orange icon when approaching torque limit.
diff --git a/selfdrive/car/gm/carstate.py b/selfdrive/car/gm/carstate.py
index 0bda7edad..0bba1d29b 100644
--- a/selfdrive/car/gm/carstate.py
+++ b/selfdrive/car/gm/carstate.py
@@ -16,12 +16,14 @@ class CarState(CarStateBase):
can_define = CANDefine(DBC[CP.carFingerprint]["pt"])
self.shifter_values = can_define.dv["ECMPRDNL2"]["PRNDL2"]
self.lka_steering_cmd_counter = 0
+ self.buttons_counter = 0
def update(self, pt_cp, cam_cp, loopback_cp):
ret = car.CarState.new_message()
self.prev_cruise_buttons = self.cruise_buttons
self.cruise_buttons = pt_cp.vl["ASCMSteeringButton"]["ACCButtons"]
+ self.buttons_counter = pt_cp.vl["ASCMSteeringButton"]["RollingCounter"]
ret.wheelSpeeds = self.get_wheel_speeds(
pt_cp.vl["EBCMWheelSpdFront"]["FLWheelSpd"],
@@ -109,6 +111,7 @@ class CarState(CarStateBase):
("AcceleratorPedal2", "AcceleratorPedal2"),
("CruiseState", "AcceleratorPedal2"),
("ACCButtons", "ASCMSteeringButton"),
+ ("RollingCounter", "ASCMSteeringButton"),
("SteeringWheelAngle", "PSCMSteeringAngle"),
("SteeringWheelRate", "PSCMSteeringAngle"),
("FLWheelSpd", "EBCMWheelSpdFront"),
diff --git a/selfdrive/car/gm/gmcan.py b/selfdrive/car/gm/gmcan.py
index 3a10c4d9d..20e4c4ab6 100644
--- a/selfdrive/car/gm/gmcan.py
+++ b/selfdrive/car/gm/gmcan.py
@@ -1,7 +1,10 @@
from selfdrive.car import make_can_msg
-def create_buttons(packer, bus, button):
- values = {"ACCButtons": button}
+def create_buttons(packer, bus, idx, button):
+ values = {
+ "ACCButtons": button,
+ "RollingCounter": idx,
+ }
return packer.make_can_msg("ASCMSteeringButton", bus, values)
def create_steering_control(packer, bus, apply_steer, idx, lkas_active):
diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py
index 1ef594f24..d4817a9ec 100755
--- a/selfdrive/car/gm/interface.py
+++ b/selfdrive/car/gm/interface.py
@@ -4,7 +4,7 @@ from math import fabs
from panda import Panda
from common.conversions import Conversions as CV
-from selfdrive.car import STD_CARGO_KG, create_button_enable_events, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
+from selfdrive.car import STD_CARGO_KG, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
from selfdrive.car.gm.values import CAR, CruiseButtons, CarControllerParams, EV_CAR, CAMERA_ACC_CAR
from selfdrive.car.interfaces import CarInterfaceBase
@@ -160,6 +160,15 @@ class CarInterface(CarInterfaceBase):
ret.steerActuatorDelay = 0.2
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
+ elif candidate == CAR.SILVERADO:
+ ret.minEnableSpeed = -1
+ ret.mass = 2200. + STD_CARGO_KG
+ ret.wheelbase = 3.75
+ ret.steerRatio = 16.3
+ ret.centerToFront = ret.wheelbase * 0.5
+ tire_stiffness_factor = 1.0
+ CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
+
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
@@ -197,9 +206,6 @@ class CarInterface(CarInterfaceBase):
if ret.vEgo < self.CP.minSteerSpeed:
events.add(car.CarEvent.EventName.belowSteerSpeed)
- # handle button presses
- events.events.extend(create_button_enable_events(ret.buttonEvents, pcm_cruise=self.CP.pcmCruise))
-
ret.events = events.to_msg()
return ret
diff --git a/selfdrive/car/gm/values.py b/selfdrive/car/gm/values.py
index cb9aff172..21ede171e 100644
--- a/selfdrive/car/gm/values.py
+++ b/selfdrive/car/gm/values.py
@@ -59,6 +59,7 @@ class CAR:
BUICK_REGAL = "BUICK REGAL ESSENCE 2018"
ESCALADE_ESV = "CADILLAC ESCALADE ESV 2016"
BOLT_EUV = "CHEVROLET BOLT EUV 2022"
+ SILVERADO = "CHEVROLET SILVERADO 1500 2020"
class Footnote(Enum):
@@ -83,7 +84,11 @@ CAR_INFO: Dict[str, Union[GMCarInfo, List[GMCarInfo]]] = {
CAR.ACADIA: GMCarInfo("GMC Acadia 2018", video_link="https://www.youtube.com/watch?v=0ZN6DdsBUZo"),
CAR.BUICK_REGAL: GMCarInfo("Buick Regal Essence 2018"),
CAR.ESCALADE_ESV: GMCarInfo("Cadillac Escalade ESV 2016", "Adaptive Cruise Control (ACC) & LKAS"),
- CAR.BOLT_EUV: GMCarInfo("Chevrolet Bolt EUV 2022-23", "Premier/Premier Redline Trim", video_link="https://youtu.be/xvwzGMUA210", footnotes=[], harness=Harness.gm),
+ CAR.BOLT_EUV: GMCarInfo("Chevrolet Bolt EUV 2022-23", "Premier or Premier Redline Trim without Super Cruise Package", video_link="https://youtu.be/xvwzGMUA210", footnotes=[], harness=Harness.gm),
+ CAR.SILVERADO: [
+ GMCarInfo("Chevrolet Silverado 1500 2020-21", "Safety Package II", footnotes=[], harness=Harness.gm),
+ GMCarInfo("GMC Sierra 1500 2020-21", "Driver Alert Package II", footnotes=[], harness=Harness.gm),
+ ],
}
@@ -157,6 +162,10 @@ FINGERPRINTS = {
{
189: 7, 190: 7, 193: 8, 197: 8, 201: 8, 209: 7, 211: 3, 241: 6, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 451: 8, 452: 8, 453: 6, 458: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 566: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 753: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1017: 8, 1020: 8, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1265: 8, 1280: 4, 1296: 4, 1300: 8, 1930: 7
}],
+ CAR.SILVERADO: [
+ {
+ 190: 6, 193: 8, 197: 8, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 257: 8, 288: 5, 289: 8, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 460: 5, 463: 3, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 528: 5, 532: 6, 534: 2, 560: 8, 562: 8, 563: 5, 565: 5, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 801: 8, 810: 8, 840: 5, 842: 5, 844: 8, 848: 4, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1033: 7, 1034: 7, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1930: 7
+ }],
}
DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict('gm_global_a_powertrain_generated', 'gm_global_a_object', chassis_dbc='gm_global_a_chassis'))
@@ -164,6 +173,6 @@ DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict('gm_global_a_power
EV_CAR = {CAR.VOLT, CAR.BOLT_EUV}
# We're integrated at the camera with VOACC on these cars (instead of ASCM w/ OBD-II harness)
-CAMERA_ACC_CAR = {CAR.BOLT_EUV}
+CAMERA_ACC_CAR = {CAR.BOLT_EUV, CAR.SILVERADO}
STEER_THRESHOLD = 1.0
diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py
index 5beaaf08d..5e1dfa7d0 100644
--- a/selfdrive/car/honda/carcontroller.py
+++ b/selfdrive/car/honda/carcontroller.py
@@ -190,12 +190,11 @@ class CarController:
if not self.CP.openpilotLongitudinalControl:
if self.frame % 2 == 0 and self.CP.carFingerprint not in HONDA_BOSCH_RADARLESS: # radarless cars don't have supplemental message
can_sends.append(hondacan.create_bosch_supplemental_1(self.packer, self.CP.carFingerprint))
- if dragonconf.dpAtl != 1:
- # If using stock ACC, spam cancel command to kill gas when OP disengages.
- if pcm_cancel_cmd:
- can_sends.append(hondacan.spam_buttons_command(self.packer, CruiseButtons.CANCEL, self.CP.carFingerprint))
- elif CC.cruiseControl.resume:
- can_sends.append(hondacan.spam_buttons_command(self.packer, CruiseButtons.RES_ACCEL, self.CP.carFingerprint))
+ # If using stock ACC, spam cancel command to kill gas when OP disengages.
+ if pcm_cancel_cmd:
+ can_sends.append(hondacan.spam_buttons_command(self.packer, CruiseButtons.CANCEL, self.CP.carFingerprint))
+ elif CC.cruiseControl.resume:
+ can_sends.append(hondacan.spam_buttons_command(self.packer, CruiseButtons.RES_ACCEL, self.CP.carFingerprint))
else:
# Send gas and brake commands.
diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py
index 6c4d65a4d..3e3320e10 100755
--- a/selfdrive/car/honda/interface.py
+++ b/selfdrive/car/honda/interface.py
@@ -4,7 +4,7 @@ from panda import Panda
from common.conversions import Conversions as CV
from common.numpy_fast import interp
from selfdrive.car.honda.values import CarControllerParams, CruiseButtons, HondaFlags, CAR, HONDA_BOSCH, HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_ALT_BRAKE_SIGNAL, HONDA_BOSCH_RADARLESS
-from selfdrive.car import STD_CARGO_KG, CivicParams, create_button_enable_events, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
+from selfdrive.car import STD_CARGO_KG, CivicParams, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
from selfdrive.car.interfaces import CarInterfaceBase
from selfdrive.car.disable_ecu import disable_ecu
from common.params import Params
@@ -87,7 +87,6 @@ class CarInterface(CarInterfaceBase):
eps_modified = True
if candidate == CAR.CIVIC:
- stop_and_go = True
ret.mass = CivicParams.MASS
ret.wheelbase = CivicParams.WHEELBASE
ret.centerToFront = CivicParams.CENTER_TO_FRONT
@@ -107,7 +106,6 @@ class CarInterface(CarInterfaceBase):
tire_stiffness_factor = 1.
elif candidate in (CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CIVIC_2022):
- stop_and_go = True
ret.mass = CivicParams.MASS
ret.wheelbase = CivicParams.WHEELBASE
ret.centerToFront = CivicParams.CENTER_TO_FRONT
@@ -117,7 +115,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]]
elif candidate in (CAR.ACCORD, CAR.ACCORDH):
- stop_and_go = True
ret.mass = 3279. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.83
ret.centerToFront = ret.wheelbase * 0.39
@@ -131,7 +128,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]]
elif candidate == CAR.ACURA_ILX:
- stop_and_go = False
ret.mass = 3095. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.67
ret.centerToFront = ret.wheelbase * 0.37
@@ -141,7 +137,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]]
elif candidate in (CAR.CRV, CAR.CRV_EU):
- stop_and_go = False
ret.mass = 3572. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.62
ret.centerToFront = ret.wheelbase * 0.41
@@ -152,7 +147,6 @@ class CarInterface(CarInterfaceBase):
ret.wheelSpeedFactor = 1.025
elif candidate == CAR.CRV_5G:
- stop_and_go = True
ret.mass = 3410. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.66
ret.centerToFront = ret.wheelbase * 0.41
@@ -170,7 +164,6 @@ class CarInterface(CarInterfaceBase):
ret.wheelSpeedFactor = 1.025
elif candidate == CAR.CRV_HYBRID:
- stop_and_go = True
ret.mass = 1667. + STD_CARGO_KG # mean of 4 models in kg
ret.wheelbase = 2.66
ret.centerToFront = ret.wheelbase * 0.41
@@ -181,7 +174,6 @@ class CarInterface(CarInterfaceBase):
ret.wheelSpeedFactor = 1.025
elif candidate == CAR.FIT:
- stop_and_go = False
ret.mass = 2644. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.53
ret.centerToFront = ret.wheelbase * 0.39
@@ -191,7 +183,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.2], [0.05]]
elif candidate == CAR.FREED:
- stop_and_go = False
ret.mass = 3086. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.74
# the remaining parameters were copied from FIT
@@ -202,7 +193,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.2], [0.05]]
elif candidate == CAR.HRV:
- stop_and_go = False
ret.mass = 3125 * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.61
ret.centerToFront = ret.wheelbase * 0.41
@@ -213,7 +203,6 @@ class CarInterface(CarInterfaceBase):
ret.wheelSpeedFactor = 1.025
elif candidate == CAR.ACURA_RDX:
- stop_and_go = False
ret.mass = 3935. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.68
ret.centerToFront = ret.wheelbase * 0.38
@@ -223,7 +212,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.8], [0.24]]
elif candidate == CAR.ACURA_RDX_3G:
- stop_and_go = True
ret.mass = 4068. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.75
ret.centerToFront = ret.wheelbase * 0.41
@@ -233,7 +221,6 @@ class CarInterface(CarInterfaceBase):
tire_stiffness_factor = 0.677
elif candidate == CAR.ODYSSEY:
- stop_and_go = False
ret.mass = 4471. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 3.00
ret.centerToFront = ret.wheelbase * 0.41
@@ -243,7 +230,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.28], [0.08]]
elif candidate == CAR.ODYSSEY_CHN:
- stop_and_go = False
ret.mass = 1849.2 + STD_CARGO_KG # mean of 4 models in kg
ret.wheelbase = 2.90
ret.centerToFront = ret.wheelbase * 0.41 # from CAR.ODYSSEY
@@ -253,7 +239,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.28], [0.08]]
elif candidate in (CAR.PILOT, CAR.PASSPORT):
- stop_and_go = False
ret.mass = 4204. * CV.LB_TO_KG + STD_CARGO_KG # average weight
ret.wheelbase = 2.82
ret.centerToFront = ret.wheelbase * 0.428
@@ -263,7 +248,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.38], [0.11]]
elif candidate == CAR.RIDGELINE:
- stop_and_go = False
ret.mass = 4515. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 3.18
ret.centerToFront = ret.wheelbase * 0.41
@@ -273,7 +257,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.38], [0.11]]
elif candidate == CAR.INSIGHT:
- stop_and_go = True
ret.mass = 2987. * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.7
ret.centerToFront = ret.wheelbase * 0.39
@@ -283,7 +266,6 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.6], [0.18]]
elif candidate == CAR.HONDA_E:
- stop_and_go = True
ret.mass = 3338.8 * CV.LB_TO_KG + STD_CARGO_KG
ret.wheelbase = 2.5
ret.centerToFront = ret.wheelbase * 0.5
@@ -315,7 +297,8 @@ class CarInterface(CarInterfaceBase):
# min speed to enable ACC. if car can do stop and go, then set enabling speed
# to a negative value, so it won't matter. Otherwise, add 0.5 mph margin to not
# conflict with PCM acc
- ret.minEnableSpeed = -1. if (stop_and_go or ret.enableGasInterceptor) else 25.5 * CV.MPH_TO_MS
+ stop_and_go = candidate in (HONDA_BOSCH | {CAR.CIVIC}) or ret.enableGasInterceptor
+ ret.minEnableSpeed = -1. if stop_and_go else 25.5 * CV.MPH_TO_MS
# TODO: get actual value, for now starting with reasonable value for
# civic and scaling by mass and wheelbase
@@ -393,9 +376,6 @@ class CarInterface(CarInterfaceBase):
if self.CS.CP.minEnableSpeed > 0 and ret.vEgo < 0.001:
events.add(EventName.manualRestart)
- # handle button presses
- events.events.extend(create_button_enable_events(ret.buttonEvents, self.CP.pcmCruise))
-
ret.events = events.to_msg()
return ret
diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py
index ab1cc9a6c..ad4f73c01 100644
--- a/selfdrive/car/honda/values.py
+++ b/selfdrive/car/honda/values.py
@@ -113,7 +113,7 @@ CAR_INFO: Dict[str, Optional[Union[HondaCarInfo, List[HondaCarInfo]]]] = {
HondaCarInfo("Honda Inspire 2018", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch_a),
],
CAR.ACCORDH: HondaCarInfo("Honda Accord Hybrid 2018-22", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch_a),
- CAR.CIVIC: HondaCarInfo("Honda Civic 2016-18", harness=Harness.nidec),
+ CAR.CIVIC: HondaCarInfo("Honda Civic 2016-18", harness=Harness.nidec, video_link="https://youtu.be/-IkImTe1NYE"),
CAR.CIVIC_BOSCH: [
HondaCarInfo("Honda Civic 2019-21", "All", video_link="https://www.youtube.com/watch?v=4Iz1Mz5LGF8", footnotes=[Footnote.CIVIC_DIESEL], min_steer_speed=2. * CV.MPH_TO_MS, harness=Harness.bosch_a),
HondaCarInfo("Honda Civic Hatchback 2017-21", harness=Harness.bosch_a),
diff --git a/selfdrive/car/hyundai/carcontroller.py b/selfdrive/car/hyundai/carcontroller.py
index 60fb46340..971330a33 100644
--- a/selfdrive/car/hyundai/carcontroller.py
+++ b/selfdrive/car/hyundai/carcontroller.py
@@ -5,7 +5,7 @@ from common.realtime import DT_CTRL
from opendbc.can.packer import CANPacker
from selfdrive.car import apply_std_steer_torque_limits
from selfdrive.car.hyundai import hyundaicanfd, hyundaican
-from selfdrive.car.hyundai.values import Buttons, CarControllerParams, CANFD_CAR, CAR
+from selfdrive.car.hyundai.values import HyundaiFlags, Buttons, CarControllerParams, CANFD_CAR, CAR
VisualAlert = car.CarControl.HUDControl.VisualAlert
LongCtrlState = car.CarControl.Actuators.LongControlState
@@ -71,22 +71,33 @@ class CarController:
if self.CP.carFingerprint in CANFD_CAR:
# steering control
- can_sends.append(hyundaicanfd.create_lkas(self.packer, CC.enabled, CC.latActive, apply_steer))
+ can_sends.append(hyundaicanfd.create_lkas(self.packer, self.CP, CC.enabled, CC.latActive, apply_steer))
- if self.frame % 5 == 0:
+ # block LFA on HDA2
+ if self.frame % 5 == 0 and (self.CP.flags & HyundaiFlags.CANFD_HDA2):
can_sends.append(hyundaicanfd.create_cam_0x2a4(self.packer, CS.cam_0x2a4))
- # cruise cancel
+ # LFA and HDA icons
+ if self.frame % 2 == 0 and not (self.CP.flags & HyundaiFlags.CANFD_HDA2):
+ can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, CC.enabled))
+
+ # button presses
if (self.frame - self.last_button_frame) * DT_CTRL > 0.25:
+ # cruise cancel
if CC.cruiseControl.cancel:
- for _ in range(20):
- can_sends.append(hyundaicanfd.create_buttons(self.packer, CS.buttons_counter+1, Buttons.CANCEL))
- self.last_button_frame = self.frame
+ if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS:
+ can_sends.append(hyundaicanfd.create_cruise_info(self.packer, CS.cruise_info_copy, True))
+ self.last_button_frame = self.frame
+ else:
+ for _ in range(20):
+ can_sends.append(hyundaicanfd.create_buttons(self.packer, CS.buttons_counter+1, Buttons.CANCEL))
+ self.last_button_frame = self.frame
# cruise standstill resume
elif CC.cruiseControl.resume:
- can_sends.append(hyundaicanfd.create_buttons(self.packer, CS.buttons_counter+1, Buttons.RES_ACCEL))
- self.last_button_frame = self.frame
+ if not (self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS):
+ can_sends.append(hyundaicanfd.create_buttons(self.packer, CS.buttons_counter+1, Buttons.RES_ACCEL))
+ self.last_button_frame = self.frame
else:
# tester present - w/ no response (keeps radar disabled)
diff --git a/selfdrive/car/hyundai/carstate.py b/selfdrive/car/hyundai/carstate.py
index 640961df1..d2562d5f8 100644
--- a/selfdrive/car/hyundai/carstate.py
+++ b/selfdrive/car/hyundai/carstate.py
@@ -5,7 +5,7 @@ from cereal import car
from common.conversions import Conversions as CV
from opendbc.can.parser import CANParser
from opendbc.can.can_define import CANDefine
-from selfdrive.car.hyundai.values import DBC, FEATURES, CAMERA_SCC_CAR, CANFD_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams
+from selfdrive.car.hyundai.values import HyundaiFlags, DBC, FEATURES, CAMERA_SCC_CAR, CANFD_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams
from selfdrive.car.interfaces import CarStateBase
PREV_BUTTON_SAMPLES = 8
@@ -20,7 +20,7 @@ class CarState(CarStateBase):
self.main_buttons = deque([Buttons.NONE] * PREV_BUTTON_SAMPLES, maxlen=PREV_BUTTON_SAMPLES)
if CP.carFingerprint in CANFD_CAR:
- self.shifter_values = can_define.dv["ACCELERATOR"]["GEAR"]
+ self.shifter_values = can_define.dv["GEAR_SHIFTER"]["GEAR"]
elif self.CP.carFingerprint in FEATURES["use_cluster_gears"]:
self.shifter_values = can_define.dv["CLU15"]["CF_Clu_Gear"]
elif self.CP.carFingerprint in FEATURES["use_tcu_gears"]:
@@ -136,14 +136,17 @@ class CarState(CarStateBase):
def update_canfd(self, cp, cp_cam):
ret = car.CarState.new_message()
- ret.gas = cp.vl["ACCELERATOR"]["ACCELERATOR_PEDAL"] / 255.
- ret.gasPressed = ret.gas > 1e-3
+ if self.CP.flags & HyundaiFlags.CANFD_HDA2:
+ ret.gas = cp.vl["ACCELERATOR"]["ACCELERATOR_PEDAL"] / 255.
+ else:
+ ret.gas = cp.vl["ACCELERATOR_ALT"]["ACCELERATOR_PEDAL"] / 1023.
+ ret.gasPressed = ret.gas > 1e-5
ret.brakePressed = cp.vl["BRAKE"]["BRAKE_PRESSED"] == 1
ret.doorOpen = cp.vl["DOORS_SEATBELTS"]["DRIVER_DOOR_OPEN"] == 1
ret.seatbeltUnlatched = cp.vl["DOORS_SEATBELTS"]["DRIVER_SEATBELT_LATCHED"] == 0
- gear = cp.vl["ACCELERATOR"]["GEAR"]
+ gear = cp.vl["GEAR_SHIFTER"]["GEAR"]
ret.gearShifter = self.parse_gear_shifter(self.shifter_values.get(gear))
# TODO: figure out positions
@@ -168,16 +171,19 @@ class CarState(CarStateBase):
ret.cruiseState.available = True
ret.cruiseState.enabled = cp.vl["SCC1"]["CRUISE_ACTIVE"] == 1
- ret.cruiseState.standstill = cp.vl["CRUISE_INFO"]["CRUISE_STANDSTILL"] == 1
-
+ cp_cruise_info = cp if self.CP.flags & HyundaiFlags.CANFD_HDA2 else cp_cam
speed_factor = CV.MPH_TO_MS if cp.vl["CLUSTER_INFO"]["DISTANCE_UNIT"] == 1 else CV.KPH_TO_MS
- ret.cruiseState.speed = cp.vl["CRUISE_INFO"]["SET_SPEED"] * speed_factor
+ ret.cruiseState.speed = cp_cruise_info.vl["CRUISE_INFO"]["SET_SPEED"] * speed_factor
+ ret.cruiseState.standstill = cp_cruise_info.vl["CRUISE_INFO"]["CRUISE_STANDSTILL"] == 1
- self.cruise_buttons.extend(cp.vl_all["CRUISE_BUTTONS"]["CRUISE_BUTTONS"])
- self.main_buttons.extend(cp.vl_all["CRUISE_BUTTONS"]["ADAPTIVE_CRUISE_MAIN_BTN"])
- self.buttons_counter = cp.vl["CRUISE_BUTTONS"]["COUNTER"]
+ cruise_btn_msg = "CRUISE_BUTTONS_ALT" if self.CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS else "CRUISE_BUTTONS"
+ self.cruise_buttons.extend(cp.vl_all[cruise_btn_msg]["CRUISE_BUTTONS"])
+ self.main_buttons.extend(cp.vl_all[cruise_btn_msg]["ADAPTIVE_CRUISE_MAIN_BTN"])
+ self.buttons_counter = cp.vl[cruise_btn_msg]["COUNTER"]
+ self.cruise_info_copy = copy.copy(cp_cruise_info.vl["CRUISE_INFO"])
- self.cam_0x2a4 = copy.copy(cp_cam.vl["CAM_0x2a4"])
+ if self.CP.flags & HyundaiFlags.CANFD_HDA2:
+ self.cam_0x2a4 = copy.copy(cp_cam.vl["CAM_0x2a4"])
ret.cruiseActualEnabled = ret.cruiseState.enabled
return ret
@@ -320,9 +326,7 @@ class CarState(CarStateBase):
@staticmethod
def get_cam_can_parser(CP):
if CP.carFingerprint in CANFD_CAR:
- signals = [(f"BYTE{i}", "CAM_0x2a4") for i in range(3, 24)]
- checks = [("CAM_0x2a4", 20)]
- return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 6)
+ return CarState.get_cam_can_parser_canfd(CP)
signals = [
# signal_name, signal_address
@@ -375,14 +379,15 @@ class CarState(CarStateBase):
@staticmethod
def get_can_parser_canfd(CP):
+
+ cruise_btn_msg = "CRUISE_BUTTONS_ALT" if CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS else "CRUISE_BUTTONS"
signals = [
("WHEEL_SPEED_1", "WHEEL_SPEEDS"),
("WHEEL_SPEED_2", "WHEEL_SPEEDS"),
("WHEEL_SPEED_3", "WHEEL_SPEEDS"),
("WHEEL_SPEED_4", "WHEEL_SPEEDS"),
- ("ACCELERATOR_PEDAL", "ACCELERATOR"),
- ("GEAR", "ACCELERATOR"),
+ ("GEAR", "GEAR_SHIFTER"),
("BRAKE_PRESSED", "BRAKE"),
("STEERING_RATE", "STEERING_SENSORS"),
@@ -391,11 +396,9 @@ class CarState(CarStateBase):
("STEERING_OUT_TORQUE", "MDPS"),
("CRUISE_ACTIVE", "SCC1"),
- ("SET_SPEED", "CRUISE_INFO"),
- ("CRUISE_STANDSTILL", "CRUISE_INFO"),
- ("COUNTER", "CRUISE_BUTTONS"),
- ("CRUISE_BUTTONS", "CRUISE_BUTTONS"),
- ("ADAPTIVE_CRUISE_MAIN_BTN", "CRUISE_BUTTONS"),
+ ("COUNTER", cruise_btn_msg),
+ ("CRUISE_BUTTONS", cruise_btn_msg),
+ ("ADAPTIVE_CRUISE_MAIN_BTN", cruise_btn_msg),
("DISTANCE_UNIT", "CLUSTER_INFO"),
@@ -408,16 +411,64 @@ class CarState(CarStateBase):
checks = [
("WHEEL_SPEEDS", 100),
- ("ACCELERATOR", 100),
+ ("GEAR_SHIFTER", 100),
("BRAKE", 100),
("STEERING_SENSORS", 100),
("MDPS", 100),
("SCC1", 50),
- ("CRUISE_INFO", 50),
- ("CRUISE_BUTTONS", 50),
+ (cruise_btn_msg, 50),
("CLUSTER_INFO", 4),
("BLINKERS", 4),
("DOORS_SEATBELTS", 4),
]
- return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 5)
+ if CP.flags & HyundaiFlags.CANFD_HDA2:
+ signals += [
+ ("ACCELERATOR_PEDAL", "ACCELERATOR"),
+ ("GEAR", "ACCELERATOR"),
+ ("SET_SPEED", "CRUISE_INFO"),
+ ("CRUISE_STANDSTILL", "CRUISE_INFO"),
+ ]
+ checks += [
+ ("CRUISE_INFO", 50),
+ ("ACCELERATOR", 100),
+ ]
+ else:
+ signals += [
+ ("ACCELERATOR_PEDAL", "ACCELERATOR_ALT"),
+ ]
+ checks += [
+ ("ACCELERATOR_ALT", 100),
+ ]
+
+ bus = 5 if CP.flags & HyundaiFlags.CANFD_HDA2 else 4
+ return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, bus)
+
+ @staticmethod
+ def get_cam_can_parser_canfd(CP):
+ if CP.flags & HyundaiFlags.CANFD_HDA2:
+ signals = [(f"BYTE{i}", "CAM_0x2a4") for i in range(3, 24)]
+ checks = [("CAM_0x2a4", 20)]
+ else:
+ signals = [
+ ("COUNTER", "CRUISE_INFO"),
+ ("NEW_SIGNAL_1", "CRUISE_INFO"),
+ ("CRUISE_MAIN", "CRUISE_INFO"),
+ ("CRUISE_STATUS", "CRUISE_INFO"),
+ ("CRUISE_INACTIVE", "CRUISE_INFO"),
+ ("NEW_SIGNAL_2", "CRUISE_INFO"),
+ ("CRUISE_STANDSTILL", "CRUISE_INFO"),
+ ("NEW_SIGNAL_3", "CRUISE_INFO"),
+ ("BYTE11", "CRUISE_INFO"),
+ ("SET_SPEED", "CRUISE_INFO"),
+ ("NEW_SIGNAL_4", "CRUISE_INFO"),
+ ]
+
+ signals += [(f"BYTE{i}", "CRUISE_INFO") for i in range(3, 7)]
+ signals += [(f"BYTE{i}", "CRUISE_INFO") for i in range(13, 31)]
+
+ checks = [
+ ("CRUISE_INFO", 50),
+ ]
+
+ return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 6)
diff --git a/selfdrive/car/hyundai/hyundaicanfd.py b/selfdrive/car/hyundai/hyundaicanfd.py
index 36207aa11..a53be7627 100644
--- a/selfdrive/car/hyundai/hyundaicanfd.py
+++ b/selfdrive/car/hyundai/hyundaicanfd.py
@@ -1,4 +1,7 @@
-def create_lkas(packer, enabled, lat_active, apply_steer):
+from selfdrive.car.hyundai.values import HyundaiFlags
+
+
+def create_lkas(packer, CP, enabled, lat_active, apply_steer):
values = {
"LKA_MODE": 2,
"LKA_ICON": 2 if enabled else 1,
@@ -10,7 +13,9 @@ def create_lkas(packer, enabled, lat_active, apply_steer):
"NEW_SIGNAL_1": 0,
"NEW_SIGNAL_2": 0,
}
- return packer.make_can_msg("LKAS", 4, values)
+
+ msg = "LKAS" if CP.flags & HyundaiFlags.CANFD_HDA2 else "LFA"
+ return packer.make_can_msg(msg, 4, values)
def create_cam_0x2a4(packer, camera_values):
camera_values.update({
@@ -25,3 +30,17 @@ def create_buttons(packer, cnt, btn):
"CRUISE_BUTTONS": btn,
}
return packer.make_can_msg("CRUISE_BUTTONS", 5, values)
+
+def create_cruise_info(packer, cruise_info_copy, cancel):
+ values = cruise_info_copy
+ if cancel:
+ values["CRUISE_STATUS"] = 0
+ values["CRUISE_INACTIVE"] = 1
+ return packer.make_can_msg("CRUISE_INFO", 4, values)
+
+def create_lfahda_cluster(packer, enabled):
+ values = {
+ "HDA_ICON": 1 if enabled else 0,
+ "LFA_ICON": 2 if enabled else 0,
+ }
+ return packer.make_can_msg("LFAHDA_CLUSTER", 4, values)
diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py
index eadd088a9..8c077938e 100644
--- a/selfdrive/car/hyundai/interface.py
+++ b/selfdrive/car/hyundai/interface.py
@@ -2,9 +2,9 @@
from cereal import car
from panda import Panda
from common.conversions import Conversions as CV
-from selfdrive.car.hyundai.values import CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, Buttons, CarControllerParams
+from selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, Buttons, CarControllerParams
from selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR
-from selfdrive.car import STD_CARGO_KG, create_button_enable_events, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
+from selfdrive.car import STD_CARGO_KG, create_button_event, scale_rot_inertia, scale_tire_stiffness, gen_empty_fingerprint, get_safety_config
from selfdrive.car.interfaces import CarInterfaceBase
from selfdrive.car.disable_ecu import disable_ecu
from common.params import Params
@@ -116,13 +116,11 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.indi.actuatorEffectivenessV = [2.3]
ret.minSteerSpeed = 60 * CV.KPH_TO_MS
elif candidate in (CAR.KONA, CAR.KONA_EV, CAR.KONA_HEV, CAR.KONA_EV_2022):
- ret.lateralTuning.pid.kf = 0.00005
ret.mass = {CAR.KONA_EV: 1685., CAR.KONA_HEV: 1425., CAR.KONA_EV_2022: 1743.}.get(candidate, 1275.) + STD_CARGO_KG
ret.wheelbase = 2.6
ret.steerRatio = 13.42 # Spec
tire_stiffness_factor = 0.385
- ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
- ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
+ CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
elif candidate in (CAR.IONIQ, CAR.IONIQ_EV_LTD, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.IONIQ_HEV_2022):
ret.lateralTuning.pid.kf = 0.00006
ret.mass = 1490. + STD_CARGO_KG # weight per hyundai site https://www.hyundaiusa.com/ioniq-electric/specifications.aspx
@@ -163,6 +161,12 @@ class CarInterface(CarInterfaceBase):
tire_stiffness_factor = 0.385
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
+ elif candidate == CAR.TUCSON_HYBRID_4TH_GEN:
+ ret.mass = 1680. + STD_CARGO_KG # average of all 3 trims
+ ret.wheelbase = 2.756
+ ret.steerRatio = 16.
+ tire_stiffness_factor = 0.385
+ CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
# Kia
elif candidate == CAR.KIA_SORENTO:
@@ -172,7 +176,7 @@ class CarInterface(CarInterfaceBase):
ret.steerRatio = 14.4 * 1.1 # 10% higher at the center seems reasonable
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
- elif candidate in (CAR.KIA_NIRO_EV, CAR.KIA_NIRO_HEV, CAR.KIA_NIRO_HEV_2021):
+ elif candidate in (CAR.KIA_NIRO_EV, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021):
ret.lateralTuning.pid.kf = 0.00006
ret.mass = 1737. + STD_CARGO_KG
ret.wheelbase = 2.7
@@ -180,7 +184,7 @@ class CarInterface(CarInterfaceBase):
tire_stiffness_factor = 0.385
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.], [0.]]
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.25], [0.05]]
- if candidate == CAR.KIA_NIRO_HEV:
+ if candidate == CAR.KIA_NIRO_PHEV:
ret.minSteerSpeed = 32 * CV.MPH_TO_MS
elif candidate == CAR.KIA_SELTOS:
ret.mass = 1337. + STD_CARGO_KG
@@ -287,7 +291,18 @@ class CarInterface(CarInterfaceBase):
if candidate in CANFD_CAR:
ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.noOutput),
get_safety_config(car.CarParams.SafetyModel.hyundaiCanfd)]
+
+ # detect HDA2 with LKAS message
+ if 0x50 in fingerprint[6]:
+ ret.flags |= HyundaiFlags.CANFD_HDA2.value
+ ret.safetyConfigs[1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2
+ else:
+ # non-HDA2
+ if 0x1cf not in fingerprint[4]:
+ ret.flags |= HyundaiFlags.CANFD_ALT_BUTTONS.value
else:
+ ret.enableBsm = 0x58b in fingerprint[0]
+
if candidate in LEGACY_SAFETY_MODE_CAR:
# these cars require a special panda safety mode due to missing counters and checksums in the messages
ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hyundaiLegacy)]
@@ -317,8 +332,6 @@ class CarInterface(CarInterfaceBase):
ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront,
tire_stiffness_factor=tire_stiffness_factor)
- ret.enableBsm = 0x58b in fingerprint[0]
-
if int(Params().get("dp_atl").decode('utf-8')) == 1:
ret.openpilotLongitudinalControl = False
@@ -334,6 +347,14 @@ class CarInterface(CarInterfaceBase):
ret = self.CS.update(self.cp, self.cp_cam)
ret.cruiseState.enabled, ret.cruiseState.available = self.dp_atl_mode(ret)
+ if self.CS.CP.openpilotLongitudinalControl and self.CS.cruise_buttons[-1] != self.CS.prev_cruise_buttons:
+ buttonEvents = [create_button_event(self.CS.cruise_buttons[-1], self.CS.prev_cruise_buttons, BUTTONS_DICT)]
+ # Handle CF_Clu_CruiseSwState changing buttons mid-press
+ if self.CS.cruise_buttons[-1] != 0 and self.CS.prev_cruise_buttons != 0:
+ buttonEvents.append(create_button_event(0, self.CS.prev_cruise_buttons, BUTTONS_DICT))
+
+ ret.buttonEvents = buttonEvents
+
# On some newer model years, the CANCEL button acts as a pause/resume button based on the PCM state
# To avoid re-engaging when openpilot cancels, check user engagement intention via buttons
# Main button also can trigger an engagement on these cars
@@ -344,15 +365,6 @@ class CarInterface(CarInterfaceBase):
if self.CS.brake_error:
events.add(EventName.brakeUnavailable)
- if self.CS.CP.openpilotLongitudinalControl and self.CS.cruise_buttons[-1] != self.CS.prev_cruise_buttons:
- buttonEvents = [create_button_event(self.CS.cruise_buttons[-1], self.CS.prev_cruise_buttons, BUTTONS_DICT)]
- # Handle CF_Clu_CruiseSwState changing buttons mid-press
- if self.CS.cruise_buttons[-1] != 0 and self.CS.prev_cruise_buttons != 0:
- buttonEvents.append(create_button_event(0, self.CS.prev_cruise_buttons, BUTTONS_DICT))
-
- ret.buttonEvents = buttonEvents
- events.events.extend(create_button_enable_events(ret.buttonEvents))
-
# low speed steer alert hysteresis logic (only for cars with steer cut off above 10 m/s)
if ret.vEgo < (self.CP.minSteerSpeed + 2.) and self.CP.minSteerSpeed > 10.:
self.low_speed_alert = True
diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py
index 8879931b2..aa1823522 100644
--- a/selfdrive/car/hyundai/values.py
+++ b/selfdrive/car/hyundai/values.py
@@ -1,3 +1,4 @@
+from enum import IntFlag
from dataclasses import dataclass
from typing import Dict, List, Optional, Union
@@ -29,7 +30,7 @@ class CarControllerParams:
# To determine the limit for your car, find the maximum value that the stock LKAS will request.
# If the max stock LKAS request is <384, add your car to this list.
elif CP.carFingerprint in (CAR.GENESIS_G80, CAR.GENESIS_G90, CAR.ELANTRA, CAR.HYUNDAI_GENESIS, CAR.ELANTRA_GT_I30, CAR.IONIQ,
- CAR.IONIQ_EV_LTD, CAR.SANTA_FE_PHEV_2022, CAR.SONATA_LF, CAR.KIA_FORTE, CAR.KIA_NIRO_HEV,
+ CAR.IONIQ_EV_LTD, CAR.SANTA_FE_PHEV_2022, CAR.SONATA_LF, CAR.KIA_FORTE, CAR.KIA_NIRO_PHEV,
CAR.KIA_OPTIMA_H, CAR.KIA_SORENTO, CAR.KIA_STINGER):
self.STEER_MAX = 255
@@ -38,6 +39,11 @@ class CarControllerParams:
self.STEER_MAX = 384
+class HyundaiFlags(IntFlag):
+ CANFD_HDA2 = 1
+ CANFD_ALT_BUTTONS = 2
+
+
class CAR:
# Hyundai
ELANTRA = "HYUNDAI ELANTRA 2017"
@@ -66,12 +72,13 @@ class CAR:
VELOSTER = "HYUNDAI VELOSTER 2019"
SONATA_HYBRID = "HYUNDAI SONATA HYBRID 2021"
IONIQ_5 = "HYUNDAI IONIQ 5 2022"
+ TUCSON_HYBRID_4TH_GEN = "HYUNDAI TUCSON HYBRID 4TH GEN"
# Kia
KIA_FORTE = "KIA FORTE E 2018 & GT 2021"
KIA_K5_2021 = "KIA K5 2021"
KIA_NIRO_EV = "KIA NIRO EV 2020"
- KIA_NIRO_HEV = "KIA NIRO HYBRID 2019"
+ KIA_NIRO_PHEV = "KIA NIRO HYBRID 2019"
KIA_NIRO_HEV_2021 = "KIA NIRO HYBRID 2021"
KIA_OPTIMA = "KIA OPTIMA SX 2019 & 2016"
KIA_OPTIMA_H = "KIA OPTIMA HYBRID 2017 & SPORTS 2019"
@@ -112,7 +119,7 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = {
CAR.KONA_EV_2022: HyundaiCarInfo("Hyundai Kona Electric 2022", "Smart Cruise Control (SCC)", harness=Harness.hyundai_o),
CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020", video_link="https://youtu.be/0dwpAHiZgFo", harness=Harness.hyundai_i),
CAR.SANTA_FE: HyundaiCarInfo("Hyundai Santa Fe 2019-20", "All", harness=Harness.hyundai_d),
- CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-22", "All", harness=Harness.hyundai_l),
+ CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-22", "All", video_link="https://youtu.be/VnHzSTygTS4", harness=Harness.hyundai_l),
CAR.SANTA_FE_HEV_2022: HyundaiCarInfo("Hyundai Santa Fe Hybrid 2022", "All", harness=Harness.hyundai_l),
CAR.SANTA_FE_PHEV_2022: HyundaiCarInfo("Hyundai Santa Fe Plug-in Hybrid 2022", "All", harness=Harness.hyundai_l),
CAR.SONATA: HyundaiCarInfo("Hyundai Sonata 2020-22", "All", video_link="https://www.youtube.com/watch?v=ix63r9kE3Fw", harness=Harness.hyundai_a),
@@ -127,7 +134,8 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = {
],
CAR.VELOSTER: HyundaiCarInfo("Hyundai Veloster 2019-20", "Smart Cruise Control (SCC)", min_enable_speed=5. * CV.MPH_TO_MS, harness=Harness.hyundai_e),
CAR.SONATA_HYBRID: HyundaiCarInfo("Hyundai Sonata Hybrid 2020-22", "All", harness=Harness.hyundai_a),
- CAR.IONIQ_5: HyundaiCarInfo("Hyundai Ioniq 5 2022", "Highway Driving Assist II", harness=Harness.none),
+ CAR.IONIQ_5: HyundaiCarInfo("Hyundai Ioniq 5 2022", "Highway Driving Assist II", harness=Harness.hyundai_q),
+ CAR.TUCSON_HYBRID_4TH_GEN: HyundaiCarInfo("Hyundai Tucson Hybrid 2022", "All", harness=Harness.hyundai_n),
# Kia
CAR.KIA_FORTE: [
@@ -141,7 +149,7 @@ CAR_INFO: Dict[str, Optional[Union[HyundaiCarInfo, List[HyundaiCarInfo]]]] = {
HyundaiCarInfo("Kia Niro Electric 2021", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_c),
HyundaiCarInfo("Kia Niro Electric 2022", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_h),
],
- CAR.KIA_NIRO_HEV: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2018-19", min_enable_speed=10. * CV.MPH_TO_MS, harness=Harness.hyundai_c),
+ CAR.KIA_NIRO_PHEV: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2018-19", min_enable_speed=10. * CV.MPH_TO_MS, harness=Harness.hyundai_c),
CAR.KIA_NIRO_HEV_2021: [
HyundaiCarInfo("Kia Niro Hybrid 2021", harness=Harness.hyundai_f), # TODO: could be hyundai_d, verify
HyundaiCarInfo("Kia Niro Hybrid 2022", harness=Harness.hyundai_h),
@@ -613,6 +621,7 @@ FW_VERSIONS = {
b'\xf1\x00TM__ SCC F-CUP 1.00 1.00 99110-S1500 ',
b'\xf1\x8799110S1500\xf1\x00TM__ SCC F-CUP 1.00 1.00 99110-S1500 ',
b'\xf1\x8799110S1500\xf1\x00TM__ SCC FHCUP 1.00 1.00 99110-S1500 ',
+ b'\xf1\x00TM__ SCC FHCUP 1.00 1.00 99110-S1500 ',
],
(Ecu.esp, 0x7d1, None): [
b'\xf1\x00TM ESC \x02 101 \x08\x04 58910-S2GA0',
@@ -621,6 +630,7 @@ FW_VERSIONS = {
b'\xf1\x8758910-S2GA0\xf1\x00TM ESC \x02 101 \x08\x04 58910-S2GA0',
b'\xf1\x8758910-S1DA0\xf1\x00TM ESC \x1e 102 \x08\x08 58910-S1DA0',
b'\xf1\x8758910-S2GA0\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0',
+ b'\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0',
],
(Ecu.engine, 0x7e0, None): [
b'\xf1\x82TACVN5GMI3XXXH0A',
@@ -629,6 +639,7 @@ FW_VERSIONS = {
b'\xf1\x82TMCFD5MMCXXXXG0A',
b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82TMDWN5TMD3TXXJ1A',
b'\xf1\x81HM6M2_0a0_G00',
+ b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M1_0a0_J10',
],
(Ecu.eps, 0x7d4, None): [
b'\xf1\x00TM MDPS C 1.00 1.02 56370-S2AA0 0B19',
@@ -648,6 +659,8 @@ FW_VERSIONS = {
b'\xf1\x87KMMYBU034207SB72x\x89\x88\x98h\x88\x98\x89\x87fhvvfWf33_\xff\x87\xff\x8f\xfa\x81\xe5\xf1\x89HT6TAF00A1\xf1\x82STM0M25GS1\x00\x00\x00\x00\x00\x00',
b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02730A1 \xf1\x00T02601BL T02730A1 VTMPT25XXX730NS2\xa6',
b'\xf1\x00HT6TA290BLHT6TAF00A1STM0M25GS1\x00\x00\x00\x00\x00\x006\xd8\x97\x15',
+ b'\xf1\x00T02601BL T02900A1 VTMPT25XXX900NS8\xb7\xaa\xfe\xfc',
+ b'\xf1\x87954A02N250\x00\x00\x00\x00\x00\xf1\x81T02900A1 \xf1\x00T02601BL T02900A1 VTMPT25XXX900NS8\xb7\xaa\xfe\xfc',
],
},
CAR.SANTA_FE_HEV_2022: {
@@ -690,6 +703,7 @@ FW_VERSIONS = {
(Ecu.fwdRadar, 0x7d0, None): [
b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5100 ',
b'\xf1\x00CK__ SCC F_CUP 1.00 1.03 96400-J5100 ',
+ b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5000 ',
],
(Ecu.engine, 0x7e0, None): [
b'\xf1\x81606DE051\x00\x00\x00\x00\x00\x00\x00\x00',
@@ -707,6 +721,7 @@ FW_VERSIONS = {
(Ecu.fwdCamera, 0x7c4, None): [
b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 95740-J5000 170822',
b'\xf1\x00CK MFC AT USA LHD 1.00 1.04 95740-J5000 180504',
+ b'\xf1\x00CK MFC AT EUR LHD 1.00 1.03 95740-J5000 170822',
],
(Ecu.transmission, 0x7e1, None): [
b'\xf1\x87VCJLE17622572DK0vd6D\x99\x98y\x97vwVffUfvfC%CuT&Dx\x87o\xff{\x1c\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0',
@@ -716,6 +731,7 @@ FW_VERSIONS = {
b'\xf1\x87VDHLG17118862DK2\x8awWwgu\x96wVfUVwv\x97xWvfvUTGTx\x87o\xff\xc9\xed\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00SCK0T33NB0\x88\xa2\xe6\xf0',
b'\xf1\x87VDKLJ18675252DK6\x89vhgwwwwveVU\x88w\x87w\x99vgf\x97vXfgw_\xff\xc2\xfb\xf1\x89E25\x00\x00\x00\x00\x00\x00\x00\xf1\x82TCK0T33NB2',
b'\xf1\x87WAJTE17552812CH4vfFffvfVeT5DwvvVVdFeegeg\x88\x88o\xff\x1a]\xf1\x81E21\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E21\x00\x00\x00\x00\x00\x00\x00TCK2T20NB1\x19\xd2\x00\x94',
+ b'\xf1\x87VDHLG17274082DK2wfFf\x89x\x98wUT5T\x88v\x97xgeGefTGTVvO\xff\x1c\x14\xf1\x81E19\x00\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 E19\x00\x00\x00\x00\x00\x00\x00SCK0T33UB2\xee[\x97S',
],
},
CAR.PALISADE: {
@@ -810,6 +826,7 @@ FW_VERSIONS = {
b"\xf1\x87LBLUFN622950KF36\xa8\x88\x88\x88\x87w\x87xh\x99\x96\x89\x88\x99\x98\x89\x88\x99\x98\x89\x87o\xf6\xff\x98\x88o\xffx'\xf1\x81U891\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U891\x00\x00\x00\x00\x00\x00SLX2G38NB3\xd1\xc3\xf8\xa8",
b'\xf1\x87LDMVBN950669KF37\x97www\x96fffy\x99\xa7\x99\xa9\x99\xaa\x99g\x88\x96x\xb8\x8f\xf9\xffTD/\xff\xa7\xcb\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89',
b'\xf1\x87LDLVAA4478824HH1\x87wwwvfvg\x89\x99\xa8\x99w\x88\x87x\x89\x99\xa8\x99\xa6o\xfa\xfffU/\xffu\x92\xf1\x81U903\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U903\x00\x00\x00\x00\x00\x00TON4G38NB2[v\\\xb6',
+ b'\xf1\x87LDMVBN871852KF37\xb9\x99\x99\x99\xa8\x88\x88\x88y\x99\xa7\x99x\x99\xa7\x89\x88\x88\x98\x88\x89o\xf7\xff\xaa\x88o\xff\x0e\xed\xf1\x81U922\x00\x00\x00\x00\x00\x00\xf1\x00bcsh8p54 U922\x00\x00\x00\x00\x00\x00SLX4G38NB5\xb9\x94\xe8\x89',
],
},
CAR.VELOSTER: {
@@ -1010,6 +1027,7 @@ FW_VERSIONS = {
b'\xf1\x00DEev SCC F-CUP 1.00 1.02 96400-Q4000 ',
b'\xf1\x00DEev SCC F-CUP 1.00 1.02 96400-Q4100 ',
b'\xf1\x00DEev SCC F-CUP 1.00 1.03 96400-Q4100 ',
+ b'\xf1\x00DEev SCC FHCUP 1.00 1.03 96400-Q4000 ',
b'\xf1\x8799110Q4000\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4000 ',
b'\xf1\x8799110Q4100\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4100 ',
b'\xf1\x8799110Q4500\xf1\x00DEev SCC F-CUP 1.00 1.00 99110-Q4500 ',
@@ -1029,9 +1047,10 @@ FW_VERSIONS = {
b'\xf1\x00DEE MFC AT USA LHD 1.00 1.03 95740-Q4000 180821',
b'\xf1\x00DEE MFC AT USA LHD 1.00 1.01 99211-Q4500 210428',
b'\xf1\x00DEE MFC AT EUR LHD 1.00 1.03 95740-Q4000 180821',
+ b'\xf1\x00DEE MFC AT KOR LHD 1.00 1.03 95740-Q4000 180821',
],
},
- CAR.KIA_NIRO_HEV: {
+ CAR.KIA_NIRO_PHEV: {
(Ecu.engine, 0x7e0, None): [
b'\xf1\x816H6F4051\x00\x00\x00\x00\x00\x00\x00\x00',
b'\xf1\x816H6D1051\x00\x00\x00\x00\x00\x00\x00\x00',
@@ -1137,11 +1156,13 @@ FW_VERSIONS = {
b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.00 99210-AB000 200819',
b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.03 99210-AA000 200819',
b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.01 99210-AB000 210205',
+ b'\xf1\x00CN7 MFC AT USA LHD 1.00 1.06 99210-AA000 220111',
],
(Ecu.esp, 0x7d1, None): [
b'\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800',
b'\xf1\x8758910-AA800\xf1\x00CN ESC \t 104 \x08\x03 58910-AA800',
b'\xf1\x8758910-AB800\xf1\x00CN ESC \t 101 \x10\x03 58910-AB800',
+ b'\xf1\x8758910-AA800\xf1\x00CN ESC \t 105 \x10\x03 58910-AA800',
],
(Ecu.transmission, 0x7e1, None): [
b'\xf1\x00HT6WA280BLHT6VA640A1CCN0N20NS5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
@@ -1156,7 +1177,7 @@ FW_VERSIONS = {
b'\xf1\x82CNCWD0AMFCXCSFFA',
b'\xf1\x82CNCWD0AMFCXCSFFB',
b'\xf1\x82CNCVD0AMFCXCSFFB',
- b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x82CNDWD0AMFCXCSG8A',
+ b'\xf1\x870\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x81HM6M2_0a0_G80',
],
},
CAR.ELANTRA_HEV_2021: {
@@ -1282,6 +1303,21 @@ FW_VERSIONS = {
b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.02 99211-GI010 211206',
],
},
+ CAR.TUCSON_HYBRID_4TH_GEN: {
+ (Ecu.fwdCamera, 0x7c4, None): [
+ b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9240 14Q',
+ ],
+ (Ecu.eps, 0x7d4, None): [
+ b'\xf1\x00NX4 MDPS C 1.00 1.01 56300-P0100 2228',
+ ],
+ (Ecu.engine, 0x7e0, None): [
+ b'\xf1\x87391312MND0',
+ ],
+ (Ecu.transmission, 0x7e1, None): [
+ b'\xf1\x00PSBG2441 G19_Rev\x00\x00\x00SNX4T16XXHS01NS2lS\xdfa',
+ b'\xf1\x8795441-3D220\x00\xf1\x81G19_Rev\x00\x00\x00\xf1\x00PSBG2441 G19_Rev\x00\x00\x00SNX4T16XXHS01NS2lS\xdfa',
+ ],
+ },
}
CHECKSUM = {
@@ -1293,18 +1329,18 @@ FEATURES = {
# which message has the gear
"use_cluster_gears": {CAR.ELANTRA, CAR.ELANTRA_GT_I30, CAR.KONA},
"use_tcu_gears": {CAR.KIA_OPTIMA, CAR.SONATA_LF, CAR.VELOSTER, CAR.TUCSON},
- "use_elect_gears": {CAR.KIA_NIRO_EV, CAR.KIA_NIRO_HEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.KONA_EV_2022},
+ "use_elect_gears": {CAR.KIA_NIRO_EV, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.KIA_OPTIMA_H, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.IONIQ, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019, CAR.KONA_EV_2022},
# these cars use the FCA11 message for the AEB and FCW signals, all others use SCC12
"use_fca": {CAR.SONATA, CAR.SONATA_HYBRID, CAR.ELANTRA, CAR.ELANTRA_2021, CAR.ELANTRA_HEV_2021, CAR.ELANTRA_GT_I30, CAR.KIA_STINGER, CAR.IONIQ_EV_2020, CAR.IONIQ_PHEV, CAR.KONA_EV, CAR.KIA_FORTE, CAR.KIA_NIRO_EV, CAR.PALISADE, CAR.GENESIS_G70, CAR.GENESIS_G70_2020, CAR.KONA, CAR.SANTA_FE, CAR.KIA_SELTOS, CAR.KONA_HEV, CAR.SANTA_FE_2022, CAR.KIA_K5_2021, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.TUCSON, CAR.KONA_EV_2022},
}
-CANFD_CAR = {CAR.KIA_EV6, CAR.IONIQ_5}
+CANFD_CAR = {CAR.KIA_EV6, CAR.IONIQ_5, CAR.TUCSON_HYBRID_4TH_GEN}
# The camera does SCC on these cars, rather than the radar
CAMERA_SCC_CAR = {CAR.KONA_EV_2022, }
-HYBRID_CAR = {CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.KIA_NIRO_HEV, CAR.KIA_NIRO_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019} # these cars use a different gas signal
+HYBRID_CAR = {CAR.IONIQ_PHEV, CAR.ELANTRA_HEV_2021, CAR.KIA_NIRO_PHEV, CAR.KIA_NIRO_HEV_2021, CAR.SONATA_HYBRID, CAR.KONA_HEV, CAR.IONIQ, CAR.IONIQ_HEV_2022, CAR.SANTA_FE_HEV_2022, CAR.SANTA_FE_PHEV_2022, CAR.IONIQ_PHEV_2019} # these cars use a different gas signal
EV_CAR = {CAR.IONIQ_EV_2020, CAR.IONIQ_EV_LTD, CAR.KONA_EV, CAR.KIA_NIRO_EV, CAR.KONA_EV_2022}
# these cars require a special panda safety mode due to missing counters and checksums in the messages
@@ -1331,7 +1367,7 @@ DBC = {
CAR.KIA_FORTE: dbc_dict('hyundai_kia_generic', None),
CAR.KIA_K5_2021: dbc_dict('hyundai_kia_generic', None),
CAR.KIA_NIRO_EV: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar'),
- CAR.KIA_NIRO_HEV: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar'),
+ CAR.KIA_NIRO_PHEV: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar'),
CAR.KIA_NIRO_HEV_2021: dbc_dict('hyundai_kia_generic', None),
CAR.KIA_OPTIMA: dbc_dict('hyundai_kia_generic', None),
CAR.KIA_OPTIMA_H: dbc_dict('hyundai_kia_generic', None),
@@ -1352,7 +1388,8 @@ DBC = {
CAR.PALISADE: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar'),
CAR.VELOSTER: dbc_dict('hyundai_kia_generic', None),
CAR.KIA_CEED: dbc_dict('hyundai_kia_generic', None),
- CAR.KIA_EV6: dbc_dict('kia_ev6', None),
+ CAR.KIA_EV6: dbc_dict('hyundai_canfd', None),
CAR.SONATA_HYBRID: dbc_dict('hyundai_kia_generic', 'hyundai_kia_mando_front_radar'),
- CAR.IONIQ_5: dbc_dict('kia_ev6', None),
+ CAR.TUCSON_HYBRID_4TH_GEN: dbc_dict('hyundai_canfd', None),
+ CAR.IONIQ_5: dbc_dict('hyundai_canfd', None),
}
diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py
index 9f4e2bc21..ebb286ae0 100644
--- a/selfdrive/car/interfaces.py
+++ b/selfdrive/car/interfaces.py
@@ -9,7 +9,7 @@ from common.basedir import BASEDIR
from common.conversions import Conversions as CV
from common.kalman.simple_kalman import KF1D
from common.realtime import DT_CTRL
-from selfdrive.car import gen_empty_fingerprint
+from selfdrive.car import create_button_enable_events, gen_empty_fingerprint
from selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX
from selfdrive.controls.lib.events import Events
from selfdrive.controls.lib.vehicle_model import VehicleModel
@@ -233,6 +233,9 @@ class CarInterfaceBase(ABC):
if self.dragonconf.dpAtl != 1 and cs_out.accFaulted:
events.add(EventName.accFaulted)
+ # Handle button presses
+ events.events.extend(create_button_enable_events(cs_out.buttonEvents, pcm_cruise=self.CP.pcmCruise))
+
# Handle permanent and temporary steering faults
self.steering_unpressed = 0 if cs_out.steeringPressed else self.steering_unpressed + 1
if cs_out.steerFaultTemporary:
diff --git a/selfdrive/car/mazda/values.py b/selfdrive/car/mazda/values.py
index 7e99cccec..ed246f15d 100644
--- a/selfdrive/car/mazda/values.py
+++ b/selfdrive/car/mazda/values.py
@@ -40,7 +40,7 @@ CAR_INFO: Dict[str, Union[MazdaCarInfo, List[MazdaCarInfo]]] = {
CAR.CX9: MazdaCarInfo("Mazda CX-9 2016-20"),
CAR.MAZDA3: MazdaCarInfo("Mazda 3 2017-18"),
CAR.MAZDA6: MazdaCarInfo("Mazda 6 2017-20"),
- CAR.CX9_2021: MazdaCarInfo("Mazda CX-9 2021-22"),
+ CAR.CX9_2021: MazdaCarInfo("Mazda CX-9 2021-22", video_link="https://youtu.be/dA3duO4a0O4"),
CAR.CX5_2022: MazdaCarInfo("Mazda CX-5 2022"),
}
diff --git a/selfdrive/car/subaru/carstate.py b/selfdrive/car/subaru/carstate.py
index 632b24b33..c800208e2 100644
--- a/selfdrive/car/subaru/carstate.py
+++ b/selfdrive/car/subaru/carstate.py
@@ -4,7 +4,7 @@ from opendbc.can.can_define import CANDefine
from common.conversions import Conversions as CV
from selfdrive.car.interfaces import CarStateBase
from opendbc.can.parser import CANParser
-from selfdrive.car.subaru.values import DBC, STEER_THRESHOLD, CAR, GLOBAL_GEN2, PREGLOBAL_CARS
+from selfdrive.car.subaru.values import DBC, CAR, GLOBAL_GEN2, PREGLOBAL_CARS
class CarState(CarStateBase):
@@ -50,7 +50,9 @@ class CarState(CarStateBase):
ret.steeringAngleDeg = cp.vl["Steering_Torque"]["Steering_Angle"]
ret.steeringTorque = cp.vl["Steering_Torque"]["Steer_Torque_Sensor"]
ret.steeringTorqueEps = cp.vl["Steering_Torque"]["Steer_Torque_Output"]
- ret.steeringPressed = abs(ret.steeringTorque) > STEER_THRESHOLD[self.car_fingerprint]
+
+ steer_threshold = 75 if self.CP.carFingerprint in PREGLOBAL_CARS else 80
+ ret.steeringPressed = abs(ret.steeringTorque) > steer_threshold
cp_cruise = cp_body if self.car_fingerprint in GLOBAL_GEN2 else cp
ret.cruiseState.enabled = cp_cruise.vl["CruiseControl"]["Cruise_Activated"] != 0
diff --git a/selfdrive/car/subaru/interface.py b/selfdrive/car/subaru/interface.py
index 138d713d1..618d79ac4 100644
--- a/selfdrive/car/subaru/interface.py
+++ b/selfdrive/car/subaru/interface.py
@@ -71,7 +71,7 @@ class CarInterface(CarInterfaceBase):
ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0., 14., 23.], [0., 14., 23.]]
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.01, 0.065, 0.2], [0.001, 0.015, 0.025]]
- elif candidate == CAR.OUTBACK:
+ elif candidate in (CAR.OUTBACK, CAR.LEGACY):
ret.mass = 1568. + STD_CARGO_KG
ret.wheelbase = 2.67
ret.centerToFront = ret.wheelbase * 0.5
diff --git a/selfdrive/car/subaru/values.py b/selfdrive/car/subaru/values.py
index 691a4c915..7d8365a11 100644
--- a/selfdrive/car/subaru/values.py
+++ b/selfdrive/car/subaru/values.py
@@ -35,6 +35,7 @@ class CAR:
IMPREZA_2020 = "SUBARU IMPREZA SPORT 2020"
FORESTER = "SUBARU FORESTER 2019"
OUTBACK = "SUBARU OUTBACK 6TH GEN"
+ LEGACY = "SUBARU LEGACY 7TH GEN"
# Pre-global
FORESTER_PREGLOBAL = "SUBARU FORESTER 2017 - 2018"
@@ -52,6 +53,7 @@ class SubaruCarInfo(CarInfo):
CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = {
CAR.ASCENT: SubaruCarInfo("Subaru Ascent 2019-21", "All"),
CAR.OUTBACK: SubaruCarInfo("Subaru Outback 2020-22", "All", harness=Harness.subaru_b),
+ CAR.LEGACY: SubaruCarInfo("Subaru Legacy 2020-22", "All", harness=Harness.subaru_b),
CAR.IMPREZA: [
SubaruCarInfo("Subaru Impreza 2017-19"),
SubaruCarInfo("Subaru Crosstrek 2018-19", video_link="https://youtu.be/Agww7oE1k-s?t=26"),
@@ -101,6 +103,23 @@ FW_VERSIONS = {
b'\x01\xfe\xf7\x00\x00',
],
},
+ CAR.LEGACY: {
+ (Ecu.esp, 0x7b0, None): [
+ b'\xa1\\ x04\x01',
+ ],
+ (Ecu.eps, 0x746, None): [
+ b'\x9b\xc0\x11\x00',
+ ],
+ (Ecu.fwdCamera, 0x787, None): [
+ b'\x00\x00e\x80\x00\x1f@ \x19\x00',
+ ],
+ (Ecu.engine, 0x7e0, None): [
+ b'\xde\"a0\x07',
+ ],
+ (Ecu.transmission, 0x7e1, None): [
+ b'\xa5\xf6\x05@\x00',
+ ],
+ },
CAR.IMPREZA: {
(Ecu.esp, 0x7b0, None): [
b'\x7a\x94\x3f\x90\x00',
@@ -448,29 +467,18 @@ FW_VERSIONS = {
},
}
-STEER_THRESHOLD = {
- CAR.ASCENT: 80,
- CAR.IMPREZA: 80,
- CAR.IMPREZA_2020: 80,
- CAR.FORESTER: 80,
- CAR.OUTBACK: 80,
- CAR.FORESTER_PREGLOBAL: 75,
- CAR.LEGACY_PREGLOBAL: 75,
- CAR.OUTBACK_PREGLOBAL: 75,
- CAR.OUTBACK_PREGLOBAL_2018: 75,
-}
-
DBC = {
CAR.ASCENT: dbc_dict('subaru_global_2017_generated', None),
CAR.IMPREZA: dbc_dict('subaru_global_2017_generated', None),
CAR.IMPREZA_2020: dbc_dict('subaru_global_2017_generated', None),
CAR.FORESTER: dbc_dict('subaru_global_2017_generated', None),
CAR.OUTBACK: dbc_dict('subaru_global_2017_generated', None),
+ CAR.LEGACY: dbc_dict('subaru_global_2017_generated', None),
CAR.FORESTER_PREGLOBAL: dbc_dict('subaru_forester_2017_generated', None),
CAR.LEGACY_PREGLOBAL: dbc_dict('subaru_outback_2015_generated', None),
CAR.OUTBACK_PREGLOBAL: dbc_dict('subaru_outback_2015_generated', None),
CAR.OUTBACK_PREGLOBAL_2018: dbc_dict('subaru_outback_2019_generated', None),
}
-GLOBAL_GEN2 = (CAR.OUTBACK, )
+GLOBAL_GEN2 = (CAR.OUTBACK, CAR.LEGACY)
PREGLOBAL_CARS = (CAR.FORESTER_PREGLOBAL, CAR.LEGACY_PREGLOBAL, CAR.OUTBACK_PREGLOBAL, CAR.OUTBACK_PREGLOBAL_2018)
diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py
index 412874c81..aabf652c8 100755
--- a/selfdrive/car/tests/test_car_interfaces.py
+++ b/selfdrive/car/tests/test_car_interfaces.py
@@ -5,6 +5,7 @@ import importlib
from parameterized import parameterized
from cereal import car
+from selfdrive.car import gen_empty_fingerprint
from selfdrive.car.fingerprints import all_known_cars
from selfdrive.car.car_helpers import interfaces
from selfdrive.car.fingerprints import _FINGERPRINTS as FINGERPRINTS
@@ -19,11 +20,8 @@ class TestCarInterfaces(unittest.TestCase):
fingerprint = {}
CarInterface, CarController, CarState = interfaces[car_name]
- fingerprints = {
- 0: fingerprint,
- 1: fingerprint,
- 2: fingerprint,
- }
+ fingerprints = gen_empty_fingerprint()
+ fingerprints.update({k: fingerprint for k in fingerprints.keys()})
car_fw = []
diff --git a/selfdrive/car/torque_data/override.yaml b/selfdrive/car/torque_data/override.yaml
index 0a958a9d0..14ee7e223 100644
--- a/selfdrive/car/torque_data/override.yaml
+++ b/selfdrive/car/torque_data/override.yaml
@@ -25,6 +25,9 @@ RAM 1500 5TH GEN: [2.0, 2.0, 0.0]
RAM HD 5TH GEN: [1.4, 1.4, 0.0]
SUBARU OUTBACK 6TH GEN: [2.3, 2.3, 0.11]
CHEVROLET BOLT EUV 2022: [2.0, 2.0, 0.05]
+CHEVROLET SILVERADO 1500 2020: [1.9, 1.9, 0.112]
+VOLKSWAGEN PASSAT NMS: [2.5, 2.5, 0.1]
+HYUNDAI TUCSON HYBRID 4TH GEN: [2.5, 2.5, 0.0]
# Dashcam or fallback configured as ideal car
mock: [10.0, 10, 0.0]
diff --git a/selfdrive/car/torque_data/substitute.yaml b/selfdrive/car/torque_data/substitute.yaml
index 279e28ff5..de64a5544 100644
--- a/selfdrive/car/torque_data/substitute.yaml
+++ b/selfdrive/car/torque_data/substitute.yaml
@@ -69,6 +69,8 @@ VOLKSWAGEN POLO 6TH GEN: VOLKSWAGEN GOLF 7TH GEN
SEAT LEON 3RD GEN: VOLKSWAGEN GOLF 7TH GEN
SEAT ATECA 1ST GEN: VOLKSWAGEN GOLF 7TH GEN
+SUBARU LEGACY 7TH GEN: SUBARU OUTBACK 6TH GEN
+
# Old subarus don't have much data guessing it's like low torque impreza
SUBARU OUTBACK 2018 - 2019: SUBARU IMPREZA LIMITED 2019
SUBARU OUTBACK 2015 - 2017: SUBARU IMPREZA LIMITED 2019
diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py
index 5529bd496..d836a6a20 100644
--- a/selfdrive/car/toyota/carstate.py
+++ b/selfdrive/car/toyota/carstate.py
@@ -162,14 +162,14 @@ class CarState(CarStateBase):
ret.cruiseState.available = cp.vl["PCM_CRUISE_2"]["MAIN_ON"] != 0
ret.cruiseState.speed = cp.vl["PCM_CRUISE_2"]["SET_SPEED"] * CV.KPH_TO_MS
- if self.CP.carFingerprint in RADAR_ACC_CAR:
- self.acc_type = cp.vl["ACC_CONTROL"]["ACC_TYPE"]
- ret.stockFcw = bool(cp.vl["ACC_HUD"]["FCW"])
- elif self.CP.carFingerprint in TSS2_CAR:
- self.acc_type = cp_cam.vl["ACC_CONTROL"]["ACC_TYPE"]
- ret.stockFcw = bool(cp_cam.vl["ACC_HUD"]["FCW"])
+ cp_acc = cp_cam if self.CP.carFingerprint in (TSS2_CAR - RADAR_ACC_CAR) else cp
- # KRKeegan - Add support for toyota distance button
+ if self.CP.carFingerprint in (TSS2_CAR | RADAR_ACC_CAR):
+ self.acc_type = cp_acc.vl["ACC_CONTROL"]["ACC_TYPE"]
+ ret.stockFcw = bool(cp_acc.vl["ACC_HUD"]["FCW"])
+
+ # KRKeegan - Add support for toyota distance button
+ if self.CP.carFingerprint in (TSS2_CAR - RADAR_ACC_CAR):
self.distance_btn = 1 if cp_cam.vl["ACC_CONTROL"]["DISTANCE"] == 1 else 0
ret.distanceLines = cp.vl["PCM_CRUISE_SM"]["DISTANCE_LINES"]
@@ -192,10 +192,11 @@ class CarState(CarStateBase):
ret.cruiseState.nonAdaptive = cp.vl["PCM_CRUISE"]["CRUISE_STATE"] in (1, 2, 3, 4, 5, 6)
ret.genericToggle = bool(cp.vl["LIGHT_STALK"]["AUTO_HIGH_BEAM"])
- ret.stockAeb = bool(cp_cam.vl["PRE_COLLISION"]["PRECOLLISION_ACTIVE"] and cp_cam.vl["PRE_COLLISION"]["FORCE"] < -1e-5)
-
ret.espDisabled = cp.vl["ESP_CONTROL"]["TC_DISABLED"] != 0
+ if not self.CP.enableDsu:
+ ret.stockAeb = bool(cp_acc.vl["PRE_COLLISION"]["PRECOLLISION_ACTIVE"] and cp_acc.vl["PRE_COLLISION"]["FORCE"] < -1e-5)
+
if self.CP.enableBsm:
ret.leftBlindspot = (cp.vl["BSM"]["L_ADJACENT"] == 1) or (cp.vl["BSM"]["L_APPROACHING"] == 1)
ret.rightBlindspot = (cp.vl["BSM"]["R_ADJACENT"] == 1) or (cp.vl["BSM"]["R_APPROACHING"] == 1)
@@ -393,17 +394,21 @@ class CarState(CarStateBase):
signals.append(("DISTANCE_LINES", "PCM_CRUISE_SM"))
checks.append(("PCM_CRUISE_SM", 0))
+ if CP.carFingerprint not in (TSS2_CAR - RADAR_ACC_CAR) and not CP.enableDsu:
+ signals += [
+ ("FORCE", "PRE_COLLISION"),
+ ("PRECOLLISION_ACTIVE", "PRE_COLLISION"),
+ ]
+ checks += [
+ ("PRE_COLLISION", 33),
+ ]
+
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 0)
@staticmethod
def get_cam_can_parser(CP):
- signals = [
- ("FORCE", "PRE_COLLISION"),
- ("PRECOLLISION_ACTIVE", "PRE_COLLISION"),
- ]
-
# Include traffic singal signals.
- signals += [
+ signals = [
("TSGN1", "RSA1", 0),
("SPDVAL1", "RSA1", 0),
("SPLSGN1", "RSA1", 0),
@@ -417,18 +422,20 @@ class CarState(CarStateBase):
# use steering message to check if panda is connected to frc
checks = [
- ("STEERING_LKA", 42),
("RSA1", 0),
("RSA2", 0),
- ("PRE_COLLISION", 0), # TODO: figure out why freq is inconsistent
]
+
if CP.carFingerprint in (TSS2_CAR - RADAR_ACC_CAR):
signals += [
+ ("PRECOLLISION_ACTIVE", "PRE_COLLISION"),
+ ("FORCE", "PRE_COLLISION"),
("ACC_TYPE", "ACC_CONTROL"),
("FCW", "ACC_HUD"),
]
checks += [
+ ("PRE_COLLISION", 33),
("ACC_CONTROL", 33),
("ACC_HUD", 1),
]
diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py
index bcdeb26b5..ed02848f7 100644
--- a/selfdrive/car/toyota/values.py
+++ b/selfdrive/car/toyota/values.py
@@ -6,7 +6,7 @@ from typing import Dict, List, Union
from cereal import car
from common.conversions import Conversions as CV
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Harness, Star
+from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Harness
Ecu = car.CarParams.Ecu
MIN_ACC_SPEED = 19. * CV.MPH_TO_MS
@@ -90,7 +90,7 @@ class Footnote(Enum):
DSU = CarFootnote(
"When the Driver Support Unit (DSU) is disconnected, openpilot Adaptive Cruise Control (ACC) will replace " +
"stock Adaptive Cruise Control (ACC). NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB). ",
- Column.LONGITUDINAL, star=Star.HALF)
+ Column.LONGITUDINAL)
CAMRY = CarFootnote(
"openpilot operates above 28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.",
Column.FSR_LONGITUDINAL)
@@ -115,7 +115,7 @@ CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = {
CAR.AVALON_TSS2: ToyotaCarInfo("Toyota Avalon 2022"),
CAR.AVALONH_TSS2: ToyotaCarInfo("Toyota Avalon Hybrid 2022"),
CAR.CAMRY: ToyotaCarInfo("Toyota Camry 2018-20", video_link="https://www.youtube.com/watch?v=fkcjviZY9CM", footnotes=[Footnote.CAMRY]),
- CAR.CAMRYH: ToyotaCarInfo("Toyota Camry Hybrid 2018-20", video_link="https://www.youtube.com/watch?v=Q2DYY0AWKgk", footnotes=[Footnote.CAMRY]),
+ CAR.CAMRYH: ToyotaCarInfo("Toyota Camry Hybrid 2018-20", video_link="https://www.youtube.com/watch?v=Q2DYY0AWKgk"),
CAR.CAMRY_TSS2: ToyotaCarInfo("Toyota Camry 2021-22", footnotes=[Footnote.CAMRY]),
CAR.CAMRYH_TSS2: ToyotaCarInfo("Toyota Camry Hybrid 2021-22"),
CAR.CHR: ToyotaCarInfo("Toyota C-HR 2017-21"),
@@ -689,6 +689,7 @@ FW_VERSIONS = {
b'\x01896630ZP2000\x00\x00\x00\x00',
b'\x01896630ZQ5000\x00\x00\x00\x00',
b'\x01896630ZU9000\x00\x00\x00\x00',
+ b'\x01896630ZX4000\x00\x00\x00\x00',
b'\x018966312L8000\x00\x00\x00\x00',
b'\x018966312M0000\x00\x00\x00\x00',
b'\x018966312M9000\x00\x00\x00\x00',
@@ -784,6 +785,7 @@ FW_VERSIONS = {
b'\x01896637626000\x00\x00\x00\x00',
b'\x01896637648000\x00\x00\x00\x00',
b'\x01896637643000\x00\x00\x00\x00',
+ b'\x02896630A21000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00',
b'\x02896630ZJ5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00',
b'\x02896630ZN8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00',
b'\x02896630ZQ3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00',
@@ -828,6 +830,7 @@ FW_VERSIONS = {
b'F152612A10\x00\x00\x00\x00\x00\x00',
b'F152612D00\x00\x00\x00\x00\x00\x00',
b'F152616011\x00\x00\x00\x00\x00\x00',
+ b'F152616060\x00\x00\x00\x00\x00\x00',
b'F152642540\x00\x00\x00\x00\x00\x00',
b'F152676293\x00\x00\x00\x00\x00\x00',
b'F152676303\x00\x00\x00\x00\x00\x00',
diff --git a/selfdrive/car/volkswagen/carcontroller.py b/selfdrive/car/volkswagen/carcontroller.py
index 2c5830f86..f14c11989 100644
--- a/selfdrive/car/volkswagen/carcontroller.py
+++ b/selfdrive/car/volkswagen/carcontroller.py
@@ -1,8 +1,10 @@
from cereal import car
from opendbc.can.packer import CANPacker
+from common.numpy_fast import clip
+from common.conversions import Conversions as CV
from selfdrive.car import apply_std_steer_torque_limits
-from selfdrive.car.volkswagen import mqbcan
-from selfdrive.car.volkswagen.values import CANBUS, CarControllerParams
+from selfdrive.car.volkswagen import mqbcan, pqcan
+from selfdrive.car.volkswagen.values import CANBUS, PQ_CARS, CarControllerParams
VisualAlert = car.CarControl.HUDControl.VisualAlert
@@ -11,7 +13,7 @@ class CarController:
def __init__(self, dbc_name, CP, VM):
self.CP = CP
self.CCP = CarControllerParams(CP)
- self.CCS = mqbcan
+ self.CCS = pqcan if CP.carFingerprint in PQ_CARS else mqbcan
self.packer_pt = CANPacker(dbc_name)
self.apply_steer_last = 0
@@ -65,6 +67,13 @@ class CarController:
self.apply_steer_last = apply_steer
can_sends.append(self.CCS.create_steering_control(self.packer_pt, CANBUS.pt, apply_steer, hcaEnabled))
+ # **** Acceleration Controls ******************************************** #
+
+ if self.frame % self.CCP.ACC_CONTROL_STEP == 0 and self.CP.openpilotLongitudinalControl:
+ tsk_status = self.CCS.tsk_status_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive)
+ accel = clip(actuators.accel, self.CCP.ACCEL_MIN, self.CCP.ACCEL_MAX) if CC.longActive else 0
+ can_sends.extend(self.CCS.create_acc_accel_control(self.packer_pt, CANBUS.pt, tsk_status, accel))
+
# **** HUD Controls ***************************************************** #
if self.frame % self.CCP.LDW_STEP == 0:
@@ -74,6 +83,12 @@ class CarController:
can_sends.append(self.CCS.create_lka_hud_control(self.packer_pt, CANBUS.pt, CS.ldw_stock_values, CC.enabled,
CS.out.steeringPressed, hud_alert, hud_control))
+ if self.frame % self.CCP.ACC_HUD_STEP == 0 and self.CP.openpilotLongitudinalControl:
+ acc_hud_status = self.CCS.acc_hud_status_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive)
+ set_speed = hud_control.setSpeed * CV.MS_TO_KPH # FIXME: follow the recent displayed-speed updates, also use mph_kmh toggle to fix display rounding problem?
+ can_sends.append(self.CCS.create_acc_hud_control(self.packer_pt, CANBUS.pt, acc_hud_status, set_speed,
+ hud_control.leadVisible))
+
# **** Stock ACC Button Controls **************************************** #
if self.CP.pcmCruise and self.frame % self.CCP.GRA_ACC_STEP == 0:
diff --git a/selfdrive/car/volkswagen/carstate.py b/selfdrive/car/volkswagen/carstate.py
index d6eb1e80d..ebe48c633 100644
--- a/selfdrive/car/volkswagen/carstate.py
+++ b/selfdrive/car/volkswagen/carstate.py
@@ -3,7 +3,7 @@ from cereal import car
from common.conversions import Conversions as CV
from selfdrive.car.interfaces import CarStateBase
from opendbc.can.parser import CANParser
-from selfdrive.car.volkswagen.values import DBC, CANBUS, NetworkLocation, TransmissionType, GearShifter, \
+from selfdrive.car.volkswagen.values import DBC, CANBUS, PQ_CARS, NetworkLocation, TransmissionType, GearShifter, \
CarControllerParams
@@ -28,6 +28,9 @@ class CarState(CarStateBase):
return button_events
def update(self, pt_cp, cam_cp, ext_cp, trans_type):
+ if self.CP.carFingerprint in PQ_CARS:
+ return self.update_pq(pt_cp, cam_cp, ext_cp, trans_type)
+
ret = car.CarState.new_message()
# Update vehicle speed and acceleration from ABS wheel speeds.
ret.wheelSpeeds = self.get_wheel_speeds(
@@ -136,8 +139,111 @@ class CarState(CarStateBase):
ret.cruiseActualEnabled = ret.cruiseState.enabled
return ret
+ def update_pq(self, pt_cp, cam_cp, ext_cp, trans_type):
+ ret = car.CarState.new_message()
+ # Update vehicle speed and acceleration from ABS wheel speeds.
+ ret.wheelSpeeds = self.get_wheel_speeds(
+ pt_cp.vl["Bremse_3"]["Radgeschw__VL_4_1"],
+ pt_cp.vl["Bremse_3"]["Radgeschw__VR_4_1"],
+ pt_cp.vl["Bremse_3"]["Radgeschw__HL_4_1"],
+ pt_cp.vl["Bremse_3"]["Radgeschw__HR_4_1"],
+ )
+
+ # vEgo obtained from Bremse_1 vehicle speed rather than Bremse_3 wheel speeds because Bremse_3 isn't present on NSF
+ ret.vEgoRaw = pt_cp.vl["Bremse_1"]["Geschwindigkeit_neu__Bremse_1_"] * CV.KPH_TO_MS
+ ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw)
+ ret.standstill = ret.vEgo < 0.1
+
+ # Update steering angle, rate, yaw rate, and driver input torque. VW send
+ # the sign/direction in a separate signal so they must be recombined.
+ ret.steeringAngleDeg = pt_cp.vl["Lenkhilfe_3"]["LH3_BLW"] * (1, -1)[int(pt_cp.vl["Lenkhilfe_3"]["LH3_BLWSign"])]
+ ret.steeringRateDeg = pt_cp.vl["Lenkwinkel_1"]["Lenkradwinkel_Geschwindigkeit"] * (1, -1)[int(pt_cp.vl["Lenkwinkel_1"]["Lenkradwinkel_Geschwindigkeit_S"])]
+ ret.steeringTorque = pt_cp.vl["Lenkhilfe_3"]["LH3_LM"] * (1, -1)[int(pt_cp.vl["Lenkhilfe_3"]["LH3_LMSign"])]
+ ret.steeringPressed = abs(ret.steeringTorque) > self.CCP.STEER_DRIVER_ALLOWANCE
+ ret.yawRate = pt_cp.vl["Bremse_5"]["Giergeschwindigkeit"] * (1, -1)[int(pt_cp.vl["Bremse_5"]["Vorzeichen_der_Giergeschwindigk"])] * CV.DEG_TO_RAD
+
+ # Verify EPS readiness to accept steering commands
+ hca_status = self.CCP.hca_status_values.get(pt_cp.vl["Lenkhilfe_2"]["LH2_Sta_HCA"])
+ ret.steerFaultPermanent = hca_status in ("DISABLED", "FAULT")
+ ret.steerFaultTemporary = hca_status in ("INITIALIZING", "REJECTED")
+
+ # Update gas, brakes, and gearshift.
+ ret.gas = pt_cp.vl["Motor_3"]["Fahrpedal_Rohsignal"] / 100.0
+ ret.gasPressed = ret.gas > 0
+ ret.brake = pt_cp.vl["Bremse_5"]["Bremsdruck"] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects
+ ret.brakePressed = bool(pt_cp.vl["Motor_2"]["Bremstestschalter"])
+ ret.parkingBrake = bool(pt_cp.vl["Kombi_1"]["Bremsinfo"])
+
+ # Update gear and/or clutch position data.
+ if trans_type == TransmissionType.automatic:
+ ret.gearShifter = self.parse_gear_shifter(self.CCP.shifter_values.get(pt_cp.vl["Getriebe_1"]["Waehlhebelposition__Getriebe_1_"], None))
+ elif trans_type == TransmissionType.manual:
+ ret.clutchPressed = not pt_cp.vl["Motor_1"]["Kupplungsschalter"]
+ reverse_light = bool(pt_cp.vl["Gate_Komf_1"]["GK1_Rueckfahr"])
+ if reverse_light:
+ ret.gearShifter = GearShifter.reverse
+ else:
+ ret.gearShifter = GearShifter.drive
+
+ # Update door and trunk/hatch lid open status.
+ ret.doorOpen = any([pt_cp.vl["Gate_Komf_1"]["GK1_Fa_Tuerkont"],
+ pt_cp.vl["Gate_Komf_1"]["BSK_BT_geoeffnet"],
+ pt_cp.vl["Gate_Komf_1"]["BSK_HL_geoeffnet"],
+ pt_cp.vl["Gate_Komf_1"]["BSK_HR_geoeffnet"],
+ pt_cp.vl["Gate_Komf_1"]["BSK_HD_Hauptraste"]])
+
+ # Update seatbelt fastened status.
+ ret.seatbeltUnlatched = not bool(pt_cp.vl["Airbag_1"]["Gurtschalter_Fahrer"])
+
+ # Consume blind-spot monitoring info/warning LED states, if available.
+ # Infostufe: BSM LED on, Warnung: BSM LED flashing
+ if self.CP.enableBsm:
+ ret.leftBlindspot = bool(ext_cp.vl["SWA_1"]["SWA_Infostufe_SWA_li"]) or bool(ext_cp.vl["SWA_1"]["SWA_Warnung_SWA_li"])
+ ret.rightBlindspot = bool(ext_cp.vl["SWA_1"]["SWA_Infostufe_SWA_re"]) or bool(ext_cp.vl["SWA_1"]["SWA_Warnung_SWA_re"])
+
+ # Consume factory LDW data relevant for factory SWA (Lane Change Assist)
+ # and capture it for forwarding to the blind spot radar controller
+ self.ldw_stock_values = cam_cp.vl["LDW_Status"] if self.CP.networkLocation == NetworkLocation.fwdCamera else {}
+
+ # Stock FCW is considered active if the release bit for brake-jerk warning
+ # is set. Stock AEB considered active if the partial braking or target
+ # braking release bits are set.
+ # Refer to VW Self Study Program 890253: Volkswagen Driver Assistance
+ # Systems, chapters on Front Assist with Braking and City Emergency
+ # Braking for the 2016 Passat NMS
+ # TODO: deferred until we can collect data on pre-MY2016 behavior, AWV message may be shorter with fewer signals
+ ret.stockFcw = False
+ ret.stockAeb = False
+
+ # Update ACC radar status.
+ ret.cruiseState.available = bool(pt_cp.vl["Motor_5"]["GRA_Hauptschalter"])
+ ret.cruiseState.enabled = bool(pt_cp.vl["Motor_2"]["GRA_Status"])
+ if self.CP.pcmCruise:
+ ret.accFaulted = ext_cp.vl["ACC_GRA_Anziege"]["ACA_StaACC"] in (6, 7)
+ # TODO: update opendbc with PQ TSK state for OP long accFaulted
+
+ # Update ACC setpoint. When the setpoint reads as 255, the driver has not
+ # yet established an ACC setpoint, so treat it as zero.
+ ret.cruiseState.speed = ext_cp.vl["ACC_GRA_Anziege"]["ACA_V_Wunsch"] * CV.KPH_TO_MS
+ if ret.cruiseState.speed > 70: # 255 kph in m/s == no current setpoint
+ ret.cruiseState.speed = 0
+
+ # Update button states for turn signals and ACC controls, capture all ACC button state/config for passthrough
+ ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_stalk(300, pt_cp.vl["Gate_Komf_1"]["GK1_Blinker_li"],
+ pt_cp.vl["Gate_Komf_1"]["GK1_Blinker_re"])
+ ret.buttonEvents = self.create_button_events(pt_cp, self.CCP.BUTTONS)
+ self.gra_stock_values = pt_cp.vl["GRA_Neu"]
+
+ # Additional safety checks performed in CarInterface.
+ ret.espDisabled = bool(pt_cp.vl["Bremse_1"]["ESP_Passiv_getastet"])
+
+ return ret
+
@staticmethod
def get_can_parser(CP):
+ if CP.carFingerprint in PQ_CARS:
+ return CarState.get_can_parser_pq(CP)
+
signals = [
# sig_name, sig_address
("LWI_Lenkradwinkel", "LWI_01"), # Absolute steering angle
@@ -223,6 +329,9 @@ class CarState(CarStateBase):
@staticmethod
def get_cam_can_parser(CP):
+ if CP.carFingerprint in PQ_CARS:
+ return CarState.get_cam_can_parser_pq(CP)
+
signals = []
checks = []
@@ -249,6 +358,123 @@ class CarState(CarStateBase):
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CANBUS.cam)
+ @staticmethod
+ def get_can_parser_pq(CP):
+ signals = [
+ # sig_name, sig_address, default
+ ("LH3_BLW", "Lenkhilfe_3"), # Absolute steering angle
+ ("LH3_BLWSign", "Lenkhilfe_3"), # Steering angle sign
+ ("LH3_LM", "Lenkhilfe_3"), # Absolute driver torque input
+ ("LH3_LMSign", "Lenkhilfe_3"), # Driver torque input sign
+ ("LH2_Sta_HCA", "Lenkhilfe_2"), # Steering rack HCA status
+ ("Lenkradwinkel_Geschwindigkeit", "Lenkwinkel_1"), # Absolute steering rate
+ ("Lenkradwinkel_Geschwindigkeit_S", "Lenkwinkel_1"), # Steering rate sign
+ ("Geschwindigkeit_neu__Bremse_1_", "Bremse_1"), # Vehicle speed from ABS
+ ("Radgeschw__VL_4_1", "Bremse_3"), # ABS wheel speed, front left
+ ("Radgeschw__VR_4_1", "Bremse_3"), # ABS wheel speed, front right
+ ("Radgeschw__HL_4_1", "Bremse_3"), # ABS wheel speed, rear left
+ ("Radgeschw__HR_4_1", "Bremse_3"), # ABS wheel speed, rear right
+ ("Giergeschwindigkeit", "Bremse_5"), # Absolute yaw rate
+ ("Vorzeichen_der_Giergeschwindigk", "Bremse_5"), # Yaw rate sign
+ ("Gurtschalter_Fahrer", "Airbag_1"), # Seatbelt status, driver
+ ("Gurtschalter_Beifahrer", "Airbag_1"), # Seatbelt status, passenger
+ ("Bremstestschalter", "Motor_2"), # Brake pedal pressed (brake light test switch)
+ ("Bremslichtschalter", "Motor_2"), # Brakes applied (brake light switch)
+ ("Bremsdruck", "Bremse_5"), # Brake pressure applied
+ ("Vorzeichen_Bremsdruck", "Bremse_5"), # Brake pressure applied sign (???)
+ ("Fahrpedal_Rohsignal", "Motor_3"), # Accelerator pedal value
+ ("ESP_Passiv_getastet", "Bremse_1"), # Stability control disabled
+ ("GRA_Hauptschalter", "Motor_5"), # ACC main switch
+ ("GRA_Status", "Motor_2"), # ACC engagement status
+ ("GK1_Fa_Tuerkont", "Gate_Komf_1"), # Door open, driver
+ ("BSK_BT_geoeffnet", "Gate_Komf_1"), # Door open, passenger
+ ("BSK_HL_geoeffnet", "Gate_Komf_1"), # Door open, rear left
+ ("BSK_HR_geoeffnet", "Gate_Komf_1"), # Door open, rear right
+ ("BSK_HD_Hauptraste", "Gate_Komf_1"), # Trunk or hatch open
+ ("GK1_Blinker_li", "Gate_Komf_1"), # Left turn signal on
+ ("GK1_Blinker_re", "Gate_Komf_1"), # Right turn signal on
+ ("Bremsinfo", "Kombi_1"), # Manual handbrake applied
+ ("GRA_Hauptschalt", "GRA_Neu"), # ACC button, on/off
+ ("GRA_Typ_Hauptschalt", "GRA_Neu"), # ACC button, momentary vs latching
+ ("GRA_Kodierinfo", "GRA_Neu"), # ACC button, configuration
+ ("GRA_Abbrechen", "GRA_Neu"), # ACC button, cancel
+ ("GRA_Neu_Setzen", "GRA_Neu"), # ACC button, set
+ ("GRA_Up_lang", "GRA_Neu"), # ACC button, increase or accel, long press
+ ("GRA_Down_lang", "GRA_Neu"), # ACC button, decrease or decel, long press
+ ("GRA_Up_kurz", "GRA_Neu"), # ACC button, increase or accel, short press
+ ("GRA_Down_kurz", "GRA_Neu"), # ACC button, decrease or decel, short press
+ ("GRA_Recall", "GRA_Neu"), # ACC button, resume
+ ("GRA_Zeitluecke", "GRA_Neu"), # ACC button, time gap adj
+ ("COUNTER", "GRA_Neu"), # ACC button, message counter
+ ("GRA_Sender", "GRA_Neu"), # ACC button, CAN message originator
+ ]
+
+ checks = [
+ # sig_address, frequency
+ ("Bremse_1", 100), # From J104 ABS/ESP controller
+ ("Bremse_3", 100), # From J104 ABS/ESP controller
+ ("Lenkhilfe_3", 100), # From J500 Steering Assist with integrated sensors
+ ("Lenkwinkel_1", 100), # From J500 Steering Assist with integrated sensors
+ ("Motor_3", 100), # From J623 Engine control module
+ ("Airbag_1", 50), # From J234 Airbag control module
+ ("Bremse_5", 50), # From J104 ABS/ESP controller
+ ("GRA_Neu", 50), # From J??? steering wheel control buttons
+ ("Kombi_1", 50), # From J285 Instrument cluster
+ ("Motor_2", 50), # From J623 Engine control module
+ ("Motor_5", 50), # From J623 Engine control module
+ ("Lenkhilfe_2", 20), # From J500 Steering Assist with integrated sensors
+ ("Gate_Komf_1", 10), # From J533 CAN gateway
+ ]
+
+ if CP.transmissionType == TransmissionType.automatic:
+ signals += [("Waehlhebelposition__Getriebe_1_", "Getriebe_1", 0)] # Auto trans gear selector position
+ checks += [("Getriebe_1", 100)] # From J743 Auto transmission control module
+ elif CP.transmissionType == TransmissionType.manual:
+ signals += [("Kupplungsschalter", "Motor_1", 0), # Clutch switch
+ ("GK1_Rueckfahr", "Gate_Komf_1", 0)] # Reverse light from BCM
+ checks += [("Motor_1", 100)] # From J623 Engine control module
+
+ if CP.networkLocation == NetworkLocation.fwdCamera:
+ # Extended CAN devices other than the camera are here on CANBUS.pt
+ signals += PqExtraSignals.fwd_radar_signals
+ checks += PqExtraSignals.fwd_radar_checks
+ if CP.enableBsm:
+ signals += PqExtraSignals.bsm_radar_signals
+ checks += PqExtraSignals.bsm_radar_checks
+
+ return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CANBUS.pt)
+
+ @staticmethod
+ def get_cam_can_parser_pq(CP):
+
+ signals = []
+ checks = []
+
+ if CP.networkLocation == NetworkLocation.fwdCamera:
+ signals += [
+ # sig_name, sig_address
+ ("LDW_SW_Warnung_links", "LDW_Status"), # Blind spot in warning mode on left side due to lane departure
+ ("LDW_SW_Warnung_rechts", "LDW_Status"), # Blind spot in warning mode on right side due to lane departure
+ ("LDW_Seite_DLCTLC", "LDW_Status"), # Direction of most likely lane departure (left or right)
+ ("LDW_DLC", "LDW_Status"), # Lane departure, distance to line crossing
+ ("LDW_TLC", "LDW_Status"), # Lane departure, time to line crossing
+ ]
+ checks += [
+ # sig_address, frequency
+ ("LDW_Status", 10) # From R242 Driver assistance camera
+ ]
+
+ if CP.networkLocation == NetworkLocation.gateway:
+ # Radars are here on CANBUS.cam
+ signals += PqExtraSignals.fwd_radar_signals
+ checks += PqExtraSignals.fwd_radar_checks
+ if CP.enableBsm:
+ signals += PqExtraSignals.bsm_radar_signals
+ checks += PqExtraSignals.bsm_radar_checks
+
+ return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CANBUS.cam)
+
+
class MqbExtraSignals:
# Additional signal and message lists for optional or bus-portable controllers
fwd_radar_signals = [
@@ -270,3 +496,22 @@ class MqbExtraSignals:
bsm_radar_checks = [
("SWA_01", 20), # From J1086 Lane Change Assist
]
+
+class PqExtraSignals:
+ # Additional signal and message lists for optional or bus-portable controllers
+ fwd_radar_signals = [
+ ("ACA_StaACC", "ACC_GRA_Anziege", 0), # ACC drivetrain coordinator status
+ ("ACA_V_Wunsch", "ACC_GRA_Anziege", 0), # ACC set speed
+ ]
+ fwd_radar_checks = [
+ ("ACC_GRA_Anziege", 25), # From J428 ACC radar control module
+ ]
+ bsm_radar_signals = [
+ ("SWA_Infostufe_SWA_li", "SWA_1", 0), # Blind spot object info, left
+ ("SWA_Warnung_SWA_li", "SWA_1", 0), # Blind spot object warning, left
+ ("SWA_Infostufe_SWA_re", "SWA_1", 0), # Blind spot object info, right
+ ("SWA_Warnung_SWA_re", "SWA_1", 0), # Blind spot object warning, right
+ ]
+ bsm_radar_checks = [
+ ("SWA_1", 20), # From J1086 Lane Change Assist
+ ]
diff --git a/selfdrive/car/volkswagen/interface.py b/selfdrive/car/volkswagen/interface.py
index 92beb3482..453dcd650 100644
--- a/selfdrive/car/volkswagen/interface.py
+++ b/selfdrive/car/volkswagen/interface.py
@@ -1,9 +1,10 @@
from cereal import car
-from selfdrive.car import STD_CARGO_KG, create_button_enable_events, scale_rot_inertia, scale_tire_stiffness, \
+from panda import Panda
+from common.conversions import Conversions as CV
+from selfdrive.car import STD_CARGO_KG, scale_rot_inertia, scale_tire_stiffness, \
gen_empty_fingerprint, get_safety_config
from selfdrive.car.interfaces import CarInterfaceBase
-from selfdrive.car.volkswagen.values import CAR, CANBUS, NetworkLocation, TransmissionType, GearShifter
-
+from selfdrive.car.volkswagen.values import CAR, PQ_CARS, CANBUS, NetworkLocation, TransmissionType, GearShifter
EventName = car.CarEvent.EventName
@@ -25,7 +26,36 @@ class CarInterface(CarInterfaceBase):
ret.carName = "volkswagen"
ret.radarOffCan = True
- if True: # pylint: disable=using-constant-test
+ if candidate in PQ_CARS:
+ # Set global PQ35/PQ46/NMS parameters
+ ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.volkswagenPq)]
+ ret.enableBsm = 0x3BA in fingerprint[0] # SWA_1
+
+ if 0x440 in fingerprint[0]: # Getriebe_1
+ ret.transmissionType = TransmissionType.automatic
+ else:
+ ret.transmissionType = TransmissionType.manual
+
+ if any(msg in fingerprint[1] for msg in (0x1A0, 0xC2)): # Bremse_1, Lenkwinkel_1
+ ret.networkLocation = NetworkLocation.gateway
+ else:
+ ret.networkLocation = NetworkLocation.fwdCamera
+
+ # The PQ port is in dashcam-only mode due to a fixed six-minute maximum timer on HCA steering. An unsupported
+ # EPS flash update to work around this timer, and enable steering down to zero, is available from:
+ # https://github.com/pd0wm/pq-flasher
+ # It is documented in a four-part blog series:
+ # https://blog.willemmelching.nl/carhacking/2022/01/02/vw-part1/
+ # Panda ALLOW_DEBUG firmware required.
+ ret.dashcamOnly = True
+
+ if disable_radar and ret.networkLocation == NetworkLocation.gateway:
+ # Proof-of-concept, prep for E2E only. No radar points available. Follow-to-stop not yet supported, but should
+ # be simple to add when a suitable test car becomes available. Panda ALLOW_DEBUG firmware required.
+ ret.openpilotLongitudinalControl = True
+ ret.safetyConfigs[0].safetyParam |= Panda.FLAG_VOLKSWAGEN_LONG_CONTROL
+
+ else:
# Set global MQB parameters
ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.volkswagen)]
ret.enableBsm = 0x30F in fingerprint[0] # SWA_01
@@ -83,6 +113,14 @@ class CarInterface(CarInterfaceBase):
ret.mass = 1551 + STD_CARGO_KG
ret.wheelbase = 2.79
+ elif candidate == CAR.PASSAT_NMS:
+ ret.mass = 1503 + STD_CARGO_KG
+ ret.wheelbase = 2.80
+ ret.minEnableSpeed = 20 * CV.KPH_TO_MS # ACC "basic", no FtS
+ ret.minSteerSpeed = 50 * CV.KPH_TO_MS
+ ret.steerActuatorDelay = 0.2
+ CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
+
elif candidate == CAR.POLO_MK6:
ret.mass = 1230 + STD_CARGO_KG
ret.wheelbase = 2.55
@@ -189,7 +227,6 @@ class CarInterface(CarInterfaceBase):
if c.enabled and ret.vEgo < self.CP.minEnableSpeed:
events.add(EventName.speedTooLow)
- events.events.extend(create_button_enable_events(ret.buttonEvents, pcm_cruise=self.CP.pcmCruise))
ret.events = events.to_msg()
return ret
diff --git a/selfdrive/car/volkswagen/pqcan.py b/selfdrive/car/volkswagen/pqcan.py
new file mode 100644
index 000000000..1e7ed2134
--- /dev/null
+++ b/selfdrive/car/volkswagen/pqcan.py
@@ -0,0 +1,84 @@
+def create_steering_control(packer, bus, apply_steer, lkas_enabled):
+ values = {
+ "LM_Offset": abs(apply_steer),
+ "LM_OffSign": 1 if apply_steer < 0 else 0,
+ "HCA_Status": 5 if (lkas_enabled and apply_steer != 0) else 3,
+ "Vib_Freq": 16,
+ }
+
+ return packer.make_can_msg("HCA_1", bus, values)
+
+
+def create_lka_hud_control(packer, bus, ldw_stock_values, enabled, steering_pressed, hud_alert, hud_control):
+ values = ldw_stock_values.copy()
+
+ values.update({
+ "LDW_Lampe_gelb": 1 if enabled and steering_pressed else 0,
+ "LDW_Lampe_gruen": 1 if enabled and not steering_pressed else 0,
+ "LDW_Lernmodus_links": 3 if hud_control.leftLaneDepart else 1 + hud_control.leftLaneVisible,
+ "LDW_Lernmodus_rechts": 3 if hud_control.rightLaneDepart else 1 + hud_control.rightLaneVisible,
+ "LDW_Textbits": hud_alert,
+ })
+
+ return packer.make_can_msg("LDW_Status", bus, values)
+
+
+def create_acc_buttons_control(packer, bus, gra_stock_values, idx, cancel=False, resume=False):
+ values = gra_stock_values.copy()
+
+ values.update({
+ "COUNTER": idx,
+ "GRA_Abbrechen": cancel,
+ "GRA_Recall": resume,
+ })
+
+ return packer.make_can_msg("GRA_Neu", bus, values)
+
+
+def tsk_status_value(main_switch_on, acc_faulted, long_active):
+ if long_active:
+ tsk_status = 1
+ elif main_switch_on:
+ tsk_status = 2
+ else:
+ tsk_status = 0
+
+ return tsk_status
+
+
+def acc_hud_status_value(main_switch_on, acc_faulted, long_active):
+ if acc_faulted:
+ hud_status = 6
+ elif long_active:
+ hud_status = 3
+ elif main_switch_on:
+ hud_status = 2
+ else:
+ hud_status = 0
+
+ return hud_status
+
+
+def create_acc_accel_control(packer, bus, adr_status, accel):
+ values = {
+ "ACS_Sta_ADR": adr_status,
+ "ACS_StSt_Info": adr_status != 1,
+ "ACS_Typ_ACC": 0, # TODO: this is ACC "basic", find a way to detect FtS support (1)
+ "ACS_Sollbeschl": accel if adr_status == 1 else 3.01,
+ "ACS_zul_Regelabw": 0.2 if adr_status == 1 else 1.27,
+ "ACS_max_AendGrad": 3.0 if adr_status == 1 else 5.08,
+ }
+
+ return packer.make_can_msg("ACC_System", bus, values)
+
+
+def create_acc_hud_control(packer, bus, acc_status, set_speed, lead_visible):
+ values = {
+ "ACA_StaACC": acc_status,
+ "ACA_Zeitluecke": 2,
+ "ACA_V_Wunsch": set_speed,
+ "ACA_gemZeitl": 8 if lead_visible else 0,
+ }
+ # TODO: ACA_ID_StaACC, ACA_AnzDisplay, ACA_kmh_mph, ACA_PrioDisp, ACA_Aend_Zeitluecke
+
+ return packer.make_can_msg("ACC_GRA_Anziege", bus, values)
diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py
index 785a70d2d..58f071901 100755
--- a/selfdrive/car/volkswagen/values.py
+++ b/selfdrive/car/volkswagen/values.py
@@ -18,6 +18,11 @@ Button = namedtuple('Button', ['event_type', 'can_addr', 'can_msg', 'values'])
class CarControllerParams:
HCA_STEP = 2 # HCA_01/HCA_1 message frequency 50Hz
GRA_ACC_STEP = 3 # GRA_ACC_01/GRA_Neu message frequency 33Hz
+ ACC_CONTROL_STEP = 2 # ACC_06/ACC_07/ACC_System frequency 50Hz
+ ACC_HUD_STEP = 4 # ACC_GRA_Anziege frequency 25Hz
+
+ ACCEL_MAX = 2.0 # 2.0 m/s max acceleration
+ ACCEL_MIN = -3.5 # 3.5 m/s max deceleration
def __init__(self, CP):
# Documented lateral limits: 3.00 Nm max, rate of change 5.00 Nm/sec.
@@ -29,7 +34,35 @@ class CarControllerParams:
can_define = CANDefine(DBC[CP.carFingerprint]["pt"])
- if True: # pylint: disable=using-constant-test
+ if CP.carFingerprint in PQ_CARS:
+ self.LDW_STEP = 5 # LDW_1 message frequency 20Hz
+ self.STEER_DRIVER_ALLOWANCE = 80 # Driver intervention threshold 0.8 Nm
+ self.STEER_DELTA_UP = 6 # Max HCA reached in 1.00s (STEER_MAX / (50Hz * 1.00))
+ self.STEER_DELTA_DOWN = 10 # Min HCA reached in 0.60s (STEER_MAX / (50Hz * 0.60))
+
+ if CP.transmissionType == TransmissionType.automatic:
+ self.shifter_values = can_define.dv["Getriebe_1"]["Waehlhebelposition__Getriebe_1_"]
+ self.hca_status_values = can_define.dv["Lenkhilfe_2"]["LH2_Sta_HCA"]
+
+ self.BUTTONS = [
+ Button(car.CarState.ButtonEvent.Type.setCruise, "GRA_Neu", "GRA_Neu_Setzen", [1]),
+ Button(car.CarState.ButtonEvent.Type.resumeCruise, "GRA_Neu", "GRA_Recall", [1]),
+ Button(car.CarState.ButtonEvent.Type.accelCruise, "GRA_Neu", "GRA_Up_kurz", [1]),
+ Button(car.CarState.ButtonEvent.Type.decelCruise, "GRA_Neu", "GRA_Down_kurz", [1]),
+ Button(car.CarState.ButtonEvent.Type.cancel, "GRA_Neu", "GRA_Abbrechen", [1]),
+ Button(car.CarState.ButtonEvent.Type.gapAdjustCruise, "GRA_Neu", "GRA_Zeitluecke", [1]),
+ ]
+
+ self.LDW_MESSAGES = {
+ "none": 0, # Nothing to display
+ "laneAssistUnavail": 1, # "Lane Assist currently not available."
+ "laneAssistUnavailSysError": 2, # "Lane Assist system error"
+ "laneAssistUnavailNoSensorView": 3, # "Lane Assist not available. No sensor view."
+ "laneAssistTakeOver": 4, # "Lane Assist: Please Take Over Steering"
+ "laneAssistDeactivTrailer": 5, # "Lane Assist: no function with trailer"
+ }
+
+ else:
self.LDW_STEP = 10 # LDW_02 message frequency 10Hz
self.STEER_DRIVER_ALLOWANCE = 80 # Driver intervention threshold 0.8 Nm
self.STEER_DELTA_UP = 4 # Max HCA reached in 1.50s (STEER_MAX / (50Hz * 1.50))
@@ -79,6 +112,7 @@ class CAR:
GOLF_MK7 = "VOLKSWAGEN GOLF 7TH GEN" # Chassis 5G/AU/BA/BE, Mk7 VW Golf and variants
JETTA_MK7 = "VOLKSWAGEN JETTA 7TH GEN" # Chassis BU, Mk7 VW Jetta
PASSAT_MK8 = "VOLKSWAGEN PASSAT 8TH GEN" # Chassis 3G, Mk8 VW Passat and variants
+ PASSAT_NMS = "VOLKSWAGEN PASSAT NMS" # Chassis A3, North America/China/Mideast NMS Passat, incl. facelift
POLO_MK6 = "VOLKSWAGEN POLO 6TH GEN" # Chassis AW, Mk6 VW Polo
TAOS_MK1 = "VOLKSWAGEN TAOS 1ST GEN" # Chassis B2, Mk1 VW Taos and Tharu
TCROSS_MK1 = "VOLKSWAGEN T-CROSS 1ST GEN" # Chassis C1, Mk1 VW T-Cross SWB and LWB variants
@@ -99,7 +133,12 @@ class CAR:
SKODA_OCTAVIA_MK3 = "SKODA OCTAVIA 3RD GEN" # Chassis NE, Mk3 Skoda Octavia and variants
+PQ_CARS = {CAR.PASSAT_NMS}
+
+
DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict("vw_mqb_2010", None))
+for car_type in PQ_CARS:
+ DBC[car_type] = dbc_dict("vw_golf_mk4", None)
class Footnote(Enum):
@@ -160,6 +199,7 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = {
VWCarInfo("Volkswagen Passat Alltrack 2015-22", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
VWCarInfo("Volkswagen Passat GTE 2015-22", footnotes=[Footnote.VW_HARNESS, Footnote.VW_VARIANT], harness=Harness.j533),
],
+ CAR.PASSAT_NMS: VWCarInfo("Volkswagen Passat NMS 2017-22", harness=Harness.j533),
CAR.POLO_MK6: [
VWCarInfo("Volkswagen Polo 2020-22", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
VWCarInfo("Volkswagen Polo GTI 2020-22", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
@@ -514,6 +554,26 @@ FW_VERSIONS = {
b'\xf1\x875Q0907572R \xf1\x890771',
],
},
+ CAR.PASSAT_NMS: {
+ (Ecu.engine, 0x7e0, None): [
+ b'\xf1\x8706K906016C \xf1\x899609',
+ b'\xf1\x8706K906016G \xf1\x891124',
+ b'\xf1\x8706K906071BJ\xf1\x894891',
+ ],
+ (Ecu.transmission, 0x7e1, None): [
+ b'\xf1\x8709G927158AB\xf1\x893318',
+ b'\xf1\x8709G927158BD\xf1\x893121',
+ b'\xf1\x8709G927158FQ\xf1\x893745',
+ ],
+ (Ecu.srs, 0x715, None): [
+ b'\xf1\x87561959655 \xf1\x890210\xf1\x82\02212121111113000102011--121012--101312',
+ b'\xf1\x87561959655C \xf1\x890508\xf1\x82\02215141111121100314919--153015--304831',
+ ],
+ (Ecu.fwdRadar, 0x757, None): [
+ b'\xf1\x87561907567A \xf1\x890132',
+ b'\xf1\x877N0907572C \xf1\x890211\xf1\x82\00152',
+ ],
+ },
CAR.POLO_MK6: {
(Ecu.engine, 0x7e0, None): [
b'\xf1\x8704C906025H \xf1\x895177',
diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py
index abd1efadb..3cb7b95b8 100755
--- a/selfdrive/controls/controlsd.py
+++ b/selfdrive/controls/controlsd.py
@@ -16,7 +16,7 @@ from system.version import get_short_branch
from selfdrive.boardd.boardd import can_list_to_can_capnp
from selfdrive.car.car_helpers import get_car, get_startup_event, get_one_can
from selfdrive.controls.lib.lane_planner import CAMERA_OFFSET
-from selfdrive.controls.lib.drive_helpers import update_v_cruise, initialize_v_cruise
+from selfdrive.controls.lib.drive_helpers import V_CRUISE_INITIAL, update_v_cruise, initialize_v_cruise
from selfdrive.controls.lib.drive_helpers import get_lag_adjusted_curvature
from selfdrive.controls.lib.latcontrol import LatControl
from selfdrive.controls.lib.longcontrol import LongControl
@@ -51,6 +51,7 @@ LaneChangeState = log.LateralPlan.LaneChangeState
LaneChangeDirection = log.LateralPlan.LaneChangeDirection
EventName = car.CarEvent.EventName
ButtonEvent = car.CarState.ButtonEvent
+ButtonType = car.CarState.ButtonEvent.Type
SafetyModel = car.CarParams.SafetyModel
IGNORED_SAFETY_MODES = (SafetyModel.silent, SafetyModel.noOutput)
@@ -114,6 +115,9 @@ class Controls:
# dp
self.sm['dragonConf'].dpAtl = int(Params().get('dp_atl', encoding='utf8'))
+ self.sm['dragonConf'].dpCameraOffset = CAMERA_OFFSET * 100 # 0.04 x 100 = 4
+ self.dp_camera_offset_last = None
+ self.camera_offset = CAMERA_OFFSET
# set alternative experiences from parameters
self.disengage_on_accelerator = params.get_bool("DisengageOnAccelerator")
@@ -175,8 +179,8 @@ class Controls:
self.active = False
self.can_rcv_error = False
self.soft_disable_timer = 0
- self.v_cruise_kph = 255
- self.v_cruise_cluster_kph = 255
+ self.v_cruise_kph = V_CRUISE_INITIAL
+ self.v_cruise_cluster_kph = V_CRUISE_INITIAL
self.v_cruise_kph_last = 0
self.mismatch_counter = 0
self.cruise_mismatch_counter = 0
@@ -216,6 +220,16 @@ class Controls:
self.rk = Ratekeeper(100, print_delay_threshold=None)
self.prof = Profiler(False) # off by default
+ def set_initial_state(self):
+ if REPLAY:
+ controls_state = Params().get("ReplayControlsState")
+ if controls_state is not None:
+ controls_state = log.ControlsState.from_bytes(controls_state)
+ self.v_cruise_kph = controls_state.vCruise
+
+ if self.sm['pandaStates'][0].controlsAllowed:
+ self.state = State.enabled
+
def update_events(self, CS):
"""Compute carEvents from carState"""
@@ -231,6 +245,11 @@ class Controls:
self.events.add(EventName.controlsInitializing)
return
+ # Block resume if cruise never previously enabled
+ resume_pressed = any(be.type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be in CS.buttonEvents)
+ if not self.CP.pcmCruise and self.v_cruise_kph == V_CRUISE_INITIAL and resume_pressed:
+ self.events.add(EventName.resumeBlocked)
+
# Disable on rising edge of accelerator or brake. Also disable on brake when speed > 0
if self.sm['dragonConf'].dpAtl == 0 and ((CS.gasPressed and not self.CS_prev.gasPressed and self.disengage_on_accelerator) or \
(CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill))):
@@ -433,11 +452,9 @@ class Controls:
if all_valid or timed_out or SIMULATION:
if not self.read_only:
self.CI.init(self.CP, self.can_sock, self.pm.sock['sendcan'])
+
self.initialized = True
-
- if REPLAY and self.sm['pandaStates'][0].controlsAllowed:
- self.state = State.enabled
-
+ self.set_initial_state()
Params().put_bool("ControlsReady", True)
# Check for CAN timeout
@@ -468,18 +485,18 @@ class Controls:
self.v_cruise_kph_last = self.v_cruise_kph
- # if stock cruise is completely disabled, then we can use our own set speed logic
- if not self.CP.pcmCruise:
- self.v_cruise_kph = update_v_cruise(self.v_cruise_kph, CS.vEgo, CS.gasPressed, CS.buttonEvents,
- self.button_timers, self.enabled, self.is_metric)
- self.v_cruise_cluster_kph = self.v_cruise_kph
- else:
- if CS.cruiseState.available:
+ if CS.cruiseState.available:
+ # if stock cruise is completely disabled, then we can use our own set speed logic
+ if not self.CP.pcmCruise:
+ self.v_cruise_kph = update_v_cruise(self.v_cruise_kph, CS.vEgo, CS.gasPressed, CS.buttonEvents,
+ self.button_timers, self.enabled, self.is_metric)
+ self.v_cruise_cluster_kph = self.v_cruise_kph
+ else:
self.v_cruise_kph = CS.cruiseState.speed * CV.MS_TO_KPH
self.v_cruise_cluster_kph = CS.cruiseState.speedCluster * CV.MS_TO_KPH
- else:
- self.v_cruise_kph = 0
- self.v_cruise_cluster_kph = 0
+ else:
+ self.v_cruise_kph = V_CRUISE_INITIAL
+ self.v_cruise_cluster_kph = V_CRUISE_INITIAL
# decrement the soft disable timer at every step, as it's reset on
# entrance in SOFT_DISABLING state
@@ -679,6 +696,10 @@ class Controls:
self.button_timers[b.type.raw] = 1 if b.pressed else 0
def publish_logs(self, CS, start_time, CC, lac_log):
+ if self.sm['dragonConf'].dpCameraOffset != self.dp_camera_offset_last:
+ self.camera_offset = self.sm['dragonConf'].dpCameraOffset * 0.01
+ self.dp_camera_offset_last = self.sm['dragonConf'].dpCameraOffset
+
"""Send actuators and hud commands to the car, send controlsstate and MPC logging"""
# Orientation and angle rates can be useful for carcontroller
@@ -696,7 +717,10 @@ class Controls:
speeds = self.sm['longitudinalPlan'].speeds
if len(speeds):
- CC.cruiseControl.resume = self.enabled and CS.cruiseState.standstill and speeds[-1] > 0.1
+ if self.sm['dragonConf'].dpAtl == 1 and self.sm['longitudinalPlan'].hasLead:
+ CC.cruiseControl.resume = CS.cruiseActualEnabled and CS.cruiseState.standstill and speeds[-1] > 0.1
+ else:
+ CC.cruiseControl.resume = self.enabled and CS.cruiseState.standstill and speeds[-1] > 0.1
hudControl = CC.hudControl
hudControl.setSpeed = float(self.v_cruise_cluster_kph * CV.KPH_TO_MS)
@@ -720,8 +744,8 @@ class Controls:
r_lane_change_prob = desire_prediction[Desire.laneChangeRight - 1]
lane_lines = model_v2.laneLines
- l_lane_close = left_lane_visible and (lane_lines[1].y[0] > -(1.08 + CAMERA_OFFSET))
- r_lane_close = right_lane_visible and (lane_lines[2].y[0] < (1.08 - CAMERA_OFFSET))
+ l_lane_close = left_lane_visible and (lane_lines[1].y[0] > -(1.08 + self.camera_offset))
+ r_lane_close = right_lane_visible and (lane_lines[2].y[0] < (1.08 - self.camera_offset))
hudControl.leftLaneDepart = bool(l_lane_change_prob > LANE_DEPARTURE_THRESHOLD and l_lane_close)
hudControl.rightLaneDepart = bool(r_lane_change_prob > LANE_DEPARTURE_THRESHOLD and r_lane_close)
diff --git a/selfdrive/controls/lib/drive_helpers.py b/selfdrive/controls/lib/drive_helpers.py
index 856c23aa3..9d5d44cea 100644
--- a/selfdrive/controls/lib/drive_helpers.py
+++ b/selfdrive/controls/lib/drive_helpers.py
@@ -11,6 +11,7 @@ from selfdrive.modeld.constants import T_IDXS
V_CRUISE_MAX = 145 # kph
V_CRUISE_MIN = 8 # kph
V_CRUISE_ENABLE_MIN = 40 # kph
+V_CRUISE_INITIAL = 255 # kph
LAT_MPC_N = 16
LON_MPC_N = 32
diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py
index e59751bcb..6a645fc82 100644
--- a/selfdrive/controls/lib/events.py
+++ b/selfdrive/controls/lib/events.py
@@ -661,6 +661,10 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = {
ET.NO_ENTRY: wrong_car_mode_alert,
},
+ EventName.resumeBlocked: {
+ ET.NO_ENTRY: NoEntryAlert("Press Set to Engage"),
+ },
+
EventName.wrongCruiseMode: {
ET.USER_DISABLE: EngagementAlert(AudibleAlert.disengage),
ET.NO_ENTRY: NoEntryAlert(_("Adaptive Cruise Disabled")),
diff --git a/selfdrive/controls/lib/lane_planner.py b/selfdrive/controls/lib/lane_planner.py
index 1aff3ce92..058ef6879 100644
--- a/selfdrive/controls/lib/lane_planner.py
+++ b/selfdrive/controls/lib/lane_planner.py
@@ -44,6 +44,14 @@ class LanePlanner:
self.camera_offset = -CAMERA_OFFSET if wide_camera else CAMERA_OFFSET
self.path_offset = -PATH_OFFSET if wide_camera else PATH_OFFSET
+ self.dp_camera_offset = None
+ self.wide_camera = wide_camera
+
+ def update_offsets(self, camera_offset):
+ if self.dp_camera_offset != camera_offset:
+ self.dp_camera_offset = camera_offset
+ self.camera_offset = (camera_offset - 8 if self.wide_camera else camera_offset) * 0.01
+
def parse_model(self, md):
lane_lines = md.laneLines
if len(lane_lines) == 4 and len(lane_lines[0].t) == TRAJECTORY_SIZE:
diff --git a/selfdrive/controls/lib/lateral_planner.py b/selfdrive/controls/lib/lateral_planner.py
index f9103c1c1..c491c32d4 100644
--- a/selfdrive/controls/lib/lateral_planner.py
+++ b/selfdrive/controls/lib/lateral_planner.py
@@ -43,6 +43,9 @@ class LateralPlanner:
v_ego = sm['carState'].vEgo
measured_curvature = sm['controlsState'].curvature
+ # dp - update camera offset
+ self.LP.update_offsets(sm['dragonConf'].dpCameraOffset)
+
# Parse model predictions
md = sm['modelV2']
self.LP.parse_model(md)
diff --git a/selfdrive/dragonpilot/systemd.py b/selfdrive/dragonpilot/systemd.py
index 47d10372b..1d0fec14b 100644
--- a/selfdrive/dragonpilot/systemd.py
+++ b/selfdrive/dragonpilot/systemd.py
@@ -38,6 +38,7 @@ from common.realtime import Ratekeeper
import threading
from selfdrive.dragonpilot.gpx_uploader import gpx_uploader_thread
from typing import Dict, Any
+import capnp
PARAM_PATH = params.get_param_path() + "/"
@@ -249,7 +250,11 @@ def set_message(msg, conf):
struct_val = min(struct_val, conf.get('max'))
if orig_val != struct_val:
params.put(conf['name'], str(struct_val))
- setattr(msg.dragonConf, get_struct_name(conf['name']), struct_val)
+ try:
+ setattr(msg.dragonConf, get_struct_name(conf['name']), struct_val)
+ except capnp.lib.capnp.KjException:
+ pass
+
return msg
def check_dependencies(msg, conf):
diff --git a/selfdrive/locationd/locationd b/selfdrive/locationd/locationd
index a33f29ec8..054e95d88 100755
Binary files a/selfdrive/locationd/locationd and b/selfdrive/locationd/locationd differ
diff --git a/selfdrive/locationd/models/generated/car.cpp b/selfdrive/locationd/models/generated/car.cpp
index a7052e167..ca5705b5f 100644
--- a/selfdrive/locationd/models/generated/car.cpp
+++ b/selfdrive/locationd/models/generated/car.cpp
@@ -45,326 +45,326 @@ const static double MAHA_THRESH_31 = 3.8414588206941227;
* *
* This file is part of 'ekf' *
******************************************************************************/
-void err_fun(double *nom_x, double *delta_x, double *out_6814212569071197423) {
- out_6814212569071197423[0] = delta_x[0] + nom_x[0];
- out_6814212569071197423[1] = delta_x[1] + nom_x[1];
- out_6814212569071197423[2] = delta_x[2] + nom_x[2];
- out_6814212569071197423[3] = delta_x[3] + nom_x[3];
- out_6814212569071197423[4] = delta_x[4] + nom_x[4];
- out_6814212569071197423[5] = delta_x[5] + nom_x[5];
- out_6814212569071197423[6] = delta_x[6] + nom_x[6];
- out_6814212569071197423[7] = delta_x[7] + nom_x[7];
- out_6814212569071197423[8] = delta_x[8] + nom_x[8];
+void err_fun(double *nom_x, double *delta_x, double *out_729362937437787457) {
+ out_729362937437787457[0] = delta_x[0] + nom_x[0];
+ out_729362937437787457[1] = delta_x[1] + nom_x[1];
+ out_729362937437787457[2] = delta_x[2] + nom_x[2];
+ out_729362937437787457[3] = delta_x[3] + nom_x[3];
+ out_729362937437787457[4] = delta_x[4] + nom_x[4];
+ out_729362937437787457[5] = delta_x[5] + nom_x[5];
+ out_729362937437787457[6] = delta_x[6] + nom_x[6];
+ out_729362937437787457[7] = delta_x[7] + nom_x[7];
+ out_729362937437787457[8] = delta_x[8] + nom_x[8];
}
-void inv_err_fun(double *nom_x, double *true_x, double *out_7666174205888484741) {
- out_7666174205888484741[0] = -nom_x[0] + true_x[0];
- out_7666174205888484741[1] = -nom_x[1] + true_x[1];
- out_7666174205888484741[2] = -nom_x[2] + true_x[2];
- out_7666174205888484741[3] = -nom_x[3] + true_x[3];
- out_7666174205888484741[4] = -nom_x[4] + true_x[4];
- out_7666174205888484741[5] = -nom_x[5] + true_x[5];
- out_7666174205888484741[6] = -nom_x[6] + true_x[6];
- out_7666174205888484741[7] = -nom_x[7] + true_x[7];
- out_7666174205888484741[8] = -nom_x[8] + true_x[8];
+void inv_err_fun(double *nom_x, double *true_x, double *out_4929143687762803407) {
+ out_4929143687762803407[0] = -nom_x[0] + true_x[0];
+ out_4929143687762803407[1] = -nom_x[1] + true_x[1];
+ out_4929143687762803407[2] = -nom_x[2] + true_x[2];
+ out_4929143687762803407[3] = -nom_x[3] + true_x[3];
+ out_4929143687762803407[4] = -nom_x[4] + true_x[4];
+ out_4929143687762803407[5] = -nom_x[5] + true_x[5];
+ out_4929143687762803407[6] = -nom_x[6] + true_x[6];
+ out_4929143687762803407[7] = -nom_x[7] + true_x[7];
+ out_4929143687762803407[8] = -nom_x[8] + true_x[8];
}
-void H_mod_fun(double *state, double *out_8014857022495098622) {
- out_8014857022495098622[0] = 1.0;
- out_8014857022495098622[1] = 0;
- out_8014857022495098622[2] = 0;
- out_8014857022495098622[3] = 0;
- out_8014857022495098622[4] = 0;
- out_8014857022495098622[5] = 0;
- out_8014857022495098622[6] = 0;
- out_8014857022495098622[7] = 0;
- out_8014857022495098622[8] = 0;
- out_8014857022495098622[9] = 0;
- out_8014857022495098622[10] = 1.0;
- out_8014857022495098622[11] = 0;
- out_8014857022495098622[12] = 0;
- out_8014857022495098622[13] = 0;
- out_8014857022495098622[14] = 0;
- out_8014857022495098622[15] = 0;
- out_8014857022495098622[16] = 0;
- out_8014857022495098622[17] = 0;
- out_8014857022495098622[18] = 0;
- out_8014857022495098622[19] = 0;
- out_8014857022495098622[20] = 1.0;
- out_8014857022495098622[21] = 0;
- out_8014857022495098622[22] = 0;
- out_8014857022495098622[23] = 0;
- out_8014857022495098622[24] = 0;
- out_8014857022495098622[25] = 0;
- out_8014857022495098622[26] = 0;
- out_8014857022495098622[27] = 0;
- out_8014857022495098622[28] = 0;
- out_8014857022495098622[29] = 0;
- out_8014857022495098622[30] = 1.0;
- out_8014857022495098622[31] = 0;
- out_8014857022495098622[32] = 0;
- out_8014857022495098622[33] = 0;
- out_8014857022495098622[34] = 0;
- out_8014857022495098622[35] = 0;
- out_8014857022495098622[36] = 0;
- out_8014857022495098622[37] = 0;
- out_8014857022495098622[38] = 0;
- out_8014857022495098622[39] = 0;
- out_8014857022495098622[40] = 1.0;
- out_8014857022495098622[41] = 0;
- out_8014857022495098622[42] = 0;
- out_8014857022495098622[43] = 0;
- out_8014857022495098622[44] = 0;
- out_8014857022495098622[45] = 0;
- out_8014857022495098622[46] = 0;
- out_8014857022495098622[47] = 0;
- out_8014857022495098622[48] = 0;
- out_8014857022495098622[49] = 0;
- out_8014857022495098622[50] = 1.0;
- out_8014857022495098622[51] = 0;
- out_8014857022495098622[52] = 0;
- out_8014857022495098622[53] = 0;
- out_8014857022495098622[54] = 0;
- out_8014857022495098622[55] = 0;
- out_8014857022495098622[56] = 0;
- out_8014857022495098622[57] = 0;
- out_8014857022495098622[58] = 0;
- out_8014857022495098622[59] = 0;
- out_8014857022495098622[60] = 1.0;
- out_8014857022495098622[61] = 0;
- out_8014857022495098622[62] = 0;
- out_8014857022495098622[63] = 0;
- out_8014857022495098622[64] = 0;
- out_8014857022495098622[65] = 0;
- out_8014857022495098622[66] = 0;
- out_8014857022495098622[67] = 0;
- out_8014857022495098622[68] = 0;
- out_8014857022495098622[69] = 0;
- out_8014857022495098622[70] = 1.0;
- out_8014857022495098622[71] = 0;
- out_8014857022495098622[72] = 0;
- out_8014857022495098622[73] = 0;
- out_8014857022495098622[74] = 0;
- out_8014857022495098622[75] = 0;
- out_8014857022495098622[76] = 0;
- out_8014857022495098622[77] = 0;
- out_8014857022495098622[78] = 0;
- out_8014857022495098622[79] = 0;
- out_8014857022495098622[80] = 1.0;
+void H_mod_fun(double *state, double *out_8315888887196402654) {
+ out_8315888887196402654[0] = 1.0;
+ out_8315888887196402654[1] = 0;
+ out_8315888887196402654[2] = 0;
+ out_8315888887196402654[3] = 0;
+ out_8315888887196402654[4] = 0;
+ out_8315888887196402654[5] = 0;
+ out_8315888887196402654[6] = 0;
+ out_8315888887196402654[7] = 0;
+ out_8315888887196402654[8] = 0;
+ out_8315888887196402654[9] = 0;
+ out_8315888887196402654[10] = 1.0;
+ out_8315888887196402654[11] = 0;
+ out_8315888887196402654[12] = 0;
+ out_8315888887196402654[13] = 0;
+ out_8315888887196402654[14] = 0;
+ out_8315888887196402654[15] = 0;
+ out_8315888887196402654[16] = 0;
+ out_8315888887196402654[17] = 0;
+ out_8315888887196402654[18] = 0;
+ out_8315888887196402654[19] = 0;
+ out_8315888887196402654[20] = 1.0;
+ out_8315888887196402654[21] = 0;
+ out_8315888887196402654[22] = 0;
+ out_8315888887196402654[23] = 0;
+ out_8315888887196402654[24] = 0;
+ out_8315888887196402654[25] = 0;
+ out_8315888887196402654[26] = 0;
+ out_8315888887196402654[27] = 0;
+ out_8315888887196402654[28] = 0;
+ out_8315888887196402654[29] = 0;
+ out_8315888887196402654[30] = 1.0;
+ out_8315888887196402654[31] = 0;
+ out_8315888887196402654[32] = 0;
+ out_8315888887196402654[33] = 0;
+ out_8315888887196402654[34] = 0;
+ out_8315888887196402654[35] = 0;
+ out_8315888887196402654[36] = 0;
+ out_8315888887196402654[37] = 0;
+ out_8315888887196402654[38] = 0;
+ out_8315888887196402654[39] = 0;
+ out_8315888887196402654[40] = 1.0;
+ out_8315888887196402654[41] = 0;
+ out_8315888887196402654[42] = 0;
+ out_8315888887196402654[43] = 0;
+ out_8315888887196402654[44] = 0;
+ out_8315888887196402654[45] = 0;
+ out_8315888887196402654[46] = 0;
+ out_8315888887196402654[47] = 0;
+ out_8315888887196402654[48] = 0;
+ out_8315888887196402654[49] = 0;
+ out_8315888887196402654[50] = 1.0;
+ out_8315888887196402654[51] = 0;
+ out_8315888887196402654[52] = 0;
+ out_8315888887196402654[53] = 0;
+ out_8315888887196402654[54] = 0;
+ out_8315888887196402654[55] = 0;
+ out_8315888887196402654[56] = 0;
+ out_8315888887196402654[57] = 0;
+ out_8315888887196402654[58] = 0;
+ out_8315888887196402654[59] = 0;
+ out_8315888887196402654[60] = 1.0;
+ out_8315888887196402654[61] = 0;
+ out_8315888887196402654[62] = 0;
+ out_8315888887196402654[63] = 0;
+ out_8315888887196402654[64] = 0;
+ out_8315888887196402654[65] = 0;
+ out_8315888887196402654[66] = 0;
+ out_8315888887196402654[67] = 0;
+ out_8315888887196402654[68] = 0;
+ out_8315888887196402654[69] = 0;
+ out_8315888887196402654[70] = 1.0;
+ out_8315888887196402654[71] = 0;
+ out_8315888887196402654[72] = 0;
+ out_8315888887196402654[73] = 0;
+ out_8315888887196402654[74] = 0;
+ out_8315888887196402654[75] = 0;
+ out_8315888887196402654[76] = 0;
+ out_8315888887196402654[77] = 0;
+ out_8315888887196402654[78] = 0;
+ out_8315888887196402654[79] = 0;
+ out_8315888887196402654[80] = 1.0;
}
-void f_fun(double *state, double dt, double *out_6791547762604559707) {
- out_6791547762604559707[0] = state[0];
- out_6791547762604559707[1] = state[1];
- out_6791547762604559707[2] = state[2];
- out_6791547762604559707[3] = state[3];
- out_6791547762604559707[4] = state[4];
- out_6791547762604559707[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8000000000000007*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
- out_6791547762604559707[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
- out_6791547762604559707[7] = state[7];
- out_6791547762604559707[8] = state[8];
+void f_fun(double *state, double dt, double *out_7554938137534762046) {
+ out_7554938137534762046[0] = state[0];
+ out_7554938137534762046[1] = state[1];
+ out_7554938137534762046[2] = state[2];
+ out_7554938137534762046[3] = state[3];
+ out_7554938137534762046[4] = state[4];
+ out_7554938137534762046[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8000000000000007*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
+ out_7554938137534762046[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
+ out_7554938137534762046[7] = state[7];
+ out_7554938137534762046[8] = state[8];
}
-void F_fun(double *state, double dt, double *out_3683219731909566018) {
- out_3683219731909566018[0] = 1;
- out_3683219731909566018[1] = 0;
- out_3683219731909566018[2] = 0;
- out_3683219731909566018[3] = 0;
- out_3683219731909566018[4] = 0;
- out_3683219731909566018[5] = 0;
- out_3683219731909566018[6] = 0;
- out_3683219731909566018[7] = 0;
- out_3683219731909566018[8] = 0;
- out_3683219731909566018[9] = 0;
- out_3683219731909566018[10] = 1;
- out_3683219731909566018[11] = 0;
- out_3683219731909566018[12] = 0;
- out_3683219731909566018[13] = 0;
- out_3683219731909566018[14] = 0;
- out_3683219731909566018[15] = 0;
- out_3683219731909566018[16] = 0;
- out_3683219731909566018[17] = 0;
- out_3683219731909566018[18] = 0;
- out_3683219731909566018[19] = 0;
- out_3683219731909566018[20] = 1;
- out_3683219731909566018[21] = 0;
- out_3683219731909566018[22] = 0;
- out_3683219731909566018[23] = 0;
- out_3683219731909566018[24] = 0;
- out_3683219731909566018[25] = 0;
- out_3683219731909566018[26] = 0;
- out_3683219731909566018[27] = 0;
- out_3683219731909566018[28] = 0;
- out_3683219731909566018[29] = 0;
- out_3683219731909566018[30] = 1;
- out_3683219731909566018[31] = 0;
- out_3683219731909566018[32] = 0;
- out_3683219731909566018[33] = 0;
- out_3683219731909566018[34] = 0;
- out_3683219731909566018[35] = 0;
- out_3683219731909566018[36] = 0;
- out_3683219731909566018[37] = 0;
- out_3683219731909566018[38] = 0;
- out_3683219731909566018[39] = 0;
- out_3683219731909566018[40] = 1;
- out_3683219731909566018[41] = 0;
- out_3683219731909566018[42] = 0;
- out_3683219731909566018[43] = 0;
- out_3683219731909566018[44] = 0;
- out_3683219731909566018[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
- out_3683219731909566018[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
- out_3683219731909566018[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
- out_3683219731909566018[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
- out_3683219731909566018[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
- out_3683219731909566018[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
- out_3683219731909566018[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
- out_3683219731909566018[52] = dt*stiffness_front*state[0]/(mass*state[1]);
- out_3683219731909566018[53] = -9.8000000000000007*dt;
- out_3683219731909566018[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
- out_3683219731909566018[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
- out_3683219731909566018[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
- out_3683219731909566018[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
- out_3683219731909566018[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
- out_3683219731909566018[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
- out_3683219731909566018[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
- out_3683219731909566018[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
- out_3683219731909566018[62] = 0;
- out_3683219731909566018[63] = 0;
- out_3683219731909566018[64] = 0;
- out_3683219731909566018[65] = 0;
- out_3683219731909566018[66] = 0;
- out_3683219731909566018[67] = 0;
- out_3683219731909566018[68] = 0;
- out_3683219731909566018[69] = 0;
- out_3683219731909566018[70] = 1;
- out_3683219731909566018[71] = 0;
- out_3683219731909566018[72] = 0;
- out_3683219731909566018[73] = 0;
- out_3683219731909566018[74] = 0;
- out_3683219731909566018[75] = 0;
- out_3683219731909566018[76] = 0;
- out_3683219731909566018[77] = 0;
- out_3683219731909566018[78] = 0;
- out_3683219731909566018[79] = 0;
- out_3683219731909566018[80] = 1;
+void F_fun(double *state, double dt, double *out_6130812160595680525) {
+ out_6130812160595680525[0] = 1;
+ out_6130812160595680525[1] = 0;
+ out_6130812160595680525[2] = 0;
+ out_6130812160595680525[3] = 0;
+ out_6130812160595680525[4] = 0;
+ out_6130812160595680525[5] = 0;
+ out_6130812160595680525[6] = 0;
+ out_6130812160595680525[7] = 0;
+ out_6130812160595680525[8] = 0;
+ out_6130812160595680525[9] = 0;
+ out_6130812160595680525[10] = 1;
+ out_6130812160595680525[11] = 0;
+ out_6130812160595680525[12] = 0;
+ out_6130812160595680525[13] = 0;
+ out_6130812160595680525[14] = 0;
+ out_6130812160595680525[15] = 0;
+ out_6130812160595680525[16] = 0;
+ out_6130812160595680525[17] = 0;
+ out_6130812160595680525[18] = 0;
+ out_6130812160595680525[19] = 0;
+ out_6130812160595680525[20] = 1;
+ out_6130812160595680525[21] = 0;
+ out_6130812160595680525[22] = 0;
+ out_6130812160595680525[23] = 0;
+ out_6130812160595680525[24] = 0;
+ out_6130812160595680525[25] = 0;
+ out_6130812160595680525[26] = 0;
+ out_6130812160595680525[27] = 0;
+ out_6130812160595680525[28] = 0;
+ out_6130812160595680525[29] = 0;
+ out_6130812160595680525[30] = 1;
+ out_6130812160595680525[31] = 0;
+ out_6130812160595680525[32] = 0;
+ out_6130812160595680525[33] = 0;
+ out_6130812160595680525[34] = 0;
+ out_6130812160595680525[35] = 0;
+ out_6130812160595680525[36] = 0;
+ out_6130812160595680525[37] = 0;
+ out_6130812160595680525[38] = 0;
+ out_6130812160595680525[39] = 0;
+ out_6130812160595680525[40] = 1;
+ out_6130812160595680525[41] = 0;
+ out_6130812160595680525[42] = 0;
+ out_6130812160595680525[43] = 0;
+ out_6130812160595680525[44] = 0;
+ out_6130812160595680525[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
+ out_6130812160595680525[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
+ out_6130812160595680525[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
+ out_6130812160595680525[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
+ out_6130812160595680525[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
+ out_6130812160595680525[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
+ out_6130812160595680525[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
+ out_6130812160595680525[52] = dt*stiffness_front*state[0]/(mass*state[1]);
+ out_6130812160595680525[53] = -9.8000000000000007*dt;
+ out_6130812160595680525[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
+ out_6130812160595680525[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
+ out_6130812160595680525[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
+ out_6130812160595680525[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
+ out_6130812160595680525[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
+ out_6130812160595680525[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
+ out_6130812160595680525[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
+ out_6130812160595680525[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
+ out_6130812160595680525[62] = 0;
+ out_6130812160595680525[63] = 0;
+ out_6130812160595680525[64] = 0;
+ out_6130812160595680525[65] = 0;
+ out_6130812160595680525[66] = 0;
+ out_6130812160595680525[67] = 0;
+ out_6130812160595680525[68] = 0;
+ out_6130812160595680525[69] = 0;
+ out_6130812160595680525[70] = 1;
+ out_6130812160595680525[71] = 0;
+ out_6130812160595680525[72] = 0;
+ out_6130812160595680525[73] = 0;
+ out_6130812160595680525[74] = 0;
+ out_6130812160595680525[75] = 0;
+ out_6130812160595680525[76] = 0;
+ out_6130812160595680525[77] = 0;
+ out_6130812160595680525[78] = 0;
+ out_6130812160595680525[79] = 0;
+ out_6130812160595680525[80] = 1;
}
-void h_25(double *state, double *unused, double *out_2172051214329875381) {
- out_2172051214329875381[0] = state[6];
+void h_25(double *state, double *unused, double *out_8951477070372806105) {
+ out_8951477070372806105[0] = state[6];
}
-void H_25(double *state, double *unused, double *out_3364051928398716628) {
- out_3364051928398716628[0] = 0;
- out_3364051928398716628[1] = 0;
- out_3364051928398716628[2] = 0;
- out_3364051928398716628[3] = 0;
- out_3364051928398716628[4] = 0;
- out_3364051928398716628[5] = 0;
- out_3364051928398716628[6] = 1;
- out_3364051928398716628[7] = 0;
- out_3364051928398716628[8] = 0;
+void H_25(double *state, double *unused, double *out_9087508506817314964) {
+ out_9087508506817314964[0] = 0;
+ out_9087508506817314964[1] = 0;
+ out_9087508506817314964[2] = 0;
+ out_9087508506817314964[3] = 0;
+ out_9087508506817314964[4] = 0;
+ out_9087508506817314964[5] = 0;
+ out_9087508506817314964[6] = 1;
+ out_9087508506817314964[7] = 0;
+ out_9087508506817314964[8] = 0;
}
-void h_24(double *state, double *unused, double *out_7587553502939940622) {
- out_7587553502939940622[0] = state[4];
- out_7587553502939940622[1] = state[5];
+void h_24(double *state, double *unused, double *out_4067561432286125622) {
+ out_4067561432286125622[0] = state[4];
+ out_4067561432286125622[1] = state[5];
}
-void H_24(double *state, double *unused, double *out_2519055319615021229) {
- out_2519055319615021229[0] = 0;
- out_2519055319615021229[1] = 0;
- out_2519055319615021229[2] = 0;
- out_2519055319615021229[3] = 0;
- out_2519055319615021229[4] = 1;
- out_2519055319615021229[5] = 0;
- out_2519055319615021229[6] = 0;
- out_2519055319615021229[7] = 0;
- out_2519055319615021229[8] = 0;
- out_2519055319615021229[9] = 0;
- out_2519055319615021229[10] = 0;
- out_2519055319615021229[11] = 0;
- out_2519055319615021229[12] = 0;
- out_2519055319615021229[13] = 0;
- out_2519055319615021229[14] = 1;
- out_2519055319615021229[15] = 0;
- out_2519055319615021229[16] = 0;
- out_2519055319615021229[17] = 0;
+void H_24(double *state, double *unused, double *out_1669116873140388071) {
+ out_1669116873140388071[0] = 0;
+ out_1669116873140388071[1] = 0;
+ out_1669116873140388071[2] = 0;
+ out_1669116873140388071[3] = 0;
+ out_1669116873140388071[4] = 1;
+ out_1669116873140388071[5] = 0;
+ out_1669116873140388071[6] = 0;
+ out_1669116873140388071[7] = 0;
+ out_1669116873140388071[8] = 0;
+ out_1669116873140388071[9] = 0;
+ out_1669116873140388071[10] = 0;
+ out_1669116873140388071[11] = 0;
+ out_1669116873140388071[12] = 0;
+ out_1669116873140388071[13] = 0;
+ out_1669116873140388071[14] = 1;
+ out_1669116873140388071[15] = 0;
+ out_1669116873140388071[16] = 0;
+ out_1669116873140388071[17] = 0;
}
-void h_30(double *state, double *unused, double *out_6112207235155681847) {
- out_6112207235155681847[0] = state[4];
+void h_30(double *state, double *unused, double *out_7500845677743922938) {
+ out_7500845677743922938[0] = state[4];
}
-void H_30(double *state, double *unused, double *out_3552638413092900127) {
- out_3552638413092900127[0] = 0;
- out_3552638413092900127[1] = 0;
- out_3552638413092900127[2] = 0;
- out_3552638413092900127[3] = 0;
- out_3552638413092900127[4] = 1;
- out_3552638413092900127[5] = 0;
- out_3552638413092900127[6] = 0;
- out_3552638413092900127[7] = 0;
- out_3552638413092900127[8] = 0;
+void H_30(double *state, double *unused, double *out_4831539236764628454) {
+ out_4831539236764628454[0] = 0;
+ out_4831539236764628454[1] = 0;
+ out_4831539236764628454[2] = 0;
+ out_4831539236764628454[3] = 0;
+ out_4831539236764628454[4] = 1;
+ out_4831539236764628454[5] = 0;
+ out_4831539236764628454[6] = 0;
+ out_4831539236764628454[7] = 0;
+ out_4831539236764628454[8] = 0;
}
-void h_26(double *state, double *unused, double *out_967317172040034310) {
- out_967317172040034310[0] = state[7];
+void h_26(double *state, double *unused, double *out_8341493075156931027) {
+ out_8341493075156931027[0] = state[7];
}
-void H_26(double *state, double *unused, double *out_7105555247272772852) {
- out_7105555247272772852[0] = 0;
- out_7105555247272772852[1] = 0;
- out_7105555247272772852[2] = 0;
- out_7105555247272772852[3] = 0;
- out_7105555247272772852[4] = 0;
- out_7105555247272772852[5] = 0;
- out_7105555247272772852[6] = 0;
- out_7105555247272772852[7] = 1;
- out_7105555247272772852[8] = 0;
+void H_26(double *state, double *unused, double *out_5617732248018180428) {
+ out_5617732248018180428[0] = 0;
+ out_5617732248018180428[1] = 0;
+ out_5617732248018180428[2] = 0;
+ out_5617732248018180428[3] = 0;
+ out_5617732248018180428[4] = 0;
+ out_5617732248018180428[5] = 0;
+ out_5617732248018180428[6] = 0;
+ out_5617732248018180428[7] = 1;
+ out_5617732248018180428[8] = 0;
}
-void h_27(double *state, double *unused, double *out_351929141530343503) {
- out_351929141530343503[0] = state[3];
+void h_27(double *state, double *unused, double *out_5342806970691419479) {
+ out_5342806970691419479[0] = state[3];
}
-void H_27(double *state, double *unused, double *out_1377875101292475216) {
- out_1377875101292475216[0] = 0;
- out_1377875101292475216[1] = 0;
- out_1377875101292475216[2] = 0;
- out_1377875101292475216[3] = 1;
- out_1377875101292475216[4] = 0;
- out_1377875101292475216[5] = 0;
- out_1377875101292475216[6] = 0;
- out_1377875101292475216[7] = 0;
- out_1377875101292475216[8] = 0;
+void H_27(double *state, double *unused, double *out_2656775924964203543) {
+ out_2656775924964203543[0] = 0;
+ out_2656775924964203543[1] = 0;
+ out_2656775924964203543[2] = 0;
+ out_2656775924964203543[3] = 1;
+ out_2656775924964203543[4] = 0;
+ out_2656775924964203543[5] = 0;
+ out_2656775924964203543[6] = 0;
+ out_2656775924964203543[7] = 0;
+ out_2656775924964203543[8] = 0;
}
-void h_29(double *state, double *unused, double *out_627123203814849392) {
- out_627123203814849392[0] = state[1];
+void h_29(double *state, double *unused, double *out_2538465680062629706) {
+ out_2538465680062629706[0] = state[1];
}
-void H_29(double *state, double *unused, double *out_335487625577075817) {
- out_335487625577075817[0] = 0;
- out_335487625577075817[1] = 1;
- out_335487625577075817[2] = 0;
- out_335487625577075817[3] = 0;
- out_335487625577075817[4] = 0;
- out_335487625577075817[5] = 0;
- out_335487625577075817[6] = 0;
- out_335487625577075817[7] = 0;
- out_335487625577075817[8] = 0;
+void H_29(double *state, double *unused, double *out_5341770581079020638) {
+ out_5341770581079020638[0] = 0;
+ out_5341770581079020638[1] = 1;
+ out_5341770581079020638[2] = 0;
+ out_5341770581079020638[3] = 0;
+ out_5341770581079020638[4] = 0;
+ out_5341770581079020638[5] = 0;
+ out_5341770581079020638[6] = 0;
+ out_5341770581079020638[7] = 0;
+ out_5341770581079020638[8] = 0;
}
-void h_28(double *state, double *unused, double *out_2252476179278354148) {
- out_2252476179278354148[0] = state[0];
+void h_28(double *state, double *unused, double *out_572823783042442857) {
+ out_572823783042442857[0] = state[0];
}
-void H_28(double *state, double *unused, double *out_5417886642646606391) {
- out_5417886642646606391[0] = 1;
- out_5417886642646606391[1] = 0;
- out_5417886642646606391[2] = 0;
- out_5417886642646606391[3] = 0;
- out_5417886642646606391[4] = 0;
- out_5417886642646606391[5] = 0;
- out_5417886642646606391[6] = 0;
- out_5417886642646606391[7] = 0;
- out_5417886642646606391[8] = 0;
+void H_28(double *state, double *unused, double *out_7305400852644346889) {
+ out_7305400852644346889[0] = 1;
+ out_7305400852644346889[1] = 0;
+ out_7305400852644346889[2] = 0;
+ out_7305400852644346889[3] = 0;
+ out_7305400852644346889[4] = 0;
+ out_7305400852644346889[5] = 0;
+ out_7305400852644346889[6] = 0;
+ out_7305400852644346889[7] = 0;
+ out_7305400852644346889[8] = 0;
}
-void h_31(double *state, double *unused, double *out_8511427602559003794) {
- out_8511427602559003794[0] = state[8];
+void h_31(double *state, double *unused, double *out_8893848845723381957) {
+ out_8893848845723381957[0] = state[8];
}
-void H_31(double *state, double *unused, double *out_3333405966521756200) {
- out_3333405966521756200[0] = 0;
- out_3333405966521756200[1] = 0;
- out_3333405966521756200[2] = 0;
- out_3333405966521756200[3] = 0;
- out_3333405966521756200[4] = 0;
- out_3333405966521756200[5] = 0;
- out_3333405966521756200[6] = 0;
- out_3333405966521756200[7] = 0;
- out_3333405966521756200[8] = 1;
+void H_31(double *state, double *unused, double *out_4991524145784828952) {
+ out_4991524145784828952[0] = 0;
+ out_4991524145784828952[1] = 0;
+ out_4991524145784828952[2] = 0;
+ out_4991524145784828952[3] = 0;
+ out_4991524145784828952[4] = 0;
+ out_4991524145784828952[5] = 0;
+ out_4991524145784828952[6] = 0;
+ out_4991524145784828952[7] = 0;
+ out_4991524145784828952[8] = 1;
}
#include
#include
@@ -518,68 +518,68 @@ void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_31, H_31, NULL, in_z, in_R, in_ea, MAHA_THRESH_31);
}
-void car_err_fun(double *nom_x, double *delta_x, double *out_6814212569071197423) {
- err_fun(nom_x, delta_x, out_6814212569071197423);
+void car_err_fun(double *nom_x, double *delta_x, double *out_729362937437787457) {
+ err_fun(nom_x, delta_x, out_729362937437787457);
}
-void car_inv_err_fun(double *nom_x, double *true_x, double *out_7666174205888484741) {
- inv_err_fun(nom_x, true_x, out_7666174205888484741);
+void car_inv_err_fun(double *nom_x, double *true_x, double *out_4929143687762803407) {
+ inv_err_fun(nom_x, true_x, out_4929143687762803407);
}
-void car_H_mod_fun(double *state, double *out_8014857022495098622) {
- H_mod_fun(state, out_8014857022495098622);
+void car_H_mod_fun(double *state, double *out_8315888887196402654) {
+ H_mod_fun(state, out_8315888887196402654);
}
-void car_f_fun(double *state, double dt, double *out_6791547762604559707) {
- f_fun(state, dt, out_6791547762604559707);
+void car_f_fun(double *state, double dt, double *out_7554938137534762046) {
+ f_fun(state, dt, out_7554938137534762046);
}
-void car_F_fun(double *state, double dt, double *out_3683219731909566018) {
- F_fun(state, dt, out_3683219731909566018);
+void car_F_fun(double *state, double dt, double *out_6130812160595680525) {
+ F_fun(state, dt, out_6130812160595680525);
}
-void car_h_25(double *state, double *unused, double *out_2172051214329875381) {
- h_25(state, unused, out_2172051214329875381);
+void car_h_25(double *state, double *unused, double *out_8951477070372806105) {
+ h_25(state, unused, out_8951477070372806105);
}
-void car_H_25(double *state, double *unused, double *out_3364051928398716628) {
- H_25(state, unused, out_3364051928398716628);
+void car_H_25(double *state, double *unused, double *out_9087508506817314964) {
+ H_25(state, unused, out_9087508506817314964);
}
-void car_h_24(double *state, double *unused, double *out_7587553502939940622) {
- h_24(state, unused, out_7587553502939940622);
+void car_h_24(double *state, double *unused, double *out_4067561432286125622) {
+ h_24(state, unused, out_4067561432286125622);
}
-void car_H_24(double *state, double *unused, double *out_2519055319615021229) {
- H_24(state, unused, out_2519055319615021229);
+void car_H_24(double *state, double *unused, double *out_1669116873140388071) {
+ H_24(state, unused, out_1669116873140388071);
}
-void car_h_30(double *state, double *unused, double *out_6112207235155681847) {
- h_30(state, unused, out_6112207235155681847);
+void car_h_30(double *state, double *unused, double *out_7500845677743922938) {
+ h_30(state, unused, out_7500845677743922938);
}
-void car_H_30(double *state, double *unused, double *out_3552638413092900127) {
- H_30(state, unused, out_3552638413092900127);
+void car_H_30(double *state, double *unused, double *out_4831539236764628454) {
+ H_30(state, unused, out_4831539236764628454);
}
-void car_h_26(double *state, double *unused, double *out_967317172040034310) {
- h_26(state, unused, out_967317172040034310);
+void car_h_26(double *state, double *unused, double *out_8341493075156931027) {
+ h_26(state, unused, out_8341493075156931027);
}
-void car_H_26(double *state, double *unused, double *out_7105555247272772852) {
- H_26(state, unused, out_7105555247272772852);
+void car_H_26(double *state, double *unused, double *out_5617732248018180428) {
+ H_26(state, unused, out_5617732248018180428);
}
-void car_h_27(double *state, double *unused, double *out_351929141530343503) {
- h_27(state, unused, out_351929141530343503);
+void car_h_27(double *state, double *unused, double *out_5342806970691419479) {
+ h_27(state, unused, out_5342806970691419479);
}
-void car_H_27(double *state, double *unused, double *out_1377875101292475216) {
- H_27(state, unused, out_1377875101292475216);
+void car_H_27(double *state, double *unused, double *out_2656775924964203543) {
+ H_27(state, unused, out_2656775924964203543);
}
-void car_h_29(double *state, double *unused, double *out_627123203814849392) {
- h_29(state, unused, out_627123203814849392);
+void car_h_29(double *state, double *unused, double *out_2538465680062629706) {
+ h_29(state, unused, out_2538465680062629706);
}
-void car_H_29(double *state, double *unused, double *out_335487625577075817) {
- H_29(state, unused, out_335487625577075817);
+void car_H_29(double *state, double *unused, double *out_5341770581079020638) {
+ H_29(state, unused, out_5341770581079020638);
}
-void car_h_28(double *state, double *unused, double *out_2252476179278354148) {
- h_28(state, unused, out_2252476179278354148);
+void car_h_28(double *state, double *unused, double *out_572823783042442857) {
+ h_28(state, unused, out_572823783042442857);
}
-void car_H_28(double *state, double *unused, double *out_5417886642646606391) {
- H_28(state, unused, out_5417886642646606391);
+void car_H_28(double *state, double *unused, double *out_7305400852644346889) {
+ H_28(state, unused, out_7305400852644346889);
}
-void car_h_31(double *state, double *unused, double *out_8511427602559003794) {
- h_31(state, unused, out_8511427602559003794);
+void car_h_31(double *state, double *unused, double *out_8893848845723381957) {
+ h_31(state, unused, out_8893848845723381957);
}
-void car_H_31(double *state, double *unused, double *out_3333405966521756200) {
- H_31(state, unused, out_3333405966521756200);
+void car_H_31(double *state, double *unused, double *out_4991524145784828952) {
+ H_31(state, unused, out_4991524145784828952);
}
void car_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
diff --git a/selfdrive/locationd/models/generated/car.h b/selfdrive/locationd/models/generated/car.h
index 3f11ea4a9..bbe130c12 100644
--- a/selfdrive/locationd/models/generated/car.h
+++ b/selfdrive/locationd/models/generated/car.h
@@ -9,27 +9,27 @@ void car_update_27(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void car_update_29(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
-void car_err_fun(double *nom_x, double *delta_x, double *out_6814212569071197423);
-void car_inv_err_fun(double *nom_x, double *true_x, double *out_7666174205888484741);
-void car_H_mod_fun(double *state, double *out_8014857022495098622);
-void car_f_fun(double *state, double dt, double *out_6791547762604559707);
-void car_F_fun(double *state, double dt, double *out_3683219731909566018);
-void car_h_25(double *state, double *unused, double *out_2172051214329875381);
-void car_H_25(double *state, double *unused, double *out_3364051928398716628);
-void car_h_24(double *state, double *unused, double *out_7587553502939940622);
-void car_H_24(double *state, double *unused, double *out_2519055319615021229);
-void car_h_30(double *state, double *unused, double *out_6112207235155681847);
-void car_H_30(double *state, double *unused, double *out_3552638413092900127);
-void car_h_26(double *state, double *unused, double *out_967317172040034310);
-void car_H_26(double *state, double *unused, double *out_7105555247272772852);
-void car_h_27(double *state, double *unused, double *out_351929141530343503);
-void car_H_27(double *state, double *unused, double *out_1377875101292475216);
-void car_h_29(double *state, double *unused, double *out_627123203814849392);
-void car_H_29(double *state, double *unused, double *out_335487625577075817);
-void car_h_28(double *state, double *unused, double *out_2252476179278354148);
-void car_H_28(double *state, double *unused, double *out_5417886642646606391);
-void car_h_31(double *state, double *unused, double *out_8511427602559003794);
-void car_H_31(double *state, double *unused, double *out_3333405966521756200);
+void car_err_fun(double *nom_x, double *delta_x, double *out_729362937437787457);
+void car_inv_err_fun(double *nom_x, double *true_x, double *out_4929143687762803407);
+void car_H_mod_fun(double *state, double *out_8315888887196402654);
+void car_f_fun(double *state, double dt, double *out_7554938137534762046);
+void car_F_fun(double *state, double dt, double *out_6130812160595680525);
+void car_h_25(double *state, double *unused, double *out_8951477070372806105);
+void car_H_25(double *state, double *unused, double *out_9087508506817314964);
+void car_h_24(double *state, double *unused, double *out_4067561432286125622);
+void car_H_24(double *state, double *unused, double *out_1669116873140388071);
+void car_h_30(double *state, double *unused, double *out_7500845677743922938);
+void car_H_30(double *state, double *unused, double *out_4831539236764628454);
+void car_h_26(double *state, double *unused, double *out_8341493075156931027);
+void car_H_26(double *state, double *unused, double *out_5617732248018180428);
+void car_h_27(double *state, double *unused, double *out_5342806970691419479);
+void car_H_27(double *state, double *unused, double *out_2656775924964203543);
+void car_h_29(double *state, double *unused, double *out_2538465680062629706);
+void car_H_29(double *state, double *unused, double *out_5341770581079020638);
+void car_h_28(double *state, double *unused, double *out_572823783042442857);
+void car_H_28(double *state, double *unused, double *out_7305400852644346889);
+void car_h_31(double *state, double *unused, double *out_8893848845723381957);
+void car_H_31(double *state, double *unused, double *out_4991524145784828952);
void car_predict(double *in_x, double *in_P, double *in_Q, double dt);
void car_set_mass(double x);
void car_set_rotational_inertia(double x);
diff --git a/selfdrive/locationd/models/generated/gnss.cpp b/selfdrive/locationd/models/generated/gnss.cpp
index 4b64a230e..0de005582 100644
--- a/selfdrive/locationd/models/generated/gnss.cpp
+++ b/selfdrive/locationd/models/generated/gnss.cpp
@@ -17,354 +17,354 @@ const static double MAHA_THRESH_21 = 3.8414588206941227;
* *
* This file is part of 'ekf' *
******************************************************************************/
-void err_fun(double *nom_x, double *delta_x, double *out_80014774094776572) {
- out_80014774094776572[0] = delta_x[0] + nom_x[0];
- out_80014774094776572[1] = delta_x[1] + nom_x[1];
- out_80014774094776572[2] = delta_x[2] + nom_x[2];
- out_80014774094776572[3] = delta_x[3] + nom_x[3];
- out_80014774094776572[4] = delta_x[4] + nom_x[4];
- out_80014774094776572[5] = delta_x[5] + nom_x[5];
- out_80014774094776572[6] = delta_x[6] + nom_x[6];
- out_80014774094776572[7] = delta_x[7] + nom_x[7];
- out_80014774094776572[8] = delta_x[8] + nom_x[8];
- out_80014774094776572[9] = delta_x[9] + nom_x[9];
- out_80014774094776572[10] = delta_x[10] + nom_x[10];
+void err_fun(double *nom_x, double *delta_x, double *out_3985733553669045281) {
+ out_3985733553669045281[0] = delta_x[0] + nom_x[0];
+ out_3985733553669045281[1] = delta_x[1] + nom_x[1];
+ out_3985733553669045281[2] = delta_x[2] + nom_x[2];
+ out_3985733553669045281[3] = delta_x[3] + nom_x[3];
+ out_3985733553669045281[4] = delta_x[4] + nom_x[4];
+ out_3985733553669045281[5] = delta_x[5] + nom_x[5];
+ out_3985733553669045281[6] = delta_x[6] + nom_x[6];
+ out_3985733553669045281[7] = delta_x[7] + nom_x[7];
+ out_3985733553669045281[8] = delta_x[8] + nom_x[8];
+ out_3985733553669045281[9] = delta_x[9] + nom_x[9];
+ out_3985733553669045281[10] = delta_x[10] + nom_x[10];
}
-void inv_err_fun(double *nom_x, double *true_x, double *out_9144507820461143592) {
- out_9144507820461143592[0] = -nom_x[0] + true_x[0];
- out_9144507820461143592[1] = -nom_x[1] + true_x[1];
- out_9144507820461143592[2] = -nom_x[2] + true_x[2];
- out_9144507820461143592[3] = -nom_x[3] + true_x[3];
- out_9144507820461143592[4] = -nom_x[4] + true_x[4];
- out_9144507820461143592[5] = -nom_x[5] + true_x[5];
- out_9144507820461143592[6] = -nom_x[6] + true_x[6];
- out_9144507820461143592[7] = -nom_x[7] + true_x[7];
- out_9144507820461143592[8] = -nom_x[8] + true_x[8];
- out_9144507820461143592[9] = -nom_x[9] + true_x[9];
- out_9144507820461143592[10] = -nom_x[10] + true_x[10];
+void inv_err_fun(double *nom_x, double *true_x, double *out_668705734016375974) {
+ out_668705734016375974[0] = -nom_x[0] + true_x[0];
+ out_668705734016375974[1] = -nom_x[1] + true_x[1];
+ out_668705734016375974[2] = -nom_x[2] + true_x[2];
+ out_668705734016375974[3] = -nom_x[3] + true_x[3];
+ out_668705734016375974[4] = -nom_x[4] + true_x[4];
+ out_668705734016375974[5] = -nom_x[5] + true_x[5];
+ out_668705734016375974[6] = -nom_x[6] + true_x[6];
+ out_668705734016375974[7] = -nom_x[7] + true_x[7];
+ out_668705734016375974[8] = -nom_x[8] + true_x[8];
+ out_668705734016375974[9] = -nom_x[9] + true_x[9];
+ out_668705734016375974[10] = -nom_x[10] + true_x[10];
}
-void H_mod_fun(double *state, double *out_3038444346073204801) {
- out_3038444346073204801[0] = 1.0;
- out_3038444346073204801[1] = 0;
- out_3038444346073204801[2] = 0;
- out_3038444346073204801[3] = 0;
- out_3038444346073204801[4] = 0;
- out_3038444346073204801[5] = 0;
- out_3038444346073204801[6] = 0;
- out_3038444346073204801[7] = 0;
- out_3038444346073204801[8] = 0;
- out_3038444346073204801[9] = 0;
- out_3038444346073204801[10] = 0;
- out_3038444346073204801[11] = 0;
- out_3038444346073204801[12] = 1.0;
- out_3038444346073204801[13] = 0;
- out_3038444346073204801[14] = 0;
- out_3038444346073204801[15] = 0;
- out_3038444346073204801[16] = 0;
- out_3038444346073204801[17] = 0;
- out_3038444346073204801[18] = 0;
- out_3038444346073204801[19] = 0;
- out_3038444346073204801[20] = 0;
- out_3038444346073204801[21] = 0;
- out_3038444346073204801[22] = 0;
- out_3038444346073204801[23] = 0;
- out_3038444346073204801[24] = 1.0;
- out_3038444346073204801[25] = 0;
- out_3038444346073204801[26] = 0;
- out_3038444346073204801[27] = 0;
- out_3038444346073204801[28] = 0;
- out_3038444346073204801[29] = 0;
- out_3038444346073204801[30] = 0;
- out_3038444346073204801[31] = 0;
- out_3038444346073204801[32] = 0;
- out_3038444346073204801[33] = 0;
- out_3038444346073204801[34] = 0;
- out_3038444346073204801[35] = 0;
- out_3038444346073204801[36] = 1.0;
- out_3038444346073204801[37] = 0;
- out_3038444346073204801[38] = 0;
- out_3038444346073204801[39] = 0;
- out_3038444346073204801[40] = 0;
- out_3038444346073204801[41] = 0;
- out_3038444346073204801[42] = 0;
- out_3038444346073204801[43] = 0;
- out_3038444346073204801[44] = 0;
- out_3038444346073204801[45] = 0;
- out_3038444346073204801[46] = 0;
- out_3038444346073204801[47] = 0;
- out_3038444346073204801[48] = 1.0;
- out_3038444346073204801[49] = 0;
- out_3038444346073204801[50] = 0;
- out_3038444346073204801[51] = 0;
- out_3038444346073204801[52] = 0;
- out_3038444346073204801[53] = 0;
- out_3038444346073204801[54] = 0;
- out_3038444346073204801[55] = 0;
- out_3038444346073204801[56] = 0;
- out_3038444346073204801[57] = 0;
- out_3038444346073204801[58] = 0;
- out_3038444346073204801[59] = 0;
- out_3038444346073204801[60] = 1.0;
- out_3038444346073204801[61] = 0;
- out_3038444346073204801[62] = 0;
- out_3038444346073204801[63] = 0;
- out_3038444346073204801[64] = 0;
- out_3038444346073204801[65] = 0;
- out_3038444346073204801[66] = 0;
- out_3038444346073204801[67] = 0;
- out_3038444346073204801[68] = 0;
- out_3038444346073204801[69] = 0;
- out_3038444346073204801[70] = 0;
- out_3038444346073204801[71] = 0;
- out_3038444346073204801[72] = 1.0;
- out_3038444346073204801[73] = 0;
- out_3038444346073204801[74] = 0;
- out_3038444346073204801[75] = 0;
- out_3038444346073204801[76] = 0;
- out_3038444346073204801[77] = 0;
- out_3038444346073204801[78] = 0;
- out_3038444346073204801[79] = 0;
- out_3038444346073204801[80] = 0;
- out_3038444346073204801[81] = 0;
- out_3038444346073204801[82] = 0;
- out_3038444346073204801[83] = 0;
- out_3038444346073204801[84] = 1.0;
- out_3038444346073204801[85] = 0;
- out_3038444346073204801[86] = 0;
- out_3038444346073204801[87] = 0;
- out_3038444346073204801[88] = 0;
- out_3038444346073204801[89] = 0;
- out_3038444346073204801[90] = 0;
- out_3038444346073204801[91] = 0;
- out_3038444346073204801[92] = 0;
- out_3038444346073204801[93] = 0;
- out_3038444346073204801[94] = 0;
- out_3038444346073204801[95] = 0;
- out_3038444346073204801[96] = 1.0;
- out_3038444346073204801[97] = 0;
- out_3038444346073204801[98] = 0;
- out_3038444346073204801[99] = 0;
- out_3038444346073204801[100] = 0;
- out_3038444346073204801[101] = 0;
- out_3038444346073204801[102] = 0;
- out_3038444346073204801[103] = 0;
- out_3038444346073204801[104] = 0;
- out_3038444346073204801[105] = 0;
- out_3038444346073204801[106] = 0;
- out_3038444346073204801[107] = 0;
- out_3038444346073204801[108] = 1.0;
- out_3038444346073204801[109] = 0;
- out_3038444346073204801[110] = 0;
- out_3038444346073204801[111] = 0;
- out_3038444346073204801[112] = 0;
- out_3038444346073204801[113] = 0;
- out_3038444346073204801[114] = 0;
- out_3038444346073204801[115] = 0;
- out_3038444346073204801[116] = 0;
- out_3038444346073204801[117] = 0;
- out_3038444346073204801[118] = 0;
- out_3038444346073204801[119] = 0;
- out_3038444346073204801[120] = 1.0;
+void H_mod_fun(double *state, double *out_1646191520139698591) {
+ out_1646191520139698591[0] = 1.0;
+ out_1646191520139698591[1] = 0;
+ out_1646191520139698591[2] = 0;
+ out_1646191520139698591[3] = 0;
+ out_1646191520139698591[4] = 0;
+ out_1646191520139698591[5] = 0;
+ out_1646191520139698591[6] = 0;
+ out_1646191520139698591[7] = 0;
+ out_1646191520139698591[8] = 0;
+ out_1646191520139698591[9] = 0;
+ out_1646191520139698591[10] = 0;
+ out_1646191520139698591[11] = 0;
+ out_1646191520139698591[12] = 1.0;
+ out_1646191520139698591[13] = 0;
+ out_1646191520139698591[14] = 0;
+ out_1646191520139698591[15] = 0;
+ out_1646191520139698591[16] = 0;
+ out_1646191520139698591[17] = 0;
+ out_1646191520139698591[18] = 0;
+ out_1646191520139698591[19] = 0;
+ out_1646191520139698591[20] = 0;
+ out_1646191520139698591[21] = 0;
+ out_1646191520139698591[22] = 0;
+ out_1646191520139698591[23] = 0;
+ out_1646191520139698591[24] = 1.0;
+ out_1646191520139698591[25] = 0;
+ out_1646191520139698591[26] = 0;
+ out_1646191520139698591[27] = 0;
+ out_1646191520139698591[28] = 0;
+ out_1646191520139698591[29] = 0;
+ out_1646191520139698591[30] = 0;
+ out_1646191520139698591[31] = 0;
+ out_1646191520139698591[32] = 0;
+ out_1646191520139698591[33] = 0;
+ out_1646191520139698591[34] = 0;
+ out_1646191520139698591[35] = 0;
+ out_1646191520139698591[36] = 1.0;
+ out_1646191520139698591[37] = 0;
+ out_1646191520139698591[38] = 0;
+ out_1646191520139698591[39] = 0;
+ out_1646191520139698591[40] = 0;
+ out_1646191520139698591[41] = 0;
+ out_1646191520139698591[42] = 0;
+ out_1646191520139698591[43] = 0;
+ out_1646191520139698591[44] = 0;
+ out_1646191520139698591[45] = 0;
+ out_1646191520139698591[46] = 0;
+ out_1646191520139698591[47] = 0;
+ out_1646191520139698591[48] = 1.0;
+ out_1646191520139698591[49] = 0;
+ out_1646191520139698591[50] = 0;
+ out_1646191520139698591[51] = 0;
+ out_1646191520139698591[52] = 0;
+ out_1646191520139698591[53] = 0;
+ out_1646191520139698591[54] = 0;
+ out_1646191520139698591[55] = 0;
+ out_1646191520139698591[56] = 0;
+ out_1646191520139698591[57] = 0;
+ out_1646191520139698591[58] = 0;
+ out_1646191520139698591[59] = 0;
+ out_1646191520139698591[60] = 1.0;
+ out_1646191520139698591[61] = 0;
+ out_1646191520139698591[62] = 0;
+ out_1646191520139698591[63] = 0;
+ out_1646191520139698591[64] = 0;
+ out_1646191520139698591[65] = 0;
+ out_1646191520139698591[66] = 0;
+ out_1646191520139698591[67] = 0;
+ out_1646191520139698591[68] = 0;
+ out_1646191520139698591[69] = 0;
+ out_1646191520139698591[70] = 0;
+ out_1646191520139698591[71] = 0;
+ out_1646191520139698591[72] = 1.0;
+ out_1646191520139698591[73] = 0;
+ out_1646191520139698591[74] = 0;
+ out_1646191520139698591[75] = 0;
+ out_1646191520139698591[76] = 0;
+ out_1646191520139698591[77] = 0;
+ out_1646191520139698591[78] = 0;
+ out_1646191520139698591[79] = 0;
+ out_1646191520139698591[80] = 0;
+ out_1646191520139698591[81] = 0;
+ out_1646191520139698591[82] = 0;
+ out_1646191520139698591[83] = 0;
+ out_1646191520139698591[84] = 1.0;
+ out_1646191520139698591[85] = 0;
+ out_1646191520139698591[86] = 0;
+ out_1646191520139698591[87] = 0;
+ out_1646191520139698591[88] = 0;
+ out_1646191520139698591[89] = 0;
+ out_1646191520139698591[90] = 0;
+ out_1646191520139698591[91] = 0;
+ out_1646191520139698591[92] = 0;
+ out_1646191520139698591[93] = 0;
+ out_1646191520139698591[94] = 0;
+ out_1646191520139698591[95] = 0;
+ out_1646191520139698591[96] = 1.0;
+ out_1646191520139698591[97] = 0;
+ out_1646191520139698591[98] = 0;
+ out_1646191520139698591[99] = 0;
+ out_1646191520139698591[100] = 0;
+ out_1646191520139698591[101] = 0;
+ out_1646191520139698591[102] = 0;
+ out_1646191520139698591[103] = 0;
+ out_1646191520139698591[104] = 0;
+ out_1646191520139698591[105] = 0;
+ out_1646191520139698591[106] = 0;
+ out_1646191520139698591[107] = 0;
+ out_1646191520139698591[108] = 1.0;
+ out_1646191520139698591[109] = 0;
+ out_1646191520139698591[110] = 0;
+ out_1646191520139698591[111] = 0;
+ out_1646191520139698591[112] = 0;
+ out_1646191520139698591[113] = 0;
+ out_1646191520139698591[114] = 0;
+ out_1646191520139698591[115] = 0;
+ out_1646191520139698591[116] = 0;
+ out_1646191520139698591[117] = 0;
+ out_1646191520139698591[118] = 0;
+ out_1646191520139698591[119] = 0;
+ out_1646191520139698591[120] = 1.0;
}
-void f_fun(double *state, double dt, double *out_5331942404729498203) {
- out_5331942404729498203[0] = dt*state[3] + state[0];
- out_5331942404729498203[1] = dt*state[4] + state[1];
- out_5331942404729498203[2] = dt*state[5] + state[2];
- out_5331942404729498203[3] = state[3];
- out_5331942404729498203[4] = state[4];
- out_5331942404729498203[5] = state[5];
- out_5331942404729498203[6] = dt*state[7] + state[6];
- out_5331942404729498203[7] = dt*state[8] + state[7];
- out_5331942404729498203[8] = state[8];
- out_5331942404729498203[9] = state[9];
- out_5331942404729498203[10] = state[10];
+void f_fun(double *state, double dt, double *out_8136264243716214718) {
+ out_8136264243716214718[0] = dt*state[3] + state[0];
+ out_8136264243716214718[1] = dt*state[4] + state[1];
+ out_8136264243716214718[2] = dt*state[5] + state[2];
+ out_8136264243716214718[3] = state[3];
+ out_8136264243716214718[4] = state[4];
+ out_8136264243716214718[5] = state[5];
+ out_8136264243716214718[6] = dt*state[7] + state[6];
+ out_8136264243716214718[7] = dt*state[8] + state[7];
+ out_8136264243716214718[8] = state[8];
+ out_8136264243716214718[9] = state[9];
+ out_8136264243716214718[10] = state[10];
}
-void F_fun(double *state, double dt, double *out_3160440324773884395) {
- out_3160440324773884395[0] = 1;
- out_3160440324773884395[1] = 0;
- out_3160440324773884395[2] = 0;
- out_3160440324773884395[3] = dt;
- out_3160440324773884395[4] = 0;
- out_3160440324773884395[5] = 0;
- out_3160440324773884395[6] = 0;
- out_3160440324773884395[7] = 0;
- out_3160440324773884395[8] = 0;
- out_3160440324773884395[9] = 0;
- out_3160440324773884395[10] = 0;
- out_3160440324773884395[11] = 0;
- out_3160440324773884395[12] = 1;
- out_3160440324773884395[13] = 0;
- out_3160440324773884395[14] = 0;
- out_3160440324773884395[15] = dt;
- out_3160440324773884395[16] = 0;
- out_3160440324773884395[17] = 0;
- out_3160440324773884395[18] = 0;
- out_3160440324773884395[19] = 0;
- out_3160440324773884395[20] = 0;
- out_3160440324773884395[21] = 0;
- out_3160440324773884395[22] = 0;
- out_3160440324773884395[23] = 0;
- out_3160440324773884395[24] = 1;
- out_3160440324773884395[25] = 0;
- out_3160440324773884395[26] = 0;
- out_3160440324773884395[27] = dt;
- out_3160440324773884395[28] = 0;
- out_3160440324773884395[29] = 0;
- out_3160440324773884395[30] = 0;
- out_3160440324773884395[31] = 0;
- out_3160440324773884395[32] = 0;
- out_3160440324773884395[33] = 0;
- out_3160440324773884395[34] = 0;
- out_3160440324773884395[35] = 0;
- out_3160440324773884395[36] = 1;
- out_3160440324773884395[37] = 0;
- out_3160440324773884395[38] = 0;
- out_3160440324773884395[39] = 0;
- out_3160440324773884395[40] = 0;
- out_3160440324773884395[41] = 0;
- out_3160440324773884395[42] = 0;
- out_3160440324773884395[43] = 0;
- out_3160440324773884395[44] = 0;
- out_3160440324773884395[45] = 0;
- out_3160440324773884395[46] = 0;
- out_3160440324773884395[47] = 0;
- out_3160440324773884395[48] = 1;
- out_3160440324773884395[49] = 0;
- out_3160440324773884395[50] = 0;
- out_3160440324773884395[51] = 0;
- out_3160440324773884395[52] = 0;
- out_3160440324773884395[53] = 0;
- out_3160440324773884395[54] = 0;
- out_3160440324773884395[55] = 0;
- out_3160440324773884395[56] = 0;
- out_3160440324773884395[57] = 0;
- out_3160440324773884395[58] = 0;
- out_3160440324773884395[59] = 0;
- out_3160440324773884395[60] = 1;
- out_3160440324773884395[61] = 0;
- out_3160440324773884395[62] = 0;
- out_3160440324773884395[63] = 0;
- out_3160440324773884395[64] = 0;
- out_3160440324773884395[65] = 0;
- out_3160440324773884395[66] = 0;
- out_3160440324773884395[67] = 0;
- out_3160440324773884395[68] = 0;
- out_3160440324773884395[69] = 0;
- out_3160440324773884395[70] = 0;
- out_3160440324773884395[71] = 0;
- out_3160440324773884395[72] = 1;
- out_3160440324773884395[73] = dt;
- out_3160440324773884395[74] = 0;
- out_3160440324773884395[75] = 0;
- out_3160440324773884395[76] = 0;
- out_3160440324773884395[77] = 0;
- out_3160440324773884395[78] = 0;
- out_3160440324773884395[79] = 0;
- out_3160440324773884395[80] = 0;
- out_3160440324773884395[81] = 0;
- out_3160440324773884395[82] = 0;
- out_3160440324773884395[83] = 0;
- out_3160440324773884395[84] = 1;
- out_3160440324773884395[85] = dt;
- out_3160440324773884395[86] = 0;
- out_3160440324773884395[87] = 0;
- out_3160440324773884395[88] = 0;
- out_3160440324773884395[89] = 0;
- out_3160440324773884395[90] = 0;
- out_3160440324773884395[91] = 0;
- out_3160440324773884395[92] = 0;
- out_3160440324773884395[93] = 0;
- out_3160440324773884395[94] = 0;
- out_3160440324773884395[95] = 0;
- out_3160440324773884395[96] = 1;
- out_3160440324773884395[97] = 0;
- out_3160440324773884395[98] = 0;
- out_3160440324773884395[99] = 0;
- out_3160440324773884395[100] = 0;
- out_3160440324773884395[101] = 0;
- out_3160440324773884395[102] = 0;
- out_3160440324773884395[103] = 0;
- out_3160440324773884395[104] = 0;
- out_3160440324773884395[105] = 0;
- out_3160440324773884395[106] = 0;
- out_3160440324773884395[107] = 0;
- out_3160440324773884395[108] = 1;
- out_3160440324773884395[109] = 0;
- out_3160440324773884395[110] = 0;
- out_3160440324773884395[111] = 0;
- out_3160440324773884395[112] = 0;
- out_3160440324773884395[113] = 0;
- out_3160440324773884395[114] = 0;
- out_3160440324773884395[115] = 0;
- out_3160440324773884395[116] = 0;
- out_3160440324773884395[117] = 0;
- out_3160440324773884395[118] = 0;
- out_3160440324773884395[119] = 0;
- out_3160440324773884395[120] = 1;
+void F_fun(double *state, double dt, double *out_4236213521667949352) {
+ out_4236213521667949352[0] = 1;
+ out_4236213521667949352[1] = 0;
+ out_4236213521667949352[2] = 0;
+ out_4236213521667949352[3] = dt;
+ out_4236213521667949352[4] = 0;
+ out_4236213521667949352[5] = 0;
+ out_4236213521667949352[6] = 0;
+ out_4236213521667949352[7] = 0;
+ out_4236213521667949352[8] = 0;
+ out_4236213521667949352[9] = 0;
+ out_4236213521667949352[10] = 0;
+ out_4236213521667949352[11] = 0;
+ out_4236213521667949352[12] = 1;
+ out_4236213521667949352[13] = 0;
+ out_4236213521667949352[14] = 0;
+ out_4236213521667949352[15] = dt;
+ out_4236213521667949352[16] = 0;
+ out_4236213521667949352[17] = 0;
+ out_4236213521667949352[18] = 0;
+ out_4236213521667949352[19] = 0;
+ out_4236213521667949352[20] = 0;
+ out_4236213521667949352[21] = 0;
+ out_4236213521667949352[22] = 0;
+ out_4236213521667949352[23] = 0;
+ out_4236213521667949352[24] = 1;
+ out_4236213521667949352[25] = 0;
+ out_4236213521667949352[26] = 0;
+ out_4236213521667949352[27] = dt;
+ out_4236213521667949352[28] = 0;
+ out_4236213521667949352[29] = 0;
+ out_4236213521667949352[30] = 0;
+ out_4236213521667949352[31] = 0;
+ out_4236213521667949352[32] = 0;
+ out_4236213521667949352[33] = 0;
+ out_4236213521667949352[34] = 0;
+ out_4236213521667949352[35] = 0;
+ out_4236213521667949352[36] = 1;
+ out_4236213521667949352[37] = 0;
+ out_4236213521667949352[38] = 0;
+ out_4236213521667949352[39] = 0;
+ out_4236213521667949352[40] = 0;
+ out_4236213521667949352[41] = 0;
+ out_4236213521667949352[42] = 0;
+ out_4236213521667949352[43] = 0;
+ out_4236213521667949352[44] = 0;
+ out_4236213521667949352[45] = 0;
+ out_4236213521667949352[46] = 0;
+ out_4236213521667949352[47] = 0;
+ out_4236213521667949352[48] = 1;
+ out_4236213521667949352[49] = 0;
+ out_4236213521667949352[50] = 0;
+ out_4236213521667949352[51] = 0;
+ out_4236213521667949352[52] = 0;
+ out_4236213521667949352[53] = 0;
+ out_4236213521667949352[54] = 0;
+ out_4236213521667949352[55] = 0;
+ out_4236213521667949352[56] = 0;
+ out_4236213521667949352[57] = 0;
+ out_4236213521667949352[58] = 0;
+ out_4236213521667949352[59] = 0;
+ out_4236213521667949352[60] = 1;
+ out_4236213521667949352[61] = 0;
+ out_4236213521667949352[62] = 0;
+ out_4236213521667949352[63] = 0;
+ out_4236213521667949352[64] = 0;
+ out_4236213521667949352[65] = 0;
+ out_4236213521667949352[66] = 0;
+ out_4236213521667949352[67] = 0;
+ out_4236213521667949352[68] = 0;
+ out_4236213521667949352[69] = 0;
+ out_4236213521667949352[70] = 0;
+ out_4236213521667949352[71] = 0;
+ out_4236213521667949352[72] = 1;
+ out_4236213521667949352[73] = dt;
+ out_4236213521667949352[74] = 0;
+ out_4236213521667949352[75] = 0;
+ out_4236213521667949352[76] = 0;
+ out_4236213521667949352[77] = 0;
+ out_4236213521667949352[78] = 0;
+ out_4236213521667949352[79] = 0;
+ out_4236213521667949352[80] = 0;
+ out_4236213521667949352[81] = 0;
+ out_4236213521667949352[82] = 0;
+ out_4236213521667949352[83] = 0;
+ out_4236213521667949352[84] = 1;
+ out_4236213521667949352[85] = dt;
+ out_4236213521667949352[86] = 0;
+ out_4236213521667949352[87] = 0;
+ out_4236213521667949352[88] = 0;
+ out_4236213521667949352[89] = 0;
+ out_4236213521667949352[90] = 0;
+ out_4236213521667949352[91] = 0;
+ out_4236213521667949352[92] = 0;
+ out_4236213521667949352[93] = 0;
+ out_4236213521667949352[94] = 0;
+ out_4236213521667949352[95] = 0;
+ out_4236213521667949352[96] = 1;
+ out_4236213521667949352[97] = 0;
+ out_4236213521667949352[98] = 0;
+ out_4236213521667949352[99] = 0;
+ out_4236213521667949352[100] = 0;
+ out_4236213521667949352[101] = 0;
+ out_4236213521667949352[102] = 0;
+ out_4236213521667949352[103] = 0;
+ out_4236213521667949352[104] = 0;
+ out_4236213521667949352[105] = 0;
+ out_4236213521667949352[106] = 0;
+ out_4236213521667949352[107] = 0;
+ out_4236213521667949352[108] = 1;
+ out_4236213521667949352[109] = 0;
+ out_4236213521667949352[110] = 0;
+ out_4236213521667949352[111] = 0;
+ out_4236213521667949352[112] = 0;
+ out_4236213521667949352[113] = 0;
+ out_4236213521667949352[114] = 0;
+ out_4236213521667949352[115] = 0;
+ out_4236213521667949352[116] = 0;
+ out_4236213521667949352[117] = 0;
+ out_4236213521667949352[118] = 0;
+ out_4236213521667949352[119] = 0;
+ out_4236213521667949352[120] = 1;
}
-void h_6(double *state, double *sat_pos, double *out_4164777334676317660) {
- out_4164777334676317660[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6];
+void h_6(double *state, double *sat_pos, double *out_8352111296884602789) {
+ out_8352111296884602789[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6];
}
-void H_6(double *state, double *sat_pos, double *out_8721522254593615931) {
- out_8721522254593615931[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
- out_8721522254593615931[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
- out_8721522254593615931[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
- out_8721522254593615931[3] = 0;
- out_8721522254593615931[4] = 0;
- out_8721522254593615931[5] = 0;
- out_8721522254593615931[6] = 1;
- out_8721522254593615931[7] = 0;
- out_8721522254593615931[8] = 0;
- out_8721522254593615931[9] = 0;
- out_8721522254593615931[10] = 0;
+void H_6(double *state, double *sat_pos, double *out_2202359500111385714) {
+ out_2202359500111385714[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
+ out_2202359500111385714[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
+ out_2202359500111385714[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
+ out_2202359500111385714[3] = 0;
+ out_2202359500111385714[4] = 0;
+ out_2202359500111385714[5] = 0;
+ out_2202359500111385714[6] = 1;
+ out_2202359500111385714[7] = 0;
+ out_2202359500111385714[8] = 0;
+ out_2202359500111385714[9] = 0;
+ out_2202359500111385714[10] = 0;
}
-void h_20(double *state, double *sat_pos, double *out_1506605518158843733) {
- out_1506605518158843733[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9];
+void h_20(double *state, double *sat_pos, double *out_4887672178428492502) {
+ out_4887672178428492502[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9];
}
-void H_20(double *state, double *sat_pos, double *out_1146945854611411680) {
- out_1146945854611411680[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
- out_1146945854611411680[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
- out_1146945854611411680[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
- out_1146945854611411680[3] = 0;
- out_1146945854611411680[4] = 0;
- out_1146945854611411680[5] = 0;
- out_1146945854611411680[6] = 1;
- out_1146945854611411680[7] = 0;
- out_1146945854611411680[8] = 0;
- out_1146945854611411680[9] = 1;
- out_1146945854611411680[10] = sat_pos[3];
+void H_20(double *state, double *sat_pos, double *out_4961949425089895635) {
+ out_4961949425089895635[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
+ out_4961949425089895635[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
+ out_4961949425089895635[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
+ out_4961949425089895635[3] = 0;
+ out_4961949425089895635[4] = 0;
+ out_4961949425089895635[5] = 0;
+ out_4961949425089895635[6] = 1;
+ out_4961949425089895635[7] = 0;
+ out_4961949425089895635[8] = 0;
+ out_4961949425089895635[9] = 1;
+ out_4961949425089895635[10] = sat_pos[3];
}
-void h_7(double *state, double *sat_pos_vel, double *out_2838038345896688742) {
- out_2838038345896688742[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
+void h_7(double *state, double *sat_pos_vel, double *out_191603051630805475) {
+ out_191603051630805475[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
}
-void H_7(double *state, double *sat_pos_vel, double *out_7683900239883798223) {
- out_7683900239883798223[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[6] = 0;
- out_7683900239883798223[7] = 1;
- out_7683900239883798223[8] = 0;
- out_7683900239883798223[9] = 0;
- out_7683900239883798223[10] = 0;
+void H_7(double *state, double *sat_pos_vel, double *out_7197851591855342328) {
+ out_7197851591855342328[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[6] = 0;
+ out_7197851591855342328[7] = 1;
+ out_7197851591855342328[8] = 0;
+ out_7197851591855342328[9] = 0;
+ out_7197851591855342328[10] = 0;
}
-void h_21(double *state, double *sat_pos_vel, double *out_2838038345896688742) {
- out_2838038345896688742[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
+void h_21(double *state, double *sat_pos_vel, double *out_191603051630805475) {
+ out_191603051630805475[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
}
-void H_21(double *state, double *sat_pos_vel, double *out_7683900239883798223) {
- out_7683900239883798223[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
- out_7683900239883798223[6] = 0;
- out_7683900239883798223[7] = 1;
- out_7683900239883798223[8] = 0;
- out_7683900239883798223[9] = 0;
- out_7683900239883798223[10] = 0;
+void H_21(double *state, double *sat_pos_vel, double *out_7197851591855342328) {
+ out_7197851591855342328[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
+ out_7197851591855342328[6] = 0;
+ out_7197851591855342328[7] = 1;
+ out_7197851591855342328[8] = 0;
+ out_7197851591855342328[9] = 0;
+ out_7197851591855342328[10] = 0;
}
#include
#include
@@ -506,44 +506,44 @@ void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_21, H_21, NULL, in_z, in_R, in_ea, MAHA_THRESH_21);
}
-void gnss_err_fun(double *nom_x, double *delta_x, double *out_80014774094776572) {
- err_fun(nom_x, delta_x, out_80014774094776572);
+void gnss_err_fun(double *nom_x, double *delta_x, double *out_3985733553669045281) {
+ err_fun(nom_x, delta_x, out_3985733553669045281);
}
-void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_9144507820461143592) {
- inv_err_fun(nom_x, true_x, out_9144507820461143592);
+void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_668705734016375974) {
+ inv_err_fun(nom_x, true_x, out_668705734016375974);
}
-void gnss_H_mod_fun(double *state, double *out_3038444346073204801) {
- H_mod_fun(state, out_3038444346073204801);
+void gnss_H_mod_fun(double *state, double *out_1646191520139698591) {
+ H_mod_fun(state, out_1646191520139698591);
}
-void gnss_f_fun(double *state, double dt, double *out_5331942404729498203) {
- f_fun(state, dt, out_5331942404729498203);
+void gnss_f_fun(double *state, double dt, double *out_8136264243716214718) {
+ f_fun(state, dt, out_8136264243716214718);
}
-void gnss_F_fun(double *state, double dt, double *out_3160440324773884395) {
- F_fun(state, dt, out_3160440324773884395);
+void gnss_F_fun(double *state, double dt, double *out_4236213521667949352) {
+ F_fun(state, dt, out_4236213521667949352);
}
-void gnss_h_6(double *state, double *sat_pos, double *out_4164777334676317660) {
- h_6(state, sat_pos, out_4164777334676317660);
+void gnss_h_6(double *state, double *sat_pos, double *out_8352111296884602789) {
+ h_6(state, sat_pos, out_8352111296884602789);
}
-void gnss_H_6(double *state, double *sat_pos, double *out_8721522254593615931) {
- H_6(state, sat_pos, out_8721522254593615931);
+void gnss_H_6(double *state, double *sat_pos, double *out_2202359500111385714) {
+ H_6(state, sat_pos, out_2202359500111385714);
}
-void gnss_h_20(double *state, double *sat_pos, double *out_1506605518158843733) {
- h_20(state, sat_pos, out_1506605518158843733);
+void gnss_h_20(double *state, double *sat_pos, double *out_4887672178428492502) {
+ h_20(state, sat_pos, out_4887672178428492502);
}
-void gnss_H_20(double *state, double *sat_pos, double *out_1146945854611411680) {
- H_20(state, sat_pos, out_1146945854611411680);
+void gnss_H_20(double *state, double *sat_pos, double *out_4961949425089895635) {
+ H_20(state, sat_pos, out_4961949425089895635);
}
-void gnss_h_7(double *state, double *sat_pos_vel, double *out_2838038345896688742) {
- h_7(state, sat_pos_vel, out_2838038345896688742);
+void gnss_h_7(double *state, double *sat_pos_vel, double *out_191603051630805475) {
+ h_7(state, sat_pos_vel, out_191603051630805475);
}
-void gnss_H_7(double *state, double *sat_pos_vel, double *out_7683900239883798223) {
- H_7(state, sat_pos_vel, out_7683900239883798223);
+void gnss_H_7(double *state, double *sat_pos_vel, double *out_7197851591855342328) {
+ H_7(state, sat_pos_vel, out_7197851591855342328);
}
-void gnss_h_21(double *state, double *sat_pos_vel, double *out_2838038345896688742) {
- h_21(state, sat_pos_vel, out_2838038345896688742);
+void gnss_h_21(double *state, double *sat_pos_vel, double *out_191603051630805475) {
+ h_21(state, sat_pos_vel, out_191603051630805475);
}
-void gnss_H_21(double *state, double *sat_pos_vel, double *out_7683900239883798223) {
- H_21(state, sat_pos_vel, out_7683900239883798223);
+void gnss_H_21(double *state, double *sat_pos_vel, double *out_7197851591855342328) {
+ H_21(state, sat_pos_vel, out_7197851591855342328);
}
void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
diff --git a/selfdrive/locationd/models/generated/gnss.h b/selfdrive/locationd/models/generated/gnss.h
index 1fa1db58c..a37abe221 100644
--- a/selfdrive/locationd/models/generated/gnss.h
+++ b/selfdrive/locationd/models/generated/gnss.h
@@ -5,18 +5,18 @@ void gnss_update_6(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void gnss_update_20(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
-void gnss_err_fun(double *nom_x, double *delta_x, double *out_80014774094776572);
-void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_9144507820461143592);
-void gnss_H_mod_fun(double *state, double *out_3038444346073204801);
-void gnss_f_fun(double *state, double dt, double *out_5331942404729498203);
-void gnss_F_fun(double *state, double dt, double *out_3160440324773884395);
-void gnss_h_6(double *state, double *sat_pos, double *out_4164777334676317660);
-void gnss_H_6(double *state, double *sat_pos, double *out_8721522254593615931);
-void gnss_h_20(double *state, double *sat_pos, double *out_1506605518158843733);
-void gnss_H_20(double *state, double *sat_pos, double *out_1146945854611411680);
-void gnss_h_7(double *state, double *sat_pos_vel, double *out_2838038345896688742);
-void gnss_H_7(double *state, double *sat_pos_vel, double *out_7683900239883798223);
-void gnss_h_21(double *state, double *sat_pos_vel, double *out_2838038345896688742);
-void gnss_H_21(double *state, double *sat_pos_vel, double *out_7683900239883798223);
+void gnss_err_fun(double *nom_x, double *delta_x, double *out_3985733553669045281);
+void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_668705734016375974);
+void gnss_H_mod_fun(double *state, double *out_1646191520139698591);
+void gnss_f_fun(double *state, double dt, double *out_8136264243716214718);
+void gnss_F_fun(double *state, double dt, double *out_4236213521667949352);
+void gnss_h_6(double *state, double *sat_pos, double *out_8352111296884602789);
+void gnss_H_6(double *state, double *sat_pos, double *out_2202359500111385714);
+void gnss_h_20(double *state, double *sat_pos, double *out_4887672178428492502);
+void gnss_H_20(double *state, double *sat_pos, double *out_4961949425089895635);
+void gnss_h_7(double *state, double *sat_pos_vel, double *out_191603051630805475);
+void gnss_H_7(double *state, double *sat_pos_vel, double *out_7197851591855342328);
+void gnss_h_21(double *state, double *sat_pos_vel, double *out_191603051630805475);
+void gnss_H_21(double *state, double *sat_pos_vel, double *out_7197851591855342328);
void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
\ No newline at end of file
diff --git a/selfdrive/locationd/models/generated/libkf.so b/selfdrive/locationd/models/generated/libkf.so
index b724c05ca..7e2a69863 100755
Binary files a/selfdrive/locationd/models/generated/libkf.so and b/selfdrive/locationd/models/generated/libkf.so differ
diff --git a/selfdrive/locationd/models/generated/live.cpp b/selfdrive/locationd/models/generated/live.cpp
index 910105ae1..a8905b4d6 100644
--- a/selfdrive/locationd/models/generated/live.cpp
+++ b/selfdrive/locationd/models/generated/live.cpp
@@ -22,1683 +22,1683 @@ const static double MAHA_THRESH_33 = 7.814727903251177;
* *
* This file is part of 'ekf' *
******************************************************************************/
-void H(double *in_vec, double *out_6690968010248080223) {
- out_6690968010248080223[0] = 0;
- out_6690968010248080223[1] = -sin(in_vec[1])*sin(in_vec[2])*in_vec[4] - sin(in_vec[1])*cos(in_vec[2])*in_vec[3] - cos(in_vec[1])*in_vec[5];
- out_6690968010248080223[2] = -sin(in_vec[2])*cos(in_vec[1])*in_vec[3] + cos(in_vec[1])*cos(in_vec[2])*in_vec[4];
- out_6690968010248080223[3] = cos(in_vec[1])*cos(in_vec[2]);
- out_6690968010248080223[4] = sin(in_vec[2])*cos(in_vec[1]);
- out_6690968010248080223[5] = -sin(in_vec[1]);
- out_6690968010248080223[6] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (-sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*in_vec[5];
- out_6690968010248080223[7] = -sin(in_vec[0])*sin(in_vec[1])*in_vec[5] + sin(in_vec[0])*sin(in_vec[2])*cos(in_vec[1])*in_vec[4] + sin(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3];
- out_6690968010248080223[8] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]))*in_vec[4];
- out_6690968010248080223[9] = sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]);
- out_6690968010248080223[10] = sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) + cos(in_vec[0])*cos(in_vec[2]);
- out_6690968010248080223[11] = sin(in_vec[0])*cos(in_vec[1]);
- out_6690968010248080223[12] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (-sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) + sin(in_vec[2])*cos(in_vec[0]))*in_vec[3] - sin(in_vec[0])*cos(in_vec[1])*in_vec[5];
- out_6690968010248080223[13] = -sin(in_vec[1])*cos(in_vec[0])*in_vec[5] + sin(in_vec[2])*cos(in_vec[0])*cos(in_vec[1])*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3];
- out_6690968010248080223[14] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (sin(in_vec[0])*cos(in_vec[2]) - sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[3];
- out_6690968010248080223[15] = sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]);
- out_6690968010248080223[16] = -sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]);
- out_6690968010248080223[17] = cos(in_vec[0])*cos(in_vec[1]);
+void H(double *in_vec, double *out_4368495907718343571) {
+ out_4368495907718343571[0] = 0;
+ out_4368495907718343571[1] = -sin(in_vec[1])*sin(in_vec[2])*in_vec[4] - sin(in_vec[1])*cos(in_vec[2])*in_vec[3] - cos(in_vec[1])*in_vec[5];
+ out_4368495907718343571[2] = -sin(in_vec[2])*cos(in_vec[1])*in_vec[3] + cos(in_vec[1])*cos(in_vec[2])*in_vec[4];
+ out_4368495907718343571[3] = cos(in_vec[1])*cos(in_vec[2]);
+ out_4368495907718343571[4] = sin(in_vec[2])*cos(in_vec[1]);
+ out_4368495907718343571[5] = -sin(in_vec[1]);
+ out_4368495907718343571[6] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (-sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*in_vec[5];
+ out_4368495907718343571[7] = -sin(in_vec[0])*sin(in_vec[1])*in_vec[5] + sin(in_vec[0])*sin(in_vec[2])*cos(in_vec[1])*in_vec[4] + sin(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3];
+ out_4368495907718343571[8] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[3] + (sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]))*in_vec[4];
+ out_4368495907718343571[9] = sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) - sin(in_vec[2])*cos(in_vec[0]);
+ out_4368495907718343571[10] = sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) + cos(in_vec[0])*cos(in_vec[2]);
+ out_4368495907718343571[11] = sin(in_vec[0])*cos(in_vec[1]);
+ out_4368495907718343571[12] = (-sin(in_vec[0])*sin(in_vec[1])*sin(in_vec[2]) - cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (-sin(in_vec[0])*sin(in_vec[1])*cos(in_vec[2]) + sin(in_vec[2])*cos(in_vec[0]))*in_vec[3] - sin(in_vec[0])*cos(in_vec[1])*in_vec[5];
+ out_4368495907718343571[13] = -sin(in_vec[1])*cos(in_vec[0])*in_vec[5] + sin(in_vec[2])*cos(in_vec[0])*cos(in_vec[1])*in_vec[4] + cos(in_vec[0])*cos(in_vec[1])*cos(in_vec[2])*in_vec[3];
+ out_4368495907718343571[14] = (sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]))*in_vec[4] + (sin(in_vec[0])*cos(in_vec[2]) - sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]))*in_vec[3];
+ out_4368495907718343571[15] = sin(in_vec[0])*sin(in_vec[2]) + sin(in_vec[1])*cos(in_vec[0])*cos(in_vec[2]);
+ out_4368495907718343571[16] = -sin(in_vec[0])*cos(in_vec[2]) + sin(in_vec[1])*sin(in_vec[2])*cos(in_vec[0]);
+ out_4368495907718343571[17] = cos(in_vec[0])*cos(in_vec[1]);
}
-void err_fun(double *nom_x, double *delta_x, double *out_5128644486154966433) {
- out_5128644486154966433[0] = delta_x[0] + nom_x[0];
- out_5128644486154966433[1] = delta_x[1] + nom_x[1];
- out_5128644486154966433[2] = delta_x[2] + nom_x[2];
- out_5128644486154966433[3] = -0.5*delta_x[3]*nom_x[4] - 0.5*delta_x[4]*nom_x[5] - 0.5*delta_x[5]*nom_x[6] + 1.0*nom_x[3];
- out_5128644486154966433[4] = 0.5*delta_x[3]*nom_x[3] + 0.5*delta_x[4]*nom_x[6] - 0.5*delta_x[5]*nom_x[5] + 1.0*nom_x[4];
- out_5128644486154966433[5] = -0.5*delta_x[3]*nom_x[6] + 0.5*delta_x[4]*nom_x[3] + 0.5*delta_x[5]*nom_x[4] + 1.0*nom_x[5];
- out_5128644486154966433[6] = 0.5*delta_x[3]*nom_x[5] - 0.5*delta_x[4]*nom_x[4] + 0.5*delta_x[5]*nom_x[3] + 1.0*nom_x[6];
- out_5128644486154966433[7] = delta_x[6] + nom_x[7];
- out_5128644486154966433[8] = delta_x[7] + nom_x[8];
- out_5128644486154966433[9] = delta_x[8] + nom_x[9];
- out_5128644486154966433[10] = delta_x[9] + nom_x[10];
- out_5128644486154966433[11] = delta_x[10] + nom_x[11];
- out_5128644486154966433[12] = delta_x[11] + nom_x[12];
- out_5128644486154966433[13] = delta_x[12] + nom_x[13];
- out_5128644486154966433[14] = delta_x[13] + nom_x[14];
- out_5128644486154966433[15] = delta_x[14] + nom_x[15];
- out_5128644486154966433[16] = delta_x[15] + nom_x[16];
- out_5128644486154966433[17] = delta_x[16] + nom_x[17];
- out_5128644486154966433[18] = delta_x[17] + nom_x[18];
- out_5128644486154966433[19] = delta_x[18] + nom_x[19];
- out_5128644486154966433[20] = delta_x[19] + nom_x[20];
- out_5128644486154966433[21] = delta_x[20] + nom_x[21];
+void err_fun(double *nom_x, double *delta_x, double *out_4465536791498929799) {
+ out_4465536791498929799[0] = delta_x[0] + nom_x[0];
+ out_4465536791498929799[1] = delta_x[1] + nom_x[1];
+ out_4465536791498929799[2] = delta_x[2] + nom_x[2];
+ out_4465536791498929799[3] = -0.5*delta_x[3]*nom_x[4] - 0.5*delta_x[4]*nom_x[5] - 0.5*delta_x[5]*nom_x[6] + 1.0*nom_x[3];
+ out_4465536791498929799[4] = 0.5*delta_x[3]*nom_x[3] + 0.5*delta_x[4]*nom_x[6] - 0.5*delta_x[5]*nom_x[5] + 1.0*nom_x[4];
+ out_4465536791498929799[5] = -0.5*delta_x[3]*nom_x[6] + 0.5*delta_x[4]*nom_x[3] + 0.5*delta_x[5]*nom_x[4] + 1.0*nom_x[5];
+ out_4465536791498929799[6] = 0.5*delta_x[3]*nom_x[5] - 0.5*delta_x[4]*nom_x[4] + 0.5*delta_x[5]*nom_x[3] + 1.0*nom_x[6];
+ out_4465536791498929799[7] = delta_x[6] + nom_x[7];
+ out_4465536791498929799[8] = delta_x[7] + nom_x[8];
+ out_4465536791498929799[9] = delta_x[8] + nom_x[9];
+ out_4465536791498929799[10] = delta_x[9] + nom_x[10];
+ out_4465536791498929799[11] = delta_x[10] + nom_x[11];
+ out_4465536791498929799[12] = delta_x[11] + nom_x[12];
+ out_4465536791498929799[13] = delta_x[12] + nom_x[13];
+ out_4465536791498929799[14] = delta_x[13] + nom_x[14];
+ out_4465536791498929799[15] = delta_x[14] + nom_x[15];
+ out_4465536791498929799[16] = delta_x[15] + nom_x[16];
+ out_4465536791498929799[17] = delta_x[16] + nom_x[17];
+ out_4465536791498929799[18] = delta_x[17] + nom_x[18];
+ out_4465536791498929799[19] = delta_x[18] + nom_x[19];
+ out_4465536791498929799[20] = delta_x[19] + nom_x[20];
+ out_4465536791498929799[21] = delta_x[20] + nom_x[21];
}
-void inv_err_fun(double *nom_x, double *true_x, double *out_7600355658971333284) {
- out_7600355658971333284[0] = -nom_x[0] + true_x[0];
- out_7600355658971333284[1] = -nom_x[1] + true_x[1];
- out_7600355658971333284[2] = -nom_x[2] + true_x[2];
- out_7600355658971333284[3] = 2*nom_x[3]*true_x[4] - 2*nom_x[4]*true_x[3] + 2*nom_x[5]*true_x[6] - 2*nom_x[6]*true_x[5];
- out_7600355658971333284[4] = 2*nom_x[3]*true_x[5] - 2*nom_x[4]*true_x[6] - 2*nom_x[5]*true_x[3] + 2*nom_x[6]*true_x[4];
- out_7600355658971333284[5] = 2*nom_x[3]*true_x[6] + 2*nom_x[4]*true_x[5] - 2*nom_x[5]*true_x[4] - 2*nom_x[6]*true_x[3];
- out_7600355658971333284[6] = -nom_x[7] + true_x[7];
- out_7600355658971333284[7] = -nom_x[8] + true_x[8];
- out_7600355658971333284[8] = -nom_x[9] + true_x[9];
- out_7600355658971333284[9] = -nom_x[10] + true_x[10];
- out_7600355658971333284[10] = -nom_x[11] + true_x[11];
- out_7600355658971333284[11] = -nom_x[12] + true_x[12];
- out_7600355658971333284[12] = -nom_x[13] + true_x[13];
- out_7600355658971333284[13] = -nom_x[14] + true_x[14];
- out_7600355658971333284[14] = -nom_x[15] + true_x[15];
- out_7600355658971333284[15] = -nom_x[16] + true_x[16];
- out_7600355658971333284[16] = -nom_x[17] + true_x[17];
- out_7600355658971333284[17] = -nom_x[18] + true_x[18];
- out_7600355658971333284[18] = -nom_x[19] + true_x[19];
- out_7600355658971333284[19] = -nom_x[20] + true_x[20];
- out_7600355658971333284[20] = -nom_x[21] + true_x[21];
+void inv_err_fun(double *nom_x, double *true_x, double *out_4242153094211941637) {
+ out_4242153094211941637[0] = -nom_x[0] + true_x[0];
+ out_4242153094211941637[1] = -nom_x[1] + true_x[1];
+ out_4242153094211941637[2] = -nom_x[2] + true_x[2];
+ out_4242153094211941637[3] = 2*nom_x[3]*true_x[4] - 2*nom_x[4]*true_x[3] + 2*nom_x[5]*true_x[6] - 2*nom_x[6]*true_x[5];
+ out_4242153094211941637[4] = 2*nom_x[3]*true_x[5] - 2*nom_x[4]*true_x[6] - 2*nom_x[5]*true_x[3] + 2*nom_x[6]*true_x[4];
+ out_4242153094211941637[5] = 2*nom_x[3]*true_x[6] + 2*nom_x[4]*true_x[5] - 2*nom_x[5]*true_x[4] - 2*nom_x[6]*true_x[3];
+ out_4242153094211941637[6] = -nom_x[7] + true_x[7];
+ out_4242153094211941637[7] = -nom_x[8] + true_x[8];
+ out_4242153094211941637[8] = -nom_x[9] + true_x[9];
+ out_4242153094211941637[9] = -nom_x[10] + true_x[10];
+ out_4242153094211941637[10] = -nom_x[11] + true_x[11];
+ out_4242153094211941637[11] = -nom_x[12] + true_x[12];
+ out_4242153094211941637[12] = -nom_x[13] + true_x[13];
+ out_4242153094211941637[13] = -nom_x[14] + true_x[14];
+ out_4242153094211941637[14] = -nom_x[15] + true_x[15];
+ out_4242153094211941637[15] = -nom_x[16] + true_x[16];
+ out_4242153094211941637[16] = -nom_x[17] + true_x[17];
+ out_4242153094211941637[17] = -nom_x[18] + true_x[18];
+ out_4242153094211941637[18] = -nom_x[19] + true_x[19];
+ out_4242153094211941637[19] = -nom_x[20] + true_x[20];
+ out_4242153094211941637[20] = -nom_x[21] + true_x[21];
}
-void H_mod_fun(double *state, double *out_1685726956674156760) {
- out_1685726956674156760[0] = 1.0;
- out_1685726956674156760[1] = 0;
- out_1685726956674156760[2] = 0;
- out_1685726956674156760[3] = 0;
- out_1685726956674156760[4] = 0;
- out_1685726956674156760[5] = 0;
- out_1685726956674156760[6] = 0;
- out_1685726956674156760[7] = 0;
- out_1685726956674156760[8] = 0;
- out_1685726956674156760[9] = 0;
- out_1685726956674156760[10] = 0;
- out_1685726956674156760[11] = 0;
- out_1685726956674156760[12] = 0;
- out_1685726956674156760[13] = 0;
- out_1685726956674156760[14] = 0;
- out_1685726956674156760[15] = 0;
- out_1685726956674156760[16] = 0;
- out_1685726956674156760[17] = 0;
- out_1685726956674156760[18] = 0;
- out_1685726956674156760[19] = 0;
- out_1685726956674156760[20] = 0;
- out_1685726956674156760[21] = 0;
- out_1685726956674156760[22] = 1.0;
- out_1685726956674156760[23] = 0;
- out_1685726956674156760[24] = 0;
- out_1685726956674156760[25] = 0;
- out_1685726956674156760[26] = 0;
- out_1685726956674156760[27] = 0;
- out_1685726956674156760[28] = 0;
- out_1685726956674156760[29] = 0;
- out_1685726956674156760[30] = 0;
- out_1685726956674156760[31] = 0;
- out_1685726956674156760[32] = 0;
- out_1685726956674156760[33] = 0;
- out_1685726956674156760[34] = 0;
- out_1685726956674156760[35] = 0;
- out_1685726956674156760[36] = 0;
- out_1685726956674156760[37] = 0;
- out_1685726956674156760[38] = 0;
- out_1685726956674156760[39] = 0;
- out_1685726956674156760[40] = 0;
- out_1685726956674156760[41] = 0;
- out_1685726956674156760[42] = 0;
- out_1685726956674156760[43] = 0;
- out_1685726956674156760[44] = 1.0;
- out_1685726956674156760[45] = 0;
- out_1685726956674156760[46] = 0;
- out_1685726956674156760[47] = 0;
- out_1685726956674156760[48] = 0;
- out_1685726956674156760[49] = 0;
- out_1685726956674156760[50] = 0;
- out_1685726956674156760[51] = 0;
- out_1685726956674156760[52] = 0;
- out_1685726956674156760[53] = 0;
- out_1685726956674156760[54] = 0;
- out_1685726956674156760[55] = 0;
- out_1685726956674156760[56] = 0;
- out_1685726956674156760[57] = 0;
- out_1685726956674156760[58] = 0;
- out_1685726956674156760[59] = 0;
- out_1685726956674156760[60] = 0;
- out_1685726956674156760[61] = 0;
- out_1685726956674156760[62] = 0;
- out_1685726956674156760[63] = 0;
- out_1685726956674156760[64] = 0;
- out_1685726956674156760[65] = 0;
- out_1685726956674156760[66] = -0.5*state[4];
- out_1685726956674156760[67] = -0.5*state[5];
- out_1685726956674156760[68] = -0.5*state[6];
- out_1685726956674156760[69] = 0;
- out_1685726956674156760[70] = 0;
- out_1685726956674156760[71] = 0;
- out_1685726956674156760[72] = 0;
- out_1685726956674156760[73] = 0;
- out_1685726956674156760[74] = 0;
- out_1685726956674156760[75] = 0;
- out_1685726956674156760[76] = 0;
- out_1685726956674156760[77] = 0;
- out_1685726956674156760[78] = 0;
- out_1685726956674156760[79] = 0;
- out_1685726956674156760[80] = 0;
- out_1685726956674156760[81] = 0;
- out_1685726956674156760[82] = 0;
- out_1685726956674156760[83] = 0;
- out_1685726956674156760[84] = 0;
- out_1685726956674156760[85] = 0;
- out_1685726956674156760[86] = 0;
- out_1685726956674156760[87] = 0.5*state[3];
- out_1685726956674156760[88] = 0.5*state[6];
- out_1685726956674156760[89] = -0.5*state[5];
- out_1685726956674156760[90] = 0;
- out_1685726956674156760[91] = 0;
- out_1685726956674156760[92] = 0;
- out_1685726956674156760[93] = 0;
- out_1685726956674156760[94] = 0;
- out_1685726956674156760[95] = 0;
- out_1685726956674156760[96] = 0;
- out_1685726956674156760[97] = 0;
- out_1685726956674156760[98] = 0;
- out_1685726956674156760[99] = 0;
- out_1685726956674156760[100] = 0;
- out_1685726956674156760[101] = 0;
- out_1685726956674156760[102] = 0;
- out_1685726956674156760[103] = 0;
- out_1685726956674156760[104] = 0;
- out_1685726956674156760[105] = 0;
- out_1685726956674156760[106] = 0;
- out_1685726956674156760[107] = 0;
- out_1685726956674156760[108] = -0.5*state[6];
- out_1685726956674156760[109] = 0.5*state[3];
- out_1685726956674156760[110] = 0.5*state[4];
- out_1685726956674156760[111] = 0;
- out_1685726956674156760[112] = 0;
- out_1685726956674156760[113] = 0;
- out_1685726956674156760[114] = 0;
- out_1685726956674156760[115] = 0;
- out_1685726956674156760[116] = 0;
- out_1685726956674156760[117] = 0;
- out_1685726956674156760[118] = 0;
- out_1685726956674156760[119] = 0;
- out_1685726956674156760[120] = 0;
- out_1685726956674156760[121] = 0;
- out_1685726956674156760[122] = 0;
- out_1685726956674156760[123] = 0;
- out_1685726956674156760[124] = 0;
- out_1685726956674156760[125] = 0;
- out_1685726956674156760[126] = 0;
- out_1685726956674156760[127] = 0;
- out_1685726956674156760[128] = 0;
- out_1685726956674156760[129] = 0.5*state[5];
- out_1685726956674156760[130] = -0.5*state[4];
- out_1685726956674156760[131] = 0.5*state[3];
- out_1685726956674156760[132] = 0;
- out_1685726956674156760[133] = 0;
- out_1685726956674156760[134] = 0;
- out_1685726956674156760[135] = 0;
- out_1685726956674156760[136] = 0;
- out_1685726956674156760[137] = 0;
- out_1685726956674156760[138] = 0;
- out_1685726956674156760[139] = 0;
- out_1685726956674156760[140] = 0;
- out_1685726956674156760[141] = 0;
- out_1685726956674156760[142] = 0;
- out_1685726956674156760[143] = 0;
- out_1685726956674156760[144] = 0;
- out_1685726956674156760[145] = 0;
- out_1685726956674156760[146] = 0;
- out_1685726956674156760[147] = 0;
- out_1685726956674156760[148] = 0;
- out_1685726956674156760[149] = 0;
- out_1685726956674156760[150] = 0;
- out_1685726956674156760[151] = 0;
- out_1685726956674156760[152] = 0;
- out_1685726956674156760[153] = 1.0;
- out_1685726956674156760[154] = 0;
- out_1685726956674156760[155] = 0;
- out_1685726956674156760[156] = 0;
- out_1685726956674156760[157] = 0;
- out_1685726956674156760[158] = 0;
- out_1685726956674156760[159] = 0;
- out_1685726956674156760[160] = 0;
- out_1685726956674156760[161] = 0;
- out_1685726956674156760[162] = 0;
- out_1685726956674156760[163] = 0;
- out_1685726956674156760[164] = 0;
- out_1685726956674156760[165] = 0;
- out_1685726956674156760[166] = 0;
- out_1685726956674156760[167] = 0;
- out_1685726956674156760[168] = 0;
- out_1685726956674156760[169] = 0;
- out_1685726956674156760[170] = 0;
- out_1685726956674156760[171] = 0;
- out_1685726956674156760[172] = 0;
- out_1685726956674156760[173] = 0;
- out_1685726956674156760[174] = 0;
- out_1685726956674156760[175] = 1.0;
- out_1685726956674156760[176] = 0;
- out_1685726956674156760[177] = 0;
- out_1685726956674156760[178] = 0;
- out_1685726956674156760[179] = 0;
- out_1685726956674156760[180] = 0;
- out_1685726956674156760[181] = 0;
- out_1685726956674156760[182] = 0;
- out_1685726956674156760[183] = 0;
- out_1685726956674156760[184] = 0;
- out_1685726956674156760[185] = 0;
- out_1685726956674156760[186] = 0;
- out_1685726956674156760[187] = 0;
- out_1685726956674156760[188] = 0;
- out_1685726956674156760[189] = 0;
- out_1685726956674156760[190] = 0;
- out_1685726956674156760[191] = 0;
- out_1685726956674156760[192] = 0;
- out_1685726956674156760[193] = 0;
- out_1685726956674156760[194] = 0;
- out_1685726956674156760[195] = 0;
- out_1685726956674156760[196] = 0;
- out_1685726956674156760[197] = 1.0;
- out_1685726956674156760[198] = 0;
- out_1685726956674156760[199] = 0;
- out_1685726956674156760[200] = 0;
- out_1685726956674156760[201] = 0;
- out_1685726956674156760[202] = 0;
- out_1685726956674156760[203] = 0;
- out_1685726956674156760[204] = 0;
- out_1685726956674156760[205] = 0;
- out_1685726956674156760[206] = 0;
- out_1685726956674156760[207] = 0;
- out_1685726956674156760[208] = 0;
- out_1685726956674156760[209] = 0;
- out_1685726956674156760[210] = 0;
- out_1685726956674156760[211] = 0;
- out_1685726956674156760[212] = 0;
- out_1685726956674156760[213] = 0;
- out_1685726956674156760[214] = 0;
- out_1685726956674156760[215] = 0;
- out_1685726956674156760[216] = 0;
- out_1685726956674156760[217] = 0;
- out_1685726956674156760[218] = 0;
- out_1685726956674156760[219] = 1.0;
- out_1685726956674156760[220] = 0;
- out_1685726956674156760[221] = 0;
- out_1685726956674156760[222] = 0;
- out_1685726956674156760[223] = 0;
- out_1685726956674156760[224] = 0;
- out_1685726956674156760[225] = 0;
- out_1685726956674156760[226] = 0;
- out_1685726956674156760[227] = 0;
- out_1685726956674156760[228] = 0;
- out_1685726956674156760[229] = 0;
- out_1685726956674156760[230] = 0;
- out_1685726956674156760[231] = 0;
- out_1685726956674156760[232] = 0;
- out_1685726956674156760[233] = 0;
- out_1685726956674156760[234] = 0;
- out_1685726956674156760[235] = 0;
- out_1685726956674156760[236] = 0;
- out_1685726956674156760[237] = 0;
- out_1685726956674156760[238] = 0;
- out_1685726956674156760[239] = 0;
- out_1685726956674156760[240] = 0;
- out_1685726956674156760[241] = 1.0;
- out_1685726956674156760[242] = 0;
- out_1685726956674156760[243] = 0;
- out_1685726956674156760[244] = 0;
- out_1685726956674156760[245] = 0;
- out_1685726956674156760[246] = 0;
- out_1685726956674156760[247] = 0;
- out_1685726956674156760[248] = 0;
- out_1685726956674156760[249] = 0;
- out_1685726956674156760[250] = 0;
- out_1685726956674156760[251] = 0;
- out_1685726956674156760[252] = 0;
- out_1685726956674156760[253] = 0;
- out_1685726956674156760[254] = 0;
- out_1685726956674156760[255] = 0;
- out_1685726956674156760[256] = 0;
- out_1685726956674156760[257] = 0;
- out_1685726956674156760[258] = 0;
- out_1685726956674156760[259] = 0;
- out_1685726956674156760[260] = 0;
- out_1685726956674156760[261] = 0;
- out_1685726956674156760[262] = 0;
- out_1685726956674156760[263] = 1.0;
- out_1685726956674156760[264] = 0;
- out_1685726956674156760[265] = 0;
- out_1685726956674156760[266] = 0;
- out_1685726956674156760[267] = 0;
- out_1685726956674156760[268] = 0;
- out_1685726956674156760[269] = 0;
- out_1685726956674156760[270] = 0;
- out_1685726956674156760[271] = 0;
- out_1685726956674156760[272] = 0;
- out_1685726956674156760[273] = 0;
- out_1685726956674156760[274] = 0;
- out_1685726956674156760[275] = 0;
- out_1685726956674156760[276] = 0;
- out_1685726956674156760[277] = 0;
- out_1685726956674156760[278] = 0;
- out_1685726956674156760[279] = 0;
- out_1685726956674156760[280] = 0;
- out_1685726956674156760[281] = 0;
- out_1685726956674156760[282] = 0;
- out_1685726956674156760[283] = 0;
- out_1685726956674156760[284] = 0;
- out_1685726956674156760[285] = 1.0;
- out_1685726956674156760[286] = 0;
- out_1685726956674156760[287] = 0;
- out_1685726956674156760[288] = 0;
- out_1685726956674156760[289] = 0;
- out_1685726956674156760[290] = 0;
- out_1685726956674156760[291] = 0;
- out_1685726956674156760[292] = 0;
- out_1685726956674156760[293] = 0;
- out_1685726956674156760[294] = 0;
- out_1685726956674156760[295] = 0;
- out_1685726956674156760[296] = 0;
- out_1685726956674156760[297] = 0;
- out_1685726956674156760[298] = 0;
- out_1685726956674156760[299] = 0;
- out_1685726956674156760[300] = 0;
- out_1685726956674156760[301] = 0;
- out_1685726956674156760[302] = 0;
- out_1685726956674156760[303] = 0;
- out_1685726956674156760[304] = 0;
- out_1685726956674156760[305] = 0;
- out_1685726956674156760[306] = 0;
- out_1685726956674156760[307] = 1.0;
- out_1685726956674156760[308] = 0;
- out_1685726956674156760[309] = 0;
- out_1685726956674156760[310] = 0;
- out_1685726956674156760[311] = 0;
- out_1685726956674156760[312] = 0;
- out_1685726956674156760[313] = 0;
- out_1685726956674156760[314] = 0;
- out_1685726956674156760[315] = 0;
- out_1685726956674156760[316] = 0;
- out_1685726956674156760[317] = 0;
- out_1685726956674156760[318] = 0;
- out_1685726956674156760[319] = 0;
- out_1685726956674156760[320] = 0;
- out_1685726956674156760[321] = 0;
- out_1685726956674156760[322] = 0;
- out_1685726956674156760[323] = 0;
- out_1685726956674156760[324] = 0;
- out_1685726956674156760[325] = 0;
- out_1685726956674156760[326] = 0;
- out_1685726956674156760[327] = 0;
- out_1685726956674156760[328] = 0;
- out_1685726956674156760[329] = 1.0;
- out_1685726956674156760[330] = 0;
- out_1685726956674156760[331] = 0;
- out_1685726956674156760[332] = 0;
- out_1685726956674156760[333] = 0;
- out_1685726956674156760[334] = 0;
- out_1685726956674156760[335] = 0;
- out_1685726956674156760[336] = 0;
- out_1685726956674156760[337] = 0;
- out_1685726956674156760[338] = 0;
- out_1685726956674156760[339] = 0;
- out_1685726956674156760[340] = 0;
- out_1685726956674156760[341] = 0;
- out_1685726956674156760[342] = 0;
- out_1685726956674156760[343] = 0;
- out_1685726956674156760[344] = 0;
- out_1685726956674156760[345] = 0;
- out_1685726956674156760[346] = 0;
- out_1685726956674156760[347] = 0;
- out_1685726956674156760[348] = 0;
- out_1685726956674156760[349] = 0;
- out_1685726956674156760[350] = 0;
- out_1685726956674156760[351] = 1.0;
- out_1685726956674156760[352] = 0;
- out_1685726956674156760[353] = 0;
- out_1685726956674156760[354] = 0;
- out_1685726956674156760[355] = 0;
- out_1685726956674156760[356] = 0;
- out_1685726956674156760[357] = 0;
- out_1685726956674156760[358] = 0;
- out_1685726956674156760[359] = 0;
- out_1685726956674156760[360] = 0;
- out_1685726956674156760[361] = 0;
- out_1685726956674156760[362] = 0;
- out_1685726956674156760[363] = 0;
- out_1685726956674156760[364] = 0;
- out_1685726956674156760[365] = 0;
- out_1685726956674156760[366] = 0;
- out_1685726956674156760[367] = 0;
- out_1685726956674156760[368] = 0;
- out_1685726956674156760[369] = 0;
- out_1685726956674156760[370] = 0;
- out_1685726956674156760[371] = 0;
- out_1685726956674156760[372] = 0;
- out_1685726956674156760[373] = 1.0;
- out_1685726956674156760[374] = 0;
- out_1685726956674156760[375] = 0;
- out_1685726956674156760[376] = 0;
- out_1685726956674156760[377] = 0;
- out_1685726956674156760[378] = 0;
- out_1685726956674156760[379] = 0;
- out_1685726956674156760[380] = 0;
- out_1685726956674156760[381] = 0;
- out_1685726956674156760[382] = 0;
- out_1685726956674156760[383] = 0;
- out_1685726956674156760[384] = 0;
- out_1685726956674156760[385] = 0;
- out_1685726956674156760[386] = 0;
- out_1685726956674156760[387] = 0;
- out_1685726956674156760[388] = 0;
- out_1685726956674156760[389] = 0;
- out_1685726956674156760[390] = 0;
- out_1685726956674156760[391] = 0;
- out_1685726956674156760[392] = 0;
- out_1685726956674156760[393] = 0;
- out_1685726956674156760[394] = 0;
- out_1685726956674156760[395] = 1.0;
- out_1685726956674156760[396] = 0;
- out_1685726956674156760[397] = 0;
- out_1685726956674156760[398] = 0;
- out_1685726956674156760[399] = 0;
- out_1685726956674156760[400] = 0;
- out_1685726956674156760[401] = 0;
- out_1685726956674156760[402] = 0;
- out_1685726956674156760[403] = 0;
- out_1685726956674156760[404] = 0;
- out_1685726956674156760[405] = 0;
- out_1685726956674156760[406] = 0;
- out_1685726956674156760[407] = 0;
- out_1685726956674156760[408] = 0;
- out_1685726956674156760[409] = 0;
- out_1685726956674156760[410] = 0;
- out_1685726956674156760[411] = 0;
- out_1685726956674156760[412] = 0;
- out_1685726956674156760[413] = 0;
- out_1685726956674156760[414] = 0;
- out_1685726956674156760[415] = 0;
- out_1685726956674156760[416] = 0;
- out_1685726956674156760[417] = 1.0;
- out_1685726956674156760[418] = 0;
- out_1685726956674156760[419] = 0;
- out_1685726956674156760[420] = 0;
- out_1685726956674156760[421] = 0;
- out_1685726956674156760[422] = 0;
- out_1685726956674156760[423] = 0;
- out_1685726956674156760[424] = 0;
- out_1685726956674156760[425] = 0;
- out_1685726956674156760[426] = 0;
- out_1685726956674156760[427] = 0;
- out_1685726956674156760[428] = 0;
- out_1685726956674156760[429] = 0;
- out_1685726956674156760[430] = 0;
- out_1685726956674156760[431] = 0;
- out_1685726956674156760[432] = 0;
- out_1685726956674156760[433] = 0;
- out_1685726956674156760[434] = 0;
- out_1685726956674156760[435] = 0;
- out_1685726956674156760[436] = 0;
- out_1685726956674156760[437] = 0;
- out_1685726956674156760[438] = 0;
- out_1685726956674156760[439] = 1.0;
- out_1685726956674156760[440] = 0;
- out_1685726956674156760[441] = 0;
- out_1685726956674156760[442] = 0;
- out_1685726956674156760[443] = 0;
- out_1685726956674156760[444] = 0;
- out_1685726956674156760[445] = 0;
- out_1685726956674156760[446] = 0;
- out_1685726956674156760[447] = 0;
- out_1685726956674156760[448] = 0;
- out_1685726956674156760[449] = 0;
- out_1685726956674156760[450] = 0;
- out_1685726956674156760[451] = 0;
- out_1685726956674156760[452] = 0;
- out_1685726956674156760[453] = 0;
- out_1685726956674156760[454] = 0;
- out_1685726956674156760[455] = 0;
- out_1685726956674156760[456] = 0;
- out_1685726956674156760[457] = 0;
- out_1685726956674156760[458] = 0;
- out_1685726956674156760[459] = 0;
- out_1685726956674156760[460] = 0;
- out_1685726956674156760[461] = 1.0;
+void H_mod_fun(double *state, double *out_8694534732588551911) {
+ out_8694534732588551911[0] = 1.0;
+ out_8694534732588551911[1] = 0;
+ out_8694534732588551911[2] = 0;
+ out_8694534732588551911[3] = 0;
+ out_8694534732588551911[4] = 0;
+ out_8694534732588551911[5] = 0;
+ out_8694534732588551911[6] = 0;
+ out_8694534732588551911[7] = 0;
+ out_8694534732588551911[8] = 0;
+ out_8694534732588551911[9] = 0;
+ out_8694534732588551911[10] = 0;
+ out_8694534732588551911[11] = 0;
+ out_8694534732588551911[12] = 0;
+ out_8694534732588551911[13] = 0;
+ out_8694534732588551911[14] = 0;
+ out_8694534732588551911[15] = 0;
+ out_8694534732588551911[16] = 0;
+ out_8694534732588551911[17] = 0;
+ out_8694534732588551911[18] = 0;
+ out_8694534732588551911[19] = 0;
+ out_8694534732588551911[20] = 0;
+ out_8694534732588551911[21] = 0;
+ out_8694534732588551911[22] = 1.0;
+ out_8694534732588551911[23] = 0;
+ out_8694534732588551911[24] = 0;
+ out_8694534732588551911[25] = 0;
+ out_8694534732588551911[26] = 0;
+ out_8694534732588551911[27] = 0;
+ out_8694534732588551911[28] = 0;
+ out_8694534732588551911[29] = 0;
+ out_8694534732588551911[30] = 0;
+ out_8694534732588551911[31] = 0;
+ out_8694534732588551911[32] = 0;
+ out_8694534732588551911[33] = 0;
+ out_8694534732588551911[34] = 0;
+ out_8694534732588551911[35] = 0;
+ out_8694534732588551911[36] = 0;
+ out_8694534732588551911[37] = 0;
+ out_8694534732588551911[38] = 0;
+ out_8694534732588551911[39] = 0;
+ out_8694534732588551911[40] = 0;
+ out_8694534732588551911[41] = 0;
+ out_8694534732588551911[42] = 0;
+ out_8694534732588551911[43] = 0;
+ out_8694534732588551911[44] = 1.0;
+ out_8694534732588551911[45] = 0;
+ out_8694534732588551911[46] = 0;
+ out_8694534732588551911[47] = 0;
+ out_8694534732588551911[48] = 0;
+ out_8694534732588551911[49] = 0;
+ out_8694534732588551911[50] = 0;
+ out_8694534732588551911[51] = 0;
+ out_8694534732588551911[52] = 0;
+ out_8694534732588551911[53] = 0;
+ out_8694534732588551911[54] = 0;
+ out_8694534732588551911[55] = 0;
+ out_8694534732588551911[56] = 0;
+ out_8694534732588551911[57] = 0;
+ out_8694534732588551911[58] = 0;
+ out_8694534732588551911[59] = 0;
+ out_8694534732588551911[60] = 0;
+ out_8694534732588551911[61] = 0;
+ out_8694534732588551911[62] = 0;
+ out_8694534732588551911[63] = 0;
+ out_8694534732588551911[64] = 0;
+ out_8694534732588551911[65] = 0;
+ out_8694534732588551911[66] = -0.5*state[4];
+ out_8694534732588551911[67] = -0.5*state[5];
+ out_8694534732588551911[68] = -0.5*state[6];
+ out_8694534732588551911[69] = 0;
+ out_8694534732588551911[70] = 0;
+ out_8694534732588551911[71] = 0;
+ out_8694534732588551911[72] = 0;
+ out_8694534732588551911[73] = 0;
+ out_8694534732588551911[74] = 0;
+ out_8694534732588551911[75] = 0;
+ out_8694534732588551911[76] = 0;
+ out_8694534732588551911[77] = 0;
+ out_8694534732588551911[78] = 0;
+ out_8694534732588551911[79] = 0;
+ out_8694534732588551911[80] = 0;
+ out_8694534732588551911[81] = 0;
+ out_8694534732588551911[82] = 0;
+ out_8694534732588551911[83] = 0;
+ out_8694534732588551911[84] = 0;
+ out_8694534732588551911[85] = 0;
+ out_8694534732588551911[86] = 0;
+ out_8694534732588551911[87] = 0.5*state[3];
+ out_8694534732588551911[88] = 0.5*state[6];
+ out_8694534732588551911[89] = -0.5*state[5];
+ out_8694534732588551911[90] = 0;
+ out_8694534732588551911[91] = 0;
+ out_8694534732588551911[92] = 0;
+ out_8694534732588551911[93] = 0;
+ out_8694534732588551911[94] = 0;
+ out_8694534732588551911[95] = 0;
+ out_8694534732588551911[96] = 0;
+ out_8694534732588551911[97] = 0;
+ out_8694534732588551911[98] = 0;
+ out_8694534732588551911[99] = 0;
+ out_8694534732588551911[100] = 0;
+ out_8694534732588551911[101] = 0;
+ out_8694534732588551911[102] = 0;
+ out_8694534732588551911[103] = 0;
+ out_8694534732588551911[104] = 0;
+ out_8694534732588551911[105] = 0;
+ out_8694534732588551911[106] = 0;
+ out_8694534732588551911[107] = 0;
+ out_8694534732588551911[108] = -0.5*state[6];
+ out_8694534732588551911[109] = 0.5*state[3];
+ out_8694534732588551911[110] = 0.5*state[4];
+ out_8694534732588551911[111] = 0;
+ out_8694534732588551911[112] = 0;
+ out_8694534732588551911[113] = 0;
+ out_8694534732588551911[114] = 0;
+ out_8694534732588551911[115] = 0;
+ out_8694534732588551911[116] = 0;
+ out_8694534732588551911[117] = 0;
+ out_8694534732588551911[118] = 0;
+ out_8694534732588551911[119] = 0;
+ out_8694534732588551911[120] = 0;
+ out_8694534732588551911[121] = 0;
+ out_8694534732588551911[122] = 0;
+ out_8694534732588551911[123] = 0;
+ out_8694534732588551911[124] = 0;
+ out_8694534732588551911[125] = 0;
+ out_8694534732588551911[126] = 0;
+ out_8694534732588551911[127] = 0;
+ out_8694534732588551911[128] = 0;
+ out_8694534732588551911[129] = 0.5*state[5];
+ out_8694534732588551911[130] = -0.5*state[4];
+ out_8694534732588551911[131] = 0.5*state[3];
+ out_8694534732588551911[132] = 0;
+ out_8694534732588551911[133] = 0;
+ out_8694534732588551911[134] = 0;
+ out_8694534732588551911[135] = 0;
+ out_8694534732588551911[136] = 0;
+ out_8694534732588551911[137] = 0;
+ out_8694534732588551911[138] = 0;
+ out_8694534732588551911[139] = 0;
+ out_8694534732588551911[140] = 0;
+ out_8694534732588551911[141] = 0;
+ out_8694534732588551911[142] = 0;
+ out_8694534732588551911[143] = 0;
+ out_8694534732588551911[144] = 0;
+ out_8694534732588551911[145] = 0;
+ out_8694534732588551911[146] = 0;
+ out_8694534732588551911[147] = 0;
+ out_8694534732588551911[148] = 0;
+ out_8694534732588551911[149] = 0;
+ out_8694534732588551911[150] = 0;
+ out_8694534732588551911[151] = 0;
+ out_8694534732588551911[152] = 0;
+ out_8694534732588551911[153] = 1.0;
+ out_8694534732588551911[154] = 0;
+ out_8694534732588551911[155] = 0;
+ out_8694534732588551911[156] = 0;
+ out_8694534732588551911[157] = 0;
+ out_8694534732588551911[158] = 0;
+ out_8694534732588551911[159] = 0;
+ out_8694534732588551911[160] = 0;
+ out_8694534732588551911[161] = 0;
+ out_8694534732588551911[162] = 0;
+ out_8694534732588551911[163] = 0;
+ out_8694534732588551911[164] = 0;
+ out_8694534732588551911[165] = 0;
+ out_8694534732588551911[166] = 0;
+ out_8694534732588551911[167] = 0;
+ out_8694534732588551911[168] = 0;
+ out_8694534732588551911[169] = 0;
+ out_8694534732588551911[170] = 0;
+ out_8694534732588551911[171] = 0;
+ out_8694534732588551911[172] = 0;
+ out_8694534732588551911[173] = 0;
+ out_8694534732588551911[174] = 0;
+ out_8694534732588551911[175] = 1.0;
+ out_8694534732588551911[176] = 0;
+ out_8694534732588551911[177] = 0;
+ out_8694534732588551911[178] = 0;
+ out_8694534732588551911[179] = 0;
+ out_8694534732588551911[180] = 0;
+ out_8694534732588551911[181] = 0;
+ out_8694534732588551911[182] = 0;
+ out_8694534732588551911[183] = 0;
+ out_8694534732588551911[184] = 0;
+ out_8694534732588551911[185] = 0;
+ out_8694534732588551911[186] = 0;
+ out_8694534732588551911[187] = 0;
+ out_8694534732588551911[188] = 0;
+ out_8694534732588551911[189] = 0;
+ out_8694534732588551911[190] = 0;
+ out_8694534732588551911[191] = 0;
+ out_8694534732588551911[192] = 0;
+ out_8694534732588551911[193] = 0;
+ out_8694534732588551911[194] = 0;
+ out_8694534732588551911[195] = 0;
+ out_8694534732588551911[196] = 0;
+ out_8694534732588551911[197] = 1.0;
+ out_8694534732588551911[198] = 0;
+ out_8694534732588551911[199] = 0;
+ out_8694534732588551911[200] = 0;
+ out_8694534732588551911[201] = 0;
+ out_8694534732588551911[202] = 0;
+ out_8694534732588551911[203] = 0;
+ out_8694534732588551911[204] = 0;
+ out_8694534732588551911[205] = 0;
+ out_8694534732588551911[206] = 0;
+ out_8694534732588551911[207] = 0;
+ out_8694534732588551911[208] = 0;
+ out_8694534732588551911[209] = 0;
+ out_8694534732588551911[210] = 0;
+ out_8694534732588551911[211] = 0;
+ out_8694534732588551911[212] = 0;
+ out_8694534732588551911[213] = 0;
+ out_8694534732588551911[214] = 0;
+ out_8694534732588551911[215] = 0;
+ out_8694534732588551911[216] = 0;
+ out_8694534732588551911[217] = 0;
+ out_8694534732588551911[218] = 0;
+ out_8694534732588551911[219] = 1.0;
+ out_8694534732588551911[220] = 0;
+ out_8694534732588551911[221] = 0;
+ out_8694534732588551911[222] = 0;
+ out_8694534732588551911[223] = 0;
+ out_8694534732588551911[224] = 0;
+ out_8694534732588551911[225] = 0;
+ out_8694534732588551911[226] = 0;
+ out_8694534732588551911[227] = 0;
+ out_8694534732588551911[228] = 0;
+ out_8694534732588551911[229] = 0;
+ out_8694534732588551911[230] = 0;
+ out_8694534732588551911[231] = 0;
+ out_8694534732588551911[232] = 0;
+ out_8694534732588551911[233] = 0;
+ out_8694534732588551911[234] = 0;
+ out_8694534732588551911[235] = 0;
+ out_8694534732588551911[236] = 0;
+ out_8694534732588551911[237] = 0;
+ out_8694534732588551911[238] = 0;
+ out_8694534732588551911[239] = 0;
+ out_8694534732588551911[240] = 0;
+ out_8694534732588551911[241] = 1.0;
+ out_8694534732588551911[242] = 0;
+ out_8694534732588551911[243] = 0;
+ out_8694534732588551911[244] = 0;
+ out_8694534732588551911[245] = 0;
+ out_8694534732588551911[246] = 0;
+ out_8694534732588551911[247] = 0;
+ out_8694534732588551911[248] = 0;
+ out_8694534732588551911[249] = 0;
+ out_8694534732588551911[250] = 0;
+ out_8694534732588551911[251] = 0;
+ out_8694534732588551911[252] = 0;
+ out_8694534732588551911[253] = 0;
+ out_8694534732588551911[254] = 0;
+ out_8694534732588551911[255] = 0;
+ out_8694534732588551911[256] = 0;
+ out_8694534732588551911[257] = 0;
+ out_8694534732588551911[258] = 0;
+ out_8694534732588551911[259] = 0;
+ out_8694534732588551911[260] = 0;
+ out_8694534732588551911[261] = 0;
+ out_8694534732588551911[262] = 0;
+ out_8694534732588551911[263] = 1.0;
+ out_8694534732588551911[264] = 0;
+ out_8694534732588551911[265] = 0;
+ out_8694534732588551911[266] = 0;
+ out_8694534732588551911[267] = 0;
+ out_8694534732588551911[268] = 0;
+ out_8694534732588551911[269] = 0;
+ out_8694534732588551911[270] = 0;
+ out_8694534732588551911[271] = 0;
+ out_8694534732588551911[272] = 0;
+ out_8694534732588551911[273] = 0;
+ out_8694534732588551911[274] = 0;
+ out_8694534732588551911[275] = 0;
+ out_8694534732588551911[276] = 0;
+ out_8694534732588551911[277] = 0;
+ out_8694534732588551911[278] = 0;
+ out_8694534732588551911[279] = 0;
+ out_8694534732588551911[280] = 0;
+ out_8694534732588551911[281] = 0;
+ out_8694534732588551911[282] = 0;
+ out_8694534732588551911[283] = 0;
+ out_8694534732588551911[284] = 0;
+ out_8694534732588551911[285] = 1.0;
+ out_8694534732588551911[286] = 0;
+ out_8694534732588551911[287] = 0;
+ out_8694534732588551911[288] = 0;
+ out_8694534732588551911[289] = 0;
+ out_8694534732588551911[290] = 0;
+ out_8694534732588551911[291] = 0;
+ out_8694534732588551911[292] = 0;
+ out_8694534732588551911[293] = 0;
+ out_8694534732588551911[294] = 0;
+ out_8694534732588551911[295] = 0;
+ out_8694534732588551911[296] = 0;
+ out_8694534732588551911[297] = 0;
+ out_8694534732588551911[298] = 0;
+ out_8694534732588551911[299] = 0;
+ out_8694534732588551911[300] = 0;
+ out_8694534732588551911[301] = 0;
+ out_8694534732588551911[302] = 0;
+ out_8694534732588551911[303] = 0;
+ out_8694534732588551911[304] = 0;
+ out_8694534732588551911[305] = 0;
+ out_8694534732588551911[306] = 0;
+ out_8694534732588551911[307] = 1.0;
+ out_8694534732588551911[308] = 0;
+ out_8694534732588551911[309] = 0;
+ out_8694534732588551911[310] = 0;
+ out_8694534732588551911[311] = 0;
+ out_8694534732588551911[312] = 0;
+ out_8694534732588551911[313] = 0;
+ out_8694534732588551911[314] = 0;
+ out_8694534732588551911[315] = 0;
+ out_8694534732588551911[316] = 0;
+ out_8694534732588551911[317] = 0;
+ out_8694534732588551911[318] = 0;
+ out_8694534732588551911[319] = 0;
+ out_8694534732588551911[320] = 0;
+ out_8694534732588551911[321] = 0;
+ out_8694534732588551911[322] = 0;
+ out_8694534732588551911[323] = 0;
+ out_8694534732588551911[324] = 0;
+ out_8694534732588551911[325] = 0;
+ out_8694534732588551911[326] = 0;
+ out_8694534732588551911[327] = 0;
+ out_8694534732588551911[328] = 0;
+ out_8694534732588551911[329] = 1.0;
+ out_8694534732588551911[330] = 0;
+ out_8694534732588551911[331] = 0;
+ out_8694534732588551911[332] = 0;
+ out_8694534732588551911[333] = 0;
+ out_8694534732588551911[334] = 0;
+ out_8694534732588551911[335] = 0;
+ out_8694534732588551911[336] = 0;
+ out_8694534732588551911[337] = 0;
+ out_8694534732588551911[338] = 0;
+ out_8694534732588551911[339] = 0;
+ out_8694534732588551911[340] = 0;
+ out_8694534732588551911[341] = 0;
+ out_8694534732588551911[342] = 0;
+ out_8694534732588551911[343] = 0;
+ out_8694534732588551911[344] = 0;
+ out_8694534732588551911[345] = 0;
+ out_8694534732588551911[346] = 0;
+ out_8694534732588551911[347] = 0;
+ out_8694534732588551911[348] = 0;
+ out_8694534732588551911[349] = 0;
+ out_8694534732588551911[350] = 0;
+ out_8694534732588551911[351] = 1.0;
+ out_8694534732588551911[352] = 0;
+ out_8694534732588551911[353] = 0;
+ out_8694534732588551911[354] = 0;
+ out_8694534732588551911[355] = 0;
+ out_8694534732588551911[356] = 0;
+ out_8694534732588551911[357] = 0;
+ out_8694534732588551911[358] = 0;
+ out_8694534732588551911[359] = 0;
+ out_8694534732588551911[360] = 0;
+ out_8694534732588551911[361] = 0;
+ out_8694534732588551911[362] = 0;
+ out_8694534732588551911[363] = 0;
+ out_8694534732588551911[364] = 0;
+ out_8694534732588551911[365] = 0;
+ out_8694534732588551911[366] = 0;
+ out_8694534732588551911[367] = 0;
+ out_8694534732588551911[368] = 0;
+ out_8694534732588551911[369] = 0;
+ out_8694534732588551911[370] = 0;
+ out_8694534732588551911[371] = 0;
+ out_8694534732588551911[372] = 0;
+ out_8694534732588551911[373] = 1.0;
+ out_8694534732588551911[374] = 0;
+ out_8694534732588551911[375] = 0;
+ out_8694534732588551911[376] = 0;
+ out_8694534732588551911[377] = 0;
+ out_8694534732588551911[378] = 0;
+ out_8694534732588551911[379] = 0;
+ out_8694534732588551911[380] = 0;
+ out_8694534732588551911[381] = 0;
+ out_8694534732588551911[382] = 0;
+ out_8694534732588551911[383] = 0;
+ out_8694534732588551911[384] = 0;
+ out_8694534732588551911[385] = 0;
+ out_8694534732588551911[386] = 0;
+ out_8694534732588551911[387] = 0;
+ out_8694534732588551911[388] = 0;
+ out_8694534732588551911[389] = 0;
+ out_8694534732588551911[390] = 0;
+ out_8694534732588551911[391] = 0;
+ out_8694534732588551911[392] = 0;
+ out_8694534732588551911[393] = 0;
+ out_8694534732588551911[394] = 0;
+ out_8694534732588551911[395] = 1.0;
+ out_8694534732588551911[396] = 0;
+ out_8694534732588551911[397] = 0;
+ out_8694534732588551911[398] = 0;
+ out_8694534732588551911[399] = 0;
+ out_8694534732588551911[400] = 0;
+ out_8694534732588551911[401] = 0;
+ out_8694534732588551911[402] = 0;
+ out_8694534732588551911[403] = 0;
+ out_8694534732588551911[404] = 0;
+ out_8694534732588551911[405] = 0;
+ out_8694534732588551911[406] = 0;
+ out_8694534732588551911[407] = 0;
+ out_8694534732588551911[408] = 0;
+ out_8694534732588551911[409] = 0;
+ out_8694534732588551911[410] = 0;
+ out_8694534732588551911[411] = 0;
+ out_8694534732588551911[412] = 0;
+ out_8694534732588551911[413] = 0;
+ out_8694534732588551911[414] = 0;
+ out_8694534732588551911[415] = 0;
+ out_8694534732588551911[416] = 0;
+ out_8694534732588551911[417] = 1.0;
+ out_8694534732588551911[418] = 0;
+ out_8694534732588551911[419] = 0;
+ out_8694534732588551911[420] = 0;
+ out_8694534732588551911[421] = 0;
+ out_8694534732588551911[422] = 0;
+ out_8694534732588551911[423] = 0;
+ out_8694534732588551911[424] = 0;
+ out_8694534732588551911[425] = 0;
+ out_8694534732588551911[426] = 0;
+ out_8694534732588551911[427] = 0;
+ out_8694534732588551911[428] = 0;
+ out_8694534732588551911[429] = 0;
+ out_8694534732588551911[430] = 0;
+ out_8694534732588551911[431] = 0;
+ out_8694534732588551911[432] = 0;
+ out_8694534732588551911[433] = 0;
+ out_8694534732588551911[434] = 0;
+ out_8694534732588551911[435] = 0;
+ out_8694534732588551911[436] = 0;
+ out_8694534732588551911[437] = 0;
+ out_8694534732588551911[438] = 0;
+ out_8694534732588551911[439] = 1.0;
+ out_8694534732588551911[440] = 0;
+ out_8694534732588551911[441] = 0;
+ out_8694534732588551911[442] = 0;
+ out_8694534732588551911[443] = 0;
+ out_8694534732588551911[444] = 0;
+ out_8694534732588551911[445] = 0;
+ out_8694534732588551911[446] = 0;
+ out_8694534732588551911[447] = 0;
+ out_8694534732588551911[448] = 0;
+ out_8694534732588551911[449] = 0;
+ out_8694534732588551911[450] = 0;
+ out_8694534732588551911[451] = 0;
+ out_8694534732588551911[452] = 0;
+ out_8694534732588551911[453] = 0;
+ out_8694534732588551911[454] = 0;
+ out_8694534732588551911[455] = 0;
+ out_8694534732588551911[456] = 0;
+ out_8694534732588551911[457] = 0;
+ out_8694534732588551911[458] = 0;
+ out_8694534732588551911[459] = 0;
+ out_8694534732588551911[460] = 0;
+ out_8694534732588551911[461] = 1.0;
}
-void f_fun(double *state, double dt, double *out_774966178326963321) {
- out_774966178326963321[0] = dt*state[7] + state[0];
- out_774966178326963321[1] = dt*state[8] + state[1];
- out_774966178326963321[2] = dt*state[9] + state[2];
- out_774966178326963321[3] = dt*(-0.5*state[4]*state[10] - 0.5*state[5]*state[11] - 0.5*state[6]*state[12]) + state[3];
- out_774966178326963321[4] = dt*(0.5*state[3]*state[10] + 0.5*state[5]*state[12] - 0.5*state[6]*state[11]) + state[4];
- out_774966178326963321[5] = dt*(0.5*state[3]*state[11] - 0.5*state[4]*state[12] + 0.5*state[6]*state[10]) + state[5];
- out_774966178326963321[6] = dt*(0.5*state[3]*state[12] + 0.5*state[4]*state[11] - 0.5*state[5]*state[10]) + state[6];
- out_774966178326963321[7] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]) + state[7];
- out_774966178326963321[8] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]) + state[8];
- out_774966178326963321[9] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]) + state[9];
- out_774966178326963321[10] = state[10];
- out_774966178326963321[11] = state[11];
- out_774966178326963321[12] = state[12];
- out_774966178326963321[13] = state[13];
- out_774966178326963321[14] = state[14];
- out_774966178326963321[15] = state[15];
- out_774966178326963321[16] = state[16];
- out_774966178326963321[17] = state[17];
- out_774966178326963321[18] = state[18];
- out_774966178326963321[19] = state[19];
- out_774966178326963321[20] = state[20];
- out_774966178326963321[21] = state[21];
+void f_fun(double *state, double dt, double *out_331980123976991440) {
+ out_331980123976991440[0] = dt*state[7] + state[0];
+ out_331980123976991440[1] = dt*state[8] + state[1];
+ out_331980123976991440[2] = dt*state[9] + state[2];
+ out_331980123976991440[3] = dt*(-0.5*state[4]*state[10] - 0.5*state[5]*state[11] - 0.5*state[6]*state[12]) + state[3];
+ out_331980123976991440[4] = dt*(0.5*state[3]*state[10] + 0.5*state[5]*state[12] - 0.5*state[6]*state[11]) + state[4];
+ out_331980123976991440[5] = dt*(0.5*state[3]*state[11] - 0.5*state[4]*state[12] + 0.5*state[6]*state[10]) + state[5];
+ out_331980123976991440[6] = dt*(0.5*state[3]*state[12] + 0.5*state[4]*state[11] - 0.5*state[5]*state[10]) + state[6];
+ out_331980123976991440[7] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]) + state[7];
+ out_331980123976991440[8] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]) + state[8];
+ out_331980123976991440[9] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]) + state[9];
+ out_331980123976991440[10] = state[10];
+ out_331980123976991440[11] = state[11];
+ out_331980123976991440[12] = state[12];
+ out_331980123976991440[13] = state[13];
+ out_331980123976991440[14] = state[14];
+ out_331980123976991440[15] = state[15];
+ out_331980123976991440[16] = state[16];
+ out_331980123976991440[17] = state[17];
+ out_331980123976991440[18] = state[18];
+ out_331980123976991440[19] = state[19];
+ out_331980123976991440[20] = state[20];
+ out_331980123976991440[21] = state[21];
}
-void F_fun(double *state, double dt, double *out_7282145086155387076) {
- out_7282145086155387076[0] = 1;
- out_7282145086155387076[1] = 0;
- out_7282145086155387076[2] = 0;
- out_7282145086155387076[3] = 0;
- out_7282145086155387076[4] = 0;
- out_7282145086155387076[5] = 0;
- out_7282145086155387076[6] = dt;
- out_7282145086155387076[7] = 0;
- out_7282145086155387076[8] = 0;
- out_7282145086155387076[9] = 0;
- out_7282145086155387076[10] = 0;
- out_7282145086155387076[11] = 0;
- out_7282145086155387076[12] = 0;
- out_7282145086155387076[13] = 0;
- out_7282145086155387076[14] = 0;
- out_7282145086155387076[15] = 0;
- out_7282145086155387076[16] = 0;
- out_7282145086155387076[17] = 0;
- out_7282145086155387076[18] = 0;
- out_7282145086155387076[19] = 0;
- out_7282145086155387076[20] = 0;
- out_7282145086155387076[21] = 0;
- out_7282145086155387076[22] = 1;
- out_7282145086155387076[23] = 0;
- out_7282145086155387076[24] = 0;
- out_7282145086155387076[25] = 0;
- out_7282145086155387076[26] = 0;
- out_7282145086155387076[27] = 0;
- out_7282145086155387076[28] = dt;
- out_7282145086155387076[29] = 0;
- out_7282145086155387076[30] = 0;
- out_7282145086155387076[31] = 0;
- out_7282145086155387076[32] = 0;
- out_7282145086155387076[33] = 0;
- out_7282145086155387076[34] = 0;
- out_7282145086155387076[35] = 0;
- out_7282145086155387076[36] = 0;
- out_7282145086155387076[37] = 0;
- out_7282145086155387076[38] = 0;
- out_7282145086155387076[39] = 0;
- out_7282145086155387076[40] = 0;
- out_7282145086155387076[41] = 0;
- out_7282145086155387076[42] = 0;
- out_7282145086155387076[43] = 0;
- out_7282145086155387076[44] = 1;
- out_7282145086155387076[45] = 0;
- out_7282145086155387076[46] = 0;
- out_7282145086155387076[47] = 0;
- out_7282145086155387076[48] = 0;
- out_7282145086155387076[49] = 0;
- out_7282145086155387076[50] = dt;
- out_7282145086155387076[51] = 0;
- out_7282145086155387076[52] = 0;
- out_7282145086155387076[53] = 0;
- out_7282145086155387076[54] = 0;
- out_7282145086155387076[55] = 0;
- out_7282145086155387076[56] = 0;
- out_7282145086155387076[57] = 0;
- out_7282145086155387076[58] = 0;
- out_7282145086155387076[59] = 0;
- out_7282145086155387076[60] = 0;
- out_7282145086155387076[61] = 0;
- out_7282145086155387076[62] = 0;
- out_7282145086155387076[63] = 0;
- out_7282145086155387076[64] = 0;
- out_7282145086155387076[65] = 0;
- out_7282145086155387076[66] = 1;
- out_7282145086155387076[67] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[11] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]);
- out_7282145086155387076[68] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[12] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[10] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[11]);
- out_7282145086155387076[69] = 0;
- out_7282145086155387076[70] = 0;
- out_7282145086155387076[71] = 0;
- out_7282145086155387076[72] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2));
- out_7282145086155387076[73] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]);
- out_7282145086155387076[74] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]);
- out_7282145086155387076[75] = 0;
- out_7282145086155387076[76] = 0;
- out_7282145086155387076[77] = 0;
- out_7282145086155387076[78] = 0;
- out_7282145086155387076[79] = 0;
- out_7282145086155387076[80] = 0;
- out_7282145086155387076[81] = 0;
- out_7282145086155387076[82] = 0;
- out_7282145086155387076[83] = 0;
- out_7282145086155387076[84] = 0;
- out_7282145086155387076[85] = 0;
- out_7282145086155387076[86] = 0;
- out_7282145086155387076[87] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[11] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]);
- out_7282145086155387076[88] = 1;
- out_7282145086155387076[89] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[12] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[11] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[10]);
- out_7282145086155387076[90] = 0;
- out_7282145086155387076[91] = 0;
- out_7282145086155387076[92] = 0;
- out_7282145086155387076[93] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]);
- out_7282145086155387076[94] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2));
- out_7282145086155387076[95] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]);
- out_7282145086155387076[96] = 0;
- out_7282145086155387076[97] = 0;
- out_7282145086155387076[98] = 0;
- out_7282145086155387076[99] = 0;
- out_7282145086155387076[100] = 0;
- out_7282145086155387076[101] = 0;
- out_7282145086155387076[102] = 0;
- out_7282145086155387076[103] = 0;
- out_7282145086155387076[104] = 0;
- out_7282145086155387076[105] = 0;
- out_7282145086155387076[106] = 0;
- out_7282145086155387076[107] = 0;
- out_7282145086155387076[108] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[12] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[10] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[11]);
- out_7282145086155387076[109] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[12] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[11] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[10]);
- out_7282145086155387076[110] = 1;
- out_7282145086155387076[111] = 0;
- out_7282145086155387076[112] = 0;
- out_7282145086155387076[113] = 0;
- out_7282145086155387076[114] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]);
- out_7282145086155387076[115] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]);
- out_7282145086155387076[116] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2));
- out_7282145086155387076[117] = 0;
- out_7282145086155387076[118] = 0;
- out_7282145086155387076[119] = 0;
- out_7282145086155387076[120] = 0;
- out_7282145086155387076[121] = 0;
- out_7282145086155387076[122] = 0;
- out_7282145086155387076[123] = 0;
- out_7282145086155387076[124] = 0;
- out_7282145086155387076[125] = 0;
- out_7282145086155387076[126] = 0;
- out_7282145086155387076[127] = 0;
- out_7282145086155387076[128] = 0;
- out_7282145086155387076[129] = 0;
- out_7282145086155387076[130] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]);
- out_7282145086155387076[131] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[18] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[16] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[17]);
- out_7282145086155387076[132] = 1;
- out_7282145086155387076[133] = 0;
- out_7282145086155387076[134] = 0;
- out_7282145086155387076[135] = 0;
- out_7282145086155387076[136] = 0;
- out_7282145086155387076[137] = 0;
- out_7282145086155387076[138] = 0;
- out_7282145086155387076[139] = 0;
- out_7282145086155387076[140] = 0;
- out_7282145086155387076[141] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2));
- out_7282145086155387076[142] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]);
- out_7282145086155387076[143] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]);
- out_7282145086155387076[144] = 0;
- out_7282145086155387076[145] = 0;
- out_7282145086155387076[146] = 0;
- out_7282145086155387076[147] = 0;
- out_7282145086155387076[148] = 0;
- out_7282145086155387076[149] = 0;
- out_7282145086155387076[150] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[17] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]);
- out_7282145086155387076[151] = 0;
- out_7282145086155387076[152] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]);
- out_7282145086155387076[153] = 0;
- out_7282145086155387076[154] = 1;
- out_7282145086155387076[155] = 0;
- out_7282145086155387076[156] = 0;
- out_7282145086155387076[157] = 0;
- out_7282145086155387076[158] = 0;
- out_7282145086155387076[159] = 0;
- out_7282145086155387076[160] = 0;
- out_7282145086155387076[161] = 0;
- out_7282145086155387076[162] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]);
- out_7282145086155387076[163] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2));
- out_7282145086155387076[164] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]);
- out_7282145086155387076[165] = 0;
- out_7282145086155387076[166] = 0;
- out_7282145086155387076[167] = 0;
- out_7282145086155387076[168] = 0;
- out_7282145086155387076[169] = 0;
- out_7282145086155387076[170] = 0;
- out_7282145086155387076[171] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]);
- out_7282145086155387076[172] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[18] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[17] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[16]);
- out_7282145086155387076[173] = 0;
- out_7282145086155387076[174] = 0;
- out_7282145086155387076[175] = 0;
- out_7282145086155387076[176] = 1;
- out_7282145086155387076[177] = 0;
- out_7282145086155387076[178] = 0;
- out_7282145086155387076[179] = 0;
- out_7282145086155387076[180] = 0;
- out_7282145086155387076[181] = 0;
- out_7282145086155387076[182] = 0;
- out_7282145086155387076[183] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]);
- out_7282145086155387076[184] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]);
- out_7282145086155387076[185] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2));
- out_7282145086155387076[186] = 0;
- out_7282145086155387076[187] = 0;
- out_7282145086155387076[188] = 0;
- out_7282145086155387076[189] = 0;
- out_7282145086155387076[190] = 0;
- out_7282145086155387076[191] = 0;
- out_7282145086155387076[192] = 0;
- out_7282145086155387076[193] = 0;
- out_7282145086155387076[194] = 0;
- out_7282145086155387076[195] = 0;
- out_7282145086155387076[196] = 0;
- out_7282145086155387076[197] = 0;
- out_7282145086155387076[198] = 1;
- out_7282145086155387076[199] = 0;
- out_7282145086155387076[200] = 0;
- out_7282145086155387076[201] = 0;
- out_7282145086155387076[202] = 0;
- out_7282145086155387076[203] = 0;
- out_7282145086155387076[204] = 0;
- out_7282145086155387076[205] = 0;
- out_7282145086155387076[206] = 0;
- out_7282145086155387076[207] = 0;
- out_7282145086155387076[208] = 0;
- out_7282145086155387076[209] = 0;
- out_7282145086155387076[210] = 0;
- out_7282145086155387076[211] = 0;
- out_7282145086155387076[212] = 0;
- out_7282145086155387076[213] = 0;
- out_7282145086155387076[214] = 0;
- out_7282145086155387076[215] = 0;
- out_7282145086155387076[216] = 0;
- out_7282145086155387076[217] = 0;
- out_7282145086155387076[218] = 0;
- out_7282145086155387076[219] = 0;
- out_7282145086155387076[220] = 1;
- out_7282145086155387076[221] = 0;
- out_7282145086155387076[222] = 0;
- out_7282145086155387076[223] = 0;
- out_7282145086155387076[224] = 0;
- out_7282145086155387076[225] = 0;
- out_7282145086155387076[226] = 0;
- out_7282145086155387076[227] = 0;
- out_7282145086155387076[228] = 0;
- out_7282145086155387076[229] = 0;
- out_7282145086155387076[230] = 0;
- out_7282145086155387076[231] = 0;
- out_7282145086155387076[232] = 0;
- out_7282145086155387076[233] = 0;
- out_7282145086155387076[234] = 0;
- out_7282145086155387076[235] = 0;
- out_7282145086155387076[236] = 0;
- out_7282145086155387076[237] = 0;
- out_7282145086155387076[238] = 0;
- out_7282145086155387076[239] = 0;
- out_7282145086155387076[240] = 0;
- out_7282145086155387076[241] = 0;
- out_7282145086155387076[242] = 1;
- out_7282145086155387076[243] = 0;
- out_7282145086155387076[244] = 0;
- out_7282145086155387076[245] = 0;
- out_7282145086155387076[246] = 0;
- out_7282145086155387076[247] = 0;
- out_7282145086155387076[248] = 0;
- out_7282145086155387076[249] = 0;
- out_7282145086155387076[250] = 0;
- out_7282145086155387076[251] = 0;
- out_7282145086155387076[252] = 0;
- out_7282145086155387076[253] = 0;
- out_7282145086155387076[254] = 0;
- out_7282145086155387076[255] = 0;
- out_7282145086155387076[256] = 0;
- out_7282145086155387076[257] = 0;
- out_7282145086155387076[258] = 0;
- out_7282145086155387076[259] = 0;
- out_7282145086155387076[260] = 0;
- out_7282145086155387076[261] = 0;
- out_7282145086155387076[262] = 0;
- out_7282145086155387076[263] = 0;
- out_7282145086155387076[264] = 1;
- out_7282145086155387076[265] = 0;
- out_7282145086155387076[266] = 0;
- out_7282145086155387076[267] = 0;
- out_7282145086155387076[268] = 0;
- out_7282145086155387076[269] = 0;
- out_7282145086155387076[270] = 0;
- out_7282145086155387076[271] = 0;
- out_7282145086155387076[272] = 0;
- out_7282145086155387076[273] = 0;
- out_7282145086155387076[274] = 0;
- out_7282145086155387076[275] = 0;
- out_7282145086155387076[276] = 0;
- out_7282145086155387076[277] = 0;
- out_7282145086155387076[278] = 0;
- out_7282145086155387076[279] = 0;
- out_7282145086155387076[280] = 0;
- out_7282145086155387076[281] = 0;
- out_7282145086155387076[282] = 0;
- out_7282145086155387076[283] = 0;
- out_7282145086155387076[284] = 0;
- out_7282145086155387076[285] = 0;
- out_7282145086155387076[286] = 1;
- out_7282145086155387076[287] = 0;
- out_7282145086155387076[288] = 0;
- out_7282145086155387076[289] = 0;
- out_7282145086155387076[290] = 0;
- out_7282145086155387076[291] = 0;
- out_7282145086155387076[292] = 0;
- out_7282145086155387076[293] = 0;
- out_7282145086155387076[294] = 0;
- out_7282145086155387076[295] = 0;
- out_7282145086155387076[296] = 0;
- out_7282145086155387076[297] = 0;
- out_7282145086155387076[298] = 0;
- out_7282145086155387076[299] = 0;
- out_7282145086155387076[300] = 0;
- out_7282145086155387076[301] = 0;
- out_7282145086155387076[302] = 0;
- out_7282145086155387076[303] = 0;
- out_7282145086155387076[304] = 0;
- out_7282145086155387076[305] = 0;
- out_7282145086155387076[306] = 0;
- out_7282145086155387076[307] = 0;
- out_7282145086155387076[308] = 1;
- out_7282145086155387076[309] = 0;
- out_7282145086155387076[310] = 0;
- out_7282145086155387076[311] = 0;
- out_7282145086155387076[312] = 0;
- out_7282145086155387076[313] = 0;
- out_7282145086155387076[314] = 0;
- out_7282145086155387076[315] = 0;
- out_7282145086155387076[316] = 0;
- out_7282145086155387076[317] = 0;
- out_7282145086155387076[318] = 0;
- out_7282145086155387076[319] = 0;
- out_7282145086155387076[320] = 0;
- out_7282145086155387076[321] = 0;
- out_7282145086155387076[322] = 0;
- out_7282145086155387076[323] = 0;
- out_7282145086155387076[324] = 0;
- out_7282145086155387076[325] = 0;
- out_7282145086155387076[326] = 0;
- out_7282145086155387076[327] = 0;
- out_7282145086155387076[328] = 0;
- out_7282145086155387076[329] = 0;
- out_7282145086155387076[330] = 1;
- out_7282145086155387076[331] = 0;
- out_7282145086155387076[332] = 0;
- out_7282145086155387076[333] = 0;
- out_7282145086155387076[334] = 0;
- out_7282145086155387076[335] = 0;
- out_7282145086155387076[336] = 0;
- out_7282145086155387076[337] = 0;
- out_7282145086155387076[338] = 0;
- out_7282145086155387076[339] = 0;
- out_7282145086155387076[340] = 0;
- out_7282145086155387076[341] = 0;
- out_7282145086155387076[342] = 0;
- out_7282145086155387076[343] = 0;
- out_7282145086155387076[344] = 0;
- out_7282145086155387076[345] = 0;
- out_7282145086155387076[346] = 0;
- out_7282145086155387076[347] = 0;
- out_7282145086155387076[348] = 0;
- out_7282145086155387076[349] = 0;
- out_7282145086155387076[350] = 0;
- out_7282145086155387076[351] = 0;
- out_7282145086155387076[352] = 1;
- out_7282145086155387076[353] = 0;
- out_7282145086155387076[354] = 0;
- out_7282145086155387076[355] = 0;
- out_7282145086155387076[356] = 0;
- out_7282145086155387076[357] = 0;
- out_7282145086155387076[358] = 0;
- out_7282145086155387076[359] = 0;
- out_7282145086155387076[360] = 0;
- out_7282145086155387076[361] = 0;
- out_7282145086155387076[362] = 0;
- out_7282145086155387076[363] = 0;
- out_7282145086155387076[364] = 0;
- out_7282145086155387076[365] = 0;
- out_7282145086155387076[366] = 0;
- out_7282145086155387076[367] = 0;
- out_7282145086155387076[368] = 0;
- out_7282145086155387076[369] = 0;
- out_7282145086155387076[370] = 0;
- out_7282145086155387076[371] = 0;
- out_7282145086155387076[372] = 0;
- out_7282145086155387076[373] = 0;
- out_7282145086155387076[374] = 1;
- out_7282145086155387076[375] = 0;
- out_7282145086155387076[376] = 0;
- out_7282145086155387076[377] = 0;
- out_7282145086155387076[378] = 0;
- out_7282145086155387076[379] = 0;
- out_7282145086155387076[380] = 0;
- out_7282145086155387076[381] = 0;
- out_7282145086155387076[382] = 0;
- out_7282145086155387076[383] = 0;
- out_7282145086155387076[384] = 0;
- out_7282145086155387076[385] = 0;
- out_7282145086155387076[386] = 0;
- out_7282145086155387076[387] = 0;
- out_7282145086155387076[388] = 0;
- out_7282145086155387076[389] = 0;
- out_7282145086155387076[390] = 0;
- out_7282145086155387076[391] = 0;
- out_7282145086155387076[392] = 0;
- out_7282145086155387076[393] = 0;
- out_7282145086155387076[394] = 0;
- out_7282145086155387076[395] = 0;
- out_7282145086155387076[396] = 1;
- out_7282145086155387076[397] = 0;
- out_7282145086155387076[398] = 0;
- out_7282145086155387076[399] = 0;
- out_7282145086155387076[400] = 0;
- out_7282145086155387076[401] = 0;
- out_7282145086155387076[402] = 0;
- out_7282145086155387076[403] = 0;
- out_7282145086155387076[404] = 0;
- out_7282145086155387076[405] = 0;
- out_7282145086155387076[406] = 0;
- out_7282145086155387076[407] = 0;
- out_7282145086155387076[408] = 0;
- out_7282145086155387076[409] = 0;
- out_7282145086155387076[410] = 0;
- out_7282145086155387076[411] = 0;
- out_7282145086155387076[412] = 0;
- out_7282145086155387076[413] = 0;
- out_7282145086155387076[414] = 0;
- out_7282145086155387076[415] = 0;
- out_7282145086155387076[416] = 0;
- out_7282145086155387076[417] = 0;
- out_7282145086155387076[418] = 1;
- out_7282145086155387076[419] = 0;
- out_7282145086155387076[420] = 0;
- out_7282145086155387076[421] = 0;
- out_7282145086155387076[422] = 0;
- out_7282145086155387076[423] = 0;
- out_7282145086155387076[424] = 0;
- out_7282145086155387076[425] = 0;
- out_7282145086155387076[426] = 0;
- out_7282145086155387076[427] = 0;
- out_7282145086155387076[428] = 0;
- out_7282145086155387076[429] = 0;
- out_7282145086155387076[430] = 0;
- out_7282145086155387076[431] = 0;
- out_7282145086155387076[432] = 0;
- out_7282145086155387076[433] = 0;
- out_7282145086155387076[434] = 0;
- out_7282145086155387076[435] = 0;
- out_7282145086155387076[436] = 0;
- out_7282145086155387076[437] = 0;
- out_7282145086155387076[438] = 0;
- out_7282145086155387076[439] = 0;
- out_7282145086155387076[440] = 1;
+void F_fun(double *state, double dt, double *out_7523521905118560137) {
+ out_7523521905118560137[0] = 1;
+ out_7523521905118560137[1] = 0;
+ out_7523521905118560137[2] = 0;
+ out_7523521905118560137[3] = 0;
+ out_7523521905118560137[4] = 0;
+ out_7523521905118560137[5] = 0;
+ out_7523521905118560137[6] = dt;
+ out_7523521905118560137[7] = 0;
+ out_7523521905118560137[8] = 0;
+ out_7523521905118560137[9] = 0;
+ out_7523521905118560137[10] = 0;
+ out_7523521905118560137[11] = 0;
+ out_7523521905118560137[12] = 0;
+ out_7523521905118560137[13] = 0;
+ out_7523521905118560137[14] = 0;
+ out_7523521905118560137[15] = 0;
+ out_7523521905118560137[16] = 0;
+ out_7523521905118560137[17] = 0;
+ out_7523521905118560137[18] = 0;
+ out_7523521905118560137[19] = 0;
+ out_7523521905118560137[20] = 0;
+ out_7523521905118560137[21] = 0;
+ out_7523521905118560137[22] = 1;
+ out_7523521905118560137[23] = 0;
+ out_7523521905118560137[24] = 0;
+ out_7523521905118560137[25] = 0;
+ out_7523521905118560137[26] = 0;
+ out_7523521905118560137[27] = 0;
+ out_7523521905118560137[28] = dt;
+ out_7523521905118560137[29] = 0;
+ out_7523521905118560137[30] = 0;
+ out_7523521905118560137[31] = 0;
+ out_7523521905118560137[32] = 0;
+ out_7523521905118560137[33] = 0;
+ out_7523521905118560137[34] = 0;
+ out_7523521905118560137[35] = 0;
+ out_7523521905118560137[36] = 0;
+ out_7523521905118560137[37] = 0;
+ out_7523521905118560137[38] = 0;
+ out_7523521905118560137[39] = 0;
+ out_7523521905118560137[40] = 0;
+ out_7523521905118560137[41] = 0;
+ out_7523521905118560137[42] = 0;
+ out_7523521905118560137[43] = 0;
+ out_7523521905118560137[44] = 1;
+ out_7523521905118560137[45] = 0;
+ out_7523521905118560137[46] = 0;
+ out_7523521905118560137[47] = 0;
+ out_7523521905118560137[48] = 0;
+ out_7523521905118560137[49] = 0;
+ out_7523521905118560137[50] = dt;
+ out_7523521905118560137[51] = 0;
+ out_7523521905118560137[52] = 0;
+ out_7523521905118560137[53] = 0;
+ out_7523521905118560137[54] = 0;
+ out_7523521905118560137[55] = 0;
+ out_7523521905118560137[56] = 0;
+ out_7523521905118560137[57] = 0;
+ out_7523521905118560137[58] = 0;
+ out_7523521905118560137[59] = 0;
+ out_7523521905118560137[60] = 0;
+ out_7523521905118560137[61] = 0;
+ out_7523521905118560137[62] = 0;
+ out_7523521905118560137[63] = 0;
+ out_7523521905118560137[64] = 0;
+ out_7523521905118560137[65] = 0;
+ out_7523521905118560137[66] = 1;
+ out_7523521905118560137[67] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[11] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]);
+ out_7523521905118560137[68] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[12] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[10] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[11]);
+ out_7523521905118560137[69] = 0;
+ out_7523521905118560137[70] = 0;
+ out_7523521905118560137[71] = 0;
+ out_7523521905118560137[72] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2));
+ out_7523521905118560137[73] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]);
+ out_7523521905118560137[74] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]);
+ out_7523521905118560137[75] = 0;
+ out_7523521905118560137[76] = 0;
+ out_7523521905118560137[77] = 0;
+ out_7523521905118560137[78] = 0;
+ out_7523521905118560137[79] = 0;
+ out_7523521905118560137[80] = 0;
+ out_7523521905118560137[81] = 0;
+ out_7523521905118560137[82] = 0;
+ out_7523521905118560137[83] = 0;
+ out_7523521905118560137[84] = 0;
+ out_7523521905118560137[85] = 0;
+ out_7523521905118560137[86] = 0;
+ out_7523521905118560137[87] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[11] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[10] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[12]);
+ out_7523521905118560137[88] = 1;
+ out_7523521905118560137[89] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[12] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[11] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[10]);
+ out_7523521905118560137[90] = 0;
+ out_7523521905118560137[91] = 0;
+ out_7523521905118560137[92] = 0;
+ out_7523521905118560137[93] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]);
+ out_7523521905118560137[94] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2));
+ out_7523521905118560137[95] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]);
+ out_7523521905118560137[96] = 0;
+ out_7523521905118560137[97] = 0;
+ out_7523521905118560137[98] = 0;
+ out_7523521905118560137[99] = 0;
+ out_7523521905118560137[100] = 0;
+ out_7523521905118560137[101] = 0;
+ out_7523521905118560137[102] = 0;
+ out_7523521905118560137[103] = 0;
+ out_7523521905118560137[104] = 0;
+ out_7523521905118560137[105] = 0;
+ out_7523521905118560137[106] = 0;
+ out_7523521905118560137[107] = 0;
+ out_7523521905118560137[108] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[12] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[10] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[11]);
+ out_7523521905118560137[109] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[12] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[11] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[10]);
+ out_7523521905118560137[110] = 1;
+ out_7523521905118560137[111] = 0;
+ out_7523521905118560137[112] = 0;
+ out_7523521905118560137[113] = 0;
+ out_7523521905118560137[114] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]);
+ out_7523521905118560137[115] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]);
+ out_7523521905118560137[116] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2));
+ out_7523521905118560137[117] = 0;
+ out_7523521905118560137[118] = 0;
+ out_7523521905118560137[119] = 0;
+ out_7523521905118560137[120] = 0;
+ out_7523521905118560137[121] = 0;
+ out_7523521905118560137[122] = 0;
+ out_7523521905118560137[123] = 0;
+ out_7523521905118560137[124] = 0;
+ out_7523521905118560137[125] = 0;
+ out_7523521905118560137[126] = 0;
+ out_7523521905118560137[127] = 0;
+ out_7523521905118560137[128] = 0;
+ out_7523521905118560137[129] = 0;
+ out_7523521905118560137[130] = dt*((2*state[3]*state[4] + 2*state[5]*state[6])*state[17] + (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]);
+ out_7523521905118560137[131] = dt*((2*state[3]*state[4] - 2*state[5]*state[6])*state[18] + (-2*state[3]*state[6] - 2*state[4]*state[5])*state[16] + (-pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[17]);
+ out_7523521905118560137[132] = 1;
+ out_7523521905118560137[133] = 0;
+ out_7523521905118560137[134] = 0;
+ out_7523521905118560137[135] = 0;
+ out_7523521905118560137[136] = 0;
+ out_7523521905118560137[137] = 0;
+ out_7523521905118560137[138] = 0;
+ out_7523521905118560137[139] = 0;
+ out_7523521905118560137[140] = 0;
+ out_7523521905118560137[141] = dt*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2));
+ out_7523521905118560137[142] = dt*(-2*state[3]*state[6] + 2*state[4]*state[5]);
+ out_7523521905118560137[143] = dt*(2*state[3]*state[5] + 2*state[4]*state[6]);
+ out_7523521905118560137[144] = 0;
+ out_7523521905118560137[145] = 0;
+ out_7523521905118560137[146] = 0;
+ out_7523521905118560137[147] = 0;
+ out_7523521905118560137[148] = 0;
+ out_7523521905118560137[149] = 0;
+ out_7523521905118560137[150] = dt*(-(2*state[3]*state[4] + 2*state[5]*state[6])*state[17] - (-2*state[3]*state[5] + 2*state[4]*state[6])*state[16] - (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[18]);
+ out_7523521905118560137[151] = 0;
+ out_7523521905118560137[152] = dt*((2*state[3]*state[5] + 2*state[4]*state[6])*state[18] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[17] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[16]);
+ out_7523521905118560137[153] = 0;
+ out_7523521905118560137[154] = 1;
+ out_7523521905118560137[155] = 0;
+ out_7523521905118560137[156] = 0;
+ out_7523521905118560137[157] = 0;
+ out_7523521905118560137[158] = 0;
+ out_7523521905118560137[159] = 0;
+ out_7523521905118560137[160] = 0;
+ out_7523521905118560137[161] = 0;
+ out_7523521905118560137[162] = dt*(2*state[3]*state[6] + 2*state[4]*state[5]);
+ out_7523521905118560137[163] = dt*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2));
+ out_7523521905118560137[164] = dt*(-2*state[3]*state[4] + 2*state[5]*state[6]);
+ out_7523521905118560137[165] = 0;
+ out_7523521905118560137[166] = 0;
+ out_7523521905118560137[167] = 0;
+ out_7523521905118560137[168] = 0;
+ out_7523521905118560137[169] = 0;
+ out_7523521905118560137[170] = 0;
+ out_7523521905118560137[171] = dt*((-2*state[3]*state[4] + 2*state[5]*state[6])*state[18] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[16] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[17]);
+ out_7523521905118560137[172] = dt*((-2*state[3]*state[5] - 2*state[4]*state[6])*state[18] + (2*state[3]*state[6] - 2*state[4]*state[5])*state[17] + (-pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) + pow(state[6], 2))*state[16]);
+ out_7523521905118560137[173] = 0;
+ out_7523521905118560137[174] = 0;
+ out_7523521905118560137[175] = 0;
+ out_7523521905118560137[176] = 1;
+ out_7523521905118560137[177] = 0;
+ out_7523521905118560137[178] = 0;
+ out_7523521905118560137[179] = 0;
+ out_7523521905118560137[180] = 0;
+ out_7523521905118560137[181] = 0;
+ out_7523521905118560137[182] = 0;
+ out_7523521905118560137[183] = dt*(-2*state[3]*state[5] + 2*state[4]*state[6]);
+ out_7523521905118560137[184] = dt*(2*state[3]*state[4] + 2*state[5]*state[6]);
+ out_7523521905118560137[185] = dt*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2));
+ out_7523521905118560137[186] = 0;
+ out_7523521905118560137[187] = 0;
+ out_7523521905118560137[188] = 0;
+ out_7523521905118560137[189] = 0;
+ out_7523521905118560137[190] = 0;
+ out_7523521905118560137[191] = 0;
+ out_7523521905118560137[192] = 0;
+ out_7523521905118560137[193] = 0;
+ out_7523521905118560137[194] = 0;
+ out_7523521905118560137[195] = 0;
+ out_7523521905118560137[196] = 0;
+ out_7523521905118560137[197] = 0;
+ out_7523521905118560137[198] = 1;
+ out_7523521905118560137[199] = 0;
+ out_7523521905118560137[200] = 0;
+ out_7523521905118560137[201] = 0;
+ out_7523521905118560137[202] = 0;
+ out_7523521905118560137[203] = 0;
+ out_7523521905118560137[204] = 0;
+ out_7523521905118560137[205] = 0;
+ out_7523521905118560137[206] = 0;
+ out_7523521905118560137[207] = 0;
+ out_7523521905118560137[208] = 0;
+ out_7523521905118560137[209] = 0;
+ out_7523521905118560137[210] = 0;
+ out_7523521905118560137[211] = 0;
+ out_7523521905118560137[212] = 0;
+ out_7523521905118560137[213] = 0;
+ out_7523521905118560137[214] = 0;
+ out_7523521905118560137[215] = 0;
+ out_7523521905118560137[216] = 0;
+ out_7523521905118560137[217] = 0;
+ out_7523521905118560137[218] = 0;
+ out_7523521905118560137[219] = 0;
+ out_7523521905118560137[220] = 1;
+ out_7523521905118560137[221] = 0;
+ out_7523521905118560137[222] = 0;
+ out_7523521905118560137[223] = 0;
+ out_7523521905118560137[224] = 0;
+ out_7523521905118560137[225] = 0;
+ out_7523521905118560137[226] = 0;
+ out_7523521905118560137[227] = 0;
+ out_7523521905118560137[228] = 0;
+ out_7523521905118560137[229] = 0;
+ out_7523521905118560137[230] = 0;
+ out_7523521905118560137[231] = 0;
+ out_7523521905118560137[232] = 0;
+ out_7523521905118560137[233] = 0;
+ out_7523521905118560137[234] = 0;
+ out_7523521905118560137[235] = 0;
+ out_7523521905118560137[236] = 0;
+ out_7523521905118560137[237] = 0;
+ out_7523521905118560137[238] = 0;
+ out_7523521905118560137[239] = 0;
+ out_7523521905118560137[240] = 0;
+ out_7523521905118560137[241] = 0;
+ out_7523521905118560137[242] = 1;
+ out_7523521905118560137[243] = 0;
+ out_7523521905118560137[244] = 0;
+ out_7523521905118560137[245] = 0;
+ out_7523521905118560137[246] = 0;
+ out_7523521905118560137[247] = 0;
+ out_7523521905118560137[248] = 0;
+ out_7523521905118560137[249] = 0;
+ out_7523521905118560137[250] = 0;
+ out_7523521905118560137[251] = 0;
+ out_7523521905118560137[252] = 0;
+ out_7523521905118560137[253] = 0;
+ out_7523521905118560137[254] = 0;
+ out_7523521905118560137[255] = 0;
+ out_7523521905118560137[256] = 0;
+ out_7523521905118560137[257] = 0;
+ out_7523521905118560137[258] = 0;
+ out_7523521905118560137[259] = 0;
+ out_7523521905118560137[260] = 0;
+ out_7523521905118560137[261] = 0;
+ out_7523521905118560137[262] = 0;
+ out_7523521905118560137[263] = 0;
+ out_7523521905118560137[264] = 1;
+ out_7523521905118560137[265] = 0;
+ out_7523521905118560137[266] = 0;
+ out_7523521905118560137[267] = 0;
+ out_7523521905118560137[268] = 0;
+ out_7523521905118560137[269] = 0;
+ out_7523521905118560137[270] = 0;
+ out_7523521905118560137[271] = 0;
+ out_7523521905118560137[272] = 0;
+ out_7523521905118560137[273] = 0;
+ out_7523521905118560137[274] = 0;
+ out_7523521905118560137[275] = 0;
+ out_7523521905118560137[276] = 0;
+ out_7523521905118560137[277] = 0;
+ out_7523521905118560137[278] = 0;
+ out_7523521905118560137[279] = 0;
+ out_7523521905118560137[280] = 0;
+ out_7523521905118560137[281] = 0;
+ out_7523521905118560137[282] = 0;
+ out_7523521905118560137[283] = 0;
+ out_7523521905118560137[284] = 0;
+ out_7523521905118560137[285] = 0;
+ out_7523521905118560137[286] = 1;
+ out_7523521905118560137[287] = 0;
+ out_7523521905118560137[288] = 0;
+ out_7523521905118560137[289] = 0;
+ out_7523521905118560137[290] = 0;
+ out_7523521905118560137[291] = 0;
+ out_7523521905118560137[292] = 0;
+ out_7523521905118560137[293] = 0;
+ out_7523521905118560137[294] = 0;
+ out_7523521905118560137[295] = 0;
+ out_7523521905118560137[296] = 0;
+ out_7523521905118560137[297] = 0;
+ out_7523521905118560137[298] = 0;
+ out_7523521905118560137[299] = 0;
+ out_7523521905118560137[300] = 0;
+ out_7523521905118560137[301] = 0;
+ out_7523521905118560137[302] = 0;
+ out_7523521905118560137[303] = 0;
+ out_7523521905118560137[304] = 0;
+ out_7523521905118560137[305] = 0;
+ out_7523521905118560137[306] = 0;
+ out_7523521905118560137[307] = 0;
+ out_7523521905118560137[308] = 1;
+ out_7523521905118560137[309] = 0;
+ out_7523521905118560137[310] = 0;
+ out_7523521905118560137[311] = 0;
+ out_7523521905118560137[312] = 0;
+ out_7523521905118560137[313] = 0;
+ out_7523521905118560137[314] = 0;
+ out_7523521905118560137[315] = 0;
+ out_7523521905118560137[316] = 0;
+ out_7523521905118560137[317] = 0;
+ out_7523521905118560137[318] = 0;
+ out_7523521905118560137[319] = 0;
+ out_7523521905118560137[320] = 0;
+ out_7523521905118560137[321] = 0;
+ out_7523521905118560137[322] = 0;
+ out_7523521905118560137[323] = 0;
+ out_7523521905118560137[324] = 0;
+ out_7523521905118560137[325] = 0;
+ out_7523521905118560137[326] = 0;
+ out_7523521905118560137[327] = 0;
+ out_7523521905118560137[328] = 0;
+ out_7523521905118560137[329] = 0;
+ out_7523521905118560137[330] = 1;
+ out_7523521905118560137[331] = 0;
+ out_7523521905118560137[332] = 0;
+ out_7523521905118560137[333] = 0;
+ out_7523521905118560137[334] = 0;
+ out_7523521905118560137[335] = 0;
+ out_7523521905118560137[336] = 0;
+ out_7523521905118560137[337] = 0;
+ out_7523521905118560137[338] = 0;
+ out_7523521905118560137[339] = 0;
+ out_7523521905118560137[340] = 0;
+ out_7523521905118560137[341] = 0;
+ out_7523521905118560137[342] = 0;
+ out_7523521905118560137[343] = 0;
+ out_7523521905118560137[344] = 0;
+ out_7523521905118560137[345] = 0;
+ out_7523521905118560137[346] = 0;
+ out_7523521905118560137[347] = 0;
+ out_7523521905118560137[348] = 0;
+ out_7523521905118560137[349] = 0;
+ out_7523521905118560137[350] = 0;
+ out_7523521905118560137[351] = 0;
+ out_7523521905118560137[352] = 1;
+ out_7523521905118560137[353] = 0;
+ out_7523521905118560137[354] = 0;
+ out_7523521905118560137[355] = 0;
+ out_7523521905118560137[356] = 0;
+ out_7523521905118560137[357] = 0;
+ out_7523521905118560137[358] = 0;
+ out_7523521905118560137[359] = 0;
+ out_7523521905118560137[360] = 0;
+ out_7523521905118560137[361] = 0;
+ out_7523521905118560137[362] = 0;
+ out_7523521905118560137[363] = 0;
+ out_7523521905118560137[364] = 0;
+ out_7523521905118560137[365] = 0;
+ out_7523521905118560137[366] = 0;
+ out_7523521905118560137[367] = 0;
+ out_7523521905118560137[368] = 0;
+ out_7523521905118560137[369] = 0;
+ out_7523521905118560137[370] = 0;
+ out_7523521905118560137[371] = 0;
+ out_7523521905118560137[372] = 0;
+ out_7523521905118560137[373] = 0;
+ out_7523521905118560137[374] = 1;
+ out_7523521905118560137[375] = 0;
+ out_7523521905118560137[376] = 0;
+ out_7523521905118560137[377] = 0;
+ out_7523521905118560137[378] = 0;
+ out_7523521905118560137[379] = 0;
+ out_7523521905118560137[380] = 0;
+ out_7523521905118560137[381] = 0;
+ out_7523521905118560137[382] = 0;
+ out_7523521905118560137[383] = 0;
+ out_7523521905118560137[384] = 0;
+ out_7523521905118560137[385] = 0;
+ out_7523521905118560137[386] = 0;
+ out_7523521905118560137[387] = 0;
+ out_7523521905118560137[388] = 0;
+ out_7523521905118560137[389] = 0;
+ out_7523521905118560137[390] = 0;
+ out_7523521905118560137[391] = 0;
+ out_7523521905118560137[392] = 0;
+ out_7523521905118560137[393] = 0;
+ out_7523521905118560137[394] = 0;
+ out_7523521905118560137[395] = 0;
+ out_7523521905118560137[396] = 1;
+ out_7523521905118560137[397] = 0;
+ out_7523521905118560137[398] = 0;
+ out_7523521905118560137[399] = 0;
+ out_7523521905118560137[400] = 0;
+ out_7523521905118560137[401] = 0;
+ out_7523521905118560137[402] = 0;
+ out_7523521905118560137[403] = 0;
+ out_7523521905118560137[404] = 0;
+ out_7523521905118560137[405] = 0;
+ out_7523521905118560137[406] = 0;
+ out_7523521905118560137[407] = 0;
+ out_7523521905118560137[408] = 0;
+ out_7523521905118560137[409] = 0;
+ out_7523521905118560137[410] = 0;
+ out_7523521905118560137[411] = 0;
+ out_7523521905118560137[412] = 0;
+ out_7523521905118560137[413] = 0;
+ out_7523521905118560137[414] = 0;
+ out_7523521905118560137[415] = 0;
+ out_7523521905118560137[416] = 0;
+ out_7523521905118560137[417] = 0;
+ out_7523521905118560137[418] = 1;
+ out_7523521905118560137[419] = 0;
+ out_7523521905118560137[420] = 0;
+ out_7523521905118560137[421] = 0;
+ out_7523521905118560137[422] = 0;
+ out_7523521905118560137[423] = 0;
+ out_7523521905118560137[424] = 0;
+ out_7523521905118560137[425] = 0;
+ out_7523521905118560137[426] = 0;
+ out_7523521905118560137[427] = 0;
+ out_7523521905118560137[428] = 0;
+ out_7523521905118560137[429] = 0;
+ out_7523521905118560137[430] = 0;
+ out_7523521905118560137[431] = 0;
+ out_7523521905118560137[432] = 0;
+ out_7523521905118560137[433] = 0;
+ out_7523521905118560137[434] = 0;
+ out_7523521905118560137[435] = 0;
+ out_7523521905118560137[436] = 0;
+ out_7523521905118560137[437] = 0;
+ out_7523521905118560137[438] = 0;
+ out_7523521905118560137[439] = 0;
+ out_7523521905118560137[440] = 1;
}
-void h_4(double *state, double *unused, double *out_3936704980047894152) {
- out_3936704980047894152[0] = state[10] + state[13];
- out_3936704980047894152[1] = state[11] + state[14];
- out_3936704980047894152[2] = state[12] + state[15];
+void h_4(double *state, double *unused, double *out_874158167075593511) {
+ out_874158167075593511[0] = state[10] + state[13];
+ out_874158167075593511[1] = state[11] + state[14];
+ out_874158167075593511[2] = state[12] + state[15];
}
-void H_4(double *state, double *unused, double *out_9052514604414786102) {
- out_9052514604414786102[0] = 0;
- out_9052514604414786102[1] = 0;
- out_9052514604414786102[2] = 0;
- out_9052514604414786102[3] = 0;
- out_9052514604414786102[4] = 0;
- out_9052514604414786102[5] = 0;
- out_9052514604414786102[6] = 0;
- out_9052514604414786102[7] = 0;
- out_9052514604414786102[8] = 0;
- out_9052514604414786102[9] = 0;
- out_9052514604414786102[10] = 1;
- out_9052514604414786102[11] = 0;
- out_9052514604414786102[12] = 0;
- out_9052514604414786102[13] = 1;
- out_9052514604414786102[14] = 0;
- out_9052514604414786102[15] = 0;
- out_9052514604414786102[16] = 0;
- out_9052514604414786102[17] = 0;
- out_9052514604414786102[18] = 0;
- out_9052514604414786102[19] = 0;
- out_9052514604414786102[20] = 0;
- out_9052514604414786102[21] = 0;
- out_9052514604414786102[22] = 0;
- out_9052514604414786102[23] = 0;
- out_9052514604414786102[24] = 0;
- out_9052514604414786102[25] = 0;
- out_9052514604414786102[26] = 0;
- out_9052514604414786102[27] = 0;
- out_9052514604414786102[28] = 0;
- out_9052514604414786102[29] = 0;
- out_9052514604414786102[30] = 0;
- out_9052514604414786102[31] = 0;
- out_9052514604414786102[32] = 0;
- out_9052514604414786102[33] = 1;
- out_9052514604414786102[34] = 0;
- out_9052514604414786102[35] = 0;
- out_9052514604414786102[36] = 1;
- out_9052514604414786102[37] = 0;
- out_9052514604414786102[38] = 0;
- out_9052514604414786102[39] = 0;
- out_9052514604414786102[40] = 0;
- out_9052514604414786102[41] = 0;
- out_9052514604414786102[42] = 0;
- out_9052514604414786102[43] = 0;
- out_9052514604414786102[44] = 0;
- out_9052514604414786102[45] = 0;
- out_9052514604414786102[46] = 0;
- out_9052514604414786102[47] = 0;
- out_9052514604414786102[48] = 0;
- out_9052514604414786102[49] = 0;
- out_9052514604414786102[50] = 0;
- out_9052514604414786102[51] = 0;
- out_9052514604414786102[52] = 0;
- out_9052514604414786102[53] = 0;
- out_9052514604414786102[54] = 0;
- out_9052514604414786102[55] = 0;
- out_9052514604414786102[56] = 1;
- out_9052514604414786102[57] = 0;
- out_9052514604414786102[58] = 0;
- out_9052514604414786102[59] = 1;
- out_9052514604414786102[60] = 0;
- out_9052514604414786102[61] = 0;
- out_9052514604414786102[62] = 0;
- out_9052514604414786102[63] = 0;
- out_9052514604414786102[64] = 0;
- out_9052514604414786102[65] = 0;
+void H_4(double *state, double *unused, double *out_2890470532950944797) {
+ out_2890470532950944797[0] = 0;
+ out_2890470532950944797[1] = 0;
+ out_2890470532950944797[2] = 0;
+ out_2890470532950944797[3] = 0;
+ out_2890470532950944797[4] = 0;
+ out_2890470532950944797[5] = 0;
+ out_2890470532950944797[6] = 0;
+ out_2890470532950944797[7] = 0;
+ out_2890470532950944797[8] = 0;
+ out_2890470532950944797[9] = 0;
+ out_2890470532950944797[10] = 1;
+ out_2890470532950944797[11] = 0;
+ out_2890470532950944797[12] = 0;
+ out_2890470532950944797[13] = 1;
+ out_2890470532950944797[14] = 0;
+ out_2890470532950944797[15] = 0;
+ out_2890470532950944797[16] = 0;
+ out_2890470532950944797[17] = 0;
+ out_2890470532950944797[18] = 0;
+ out_2890470532950944797[19] = 0;
+ out_2890470532950944797[20] = 0;
+ out_2890470532950944797[21] = 0;
+ out_2890470532950944797[22] = 0;
+ out_2890470532950944797[23] = 0;
+ out_2890470532950944797[24] = 0;
+ out_2890470532950944797[25] = 0;
+ out_2890470532950944797[26] = 0;
+ out_2890470532950944797[27] = 0;
+ out_2890470532950944797[28] = 0;
+ out_2890470532950944797[29] = 0;
+ out_2890470532950944797[30] = 0;
+ out_2890470532950944797[31] = 0;
+ out_2890470532950944797[32] = 0;
+ out_2890470532950944797[33] = 1;
+ out_2890470532950944797[34] = 0;
+ out_2890470532950944797[35] = 0;
+ out_2890470532950944797[36] = 1;
+ out_2890470532950944797[37] = 0;
+ out_2890470532950944797[38] = 0;
+ out_2890470532950944797[39] = 0;
+ out_2890470532950944797[40] = 0;
+ out_2890470532950944797[41] = 0;
+ out_2890470532950944797[42] = 0;
+ out_2890470532950944797[43] = 0;
+ out_2890470532950944797[44] = 0;
+ out_2890470532950944797[45] = 0;
+ out_2890470532950944797[46] = 0;
+ out_2890470532950944797[47] = 0;
+ out_2890470532950944797[48] = 0;
+ out_2890470532950944797[49] = 0;
+ out_2890470532950944797[50] = 0;
+ out_2890470532950944797[51] = 0;
+ out_2890470532950944797[52] = 0;
+ out_2890470532950944797[53] = 0;
+ out_2890470532950944797[54] = 0;
+ out_2890470532950944797[55] = 0;
+ out_2890470532950944797[56] = 1;
+ out_2890470532950944797[57] = 0;
+ out_2890470532950944797[58] = 0;
+ out_2890470532950944797[59] = 1;
+ out_2890470532950944797[60] = 0;
+ out_2890470532950944797[61] = 0;
+ out_2890470532950944797[62] = 0;
+ out_2890470532950944797[63] = 0;
+ out_2890470532950944797[64] = 0;
+ out_2890470532950944797[65] = 0;
}
-void h_9(double *state, double *unused, double *out_4670376777294811307) {
- out_4670376777294811307[0] = state[10];
- out_4670376777294811307[1] = state[11];
- out_4670376777294811307[2] = state[12];
+void h_9(double *state, double *unused, double *out_7169843762143865122) {
+ out_7169843762143865122[0] = state[10];
+ out_7169843762143865122[1] = state[11];
+ out_7169843762143865122[2] = state[12];
}
-void H_9(double *state, double *unused, double *out_9153039822665174869) {
- out_9153039822665174869[0] = 0;
- out_9153039822665174869[1] = 0;
- out_9153039822665174869[2] = 0;
- out_9153039822665174869[3] = 0;
- out_9153039822665174869[4] = 0;
- out_9153039822665174869[5] = 0;
- out_9153039822665174869[6] = 0;
- out_9153039822665174869[7] = 0;
- out_9153039822665174869[8] = 0;
- out_9153039822665174869[9] = 0;
- out_9153039822665174869[10] = 1;
- out_9153039822665174869[11] = 0;
- out_9153039822665174869[12] = 0;
- out_9153039822665174869[13] = 0;
- out_9153039822665174869[14] = 0;
- out_9153039822665174869[15] = 0;
- out_9153039822665174869[16] = 0;
- out_9153039822665174869[17] = 0;
- out_9153039822665174869[18] = 0;
- out_9153039822665174869[19] = 0;
- out_9153039822665174869[20] = 0;
- out_9153039822665174869[21] = 0;
- out_9153039822665174869[22] = 0;
- out_9153039822665174869[23] = 0;
- out_9153039822665174869[24] = 0;
- out_9153039822665174869[25] = 0;
- out_9153039822665174869[26] = 0;
- out_9153039822665174869[27] = 0;
- out_9153039822665174869[28] = 0;
- out_9153039822665174869[29] = 0;
- out_9153039822665174869[30] = 0;
- out_9153039822665174869[31] = 0;
- out_9153039822665174869[32] = 0;
- out_9153039822665174869[33] = 1;
- out_9153039822665174869[34] = 0;
- out_9153039822665174869[35] = 0;
- out_9153039822665174869[36] = 0;
- out_9153039822665174869[37] = 0;
- out_9153039822665174869[38] = 0;
- out_9153039822665174869[39] = 0;
- out_9153039822665174869[40] = 0;
- out_9153039822665174869[41] = 0;
- out_9153039822665174869[42] = 0;
- out_9153039822665174869[43] = 0;
- out_9153039822665174869[44] = 0;
- out_9153039822665174869[45] = 0;
- out_9153039822665174869[46] = 0;
- out_9153039822665174869[47] = 0;
- out_9153039822665174869[48] = 0;
- out_9153039822665174869[49] = 0;
- out_9153039822665174869[50] = 0;
- out_9153039822665174869[51] = 0;
- out_9153039822665174869[52] = 0;
- out_9153039822665174869[53] = 0;
- out_9153039822665174869[54] = 0;
- out_9153039822665174869[55] = 0;
- out_9153039822665174869[56] = 1;
- out_9153039822665174869[57] = 0;
- out_9153039822665174869[58] = 0;
- out_9153039822665174869[59] = 0;
- out_9153039822665174869[60] = 0;
- out_9153039822665174869[61] = 0;
- out_9153039822665174869[62] = 0;
- out_9153039822665174869[63] = 0;
- out_9153039822665174869[64] = 0;
- out_9153039822665174869[65] = 0;
+void H_9(double *state, double *unused, double *out_5779332085231024139) {
+ out_5779332085231024139[0] = 0;
+ out_5779332085231024139[1] = 0;
+ out_5779332085231024139[2] = 0;
+ out_5779332085231024139[3] = 0;
+ out_5779332085231024139[4] = 0;
+ out_5779332085231024139[5] = 0;
+ out_5779332085231024139[6] = 0;
+ out_5779332085231024139[7] = 0;
+ out_5779332085231024139[8] = 0;
+ out_5779332085231024139[9] = 0;
+ out_5779332085231024139[10] = 1;
+ out_5779332085231024139[11] = 0;
+ out_5779332085231024139[12] = 0;
+ out_5779332085231024139[13] = 0;
+ out_5779332085231024139[14] = 0;
+ out_5779332085231024139[15] = 0;
+ out_5779332085231024139[16] = 0;
+ out_5779332085231024139[17] = 0;
+ out_5779332085231024139[18] = 0;
+ out_5779332085231024139[19] = 0;
+ out_5779332085231024139[20] = 0;
+ out_5779332085231024139[21] = 0;
+ out_5779332085231024139[22] = 0;
+ out_5779332085231024139[23] = 0;
+ out_5779332085231024139[24] = 0;
+ out_5779332085231024139[25] = 0;
+ out_5779332085231024139[26] = 0;
+ out_5779332085231024139[27] = 0;
+ out_5779332085231024139[28] = 0;
+ out_5779332085231024139[29] = 0;
+ out_5779332085231024139[30] = 0;
+ out_5779332085231024139[31] = 0;
+ out_5779332085231024139[32] = 0;
+ out_5779332085231024139[33] = 1;
+ out_5779332085231024139[34] = 0;
+ out_5779332085231024139[35] = 0;
+ out_5779332085231024139[36] = 0;
+ out_5779332085231024139[37] = 0;
+ out_5779332085231024139[38] = 0;
+ out_5779332085231024139[39] = 0;
+ out_5779332085231024139[40] = 0;
+ out_5779332085231024139[41] = 0;
+ out_5779332085231024139[42] = 0;
+ out_5779332085231024139[43] = 0;
+ out_5779332085231024139[44] = 0;
+ out_5779332085231024139[45] = 0;
+ out_5779332085231024139[46] = 0;
+ out_5779332085231024139[47] = 0;
+ out_5779332085231024139[48] = 0;
+ out_5779332085231024139[49] = 0;
+ out_5779332085231024139[50] = 0;
+ out_5779332085231024139[51] = 0;
+ out_5779332085231024139[52] = 0;
+ out_5779332085231024139[53] = 0;
+ out_5779332085231024139[54] = 0;
+ out_5779332085231024139[55] = 0;
+ out_5779332085231024139[56] = 1;
+ out_5779332085231024139[57] = 0;
+ out_5779332085231024139[58] = 0;
+ out_5779332085231024139[59] = 0;
+ out_5779332085231024139[60] = 0;
+ out_5779332085231024139[61] = 0;
+ out_5779332085231024139[62] = 0;
+ out_5779332085231024139[63] = 0;
+ out_5779332085231024139[64] = 0;
+ out_5779332085231024139[65] = 0;
}
-void h_10(double *state, double *unused, double *out_5114531167885874097) {
- out_5114531167885874097[0] = 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0] + state[16] + state[19];
- out_5114531167885874097[1] = 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1] + state[17] + state[20];
- out_5114531167885874097[2] = 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[2] + state[18] + state[21];
+void h_10(double *state, double *unused, double *out_3163124755553653720) {
+ out_3163124755553653720[0] = 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0] + state[16] + state[19];
+ out_3163124755553653720[1] = 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2] + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1] + state[17] + state[20];
+ out_3163124755553653720[2] = 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1] + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0] + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[2] + state[18] + state[21];
}
-void H_10(double *state, double *unused, double *out_8901083693322163334) {
- out_8901083693322163334[0] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*pow(state[0], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2));
- out_8901083693322163334[1] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1];
- out_8901083693322163334[2] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[2];
- out_8901083693322163334[3] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5];
- out_8901083693322163334[4] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6];
- out_8901083693322163334[5] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3];
- out_8901083693322163334[6] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4];
- out_8901083693322163334[7] = 0;
- out_8901083693322163334[8] = 0;
- out_8901083693322163334[9] = 0;
- out_8901083693322163334[10] = 0;
- out_8901083693322163334[11] = 0;
- out_8901083693322163334[12] = 0;
- out_8901083693322163334[13] = 0;
- out_8901083693322163334[14] = 0;
- out_8901083693322163334[15] = 0;
- out_8901083693322163334[16] = 1;
- out_8901083693322163334[17] = 0;
- out_8901083693322163334[18] = 0;
- out_8901083693322163334[19] = 1;
- out_8901083693322163334[20] = 0;
- out_8901083693322163334[21] = 0;
- out_8901083693322163334[22] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1];
- out_8901083693322163334[23] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*pow(state[1], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2));
- out_8901083693322163334[24] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1]*state[2];
- out_8901083693322163334[25] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4];
- out_8901083693322163334[26] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3];
- out_8901083693322163334[27] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6];
- out_8901083693322163334[28] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5];
- out_8901083693322163334[29] = 0;
- out_8901083693322163334[30] = 0;
- out_8901083693322163334[31] = 0;
- out_8901083693322163334[32] = 0;
- out_8901083693322163334[33] = 0;
- out_8901083693322163334[34] = 0;
- out_8901083693322163334[35] = 0;
- out_8901083693322163334[36] = 0;
- out_8901083693322163334[37] = 0;
- out_8901083693322163334[38] = 0;
- out_8901083693322163334[39] = 1;
- out_8901083693322163334[40] = 0;
- out_8901083693322163334[41] = 0;
- out_8901083693322163334[42] = 1;
- out_8901083693322163334[43] = 0;
- out_8901083693322163334[44] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[0]*state[2];
- out_8901083693322163334[45] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[1]*state[2];
- out_8901083693322163334[46] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*pow(state[2], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2));
- out_8901083693322163334[47] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3];
- out_8901083693322163334[48] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4];
- out_8901083693322163334[49] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5];
- out_8901083693322163334[50] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6];
- out_8901083693322163334[51] = 0;
- out_8901083693322163334[52] = 0;
- out_8901083693322163334[53] = 0;
- out_8901083693322163334[54] = 0;
- out_8901083693322163334[55] = 0;
- out_8901083693322163334[56] = 0;
- out_8901083693322163334[57] = 0;
- out_8901083693322163334[58] = 0;
- out_8901083693322163334[59] = 0;
- out_8901083693322163334[60] = 0;
- out_8901083693322163334[61] = 0;
- out_8901083693322163334[62] = 1;
- out_8901083693322163334[63] = 0;
- out_8901083693322163334[64] = 0;
- out_8901083693322163334[65] = 1;
+void H_10(double *state, double *unused, double *out_4896893583908803739) {
+ out_4896893583908803739[0] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*pow(state[0], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2));
+ out_4896893583908803739[1] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1];
+ out_4896893583908803739[2] = -1195801500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(-2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[0]*state[2];
+ out_4896893583908803739[3] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5];
+ out_4896893583908803739[4] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6];
+ out_4896893583908803739[5] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3];
+ out_4896893583908803739[6] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4];
+ out_4896893583908803739[7] = 0;
+ out_4896893583908803739[8] = 0;
+ out_4896893583908803739[9] = 0;
+ out_4896893583908803739[10] = 0;
+ out_4896893583908803739[11] = 0;
+ out_4896893583908803739[12] = 0;
+ out_4896893583908803739[13] = 0;
+ out_4896893583908803739[14] = 0;
+ out_4896893583908803739[15] = 0;
+ out_4896893583908803739[16] = 1;
+ out_4896893583908803739[17] = 0;
+ out_4896893583908803739[18] = 0;
+ out_4896893583908803739[19] = 1;
+ out_4896893583908803739[20] = 0;
+ out_4896893583908803739[21] = 0;
+ out_4896893583908803739[22] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[0]*state[1];
+ out_4896893583908803739[23] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*pow(state[1], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2));
+ out_4896893583908803739[24] = -1195801500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[2], 2) + 398600500000000.0*(2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(-2*state[3]*state[6] + 2*state[4]*state[5])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[1]*state[2];
+ out_4896893583908803739[25] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4];
+ out_4896893583908803739[26] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3];
+ out_4896893583908803739[27] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6];
+ out_4896893583908803739[28] = -797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5];
+ out_4896893583908803739[29] = 0;
+ out_4896893583908803739[30] = 0;
+ out_4896893583908803739[31] = 0;
+ out_4896893583908803739[32] = 0;
+ out_4896893583908803739[33] = 0;
+ out_4896893583908803739[34] = 0;
+ out_4896893583908803739[35] = 0;
+ out_4896893583908803739[36] = 0;
+ out_4896893583908803739[37] = 0;
+ out_4896893583908803739[38] = 0;
+ out_4896893583908803739[39] = 1;
+ out_4896893583908803739[40] = 0;
+ out_4896893583908803739[41] = 0;
+ out_4896893583908803739[42] = 1;
+ out_4896893583908803739[43] = 0;
+ out_4896893583908803739[44] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[0], 2) + 398600500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[0]*state[2];
+ out_4896893583908803739[45] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*pow(state[1], 2) + 398600500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5) - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[1] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[1]*state[2];
+ out_4896893583908803739[46] = -1195801500000000.0*(-2*state[3]*state[4] + 2*state[5]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[1]*state[2] - 1195801500000000.0*(2*state[3]*state[5] + 2*state[4]*state[6])*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*state[0]*state[2] - 1195801500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -2.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*pow(state[2], 2) + 398600500000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*(pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2));
+ out_4896893583908803739[47] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[5] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[3];
+ out_4896893583908803739[48] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[3] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[4];
+ out_4896893583908803739[49] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[3] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[6] - 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[5];
+ out_4896893583908803739[50] = 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[0]*state[4] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[1]*state[5] + 797201000000000.0*pow(pow(state[0], 2) + pow(state[1], 2) + pow(state[2], 2), -1.5)*state[2]*state[6];
+ out_4896893583908803739[51] = 0;
+ out_4896893583908803739[52] = 0;
+ out_4896893583908803739[53] = 0;
+ out_4896893583908803739[54] = 0;
+ out_4896893583908803739[55] = 0;
+ out_4896893583908803739[56] = 0;
+ out_4896893583908803739[57] = 0;
+ out_4896893583908803739[58] = 0;
+ out_4896893583908803739[59] = 0;
+ out_4896893583908803739[60] = 0;
+ out_4896893583908803739[61] = 0;
+ out_4896893583908803739[62] = 1;
+ out_4896893583908803739[63] = 0;
+ out_4896893583908803739[64] = 0;
+ out_4896893583908803739[65] = 1;
}
-void h_12(double *state, double *unused, double *out_6249225679190641860) {
- out_6249225679190641860[0] = state[0];
- out_6249225679190641860[1] = state[1];
- out_6249225679190641860[2] = state[2];
+void h_12(double *state, double *unused, double *out_6187507614461106032) {
+ out_6187507614461106032[0] = state[0];
+ out_6187507614461106032[1] = state[1];
+ out_6187507614461106032[2] = state[2];
}
-void H_12(double *state, double *unused, double *out_4374773061262803719) {
- out_4374773061262803719[0] = 1;
- out_4374773061262803719[1] = 0;
- out_4374773061262803719[2] = 0;
- out_4374773061262803719[3] = 0;
- out_4374773061262803719[4] = 0;
- out_4374773061262803719[5] = 0;
- out_4374773061262803719[6] = 0;
- out_4374773061262803719[7] = 0;
- out_4374773061262803719[8] = 0;
- out_4374773061262803719[9] = 0;
- out_4374773061262803719[10] = 0;
- out_4374773061262803719[11] = 0;
- out_4374773061262803719[12] = 0;
- out_4374773061262803719[13] = 0;
- out_4374773061262803719[14] = 0;
- out_4374773061262803719[15] = 0;
- out_4374773061262803719[16] = 0;
- out_4374773061262803719[17] = 0;
- out_4374773061262803719[18] = 0;
- out_4374773061262803719[19] = 0;
- out_4374773061262803719[20] = 0;
- out_4374773061262803719[21] = 0;
- out_4374773061262803719[22] = 0;
- out_4374773061262803719[23] = 1;
- out_4374773061262803719[24] = 0;
- out_4374773061262803719[25] = 0;
- out_4374773061262803719[26] = 0;
- out_4374773061262803719[27] = 0;
- out_4374773061262803719[28] = 0;
- out_4374773061262803719[29] = 0;
- out_4374773061262803719[30] = 0;
- out_4374773061262803719[31] = 0;
- out_4374773061262803719[32] = 0;
- out_4374773061262803719[33] = 0;
- out_4374773061262803719[34] = 0;
- out_4374773061262803719[35] = 0;
- out_4374773061262803719[36] = 0;
- out_4374773061262803719[37] = 0;
- out_4374773061262803719[38] = 0;
- out_4374773061262803719[39] = 0;
- out_4374773061262803719[40] = 0;
- out_4374773061262803719[41] = 0;
- out_4374773061262803719[42] = 0;
- out_4374773061262803719[43] = 0;
- out_4374773061262803719[44] = 0;
- out_4374773061262803719[45] = 0;
- out_4374773061262803719[46] = 1;
- out_4374773061262803719[47] = 0;
- out_4374773061262803719[48] = 0;
- out_4374773061262803719[49] = 0;
- out_4374773061262803719[50] = 0;
- out_4374773061262803719[51] = 0;
- out_4374773061262803719[52] = 0;
- out_4374773061262803719[53] = 0;
- out_4374773061262803719[54] = 0;
- out_4374773061262803719[55] = 0;
- out_4374773061262803719[56] = 0;
- out_4374773061262803719[57] = 0;
- out_4374773061262803719[58] = 0;
- out_4374773061262803719[59] = 0;
- out_4374773061262803719[60] = 0;
- out_4374773061262803719[61] = 0;
- out_4374773061262803719[62] = 0;
- out_4374773061262803719[63] = 0;
- out_4374773061262803719[64] = 0;
- out_4374773061262803719[65] = 0;
+void H_12(double *state, double *unused, double *out_7889145227076156327) {
+ out_7889145227076156327[0] = 1;
+ out_7889145227076156327[1] = 0;
+ out_7889145227076156327[2] = 0;
+ out_7889145227076156327[3] = 0;
+ out_7889145227076156327[4] = 0;
+ out_7889145227076156327[5] = 0;
+ out_7889145227076156327[6] = 0;
+ out_7889145227076156327[7] = 0;
+ out_7889145227076156327[8] = 0;
+ out_7889145227076156327[9] = 0;
+ out_7889145227076156327[10] = 0;
+ out_7889145227076156327[11] = 0;
+ out_7889145227076156327[12] = 0;
+ out_7889145227076156327[13] = 0;
+ out_7889145227076156327[14] = 0;
+ out_7889145227076156327[15] = 0;
+ out_7889145227076156327[16] = 0;
+ out_7889145227076156327[17] = 0;
+ out_7889145227076156327[18] = 0;
+ out_7889145227076156327[19] = 0;
+ out_7889145227076156327[20] = 0;
+ out_7889145227076156327[21] = 0;
+ out_7889145227076156327[22] = 0;
+ out_7889145227076156327[23] = 1;
+ out_7889145227076156327[24] = 0;
+ out_7889145227076156327[25] = 0;
+ out_7889145227076156327[26] = 0;
+ out_7889145227076156327[27] = 0;
+ out_7889145227076156327[28] = 0;
+ out_7889145227076156327[29] = 0;
+ out_7889145227076156327[30] = 0;
+ out_7889145227076156327[31] = 0;
+ out_7889145227076156327[32] = 0;
+ out_7889145227076156327[33] = 0;
+ out_7889145227076156327[34] = 0;
+ out_7889145227076156327[35] = 0;
+ out_7889145227076156327[36] = 0;
+ out_7889145227076156327[37] = 0;
+ out_7889145227076156327[38] = 0;
+ out_7889145227076156327[39] = 0;
+ out_7889145227076156327[40] = 0;
+ out_7889145227076156327[41] = 0;
+ out_7889145227076156327[42] = 0;
+ out_7889145227076156327[43] = 0;
+ out_7889145227076156327[44] = 0;
+ out_7889145227076156327[45] = 0;
+ out_7889145227076156327[46] = 1;
+ out_7889145227076156327[47] = 0;
+ out_7889145227076156327[48] = 0;
+ out_7889145227076156327[49] = 0;
+ out_7889145227076156327[50] = 0;
+ out_7889145227076156327[51] = 0;
+ out_7889145227076156327[52] = 0;
+ out_7889145227076156327[53] = 0;
+ out_7889145227076156327[54] = 0;
+ out_7889145227076156327[55] = 0;
+ out_7889145227076156327[56] = 0;
+ out_7889145227076156327[57] = 0;
+ out_7889145227076156327[58] = 0;
+ out_7889145227076156327[59] = 0;
+ out_7889145227076156327[60] = 0;
+ out_7889145227076156327[61] = 0;
+ out_7889145227076156327[62] = 0;
+ out_7889145227076156327[63] = 0;
+ out_7889145227076156327[64] = 0;
+ out_7889145227076156327[65] = 0;
}
-void h_35(double *state, double *unused, double *out_5751710703471722702) {
- out_5751710703471722702[0] = state[7];
- out_5751710703471722702[1] = state[8];
- out_5751710703471722702[2] = state[9];
+void h_35(double *state, double *unused, double *out_4266066339955691863) {
+ out_4266066339955691863[0] = state[7];
+ out_4266066339955691863[1] = state[8];
+ out_4266066339955691863[2] = state[9];
}
-void H_35(double *state, double *unused, double *out_1629210028937790010) {
- out_1629210028937790010[0] = 0;
- out_1629210028937790010[1] = 0;
- out_1629210028937790010[2] = 0;
- out_1629210028937790010[3] = 0;
- out_1629210028937790010[4] = 0;
- out_1629210028937790010[5] = 0;
- out_1629210028937790010[6] = 0;
- out_1629210028937790010[7] = 1;
- out_1629210028937790010[8] = 0;
- out_1629210028937790010[9] = 0;
- out_1629210028937790010[10] = 0;
- out_1629210028937790010[11] = 0;
- out_1629210028937790010[12] = 0;
- out_1629210028937790010[13] = 0;
- out_1629210028937790010[14] = 0;
- out_1629210028937790010[15] = 0;
- out_1629210028937790010[16] = 0;
- out_1629210028937790010[17] = 0;
- out_1629210028937790010[18] = 0;
- out_1629210028937790010[19] = 0;
- out_1629210028937790010[20] = 0;
- out_1629210028937790010[21] = 0;
- out_1629210028937790010[22] = 0;
- out_1629210028937790010[23] = 0;
- out_1629210028937790010[24] = 0;
- out_1629210028937790010[25] = 0;
- out_1629210028937790010[26] = 0;
- out_1629210028937790010[27] = 0;
- out_1629210028937790010[28] = 0;
- out_1629210028937790010[29] = 0;
- out_1629210028937790010[30] = 1;
- out_1629210028937790010[31] = 0;
- out_1629210028937790010[32] = 0;
- out_1629210028937790010[33] = 0;
- out_1629210028937790010[34] = 0;
- out_1629210028937790010[35] = 0;
- out_1629210028937790010[36] = 0;
- out_1629210028937790010[37] = 0;
- out_1629210028937790010[38] = 0;
- out_1629210028937790010[39] = 0;
- out_1629210028937790010[40] = 0;
- out_1629210028937790010[41] = 0;
- out_1629210028937790010[42] = 0;
- out_1629210028937790010[43] = 0;
- out_1629210028937790010[44] = 0;
- out_1629210028937790010[45] = 0;
- out_1629210028937790010[46] = 0;
- out_1629210028937790010[47] = 0;
- out_1629210028937790010[48] = 0;
- out_1629210028937790010[49] = 0;
- out_1629210028937790010[50] = 0;
- out_1629210028937790010[51] = 0;
- out_1629210028937790010[52] = 0;
- out_1629210028937790010[53] = 1;
- out_1629210028937790010[54] = 0;
- out_1629210028937790010[55] = 0;
- out_1629210028937790010[56] = 0;
- out_1629210028937790010[57] = 0;
- out_1629210028937790010[58] = 0;
- out_1629210028937790010[59] = 0;
- out_1629210028937790010[60] = 0;
- out_1629210028937790010[61] = 0;
- out_1629210028937790010[62] = 0;
- out_1629210028937790010[63] = 0;
- out_1629210028937790010[64] = 0;
- out_1629210028937790010[65] = 0;
+void H_35(double *state, double *unused, double *out_5143582194751142618) {
+ out_5143582194751142618[0] = 0;
+ out_5143582194751142618[1] = 0;
+ out_5143582194751142618[2] = 0;
+ out_5143582194751142618[3] = 0;
+ out_5143582194751142618[4] = 0;
+ out_5143582194751142618[5] = 0;
+ out_5143582194751142618[6] = 0;
+ out_5143582194751142618[7] = 1;
+ out_5143582194751142618[8] = 0;
+ out_5143582194751142618[9] = 0;
+ out_5143582194751142618[10] = 0;
+ out_5143582194751142618[11] = 0;
+ out_5143582194751142618[12] = 0;
+ out_5143582194751142618[13] = 0;
+ out_5143582194751142618[14] = 0;
+ out_5143582194751142618[15] = 0;
+ out_5143582194751142618[16] = 0;
+ out_5143582194751142618[17] = 0;
+ out_5143582194751142618[18] = 0;
+ out_5143582194751142618[19] = 0;
+ out_5143582194751142618[20] = 0;
+ out_5143582194751142618[21] = 0;
+ out_5143582194751142618[22] = 0;
+ out_5143582194751142618[23] = 0;
+ out_5143582194751142618[24] = 0;
+ out_5143582194751142618[25] = 0;
+ out_5143582194751142618[26] = 0;
+ out_5143582194751142618[27] = 0;
+ out_5143582194751142618[28] = 0;
+ out_5143582194751142618[29] = 0;
+ out_5143582194751142618[30] = 1;
+ out_5143582194751142618[31] = 0;
+ out_5143582194751142618[32] = 0;
+ out_5143582194751142618[33] = 0;
+ out_5143582194751142618[34] = 0;
+ out_5143582194751142618[35] = 0;
+ out_5143582194751142618[36] = 0;
+ out_5143582194751142618[37] = 0;
+ out_5143582194751142618[38] = 0;
+ out_5143582194751142618[39] = 0;
+ out_5143582194751142618[40] = 0;
+ out_5143582194751142618[41] = 0;
+ out_5143582194751142618[42] = 0;
+ out_5143582194751142618[43] = 0;
+ out_5143582194751142618[44] = 0;
+ out_5143582194751142618[45] = 0;
+ out_5143582194751142618[46] = 0;
+ out_5143582194751142618[47] = 0;
+ out_5143582194751142618[48] = 0;
+ out_5143582194751142618[49] = 0;
+ out_5143582194751142618[50] = 0;
+ out_5143582194751142618[51] = 0;
+ out_5143582194751142618[52] = 0;
+ out_5143582194751142618[53] = 1;
+ out_5143582194751142618[54] = 0;
+ out_5143582194751142618[55] = 0;
+ out_5143582194751142618[56] = 0;
+ out_5143582194751142618[57] = 0;
+ out_5143582194751142618[58] = 0;
+ out_5143582194751142618[59] = 0;
+ out_5143582194751142618[60] = 0;
+ out_5143582194751142618[61] = 0;
+ out_5143582194751142618[62] = 0;
+ out_5143582194751142618[63] = 0;
+ out_5143582194751142618[64] = 0;
+ out_5143582194751142618[65] = 0;
}
-void h_32(double *state, double *unused, double *out_7960850640984836266) {
- out_7960850640984836266[0] = state[3];
- out_7960850640984836266[1] = state[4];
- out_7960850640984836266[2] = state[5];
- out_7960850640984836266[3] = state[6];
+void h_32(double *state, double *unused, double *out_9055313354289894635) {
+ out_9055313354289894635[0] = state[3];
+ out_9055313354289894635[1] = state[4];
+ out_9055313354289894635[2] = state[5];
+ out_9055313354289894635[3] = state[6];
}
-void H_32(double *state, double *unused, double *out_8200477424115484408) {
- out_8200477424115484408[0] = 0;
- out_8200477424115484408[1] = 0;
- out_8200477424115484408[2] = 0;
- out_8200477424115484408[3] = 1;
- out_8200477424115484408[4] = 0;
- out_8200477424115484408[5] = 0;
- out_8200477424115484408[6] = 0;
- out_8200477424115484408[7] = 0;
- out_8200477424115484408[8] = 0;
- out_8200477424115484408[9] = 0;
- out_8200477424115484408[10] = 0;
- out_8200477424115484408[11] = 0;
- out_8200477424115484408[12] = 0;
- out_8200477424115484408[13] = 0;
- out_8200477424115484408[14] = 0;
- out_8200477424115484408[15] = 0;
- out_8200477424115484408[16] = 0;
- out_8200477424115484408[17] = 0;
- out_8200477424115484408[18] = 0;
- out_8200477424115484408[19] = 0;
- out_8200477424115484408[20] = 0;
- out_8200477424115484408[21] = 0;
- out_8200477424115484408[22] = 0;
- out_8200477424115484408[23] = 0;
- out_8200477424115484408[24] = 0;
- out_8200477424115484408[25] = 0;
- out_8200477424115484408[26] = 1;
- out_8200477424115484408[27] = 0;
- out_8200477424115484408[28] = 0;
- out_8200477424115484408[29] = 0;
- out_8200477424115484408[30] = 0;
- out_8200477424115484408[31] = 0;
- out_8200477424115484408[32] = 0;
- out_8200477424115484408[33] = 0;
- out_8200477424115484408[34] = 0;
- out_8200477424115484408[35] = 0;
- out_8200477424115484408[36] = 0;
- out_8200477424115484408[37] = 0;
- out_8200477424115484408[38] = 0;
- out_8200477424115484408[39] = 0;
- out_8200477424115484408[40] = 0;
- out_8200477424115484408[41] = 0;
- out_8200477424115484408[42] = 0;
- out_8200477424115484408[43] = 0;
- out_8200477424115484408[44] = 0;
- out_8200477424115484408[45] = 0;
- out_8200477424115484408[46] = 0;
- out_8200477424115484408[47] = 0;
- out_8200477424115484408[48] = 0;
- out_8200477424115484408[49] = 1;
- out_8200477424115484408[50] = 0;
- out_8200477424115484408[51] = 0;
- out_8200477424115484408[52] = 0;
- out_8200477424115484408[53] = 0;
- out_8200477424115484408[54] = 0;
- out_8200477424115484408[55] = 0;
- out_8200477424115484408[56] = 0;
- out_8200477424115484408[57] = 0;
- out_8200477424115484408[58] = 0;
- out_8200477424115484408[59] = 0;
- out_8200477424115484408[60] = 0;
- out_8200477424115484408[61] = 0;
- out_8200477424115484408[62] = 0;
- out_8200477424115484408[63] = 0;
- out_8200477424115484408[64] = 0;
- out_8200477424115484408[65] = 0;
- out_8200477424115484408[66] = 0;
- out_8200477424115484408[67] = 0;
- out_8200477424115484408[68] = 0;
- out_8200477424115484408[69] = 0;
- out_8200477424115484408[70] = 0;
- out_8200477424115484408[71] = 0;
- out_8200477424115484408[72] = 1;
- out_8200477424115484408[73] = 0;
- out_8200477424115484408[74] = 0;
- out_8200477424115484408[75] = 0;
- out_8200477424115484408[76] = 0;
- out_8200477424115484408[77] = 0;
- out_8200477424115484408[78] = 0;
- out_8200477424115484408[79] = 0;
- out_8200477424115484408[80] = 0;
- out_8200477424115484408[81] = 0;
- out_8200477424115484408[82] = 0;
- out_8200477424115484408[83] = 0;
- out_8200477424115484408[84] = 0;
- out_8200477424115484408[85] = 0;
- out_8200477424115484408[86] = 0;
- out_8200477424115484408[87] = 0;
+void H_32(double *state, double *unused, double *out_6388297375264292642) {
+ out_6388297375264292642[0] = 0;
+ out_6388297375264292642[1] = 0;
+ out_6388297375264292642[2] = 0;
+ out_6388297375264292642[3] = 1;
+ out_6388297375264292642[4] = 0;
+ out_6388297375264292642[5] = 0;
+ out_6388297375264292642[6] = 0;
+ out_6388297375264292642[7] = 0;
+ out_6388297375264292642[8] = 0;
+ out_6388297375264292642[9] = 0;
+ out_6388297375264292642[10] = 0;
+ out_6388297375264292642[11] = 0;
+ out_6388297375264292642[12] = 0;
+ out_6388297375264292642[13] = 0;
+ out_6388297375264292642[14] = 0;
+ out_6388297375264292642[15] = 0;
+ out_6388297375264292642[16] = 0;
+ out_6388297375264292642[17] = 0;
+ out_6388297375264292642[18] = 0;
+ out_6388297375264292642[19] = 0;
+ out_6388297375264292642[20] = 0;
+ out_6388297375264292642[21] = 0;
+ out_6388297375264292642[22] = 0;
+ out_6388297375264292642[23] = 0;
+ out_6388297375264292642[24] = 0;
+ out_6388297375264292642[25] = 0;
+ out_6388297375264292642[26] = 1;
+ out_6388297375264292642[27] = 0;
+ out_6388297375264292642[28] = 0;
+ out_6388297375264292642[29] = 0;
+ out_6388297375264292642[30] = 0;
+ out_6388297375264292642[31] = 0;
+ out_6388297375264292642[32] = 0;
+ out_6388297375264292642[33] = 0;
+ out_6388297375264292642[34] = 0;
+ out_6388297375264292642[35] = 0;
+ out_6388297375264292642[36] = 0;
+ out_6388297375264292642[37] = 0;
+ out_6388297375264292642[38] = 0;
+ out_6388297375264292642[39] = 0;
+ out_6388297375264292642[40] = 0;
+ out_6388297375264292642[41] = 0;
+ out_6388297375264292642[42] = 0;
+ out_6388297375264292642[43] = 0;
+ out_6388297375264292642[44] = 0;
+ out_6388297375264292642[45] = 0;
+ out_6388297375264292642[46] = 0;
+ out_6388297375264292642[47] = 0;
+ out_6388297375264292642[48] = 0;
+ out_6388297375264292642[49] = 1;
+ out_6388297375264292642[50] = 0;
+ out_6388297375264292642[51] = 0;
+ out_6388297375264292642[52] = 0;
+ out_6388297375264292642[53] = 0;
+ out_6388297375264292642[54] = 0;
+ out_6388297375264292642[55] = 0;
+ out_6388297375264292642[56] = 0;
+ out_6388297375264292642[57] = 0;
+ out_6388297375264292642[58] = 0;
+ out_6388297375264292642[59] = 0;
+ out_6388297375264292642[60] = 0;
+ out_6388297375264292642[61] = 0;
+ out_6388297375264292642[62] = 0;
+ out_6388297375264292642[63] = 0;
+ out_6388297375264292642[64] = 0;
+ out_6388297375264292642[65] = 0;
+ out_6388297375264292642[66] = 0;
+ out_6388297375264292642[67] = 0;
+ out_6388297375264292642[68] = 0;
+ out_6388297375264292642[69] = 0;
+ out_6388297375264292642[70] = 0;
+ out_6388297375264292642[71] = 0;
+ out_6388297375264292642[72] = 1;
+ out_6388297375264292642[73] = 0;
+ out_6388297375264292642[74] = 0;
+ out_6388297375264292642[75] = 0;
+ out_6388297375264292642[76] = 0;
+ out_6388297375264292642[77] = 0;
+ out_6388297375264292642[78] = 0;
+ out_6388297375264292642[79] = 0;
+ out_6388297375264292642[80] = 0;
+ out_6388297375264292642[81] = 0;
+ out_6388297375264292642[82] = 0;
+ out_6388297375264292642[83] = 0;
+ out_6388297375264292642[84] = 0;
+ out_6388297375264292642[85] = 0;
+ out_6388297375264292642[86] = 0;
+ out_6388297375264292642[87] = 0;
}
-void h_13(double *state, double *unused, double *out_2913105661532148231) {
- out_2913105661532148231[0] = (-2*state[3]*state[5] + 2*state[4]*state[6])*state[9] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[8] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[7];
- out_2913105661532148231[1] = (2*state[3]*state[4] + 2*state[5]*state[6])*state[9] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[7] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[8];
- out_2913105661532148231[2] = (-2*state[3]*state[4] + 2*state[5]*state[6])*state[8] + (2*state[3]*state[5] + 2*state[4]*state[6])*state[7] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[9];
+void h_13(double *state, double *unused, double *out_7078564321862276630) {
+ out_7078564321862276630[0] = (-2*state[3]*state[5] + 2*state[4]*state[6])*state[9] + (2*state[3]*state[6] + 2*state[4]*state[5])*state[8] + (pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2))*state[7];
+ out_7078564321862276630[1] = (2*state[3]*state[4] + 2*state[5]*state[6])*state[9] + (-2*state[3]*state[6] + 2*state[4]*state[5])*state[7] + (pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2))*state[8];
+ out_7078564321862276630[2] = (-2*state[3]*state[4] + 2*state[5]*state[6])*state[8] + (2*state[3]*state[5] + 2*state[4]*state[6])*state[7] + (pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2))*state[9];
}
-void H_13(double *state, double *unused, double *out_6442117529364745675) {
- out_6442117529364745675[0] = 0;
- out_6442117529364745675[1] = 0;
- out_6442117529364745675[2] = 0;
- out_6442117529364745675[3] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8];
- out_6442117529364745675[4] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9];
- out_6442117529364745675[5] = -2*state[3]*state[9] + 2*state[4]*state[8] - 2*state[5]*state[7];
- out_6442117529364745675[6] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7];
- out_6442117529364745675[7] = pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2);
- out_6442117529364745675[8] = 2*state[3]*state[6] + 2*state[4]*state[5];
- out_6442117529364745675[9] = -2*state[3]*state[5] + 2*state[4]*state[6];
- out_6442117529364745675[10] = 0;
- out_6442117529364745675[11] = 0;
- out_6442117529364745675[12] = 0;
- out_6442117529364745675[13] = 0;
- out_6442117529364745675[14] = 0;
- out_6442117529364745675[15] = 0;
- out_6442117529364745675[16] = 0;
- out_6442117529364745675[17] = 0;
- out_6442117529364745675[18] = 0;
- out_6442117529364745675[19] = 0;
- out_6442117529364745675[20] = 0;
- out_6442117529364745675[21] = 0;
- out_6442117529364745675[22] = 0;
- out_6442117529364745675[23] = 0;
- out_6442117529364745675[24] = 0;
- out_6442117529364745675[25] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7];
- out_6442117529364745675[26] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7];
- out_6442117529364745675[27] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9];
- out_6442117529364745675[28] = -2*state[3]*state[7] + 2*state[5]*state[9] - 2*state[6]*state[8];
- out_6442117529364745675[29] = -2*state[3]*state[6] + 2*state[4]*state[5];
- out_6442117529364745675[30] = pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2);
- out_6442117529364745675[31] = 2*state[3]*state[4] + 2*state[5]*state[6];
- out_6442117529364745675[32] = 0;
- out_6442117529364745675[33] = 0;
- out_6442117529364745675[34] = 0;
- out_6442117529364745675[35] = 0;
- out_6442117529364745675[36] = 0;
- out_6442117529364745675[37] = 0;
- out_6442117529364745675[38] = 0;
- out_6442117529364745675[39] = 0;
- out_6442117529364745675[40] = 0;
- out_6442117529364745675[41] = 0;
- out_6442117529364745675[42] = 0;
- out_6442117529364745675[43] = 0;
- out_6442117529364745675[44] = 0;
- out_6442117529364745675[45] = 0;
- out_6442117529364745675[46] = 0;
- out_6442117529364745675[47] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7];
- out_6442117529364745675[48] = -2*state[3]*state[8] - 2*state[4]*state[9] + 2*state[6]*state[7];
- out_6442117529364745675[49] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8];
- out_6442117529364745675[50] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9];
- out_6442117529364745675[51] = 2*state[3]*state[5] + 2*state[4]*state[6];
- out_6442117529364745675[52] = -2*state[3]*state[4] + 2*state[5]*state[6];
- out_6442117529364745675[53] = pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2);
- out_6442117529364745675[54] = 0;
- out_6442117529364745675[55] = 0;
- out_6442117529364745675[56] = 0;
- out_6442117529364745675[57] = 0;
- out_6442117529364745675[58] = 0;
- out_6442117529364745675[59] = 0;
- out_6442117529364745675[60] = 0;
- out_6442117529364745675[61] = 0;
- out_6442117529364745675[62] = 0;
- out_6442117529364745675[63] = 0;
- out_6442117529364745675[64] = 0;
- out_6442117529364745675[65] = 0;
+void H_13(double *state, double *unused, double *out_7646665591930494052) {
+ out_7646665591930494052[0] = 0;
+ out_7646665591930494052[1] = 0;
+ out_7646665591930494052[2] = 0;
+ out_7646665591930494052[3] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8];
+ out_7646665591930494052[4] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9];
+ out_7646665591930494052[5] = -2*state[3]*state[9] + 2*state[4]*state[8] - 2*state[5]*state[7];
+ out_7646665591930494052[6] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7];
+ out_7646665591930494052[7] = pow(state[3], 2) + pow(state[4], 2) - pow(state[5], 2) - pow(state[6], 2);
+ out_7646665591930494052[8] = 2*state[3]*state[6] + 2*state[4]*state[5];
+ out_7646665591930494052[9] = -2*state[3]*state[5] + 2*state[4]*state[6];
+ out_7646665591930494052[10] = 0;
+ out_7646665591930494052[11] = 0;
+ out_7646665591930494052[12] = 0;
+ out_7646665591930494052[13] = 0;
+ out_7646665591930494052[14] = 0;
+ out_7646665591930494052[15] = 0;
+ out_7646665591930494052[16] = 0;
+ out_7646665591930494052[17] = 0;
+ out_7646665591930494052[18] = 0;
+ out_7646665591930494052[19] = 0;
+ out_7646665591930494052[20] = 0;
+ out_7646665591930494052[21] = 0;
+ out_7646665591930494052[22] = 0;
+ out_7646665591930494052[23] = 0;
+ out_7646665591930494052[24] = 0;
+ out_7646665591930494052[25] = 2*state[3]*state[8] + 2*state[4]*state[9] - 2*state[6]*state[7];
+ out_7646665591930494052[26] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7];
+ out_7646665591930494052[27] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9];
+ out_7646665591930494052[28] = -2*state[3]*state[7] + 2*state[5]*state[9] - 2*state[6]*state[8];
+ out_7646665591930494052[29] = -2*state[3]*state[6] + 2*state[4]*state[5];
+ out_7646665591930494052[30] = pow(state[3], 2) - pow(state[4], 2) + pow(state[5], 2) - pow(state[6], 2);
+ out_7646665591930494052[31] = 2*state[3]*state[4] + 2*state[5]*state[6];
+ out_7646665591930494052[32] = 0;
+ out_7646665591930494052[33] = 0;
+ out_7646665591930494052[34] = 0;
+ out_7646665591930494052[35] = 0;
+ out_7646665591930494052[36] = 0;
+ out_7646665591930494052[37] = 0;
+ out_7646665591930494052[38] = 0;
+ out_7646665591930494052[39] = 0;
+ out_7646665591930494052[40] = 0;
+ out_7646665591930494052[41] = 0;
+ out_7646665591930494052[42] = 0;
+ out_7646665591930494052[43] = 0;
+ out_7646665591930494052[44] = 0;
+ out_7646665591930494052[45] = 0;
+ out_7646665591930494052[46] = 0;
+ out_7646665591930494052[47] = 2*state[3]*state[9] - 2*state[4]*state[8] + 2*state[5]*state[7];
+ out_7646665591930494052[48] = -2*state[3]*state[8] - 2*state[4]*state[9] + 2*state[6]*state[7];
+ out_7646665591930494052[49] = 2*state[3]*state[7] - 2*state[5]*state[9] + 2*state[6]*state[8];
+ out_7646665591930494052[50] = 2*state[4]*state[7] + 2*state[5]*state[8] + 2*state[6]*state[9];
+ out_7646665591930494052[51] = 2*state[3]*state[5] + 2*state[4]*state[6];
+ out_7646665591930494052[52] = -2*state[3]*state[4] + 2*state[5]*state[6];
+ out_7646665591930494052[53] = pow(state[3], 2) - pow(state[4], 2) - pow(state[5], 2) + pow(state[6], 2);
+ out_7646665591930494052[54] = 0;
+ out_7646665591930494052[55] = 0;
+ out_7646665591930494052[56] = 0;
+ out_7646665591930494052[57] = 0;
+ out_7646665591930494052[58] = 0;
+ out_7646665591930494052[59] = 0;
+ out_7646665591930494052[60] = 0;
+ out_7646665591930494052[61] = 0;
+ out_7646665591930494052[62] = 0;
+ out_7646665591930494052[63] = 0;
+ out_7646665591930494052[64] = 0;
+ out_7646665591930494052[65] = 0;
}
-void h_14(double *state, double *unused, double *out_4670376777294811307) {
- out_4670376777294811307[0] = state[10];
- out_4670376777294811307[1] = state[11];
- out_4670376777294811307[2] = state[12];
+void h_14(double *state, double *unused, double *out_7169843762143865122) {
+ out_7169843762143865122[0] = state[10];
+ out_7169843762143865122[1] = state[11];
+ out_7169843762143865122[2] = state[12];
}
-void H_14(double *state, double *unused, double *out_9153039822665174869) {
- out_9153039822665174869[0] = 0;
- out_9153039822665174869[1] = 0;
- out_9153039822665174869[2] = 0;
- out_9153039822665174869[3] = 0;
- out_9153039822665174869[4] = 0;
- out_9153039822665174869[5] = 0;
- out_9153039822665174869[6] = 0;
- out_9153039822665174869[7] = 0;
- out_9153039822665174869[8] = 0;
- out_9153039822665174869[9] = 0;
- out_9153039822665174869[10] = 1;
- out_9153039822665174869[11] = 0;
- out_9153039822665174869[12] = 0;
- out_9153039822665174869[13] = 0;
- out_9153039822665174869[14] = 0;
- out_9153039822665174869[15] = 0;
- out_9153039822665174869[16] = 0;
- out_9153039822665174869[17] = 0;
- out_9153039822665174869[18] = 0;
- out_9153039822665174869[19] = 0;
- out_9153039822665174869[20] = 0;
- out_9153039822665174869[21] = 0;
- out_9153039822665174869[22] = 0;
- out_9153039822665174869[23] = 0;
- out_9153039822665174869[24] = 0;
- out_9153039822665174869[25] = 0;
- out_9153039822665174869[26] = 0;
- out_9153039822665174869[27] = 0;
- out_9153039822665174869[28] = 0;
- out_9153039822665174869[29] = 0;
- out_9153039822665174869[30] = 0;
- out_9153039822665174869[31] = 0;
- out_9153039822665174869[32] = 0;
- out_9153039822665174869[33] = 1;
- out_9153039822665174869[34] = 0;
- out_9153039822665174869[35] = 0;
- out_9153039822665174869[36] = 0;
- out_9153039822665174869[37] = 0;
- out_9153039822665174869[38] = 0;
- out_9153039822665174869[39] = 0;
- out_9153039822665174869[40] = 0;
- out_9153039822665174869[41] = 0;
- out_9153039822665174869[42] = 0;
- out_9153039822665174869[43] = 0;
- out_9153039822665174869[44] = 0;
- out_9153039822665174869[45] = 0;
- out_9153039822665174869[46] = 0;
- out_9153039822665174869[47] = 0;
- out_9153039822665174869[48] = 0;
- out_9153039822665174869[49] = 0;
- out_9153039822665174869[50] = 0;
- out_9153039822665174869[51] = 0;
- out_9153039822665174869[52] = 0;
- out_9153039822665174869[53] = 0;
- out_9153039822665174869[54] = 0;
- out_9153039822665174869[55] = 0;
- out_9153039822665174869[56] = 1;
- out_9153039822665174869[57] = 0;
- out_9153039822665174869[58] = 0;
- out_9153039822665174869[59] = 0;
- out_9153039822665174869[60] = 0;
- out_9153039822665174869[61] = 0;
- out_9153039822665174869[62] = 0;
- out_9153039822665174869[63] = 0;
- out_9153039822665174869[64] = 0;
- out_9153039822665174869[65] = 0;
+void H_14(double *state, double *unused, double *out_5779332085231024139) {
+ out_5779332085231024139[0] = 0;
+ out_5779332085231024139[1] = 0;
+ out_5779332085231024139[2] = 0;
+ out_5779332085231024139[3] = 0;
+ out_5779332085231024139[4] = 0;
+ out_5779332085231024139[5] = 0;
+ out_5779332085231024139[6] = 0;
+ out_5779332085231024139[7] = 0;
+ out_5779332085231024139[8] = 0;
+ out_5779332085231024139[9] = 0;
+ out_5779332085231024139[10] = 1;
+ out_5779332085231024139[11] = 0;
+ out_5779332085231024139[12] = 0;
+ out_5779332085231024139[13] = 0;
+ out_5779332085231024139[14] = 0;
+ out_5779332085231024139[15] = 0;
+ out_5779332085231024139[16] = 0;
+ out_5779332085231024139[17] = 0;
+ out_5779332085231024139[18] = 0;
+ out_5779332085231024139[19] = 0;
+ out_5779332085231024139[20] = 0;
+ out_5779332085231024139[21] = 0;
+ out_5779332085231024139[22] = 0;
+ out_5779332085231024139[23] = 0;
+ out_5779332085231024139[24] = 0;
+ out_5779332085231024139[25] = 0;
+ out_5779332085231024139[26] = 0;
+ out_5779332085231024139[27] = 0;
+ out_5779332085231024139[28] = 0;
+ out_5779332085231024139[29] = 0;
+ out_5779332085231024139[30] = 0;
+ out_5779332085231024139[31] = 0;
+ out_5779332085231024139[32] = 0;
+ out_5779332085231024139[33] = 1;
+ out_5779332085231024139[34] = 0;
+ out_5779332085231024139[35] = 0;
+ out_5779332085231024139[36] = 0;
+ out_5779332085231024139[37] = 0;
+ out_5779332085231024139[38] = 0;
+ out_5779332085231024139[39] = 0;
+ out_5779332085231024139[40] = 0;
+ out_5779332085231024139[41] = 0;
+ out_5779332085231024139[42] = 0;
+ out_5779332085231024139[43] = 0;
+ out_5779332085231024139[44] = 0;
+ out_5779332085231024139[45] = 0;
+ out_5779332085231024139[46] = 0;
+ out_5779332085231024139[47] = 0;
+ out_5779332085231024139[48] = 0;
+ out_5779332085231024139[49] = 0;
+ out_5779332085231024139[50] = 0;
+ out_5779332085231024139[51] = 0;
+ out_5779332085231024139[52] = 0;
+ out_5779332085231024139[53] = 0;
+ out_5779332085231024139[54] = 0;
+ out_5779332085231024139[55] = 0;
+ out_5779332085231024139[56] = 1;
+ out_5779332085231024139[57] = 0;
+ out_5779332085231024139[58] = 0;
+ out_5779332085231024139[59] = 0;
+ out_5779332085231024139[60] = 0;
+ out_5779332085231024139[61] = 0;
+ out_5779332085231024139[62] = 0;
+ out_5779332085231024139[63] = 0;
+ out_5779332085231024139[64] = 0;
+ out_5779332085231024139[65] = 0;
}
-void h_33(double *state, double *unused, double *out_3733937587285700568) {
- out_3733937587285700568[0] = state[16];
- out_3733937587285700568[1] = state[17];
- out_3733937587285700568[2] = state[18];
+void h_33(double *state, double *unused, double *out_3878198370963190653) {
+ out_3878198370963190653[0] = state[16];
+ out_3878198370963190653[1] = state[17];
+ out_3878198370963190653[2] = state[18];
}
-void H_33(double *state, double *unused, double *out_1521346975701067594) {
- out_1521346975701067594[0] = 0;
- out_1521346975701067594[1] = 0;
- out_1521346975701067594[2] = 0;
- out_1521346975701067594[3] = 0;
- out_1521346975701067594[4] = 0;
- out_1521346975701067594[5] = 0;
- out_1521346975701067594[6] = 0;
- out_1521346975701067594[7] = 0;
- out_1521346975701067594[8] = 0;
- out_1521346975701067594[9] = 0;
- out_1521346975701067594[10] = 0;
- out_1521346975701067594[11] = 0;
- out_1521346975701067594[12] = 0;
- out_1521346975701067594[13] = 0;
- out_1521346975701067594[14] = 0;
- out_1521346975701067594[15] = 0;
- out_1521346975701067594[16] = 1;
- out_1521346975701067594[17] = 0;
- out_1521346975701067594[18] = 0;
- out_1521346975701067594[19] = 0;
- out_1521346975701067594[20] = 0;
- out_1521346975701067594[21] = 0;
- out_1521346975701067594[22] = 0;
- out_1521346975701067594[23] = 0;
- out_1521346975701067594[24] = 0;
- out_1521346975701067594[25] = 0;
- out_1521346975701067594[26] = 0;
- out_1521346975701067594[27] = 0;
- out_1521346975701067594[28] = 0;
- out_1521346975701067594[29] = 0;
- out_1521346975701067594[30] = 0;
- out_1521346975701067594[31] = 0;
- out_1521346975701067594[32] = 0;
- out_1521346975701067594[33] = 0;
- out_1521346975701067594[34] = 0;
- out_1521346975701067594[35] = 0;
- out_1521346975701067594[36] = 0;
- out_1521346975701067594[37] = 0;
- out_1521346975701067594[38] = 0;
- out_1521346975701067594[39] = 1;
- out_1521346975701067594[40] = 0;
- out_1521346975701067594[41] = 0;
- out_1521346975701067594[42] = 0;
- out_1521346975701067594[43] = 0;
- out_1521346975701067594[44] = 0;
- out_1521346975701067594[45] = 0;
- out_1521346975701067594[46] = 0;
- out_1521346975701067594[47] = 0;
- out_1521346975701067594[48] = 0;
- out_1521346975701067594[49] = 0;
- out_1521346975701067594[50] = 0;
- out_1521346975701067594[51] = 0;
- out_1521346975701067594[52] = 0;
- out_1521346975701067594[53] = 0;
- out_1521346975701067594[54] = 0;
- out_1521346975701067594[55] = 0;
- out_1521346975701067594[56] = 0;
- out_1521346975701067594[57] = 0;
- out_1521346975701067594[58] = 0;
- out_1521346975701067594[59] = 0;
- out_1521346975701067594[60] = 0;
- out_1521346975701067594[61] = 0;
- out_1521346975701067594[62] = 1;
- out_1521346975701067594[63] = 0;
- out_1521346975701067594[64] = 0;
- out_1521346975701067594[65] = 0;
+void H_33(double *state, double *unused, double *out_1993025190112285014) {
+ out_1993025190112285014[0] = 0;
+ out_1993025190112285014[1] = 0;
+ out_1993025190112285014[2] = 0;
+ out_1993025190112285014[3] = 0;
+ out_1993025190112285014[4] = 0;
+ out_1993025190112285014[5] = 0;
+ out_1993025190112285014[6] = 0;
+ out_1993025190112285014[7] = 0;
+ out_1993025190112285014[8] = 0;
+ out_1993025190112285014[9] = 0;
+ out_1993025190112285014[10] = 0;
+ out_1993025190112285014[11] = 0;
+ out_1993025190112285014[12] = 0;
+ out_1993025190112285014[13] = 0;
+ out_1993025190112285014[14] = 0;
+ out_1993025190112285014[15] = 0;
+ out_1993025190112285014[16] = 1;
+ out_1993025190112285014[17] = 0;
+ out_1993025190112285014[18] = 0;
+ out_1993025190112285014[19] = 0;
+ out_1993025190112285014[20] = 0;
+ out_1993025190112285014[21] = 0;
+ out_1993025190112285014[22] = 0;
+ out_1993025190112285014[23] = 0;
+ out_1993025190112285014[24] = 0;
+ out_1993025190112285014[25] = 0;
+ out_1993025190112285014[26] = 0;
+ out_1993025190112285014[27] = 0;
+ out_1993025190112285014[28] = 0;
+ out_1993025190112285014[29] = 0;
+ out_1993025190112285014[30] = 0;
+ out_1993025190112285014[31] = 0;
+ out_1993025190112285014[32] = 0;
+ out_1993025190112285014[33] = 0;
+ out_1993025190112285014[34] = 0;
+ out_1993025190112285014[35] = 0;
+ out_1993025190112285014[36] = 0;
+ out_1993025190112285014[37] = 0;
+ out_1993025190112285014[38] = 0;
+ out_1993025190112285014[39] = 1;
+ out_1993025190112285014[40] = 0;
+ out_1993025190112285014[41] = 0;
+ out_1993025190112285014[42] = 0;
+ out_1993025190112285014[43] = 0;
+ out_1993025190112285014[44] = 0;
+ out_1993025190112285014[45] = 0;
+ out_1993025190112285014[46] = 0;
+ out_1993025190112285014[47] = 0;
+ out_1993025190112285014[48] = 0;
+ out_1993025190112285014[49] = 0;
+ out_1993025190112285014[50] = 0;
+ out_1993025190112285014[51] = 0;
+ out_1993025190112285014[52] = 0;
+ out_1993025190112285014[53] = 0;
+ out_1993025190112285014[54] = 0;
+ out_1993025190112285014[55] = 0;
+ out_1993025190112285014[56] = 0;
+ out_1993025190112285014[57] = 0;
+ out_1993025190112285014[58] = 0;
+ out_1993025190112285014[59] = 0;
+ out_1993025190112285014[60] = 0;
+ out_1993025190112285014[61] = 0;
+ out_1993025190112285014[62] = 1;
+ out_1993025190112285014[63] = 0;
+ out_1993025190112285014[64] = 0;
+ out_1993025190112285014[65] = 0;
}
#include
#include
@@ -1855,77 +1855,77 @@ void live_update_14(double *in_x, double *in_P, double *in_z, double *in_R, doub
void live_update_33(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<3, 3, 0>(in_x, in_P, h_33, H_33, NULL, in_z, in_R, in_ea, MAHA_THRESH_33);
}
-void live_H(double *in_vec, double *out_6690968010248080223) {
- H(in_vec, out_6690968010248080223);
+void live_H(double *in_vec, double *out_4368495907718343571) {
+ H(in_vec, out_4368495907718343571);
}
-void live_err_fun(double *nom_x, double *delta_x, double *out_5128644486154966433) {
- err_fun(nom_x, delta_x, out_5128644486154966433);
+void live_err_fun(double *nom_x, double *delta_x, double *out_4465536791498929799) {
+ err_fun(nom_x, delta_x, out_4465536791498929799);
}
-void live_inv_err_fun(double *nom_x, double *true_x, double *out_7600355658971333284) {
- inv_err_fun(nom_x, true_x, out_7600355658971333284);
+void live_inv_err_fun(double *nom_x, double *true_x, double *out_4242153094211941637) {
+ inv_err_fun(nom_x, true_x, out_4242153094211941637);
}
-void live_H_mod_fun(double *state, double *out_1685726956674156760) {
- H_mod_fun(state, out_1685726956674156760);
+void live_H_mod_fun(double *state, double *out_8694534732588551911) {
+ H_mod_fun(state, out_8694534732588551911);
}
-void live_f_fun(double *state, double dt, double *out_774966178326963321) {
- f_fun(state, dt, out_774966178326963321);
+void live_f_fun(double *state, double dt, double *out_331980123976991440) {
+ f_fun(state, dt, out_331980123976991440);
}
-void live_F_fun(double *state, double dt, double *out_7282145086155387076) {
- F_fun(state, dt, out_7282145086155387076);
+void live_F_fun(double *state, double dt, double *out_7523521905118560137) {
+ F_fun(state, dt, out_7523521905118560137);
}
-void live_h_4(double *state, double *unused, double *out_3936704980047894152) {
- h_4(state, unused, out_3936704980047894152);
+void live_h_4(double *state, double *unused, double *out_874158167075593511) {
+ h_4(state, unused, out_874158167075593511);
}
-void live_H_4(double *state, double *unused, double *out_9052514604414786102) {
- H_4(state, unused, out_9052514604414786102);
+void live_H_4(double *state, double *unused, double *out_2890470532950944797) {
+ H_4(state, unused, out_2890470532950944797);
}
-void live_h_9(double *state, double *unused, double *out_4670376777294811307) {
- h_9(state, unused, out_4670376777294811307);
+void live_h_9(double *state, double *unused, double *out_7169843762143865122) {
+ h_9(state, unused, out_7169843762143865122);
}
-void live_H_9(double *state, double *unused, double *out_9153039822665174869) {
- H_9(state, unused, out_9153039822665174869);
+void live_H_9(double *state, double *unused, double *out_5779332085231024139) {
+ H_9(state, unused, out_5779332085231024139);
}
-void live_h_10(double *state, double *unused, double *out_5114531167885874097) {
- h_10(state, unused, out_5114531167885874097);
+void live_h_10(double *state, double *unused, double *out_3163124755553653720) {
+ h_10(state, unused, out_3163124755553653720);
}
-void live_H_10(double *state, double *unused, double *out_8901083693322163334) {
- H_10(state, unused, out_8901083693322163334);
+void live_H_10(double *state, double *unused, double *out_4896893583908803739) {
+ H_10(state, unused, out_4896893583908803739);
}
-void live_h_12(double *state, double *unused, double *out_6249225679190641860) {
- h_12(state, unused, out_6249225679190641860);
+void live_h_12(double *state, double *unused, double *out_6187507614461106032) {
+ h_12(state, unused, out_6187507614461106032);
}
-void live_H_12(double *state, double *unused, double *out_4374773061262803719) {
- H_12(state, unused, out_4374773061262803719);
+void live_H_12(double *state, double *unused, double *out_7889145227076156327) {
+ H_12(state, unused, out_7889145227076156327);
}
-void live_h_35(double *state, double *unused, double *out_5751710703471722702) {
- h_35(state, unused, out_5751710703471722702);
+void live_h_35(double *state, double *unused, double *out_4266066339955691863) {
+ h_35(state, unused, out_4266066339955691863);
}
-void live_H_35(double *state, double *unused, double *out_1629210028937790010) {
- H_35(state, unused, out_1629210028937790010);
+void live_H_35(double *state, double *unused, double *out_5143582194751142618) {
+ H_35(state, unused, out_5143582194751142618);
}
-void live_h_32(double *state, double *unused, double *out_7960850640984836266) {
- h_32(state, unused, out_7960850640984836266);
+void live_h_32(double *state, double *unused, double *out_9055313354289894635) {
+ h_32(state, unused, out_9055313354289894635);
}
-void live_H_32(double *state, double *unused, double *out_8200477424115484408) {
- H_32(state, unused, out_8200477424115484408);
+void live_H_32(double *state, double *unused, double *out_6388297375264292642) {
+ H_32(state, unused, out_6388297375264292642);
}
-void live_h_13(double *state, double *unused, double *out_2913105661532148231) {
- h_13(state, unused, out_2913105661532148231);
+void live_h_13(double *state, double *unused, double *out_7078564321862276630) {
+ h_13(state, unused, out_7078564321862276630);
}
-void live_H_13(double *state, double *unused, double *out_6442117529364745675) {
- H_13(state, unused, out_6442117529364745675);
+void live_H_13(double *state, double *unused, double *out_7646665591930494052) {
+ H_13(state, unused, out_7646665591930494052);
}
-void live_h_14(double *state, double *unused, double *out_4670376777294811307) {
- h_14(state, unused, out_4670376777294811307);
+void live_h_14(double *state, double *unused, double *out_7169843762143865122) {
+ h_14(state, unused, out_7169843762143865122);
}
-void live_H_14(double *state, double *unused, double *out_9153039822665174869) {
- H_14(state, unused, out_9153039822665174869);
+void live_H_14(double *state, double *unused, double *out_5779332085231024139) {
+ H_14(state, unused, out_5779332085231024139);
}
-void live_h_33(double *state, double *unused, double *out_3733937587285700568) {
- h_33(state, unused, out_3733937587285700568);
+void live_h_33(double *state, double *unused, double *out_3878198370963190653) {
+ h_33(state, unused, out_3878198370963190653);
}
-void live_H_33(double *state, double *unused, double *out_1521346975701067594) {
- H_33(state, unused, out_1521346975701067594);
+void live_H_33(double *state, double *unused, double *out_1993025190112285014) {
+ H_33(state, unused, out_1993025190112285014);
}
void live_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
diff --git a/selfdrive/locationd/models/generated/live.h b/selfdrive/locationd/models/generated/live.h
index 817aa083e..cc2ca6526 100644
--- a/selfdrive/locationd/models/generated/live.h
+++ b/selfdrive/locationd/models/generated/live.h
@@ -10,29 +10,29 @@ void live_update_32(double *in_x, double *in_P, double *in_z, double *in_R, doub
void live_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_33(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
-void live_H(double *in_vec, double *out_6690968010248080223);
-void live_err_fun(double *nom_x, double *delta_x, double *out_5128644486154966433);
-void live_inv_err_fun(double *nom_x, double *true_x, double *out_7600355658971333284);
-void live_H_mod_fun(double *state, double *out_1685726956674156760);
-void live_f_fun(double *state, double dt, double *out_774966178326963321);
-void live_F_fun(double *state, double dt, double *out_7282145086155387076);
-void live_h_4(double *state, double *unused, double *out_3936704980047894152);
-void live_H_4(double *state, double *unused, double *out_9052514604414786102);
-void live_h_9(double *state, double *unused, double *out_4670376777294811307);
-void live_H_9(double *state, double *unused, double *out_9153039822665174869);
-void live_h_10(double *state, double *unused, double *out_5114531167885874097);
-void live_H_10(double *state, double *unused, double *out_8901083693322163334);
-void live_h_12(double *state, double *unused, double *out_6249225679190641860);
-void live_H_12(double *state, double *unused, double *out_4374773061262803719);
-void live_h_35(double *state, double *unused, double *out_5751710703471722702);
-void live_H_35(double *state, double *unused, double *out_1629210028937790010);
-void live_h_32(double *state, double *unused, double *out_7960850640984836266);
-void live_H_32(double *state, double *unused, double *out_8200477424115484408);
-void live_h_13(double *state, double *unused, double *out_2913105661532148231);
-void live_H_13(double *state, double *unused, double *out_6442117529364745675);
-void live_h_14(double *state, double *unused, double *out_4670376777294811307);
-void live_H_14(double *state, double *unused, double *out_9153039822665174869);
-void live_h_33(double *state, double *unused, double *out_3733937587285700568);
-void live_H_33(double *state, double *unused, double *out_1521346975701067594);
+void live_H(double *in_vec, double *out_4368495907718343571);
+void live_err_fun(double *nom_x, double *delta_x, double *out_4465536791498929799);
+void live_inv_err_fun(double *nom_x, double *true_x, double *out_4242153094211941637);
+void live_H_mod_fun(double *state, double *out_8694534732588551911);
+void live_f_fun(double *state, double dt, double *out_331980123976991440);
+void live_F_fun(double *state, double dt, double *out_7523521905118560137);
+void live_h_4(double *state, double *unused, double *out_874158167075593511);
+void live_H_4(double *state, double *unused, double *out_2890470532950944797);
+void live_h_9(double *state, double *unused, double *out_7169843762143865122);
+void live_H_9(double *state, double *unused, double *out_5779332085231024139);
+void live_h_10(double *state, double *unused, double *out_3163124755553653720);
+void live_H_10(double *state, double *unused, double *out_4896893583908803739);
+void live_h_12(double *state, double *unused, double *out_6187507614461106032);
+void live_H_12(double *state, double *unused, double *out_7889145227076156327);
+void live_h_35(double *state, double *unused, double *out_4266066339955691863);
+void live_H_35(double *state, double *unused, double *out_5143582194751142618);
+void live_h_32(double *state, double *unused, double *out_9055313354289894635);
+void live_H_32(double *state, double *unused, double *out_6388297375264292642);
+void live_h_13(double *state, double *unused, double *out_7078564321862276630);
+void live_H_13(double *state, double *unused, double *out_7646665591930494052);
+void live_h_14(double *state, double *unused, double *out_7169843762143865122);
+void live_H_14(double *state, double *unused, double *out_5779332085231024139);
+void live_h_33(double *state, double *unused, double *out_3878198370963190653);
+void live_H_33(double *state, double *unused, double *out_1993025190112285014);
void live_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
\ No newline at end of file
diff --git a/selfdrive/locationd/ubloxd b/selfdrive/locationd/ubloxd
index 98bec2949..9b0e7c166 100755
Binary files a/selfdrive/locationd/ubloxd and b/selfdrive/locationd/ubloxd differ
diff --git a/selfdrive/manager/process_config.py b/selfdrive/manager/process_config.py
index f4992c1d8..7b2540df0 100644
--- a/selfdrive/manager/process_config.py
+++ b/selfdrive/manager/process_config.py
@@ -62,7 +62,7 @@ procs = [
PythonProcess("androidd", "system.hardware.eon.androidd", enabled=EON, offroad=True),
# Experimental
- PythonProcess("rawgpsd", "selfdrive.sensord.rawgps.rawgpsd", enabled=os.path.isfile("/persist/comma/use-quectel-rawgps")),
+ PythonProcess("rawgpsd", "selfdrive.sensord.rawgps.rawgpsd", enabled=(TICI and os.path.isfile("/persist/comma/use-quectel-rawgps"))),
# dp
PythonProcess("dmonitoringd", "selfdrive.dragonpilot.dmonitoringd", enabled=EON),
diff --git a/selfdrive/mapd/lib/Route.py b/selfdrive/mapd/lib/Route.py
index 794ffe873..7aa502bb2 100644
--- a/selfdrive/mapd/lib/Route.py
+++ b/selfdrive/mapd/lib/Route.py
@@ -86,17 +86,9 @@ class Route():
b = np.arctan2(v[:, 0], v[:, 1])
# - Find index of las_wr section and calculate deltas of bearings to the other sections.
- # dp - force re init if last_wr_idx return ValueError?
- try:
- last_wr_idx = way_relations.index(last_wr)
- b_ref = b[last_wr_idx]
- delta = b - b_ref
- except ValueError:
- self.way_collection_id = way_collection_id
- self._ordered_way_relations = []
- self._nodes_data = None
- self._reset()
- return
+ last_wr_idx = way_relations.index(last_wr)
+ b_ref = b[last_wr_idx]
+ delta = b - b_ref
# - Update the direction of the possible route continuation ways as starting from last_node_id.
# Make sure to exclude any ways already included in the ordered list as to not modify direction when there
diff --git a/selfdrive/modeld/_modeld b/selfdrive/modeld/_modeld
index 8c656b471..291bc3316 100755
Binary files a/selfdrive/modeld/_modeld and b/selfdrive/modeld/_modeld differ
diff --git a/selfdrive/modeld/models/supercombo.thneed b/selfdrive/modeld/models/supercombo.thneed
index de87a5ce8..c13c069f8 100644
Binary files a/selfdrive/modeld/models/supercombo.thneed and b/selfdrive/modeld/models/supercombo.thneed differ
diff --git a/selfdrive/sensord/_sensord b/selfdrive/sensord/_sensord
index ffc8effaf..3892dd92e 100755
Binary files a/selfdrive/sensord/_sensord and b/selfdrive/sensord/_sensord differ
diff --git a/selfdrive/ui/_ui b/selfdrive/ui/_ui
index 49342beca..db3730780 100755
Binary files a/selfdrive/ui/_ui and b/selfdrive/ui/_ui differ
diff --git a/selfdrive/ui/qt/spinner b/selfdrive/ui/qt/spinner
index cfcbf9736..73c2bcbb3 100755
Binary files a/selfdrive/ui/qt/spinner and b/selfdrive/ui/qt/spinner differ
diff --git a/selfdrive/ui/qt/text b/selfdrive/ui/qt/text
index da5a69393..a970e3b79 100755
Binary files a/selfdrive/ui/qt/text and b/selfdrive/ui/qt/text differ
diff --git a/selfdrive/ui/soundd/_soundd b/selfdrive/ui/soundd/_soundd
index 06f130c7e..e4e385aba 100755
Binary files a/selfdrive/ui/soundd/_soundd and b/selfdrive/ui/soundd/_soundd differ
diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts
new file mode 100644
index 000000000..3277f5374
--- /dev/null
+++ b/selfdrive/ui/translations/main_th.ts
@@ -0,0 +1,1303 @@
+
+
+
+
+ AbstractAlert
+
+
+ Close
+ ปิด
+
+
+
+ Snooze Update
+ เลื่อนการอัปเดต
+
+
+
+ Reboot and Update
+ รีบูตและอัปเดต
+
+
+
+ AdvancedNetworking
+
+
+ Back
+ ย้อนกลับ
+
+
+
+ Enable Tethering
+ ปล่อยฮอตสปอต
+
+
+
+ Tethering Password
+ รหัสผ่านฮอตสปอต
+
+
+
+
+ EDIT
+ แก้ไข
+
+
+
+ Enter new tethering password
+ ป้อนรหัสผ่านฮอตสปอตใหม่
+
+
+
+ IP Address
+ หมายเลขไอพี
+
+
+
+ Enable Roaming
+ เปิดใช้งานโรมมิ่ง
+
+
+
+ APN Setting
+ ตั้งค่า APN
+
+
+
+ Enter APN
+ ป้อนค่า APN
+
+
+
+ leave blank for automatic configuration
+ เว้นว่างเพื่อตั้งค่าอัตโนมัติ
+
+
+
+ ConfirmationDialog
+
+
+
+ Ok
+ ตกลง
+
+
+
+ Cancel
+ ยกเลิก
+
+
+
+ DeclinePage
+
+
+ You must accept the Terms and Conditions in order to use openpilot.
+ คุณต้องยอมรับเงื่อนไขและข้อตกลง เพื่อใช้งาน openpilot
+
+
+
+ Back
+ ย้อนกลับ
+
+
+
+ Decline, uninstall %1
+ ปฏิเสธ และถอนการติดตั้ง %1
+
+
+
+ DevicePanel
+
+
+ Dongle ID
+ Dongle ID
+
+
+
+ N/A
+ ไม่มี
+
+
+
+ Serial
+ ซีเรียล
+
+
+
+ Driver Camera
+ กล้องฝั่งคนขับ
+
+
+
+ PREVIEW
+ แสดงภาพ
+
+
+
+ Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off)
+ ดูภาพตัวอย่างกล้องที่หันเข้าหาคนขับเพื่อให้แน่ใจว่าการตรวจสอบคนขับมีทัศนวิสัยที่ดี (รถต้องดับเครื่องยนต์)
+
+
+
+ Reset Calibration
+ รีเซ็ตการคาลิเบรท
+
+
+
+ RESET
+ รีเซ็ต
+
+
+
+ Are you sure you want to reset calibration?
+ คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตการคาลิเบรท?
+
+
+
+ Review Training Guide
+ ทบทวนคู่มือการใช้งาน
+
+
+
+ REVIEW
+ ทบทวน
+
+
+
+ Review the rules, features, and limitations of openpilot
+ ตรวจสอบกฎ คุณสมบัติ และข้อจำกัดของ openpilot
+
+
+
+ Are you sure you want to review the training guide?
+ คุณแน่ใจหรือไม่ว่าต้องการทบทวนคู่มือการใช้งาน?
+
+
+
+ Regulatory
+ ระเบียบข้อบังคับ
+
+
+
+ VIEW
+ ดู
+
+
+
+ Change Language
+ เปลี่ยนภาษา
+
+
+
+ CHANGE
+ เปลี่ยน
+
+
+
+ Select a language
+ เลือกภาษา
+
+
+
+ Reboot
+ รีบูต
+
+
+
+ Power Off
+ ปิดเครื่อง
+
+
+
+ openpilot requires the device to be mounted within 4° left or right and within 5° up or 8° down. openpilot is continuously calibrating, resetting is rarely required.
+ openpilot กำหนดให้ติดตั้งอุปกรณ์ โดยสามารถเอียงด้านซ้ายหรือขวาไม่เกิน 4° และเอียงขึ้นด้านบนไม่เกิน 5° หรือเอียงลงด้านล่างไม่เกิน 8° openpilot ทำการคาลิเบรทอย่างต่อเนื่อง แทบจะไม่จำเป็นต้องทำการรีเซ็ตการคาลิเบรท
+
+
+
+ Your device is pointed %1° %2 and %3° %4.
+ อุปกรณ์ของคุณเอียงไปทาง %2 %1° และ %4 %3°
+
+
+
+ down
+ ด้านล่าง
+
+
+
+ up
+ ด้านบน
+
+
+
+ left
+ ด้านซ้าย
+
+
+
+ right
+ ด้านขวา
+
+
+
+ Are you sure you want to reboot?
+ คุณแน่ใจหรือไม่ว่าต้องการรีบูต?
+
+
+
+ Disengage to Reboot
+ ยกเลิกระบบช่วยขับเพื่อรีบูต
+
+
+
+ Are you sure you want to power off?
+ คุณแน่ใจหรือไม่ว่าต้องการปิดเครื่อง?
+
+
+
+ Disengage to Power Off
+ ยกเลิกระบบช่วยขับเพื่อปิดเครื่อง
+
+
+
+ DriveStats
+
+
+ Drives
+ การขับขี่
+
+
+
+ Hours
+ ชั่วโมง
+
+
+
+ ALL TIME
+ ทั้งหมด
+
+
+
+ PAST WEEK
+ สัปดาห์ที่ผ่านมา
+
+
+
+ KM
+ กิโลเมตร
+
+
+
+ Miles
+ ไมล์
+
+
+
+ DriverViewScene
+
+
+ camera starting
+ กำลังเปิดกล้อง
+
+
+
+ InputDialog
+
+
+ Cancel
+ ยกเลิก
+
+
+
+ Need at least %n character(s)!
+
+ ต้องการอย่างน้อย %n ตัวอักษร!
+
+
+
+
+ Installer
+
+
+ Installing...
+ กำลังติดตั้ง...
+
+
+
+ Receiving objects:
+ กำลังรับข้อมูล:
+
+
+
+ Resolving deltas:
+ การแก้ไขเดลต้า:
+
+
+
+ Updating files:
+ กำลังอัปเดตไฟล์:
+
+
+
+ MapETA
+
+
+ eta
+ eta
+
+
+
+ min
+ นาที
+
+
+
+ hr
+ ชม.
+
+
+
+ km
+ กม.
+
+
+
+ mi
+ ไมล์
+
+
+
+ MapInstructions
+
+
+ km
+ กม.
+
+
+
+ m
+ ม.
+
+
+
+ mi
+ ไมล์
+
+
+
+ ft
+ ฟุต
+
+
+
+ MapPanel
+
+
+ Current Destination
+ ปลายทางปัจจุบัน
+
+
+
+ CLEAR
+ ล้างข้อมูล
+
+
+
+ Recent Destinations
+ ปลายทางล่าสุด
+
+
+
+ Try the Navigation Beta
+ ลองใช้ระบบนำทาง (เบต้า)
+
+
+
+ Get turn-by-turn directions displayed and more with a comma
+prime subscription. Sign up now: https://connect.comma.ai
+ รับการแสดงเส้นทางแบบเลี้ยวต่อเลี้ยว และอื่นๆ ด้วยการสมัครบริการ
+comma prime สมัครเลย: https://connect.comma.ai
+
+
+
+ No home
+location set
+ ยังไม่ได้กำหนด
+ตำแหน่งของบ้าน
+
+
+
+ No work
+location set
+ ยังไม่ได้กำหนด
+ตำแหน่งของที่ทำงาน
+
+
+
+ no recent destinations
+ ไม่พบปลายทางล่าสุด
+
+
+
+ MapWindow
+
+
+ Map Loading
+ กำลังโหลดแผนที่
+
+
+
+ Waiting for GPS
+ กำลังรอสัญญาณ GPS
+
+
+
+ MultiOptionDialog
+
+
+ Select
+ เลือก
+
+
+
+ Cancel
+ ยกเลิก
+
+
+
+ Networking
+
+
+ Advanced
+ ขั้นสูง
+
+
+
+ Enter password
+ ใส่รหัสผ่าน
+
+
+
+
+ for "%1"
+ สำหรับ "%1"
+
+
+
+ Wrong password
+ รหัสผ่านผิด
+
+
+
+ NvgWindow
+
+
+ km/h
+ กม./ชม.
+
+
+
+ mph
+ ไมล์/ชม.
+
+
+
+
+ MAX
+ สูงสุด
+
+
+
+
+ SPEED
+ ความเร็ว
+
+
+
+
+ LIMIT
+ จำกัด
+
+
+
+ OffroadHome
+
+
+ UPDATE
+ อัปเดต
+
+
+
+ ALERTS
+ การแจ้งเตือน
+
+
+
+ ALERT
+ การแจ้งเตือน
+
+
+
+ PairingPopup
+
+
+ Pair your device to your comma account
+ จับคู่อุปกรณ์ของคุณกับบัญชี comma ของคุณ
+
+
+
+ Go to https://connect.comma.ai on your phone
+ ไปที่ https://connect.comma.ai ด้วยโทรศัพท์ของคุณ
+
+
+
+ Click "add new device" and scan the QR code on the right
+ กดที่ "add new device" และสแกนคิวอาร์โค้ดทางด้านขวา
+
+
+
+ Bookmark connect.comma.ai to your home screen to use it like an app
+ จดจำ connect.comma.ai โดยการเพิ่มไปยังหน้าจอโฮม เพื่อใช้งานเหมือนเป็นแอปพลิเคชัน
+
+
+
+ PrimeAdWidget
+
+
+ Upgrade Now
+ อัพเกรดเดี๋ยวนี้
+
+
+
+ Become a comma prime member at connect.comma.ai
+ สมัครสมาชิก comma prime ได้ที่ connect.comma.ai
+
+
+
+ PRIME FEATURES:
+ คุณสมบัติของ PRIME:
+
+
+
+ Remote access
+ การเข้าถึงระยะไกล
+
+
+
+ 1 year of storage
+ จัดเก็บข้อมูลนาน 1 ปี
+
+
+
+ Developer perks
+ สิทธิพิเศษสำหรับนักพัฒนา
+
+
+
+ PrimeUserWidget
+
+
+ ✓ SUBSCRIBED
+ ✓ สมัครสำเร็จ
+
+
+
+ comma prime
+ comma prime
+
+
+
+ CONNECT.COMMA.AI
+ CONNECT.COMMA.AI
+
+
+
+ COMMA POINTS
+ คะแนน COMMA
+
+
+
+ QObject
+
+
+ Reboot
+ รีบูต
+
+
+
+ Exit
+ ปิด
+
+
+
+ dashcam
+ กล้องติดรถยนต์
+
+
+
+ openpilot
+ openpilot
+
+
+
+ %n minute(s) ago
+
+ %n นาทีที่แล้ว
+
+
+
+
+ %n hour(s) ago
+
+ %n ชั่วโมงที่แล้ว
+
+
+
+
+ %n day(s) ago
+
+ %n วันที่แล้ว
+
+
+
+
+ Reset
+
+
+ Reset failed. Reboot to try again.
+ การรีเซ็ตล้มเหลว รีบูตเพื่อลองอีกครั้ง
+
+
+
+ Are you sure you want to reset your device?
+ คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตอุปกรณ์?
+
+
+
+ Resetting device...
+ กำลังรีเซ็ตอุปกรณ์...
+
+
+
+ System Reset
+ รีเซ็ตระบบ
+
+
+
+ System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot.
+ มีการสั่งรีเซ็ตระบบ กดยืนยันเพื่อลบข้อมูลและการตั้งค่าทั้งหมด กดยกเลิกเพื่อบูตเข้าระบบตามปกติ
+
+
+
+ Cancel
+ ยกเลิก
+
+
+
+ Reboot
+ รีบูต
+
+
+
+ Confirm
+ ยืนยัน
+
+
+
+ Unable to mount data partition. Press confirm to reset your device.
+ ไม่สามารถเมานต์พาร์ติชั่นข้อมูล กดยืนยันเพื่อรีเซ็ตอุปกรณ์ของคุณ
+
+
+
+ RichTextDialog
+
+
+ Ok
+ ตกลง
+
+
+
+ SettingsWindow
+
+
+ ×
+ ×
+
+
+
+ Device
+ อุปกรณ์
+
+
+
+
+ Network
+ เครือข่าย
+
+
+
+ Toggles
+ ตัวเลือก
+
+
+
+ Software
+ ซอฟต์แวร์
+
+
+
+ Navigation
+ การนำทาง
+
+
+
+ Setup
+
+
+ WARNING: Low Voltage
+ คำเตือน: แรงดันไฟฟ้าต่ำ
+
+
+
+ Power your device in a car with a harness or proceed at your own risk.
+ โปรดต่ออุปกรณ์ของคุณเข้ากับสายควบคุมในรถยนต์ หรือดำเนินการด้วยความเสี่ยงของคุณเอง
+
+
+
+ Power off
+ ปิดเครื่อง
+
+
+
+
+
+ Continue
+ ดำเนินการต่อ
+
+
+
+ Getting Started
+ เริ่มกันเลย
+
+
+
+ Before we get on the road, let’s finish installation and cover some details.
+ ก่อนออกเดินทาง เรามาทำการติดตั้งซอฟต์แวร์ และตรวจสอบการตั้งค่า
+
+
+
+ Connect to Wi-Fi
+ เชื่อมต่อ Wi-Fi
+
+
+
+
+ Back
+ ย้อนกลับ
+
+
+
+ Continue without Wi-Fi
+ ดำเนินการต่อโดยไม่ใช้ Wi-Fi
+
+
+
+ Waiting for internet
+ กำลังรอสัญญาณอินเตอร์เน็ต
+
+
+
+ Choose Software to Install
+ เลือกซอฟต์แวร์ที่จะติดตั้ง
+
+
+
+ Dashcam
+ กล้องติดรถยนต์
+
+
+
+ Custom Software
+ ซอฟต์แวร์ที่กำหนดเอง
+
+
+
+ Enter URL
+ ป้อน URL
+
+
+
+ for Custom Software
+ สำหรับซอฟต์แวร์ที่กำหนดเอง
+
+
+
+ Downloading...
+ กำลังดาวน์โหลด...
+
+
+
+ Download Failed
+ ดาวน์โหลดล้มเหลว
+
+
+
+ Ensure the entered URL is valid, and the device’s internet connection is good.
+ ตรวจสอบให้แน่ใจว่า URL ที่ป้อนนั้นถูกต้อง และอุปกรณ์เชื่อมต่ออินเทอร์เน็ตอยู่
+
+
+
+ Reboot device
+ รีบูตอุปกรณ์
+
+
+
+ Start over
+ เริ่มต้นใหม่
+
+
+
+ SetupWidget
+
+
+ Finish Setup
+ ตั้งค่าเสร็จสิ้น
+
+
+
+ Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer.
+ จับคู่อุปกรณ์ของคุณกับ comma connect (connect.comma.ai) และรับข้อเสนอ comma prime ของคุณ
+
+
+
+ Pair device
+ จับคู่อุปกรณ์
+
+
+
+ Sidebar
+
+
+
+ CONNECT
+ เชื่อมต่อ
+
+
+
+ OFFLINE
+ ออฟไลน์
+
+
+
+
+ ONLINE
+ ออนไลน์
+
+
+
+ ERROR
+ เกิดข้อผิดพลาด
+
+
+
+
+
+ TEMP
+ อุณหภูมิ
+
+
+
+ HIGH
+ สูง
+
+
+
+ GOOD
+ ดี
+
+
+
+ OK
+ พอใช้
+
+
+
+ VEHICLE
+ รถยนต์
+
+
+
+ NO
+ ไม่พบ
+
+
+
+ PANDA
+ PANDA
+
+
+
+ GPS
+ จีพีเอส
+
+
+
+ SEARCH
+ ค้นหา
+
+
+
+ --
+ --
+
+
+
+ Wi-Fi
+ Wi-Fi
+
+
+
+ ETH
+ ETH
+
+
+
+ 2G
+ 2G
+
+
+
+ 3G
+ 3G
+
+
+
+ LTE
+ LTE
+
+
+
+ 5G
+ 5G
+
+
+
+ SoftwarePanel
+
+
+ Git Branch
+ Git Branch
+
+
+
+ Git Commit
+ Git Commit
+
+
+
+ OS Version
+ เวอร์ชันระบบปฏิบัติการ
+
+
+
+ Version
+ เวอร์ชั่น
+
+
+
+ Last Update Check
+ ตรวจสอบการอัปเดตล่าสุด
+
+
+
+ The last time openpilot successfully checked for an update. The updater only runs while the car is off.
+ ครั้งสุดท้ายที่ openpilot ตรวจสอบการอัปเดตสำเร็จ ตัวอัปเดตจะทำงานในขณะที่รถดับเครื่องอยู่เท่านั้น
+
+
+
+ Check for Update
+ ตรวจสอบการอัปเดต
+
+
+
+ CHECKING
+ กำลังตรวจสอบ
+
+
+
+ Switch Branch
+ เปลี่ยน Branch
+
+
+
+ ENTER
+ เปลี่ยน
+
+
+
+
+ The new branch will be pulled the next time the updater runs.
+ Branch ใหม่จะถูกติดตั้งในครั้งต่อไปที่ตัวอัปเดตทำงาน
+
+
+
+ Enter branch name
+ ใส่ชื่อ Branch
+
+
+
+ Uninstall %1
+ ถอนการติดตั้ง %1
+
+
+
+ UNINSTALL
+ ถอนการติดตั้ง
+
+
+
+ Are you sure you want to uninstall?
+ คุณแน่ใจหรือไม่ว่าต้องการถอนการติดตั้ง?
+
+
+
+ failed to fetch update
+ โหลดข้อมูลอัปเดตไม่สำเร็จ
+
+
+
+
+ CHECK
+ ตรวจสอบ
+
+
+
+ SshControl
+
+
+ SSH Keys
+ คีย์ SSH
+
+
+
+ Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username other than your own. A comma employee will NEVER ask you to add their GitHub username.
+ คำเตือน: สิ่งนี้ให้สิทธิ์ SSH เข้าถึงคีย์สาธารณะทั้งหมดใน GitHub ของคุณ อย่าป้อนชื่อผู้ใช้ GitHub อื่นนอกเหนือจากของคุณเอง พนักงาน comma จะไม่ขอให้คุณเพิ่มชื่อผู้ใช้ GitHub ของพวกเขา
+
+
+
+
+ ADD
+ เพิ่ม
+
+
+
+ Enter your GitHub username
+ ป้อนชื่อผู้ใช้ GitHub ของคุณ
+
+
+
+ LOADING
+ กำลังโหลด
+
+
+
+ REMOVE
+ ลบ
+
+
+
+ Username '%1' has no keys on GitHub
+ ชื่อผู้ใช้ '%1' ไม่มีคีย์บน GitHub
+
+
+
+ Request timed out
+ ตรวจสอบไม่สำเร็จ เนื่องจากใช้เวลามากเกินไป
+
+
+
+ Username '%1' doesn't exist on GitHub
+ ไม่พบชื่อผู้ใช้ '%1' บน GitHub
+
+
+
+ SshToggle
+
+
+ Enable SSH
+ เปิดใช้งาน SSH
+
+
+
+ TermsPage
+
+
+ Terms & Conditions
+ ข้อตกลงและเงื่อนไข
+
+
+
+ Decline
+ ปฏิเสธ
+
+
+
+ Scroll to accept
+ เลื่อนเพื่อตอบรับข้อตกลง
+
+
+
+ Agree
+ ยอมรับ
+
+
+
+ TogglesPanel
+
+
+ Enable openpilot
+ เปิดใช้งาน openpilot
+
+
+
+ Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.
+ ใช้ระบบ openpilot สำหรับระบบควบคุมความเร็วอัตโนมัติ และระบบช่วยควบคุมรถให้อยู่ในเลน คุณจำเป็นต้องให้ความสนใจตลอดเวลาที่ใช้คุณสมบัตินี้ การเปลี่ยนการตั้งค่านี้จะมีผลเมื่อคุณดับเครื่องยนต์
+
+
+
+ Enable Lane Departure Warnings
+ เปิดใช้งานการเตือนการออกนอกเลน
+
+
+
+ Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31 mph (50 km/h).
+ รับการแจ้งเตือนให้เลี้ยวกลับเข้าเลนเมื่อรถของคุณตรวจพบการข้ามช่องจราจรโดยไม่เปิดสัญญาณไฟเลี้ยวในขณะขับขี่ที่ความเร็วเกิน 31 ไมล์ต่อชั่วโมง (50 กม./ชม)
+
+
+
+ Use Metric System
+ ใช้ระบบเมตริก
+
+
+
+ Display speed in km/h instead of mph.
+ แสดงความเร็วเป็น กม./ชม. แทน ไมล์/ชั่วโมง
+
+
+
+ Record and Upload Driver Camera
+ บันทึกและอัปโหลดภาพจากกล้องคนขับ
+
+
+
+ Upload data from the driver facing camera and help improve the driver monitoring algorithm.
+ อัปโหลดข้อมูลจากกล้องที่หันหน้าไปทางคนขับ และช่วยปรับปรุงอัลกอริธึมการตรวจสอบผู้ขับขี่
+
+
+
+ Disengage On Accelerator Pedal
+ ยกเลิกระบบช่วยขับเมื่อเหยียบคันเร่ง
+
+
+
+ When enabled, pressing the accelerator pedal will disengage openpilot.
+ เมื่อเปิดใช้งาน การกดแป้นคันเร่งจะเป็นการยกเลิกระบบช่วยขับโดย openpilot
+
+
+
+ Show ETA in 24h Format
+ แสดงเวลา ETA ในรูปแบบ 24 ชั่วโมง
+
+
+
+ Use 24h format instead of am/pm
+ ใช้รูปแบบเวลา 24 ชั่วโมง แทน am/pm
+
+
+
+ Show Map on Left Side of UI
+ แสดงแผนที่ที่ด้านซ้ายของหน้าจอ
+
+
+
+ Show map on left side when in split screen view.
+ แสดงแผนที่ด้านซ้ายของหน้าจอเมื่ออยู่ในโหมดแบ่งหน้าจอ
+
+
+
+ openpilot Longitudinal Control
+ openpilot การควบคุมการเร่งและลดความเร็ว
+
+
+
+ openpilot will disable the car's radar and will take over control of gas and brakes. Warning: this disables AEB!
+ openpilot จะปิดการใช้งานเรดาร์ของรถ และจะเข้าควบคุมการเร่งและเบรก คำเตือน: สิ่งนี้จะปิดระบบ AEB!
+
+
+
+ Updater
+
+
+ Update Required
+ จำเป็นต้องอัปเดต
+
+
+
+ An operating system update is required. Connect your device to Wi-Fi for the fastest update experience. The download size is approximately 1GB.
+ จำเป็นต้องมีการอัปเดตระบบปฏิบัติการ เชื่อมต่ออุปกรณ์ของคุณกับ Wi-Fi เพื่อประสบการณ์การอัปเดตที่เร็วที่สุด ขนาดดาวน์โหลดประมาณ 1GB
+
+
+
+ Connect to Wi-Fi
+ เชื่อมต่อกับ Wi-Fi
+
+
+
+ Install
+ ติดตั้ง
+
+
+
+ Back
+ ย้อนกลับ
+
+
+
+ Loading...
+ กำลังโหลด...
+
+
+
+ Reboot
+ รีบูต
+
+
+
+ Update failed
+ การอัปเดตล้มเหลว
+
+
+
+ WifiUI
+
+
+
+ Scanning for networks...
+ กำลังสแกนหาเครือข่าย...
+
+
+
+ CONNECTING...
+ กำลังเชื่อมต่อ...
+
+
+
+ FORGET
+ เลิกใช้
+
+
+
+ Forget Wi-Fi Network "%1"?
+ เลิกใช้เครือข่าย Wi-Fi "%1"?
+
+
+
diff --git a/system/camerad/camerad b/system/camerad/camerad
index c24ad536c..af402c1c9 100755
Binary files a/system/camerad/camerad and b/system/camerad/camerad differ
diff --git a/system/clocksd/clocksd b/system/clocksd/clocksd
index 4415c2c70..be63bc4e4 100755
Binary files a/system/clocksd/clocksd and b/system/clocksd/clocksd differ
diff --git a/tools/joystick/joystickd.py b/tools/joystick/joystickd.py
index 6226038d5..35ecca351 100755
--- a/tools/joystick/joystickd.py
+++ b/tools/joystick/joystickd.py
@@ -41,7 +41,7 @@ class Joystick:
def __init__(self):
# TODO: find a way to get this from API, perhaps "inputs" doesn't support it
self.min_axis_value = {'ABS_Y': 0., 'ABS_RZ': 0.}
- self.max_axis_value = {'ABS_Y': 1023., 'ABS_RZ': 255.}
+ self.max_axis_value = {'ABS_Y': 255., 'ABS_RZ': 255.}
self.cancel_button = 'BTN_TRIGGER'
self.axes_values = {'ABS_Y': 0., 'ABS_RZ': 0.} # gb, steer
self.axes_order = ['ABS_Y', 'ABS_RZ']
diff --git a/tools/replay/replay.h b/tools/replay/replay.h
index 13269d3ec..86d609683 100644
--- a/tools/replay/replay.h
+++ b/tools/replay/replay.h
@@ -24,10 +24,11 @@ enum REPLAY_FLAGS {
enum class FindFlag {
nextEngagement,
- nextDisEngagement
+ nextDisEngagement,
+ nextUserFlag,
};
-enum class TimelineType { None, Engaged, AlertInfo, AlertWarning, AlertCritical };
+enum class TimelineType { None, Engaged, AlertInfo, AlertWarning, AlertCritical, UserFlag };
class Replay : public QObject {
Q_OBJECT