diff --git a/.gitignore b/.gitignore index f067893c7..ac61591bf 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ persist selfdrive/pandad/pandad cereal/services.h cereal/gen +cereal/messaging/bridge selfdrive/logcatd/logcatd selfdrive/mapd/default_speeds_by_region.json system/proclogd/proclogd diff --git a/body/board/obj/body.bin b/body/board/obj/body.bin index 3ed7681ed..b8dfb0686 100755 Binary files a/body/board/obj/body.bin and b/body/board/obj/body.bin differ diff --git a/body/board/obj/body.bin.signed b/body/board/obj/body.bin.signed index 3fe5f4b11..765d312f5 100644 Binary files a/body/board/obj/body.bin.signed and b/body/board/obj/body.bin.signed differ diff --git a/body/board/obj/body.elf b/body/board/obj/body.elf index 0e7a9e5aa..46110c169 100755 Binary files a/body/board/obj/body.elf and b/body/board/obj/body.elf differ diff --git a/body/board/obj/bootstub.body.bin b/body/board/obj/bootstub.body.bin index 1179d3d5c..7880cfab9 100755 Binary files a/body/board/obj/bootstub.body.bin and b/body/board/obj/bootstub.body.bin differ diff --git a/body/board/obj/bootstub.body.elf b/body/board/obj/bootstub.body.elf index 4fcebb2d4..1a0267b1f 100755 Binary files a/body/board/obj/bootstub.body.elf and b/body/board/obj/bootstub.body.elf differ diff --git a/body/board/obj/gitversion.h b/body/board/obj/gitversion.h index 16ca97cbe..6a972a64b 100644 --- a/body/board/obj/gitversion.h +++ b/body/board/obj/gitversion.h @@ -1 +1 @@ -const uint8_t gitversion[8] = "1722b595"; +const uint8_t gitversion[8] = "2dfc842c"; diff --git a/cereal/car.capnp b/cereal/car.capnp index c17e1c063..3df23d992 100644 --- a/cereal/car.capnp +++ b/cereal/car.capnp @@ -116,6 +116,7 @@ struct CarEvent @0x9b1657f34caf3ad3 { paramsdTemporaryError @50; paramsdPermanentError @119; actuatorsApiUnavailable @120; + espActive @121; radarCanErrorDEPRECATED @15; communityFeatureDisallowedDEPRECATED @62; @@ -194,6 +195,7 @@ struct CarState { espDisabled @32 :Bool; accFaulted @42 :Bool; carFaultedNonCritical @47 :Bool; # some ECU is faulted, but car remains controllable + espActive @51 :Bool; # cruise state cruiseState @10 :CruiseState; diff --git a/cereal/gen/cpp/car.capnp.c++ b/cereal/gen/cpp/car.capnp.c++ index 6dce447f3..f85e920b8 100644 --- a/cereal/gen/cpp/car.capnp.c++ +++ b/cereal/gen/cpp/car.capnp.c++ @@ -214,7 +214,7 @@ const ::capnp::_::RawSchema s_9b1657f34caf3ad3 = { 1, 11, i_9b1657f34caf3ad3, nullptr, nullptr, { &s_9b1657f34caf3ad3, nullptr, nullptr, 0, 0, nullptr }, false }; #endif // !CAPNP_LITE -static const ::capnp::_::AlignedData<709> b_baa8c5d505f727de = { +static const ::capnp::_::AlignedData<714> b_baa8c5d505f727de = { { 0, 0, 0, 0, 5, 0, 6, 0, 222, 39, 247, 5, 213, 197, 168, 186, 19, 0, 0, 0, 2, 0, 0, 0, @@ -224,7 +224,7 @@ static const ::capnp::_::AlignedData<709> b_baa8c5d505f727de = { 21, 0, 0, 0, 234, 0, 0, 0, 33, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 0, 95, 11, 0, 0, + 29, 0, 0, 0, 119, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 97, 114, 46, 99, 97, 112, 110, @@ -232,369 +232,372 @@ static const ::capnp::_::AlignedData<709> b_baa8c5d505f727de = { 110, 116, 46, 69, 118, 101, 110, 116, 78, 97, 109, 101, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, - 228, 1, 0, 0, 1, 0, 2, 0, + 232, 1, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 165, 5, 0, 0, 74, 0, 0, 0, + 177, 5, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 161, 5, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 118, 0, 0, 0, 0, 0, 0, 0, - 161, 5, 0, 0, 218, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, - 165, 5, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, - 169, 5, 0, 0, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, - 165, 5, 0, 0, 74, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, - 161, 5, 0, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, - 161, 5, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, - 157, 5, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, - 153, 5, 0, 0, 170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8, 0, 0, 0, 0, 0, 0, 0, - 153, 5, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, - 149, 5, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 0, 0, 0, 0, 0, 0, - 145, 5, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 0, 0, 0, 0, - 141, 5, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, 0, 0, - 137, 5, 0, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, - 133, 5, 0, 0, 194, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 0, 0, 0, - 133, 5, 0, 0, 170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 0, - 133, 5, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 17, 0, 0, 0, 0, 0, 0, 0, - 129, 5, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, - 125, 5, 0, 0, 74, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, - 121, 5, 0, 0, 178, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 20, 0, 0, 0, 0, 0, 0, 0, - 121, 5, 0, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 22, 0, 0, 0, 0, 0, 0, 0, - 121, 5, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 0, 0, - 121, 5, 0, 0, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, - 117, 5, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 117, 0, 0, 0, 0, 0, 0, 0, - 113, 5, 0, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 0, 0, 0, 0, - 113, 5, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 101, 0, 0, 0, 0, 0, 0, 0, - 109, 5, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, - 113, 5, 0, 0, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, - 109, 5, 0, 0, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 29, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 130, 0, 0, 0, + 173, 5, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 186, 0, 0, 0, + 173, 5, 0, 0, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 186, 0, 0, 0, + 100, 0, 0, 0, 0, 0, 0, 0, + 177, 5, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 114, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, + 181, 5, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 218, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, + 177, 5, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 122, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, + 173, 5, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 162, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, + 173, 5, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 186, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, + 169, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 138, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, + 165, 5, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 103, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 154, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, + 165, 5, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 210, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, + 161, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 218, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, + 157, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 178, 0, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 0, + 153, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 38, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 106, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 242, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 40, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 107, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 242, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 178, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 42, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 146, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 43, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 46, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 146, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 146, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 0, 0, 0, 0, 0, 0, - 85, 5, 0, 0, 250, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 42, 1, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, + 149, 5, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 42, 1, 0, 0, + 145, 5, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 0, 0, 0, 0, 0, 0, 0, - 105, 5, 0, 0, 82, 0, 0, 0, + 101, 0, 0, 0, 0, 0, 0, 0, + 145, 5, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 74, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, + 145, 5, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 0, 0, 0, 0, 0, 0, - 97, 5, 0, 0, 34, 0, 0, 0, + 17, 0, 0, 0, 0, 0, 0, 0, + 141, 5, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 130, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, + 137, 5, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 0, 0, 0, 0, 0, 0, 0, - 85, 5, 0, 0, 202, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, + 133, 5, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 242, 0, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 0, + 133, 5, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 154, 0, 0, 0, + 22, 0, 0, 0, 0, 0, 0, 0, + 133, 5, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56, 0, 0, 0, 0, 0, 0, 0, - 93, 5, 0, 0, 106, 0, 0, 0, + 23, 0, 0, 0, 0, 0, 0, 0, + 133, 5, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 146, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, + 129, 5, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 138, 0, 0, 0, + 118, 0, 0, 0, 0, 0, 0, 0, + 125, 5, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 162, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, + 125, 5, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 59, 0, 0, 0, 0, 0, 0, 0, - 89, 5, 0, 0, 74, 0, 0, 0, + 102, 0, 0, 0, 0, 0, 0, 0, + 121, 5, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60, 0, 0, 0, 0, 0, 0, 0, - 85, 5, 0, 0, 66, 0, 0, 0, + 26, 0, 0, 0, 0, 0, 0, 0, + 125, 5, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 61, 0, 0, 0, 0, 0, 0, 0, - 77, 5, 0, 0, 106, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 0, + 121, 5, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 62, 0, 0, 0, 0, 0, 0, 0, - 73, 5, 0, 0, 138, 0, 0, 0, + 28, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 63, 0, 0, 0, 0, 0, 0, 0, - 73, 5, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 65, 0, 0, 0, 0, 0, 0, 0, - 69, 5, 0, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 110, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 2, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 115, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 111, 0, 0, 0, 0, 0, 0, 0, - 65, 5, 0, 0, 218, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 67, 0, 0, 0, 0, 0, 0, 0, - 69, 5, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 68, 0, 0, 0, 0, 0, 0, 0, - 69, 5, 0, 0, 50, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 234, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 69, 0, 0, 0, 0, 0, 0, 0, - 65, 5, 0, 0, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 234, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 70, 0, 0, 0, 0, 0, 0, 0, - 65, 5, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 71, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 72, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 73, 0, 0, 0, 0, 0, 0, 0, - 53, 5, 0, 0, 146, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 114, 0, 0, 0, 0, 0, 0, 0, - 53, 5, 0, 0, 210, 0, 0, 0, + 29, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 202, 0, 0, 0, + 109, 5, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 146, 0, 0, 0, + 103, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 98, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 218, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 162, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 210, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 106, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 218, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 178, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 38, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 39, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 107, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 108, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 178, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 41, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 42, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 43, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 46, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 49, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 50, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 109, 0, 0, 0, 0, 0, 0, 0, + 97, 5, 0, 0, 250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 110, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 42, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 97, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 42, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 0, 0, 0, 0, + 117, 5, 0, 0, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 0, 0, + 113, 5, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 53, 0, 0, 0, 0, 0, 0, 0, + 109, 5, 0, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 0, 0, 0, 0, 0, 0, + 97, 5, 0, 0, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 242, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 106, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 57, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 58, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 162, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 59, 0, 0, 0, 0, 0, 0, 0, + 101, 5, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 60, 0, 0, 0, 0, 0, 0, 0, + 97, 5, 0, 0, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 61, 0, 0, 0, 0, 0, 0, 0, + 89, 5, 0, 0, 106, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 0, 0, 0, 0, 0, + 85, 5, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 63, 0, 0, 0, 0, 0, 0, 0, + 85, 5, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 65, 0, 0, 0, 0, 0, 0, 0, + 81, 5, 0, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 0, 0, 0, + 73, 5, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 111, 0, 0, 0, 0, 0, 0, 0, + 69, 5, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 18, 1, 0, 0, + 73, 5, 0, 0, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 112, 0, 0, 0, 0, 0, 0, 0, + 77, 5, 0, 0, 218, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 0, 0, 0, 0, 0, 0, + 81, 5, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 0, + 81, 5, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, + 73, 5, 0, 0, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 69, 0, 0, 0, 0, 0, 0, 0, + 77, 5, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 114, 0, 0, 0, 0, 0, 0, 0, + 73, 5, 0, 0, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 70, 0, 0, 0, 0, 0, 0, 0, + 77, 5, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 71, 0, 0, 0, 0, 0, 0, 0, + 73, 5, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 72, 0, 0, 0, 0, 0, 0, 0, + 69, 5, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 73, 0, 0, 0, 0, 0, 0, 0, + 65, 5, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 0, 0, 0, 0, 0, 0, + 65, 5, 0, 0, 210, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 0, + 69, 5, 0, 0, 202, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 75, 0, 0, 0, 0, 0, 0, 0, + 73, 5, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 0, 0, + 73, 5, 0, 0, 98, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 117, 0, 0, 0, 0, 0, 0, 0, + 69, 5, 0, 0, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, - 65, 5, 0, 0, 170, 0, 0, 0, + 77, 5, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, - 65, 5, 0, 0, 74, 0, 0, 0, + 77, 5, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, - 61, 5, 0, 0, 130, 0, 0, 0, + 73, 5, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 146, 0, 0, 0, + 69, 5, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 162, 0, 0, 0, + 69, 5, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 194, 0, 0, 0, + 69, 5, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, - 57, 5, 0, 0, 98, 0, 0, 0, + 69, 5, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, - 53, 5, 0, 0, 106, 0, 0, 0, + 65, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, - 49, 5, 0, 0, 122, 0, 0, 0, + 61, 5, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, - 45, 5, 0, 0, 106, 0, 0, 0, + 57, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 41, 5, 0, 0, 154, 0, 0, 0, + 53, 5, 0, 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, - 41, 5, 0, 0, 138, 0, 0, 0, + 53, 5, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, - 41, 5, 0, 0, 130, 0, 0, 0, + 53, 5, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, - 37, 5, 0, 0, 114, 0, 0, 0, + 49, 5, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, - 33, 5, 0, 0, 138, 0, 0, 0, + 45, 5, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, - 33, 5, 0, 0, 114, 0, 0, 0, + 45, 5, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, - 29, 5, 0, 0, 114, 0, 0, 0, + 41, 5, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, - 25, 5, 0, 0, 122, 0, 0, 0, + 37, 5, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 21, 5, 0, 0, 178, 0, 0, 0, + 33, 5, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 21, 5, 0, 0, 202, 0, 0, 0, + 33, 5, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, - 25, 5, 0, 0, 194, 0, 0, 0, + 37, 5, 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, - 25, 5, 0, 0, 178, 0, 0, 0, + 37, 5, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, - 25, 5, 0, 0, 194, 0, 0, 0, + 37, 5, 0, 0, 194, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, + 37, 5, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 97, 110, 69, 114, 114, 111, 114, 0, 0, 0, 0, 0, 0, 0, 0, @@ -923,18 +926,20 @@ static const ::capnp::_::AlignedData<709> b_baa8c5d505f727de = { 69, 114, 114, 111, 114, 0, 0, 0, 97, 99, 116, 117, 97, 116, 111, 114, 115, 65, 112, 105, 85, 110, 97, 118, - 97, 105, 108, 97, 98, 108, 101, 0, } + 97, 105, 108, 97, 98, 108, 101, 0, + 101, 115, 112, 65, 99, 116, 105, 118, + 101, 0, 0, 0, 0, 0, 0, 0, } }; ::capnp::word const* const bp_baa8c5d505f727de = b_baa8c5d505f727de.words; #if !CAPNP_LITE -static const uint16_t m_baa8c5d505f727de[] = {51, 120, 84, 46, 28, 2, 11, 12, 20, 21, 47, 117, 110, 92, 111, 0, 66, 53, 109, 83, 62, 98, 22, 112, 14, 106, 96, 16, 90, 5, 101, 39, 68, 42, 41, 45, 7, 91, 79, 86, 108, 3, 40, 94, 105, 61, 49, 60, 69, 33, 34, 59, 71, 65, 107, 118, 103, 48, 63, 31, 30, 27, 93, 89, 88, 85, 25, 18, 19, 119, 50, 29, 24, 23, 13, 32, 55, 37, 43, 73, 57, 58, 95, 38, 44, 15, 67, 26, 72, 113, 36, 10, 100, 6, 52, 56, 70, 17, 75, 97, 78, 76, 77, 104, 82, 114, 80, 9, 35, 115, 1, 64, 74, 54, 99, 116, 81, 102, 8, 87, 4}; +static const uint16_t m_baa8c5d505f727de[] = {51, 120, 84, 46, 28, 2, 11, 12, 20, 21, 47, 117, 110, 92, 111, 0, 66, 53, 109, 83, 62, 98, 22, 112, 14, 106, 96, 16, 90, 5, 101, 39, 68, 42, 41, 45, 121, 7, 91, 79, 86, 108, 3, 40, 94, 105, 61, 49, 60, 69, 33, 34, 59, 71, 65, 107, 118, 103, 48, 63, 31, 30, 27, 93, 89, 88, 85, 25, 18, 19, 119, 50, 29, 24, 23, 13, 32, 55, 37, 43, 73, 57, 58, 95, 38, 44, 15, 67, 26, 72, 113, 36, 10, 100, 6, 52, 56, 70, 17, 75, 97, 78, 76, 77, 104, 82, 114, 80, 9, 35, 115, 1, 64, 74, 54, 99, 116, 81, 102, 8, 87, 4}; const ::capnp::_::RawSchema s_baa8c5d505f727de = { - 0xbaa8c5d505f727de, b_baa8c5d505f727de.words, 709, nullptr, m_baa8c5d505f727de, - 0, 121, nullptr, nullptr, nullptr, { &s_baa8c5d505f727de, nullptr, nullptr, 0, 0, nullptr }, false + 0xbaa8c5d505f727de, b_baa8c5d505f727de.words, 714, nullptr, m_baa8c5d505f727de, + 0, 122, nullptr, nullptr, nullptr, { &s_baa8c5d505f727de, nullptr, nullptr, 0, 0, nullptr }, false }; #endif // !CAPNP_LITE CAPNP_DEFINE_ENUM(EventName_baa8c5d505f727de, baa8c5d505f727de); -static const ::capnp::_::AlignedData<871> b_9da4fa09e052903c = { +static const ::capnp::_::AlignedData<887> b_9da4fa09e052903c = { { 0, 0, 0, 0, 5, 0, 6, 0, 60, 144, 82, 224, 9, 250, 164, 157, 10, 0, 0, 0, 1, 0, 9, 0, @@ -944,7 +949,7 @@ static const ::capnp::_::AlignedData<871> b_9da4fa09e052903c = { 21, 0, 0, 0, 154, 0, 0, 0, 29, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 47, 11, 0, 0, + 89, 0, 0, 0, 103, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 97, 114, 46, 99, 97, 112, 110, @@ -967,364 +972,371 @@ static const ::capnp::_::AlignedData<871> b_9da4fa09e052903c = { 116, 101, 114, 0, 0, 0, 0, 0, 66, 117, 116, 116, 111, 110, 69, 118, 101, 110, 116, 0, 0, 0, 0, 0, - 204, 0, 0, 0, 3, 0, 4, 0, - 46, 0, 0, 0, 0, 0, 0, 0, + 208, 0, 0, 0, 3, 0, 4, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 133, 5, 0, 0, 138, 0, 0, 0, + 161, 5, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 136, 5, 0, 0, 3, 0, 1, 0, - 164, 5, 0, 0, 2, 0, 1, 0, + 164, 5, 0, 0, 3, 0, 1, 0, + 192, 5, 0, 0, 2, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 5, 0, 0, 42, 0, 0, 0, + 189, 5, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 156, 5, 0, 0, 3, 0, 1, 0, - 168, 5, 0, 0, 2, 0, 1, 0, + 184, 5, 0, 0, 3, 0, 1, 0, + 196, 5, 0, 0, 2, 0, 1, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 165, 5, 0, 0, 98, 0, 0, 0, + 193, 5, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 164, 5, 0, 0, 3, 0, 1, 0, - 176, 5, 0, 0, 2, 0, 1, 0, + 192, 5, 0, 0, 3, 0, 1, 0, + 204, 5, 0, 0, 2, 0, 1, 0, 11, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 173, 5, 0, 0, 34, 0, 0, 0, + 201, 5, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 168, 5, 0, 0, 3, 0, 1, 0, - 180, 5, 0, 0, 2, 0, 1, 0, + 196, 5, 0, 0, 3, 0, 1, 0, + 208, 5, 0, 0, 2, 0, 1, 0, 12, 0, 0, 0, 64, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 177, 5, 0, 0, 90, 0, 0, 0, + 205, 5, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 176, 5, 0, 0, 3, 0, 1, 0, - 188, 5, 0, 0, 2, 0, 1, 0, + 204, 5, 0, 0, 3, 0, 1, 0, + 216, 5, 0, 0, 2, 0, 1, 0, 14, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 5, 0, 0, 50, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 180, 5, 0, 0, 3, 0, 1, 0, - 192, 5, 0, 0, 2, 0, 1, 0, - 15, 0, 0, 0, 65, 0, 0, 0, - 0, 0, 1, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 189, 5, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 188, 5, 0, 0, 3, 0, 1, 0, - 200, 5, 0, 0, 2, 0, 1, 0, - 19, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 1, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 197, 5, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 200, 5, 0, 0, 3, 0, 1, 0, - 212, 5, 0, 0, 2, 0, 1, 0, - 22, 0, 0, 0, 5, 0, 0, 0, - 0, 0, 1, 0, 8, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 209, 5, 0, 0, 122, 0, 0, 0, + 213, 5, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 5, 0, 0, 3, 0, 1, 0, 220, 5, 0, 0, 2, 0, 1, 0, - 24, 0, 0, 0, 66, 0, 0, 0, - 0, 0, 1, 0, 9, 0, 0, 0, + 15, 0, 0, 0, 65, 0, 0, 0, + 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 217, 5, 0, 0, 130, 0, 0, 0, + 217, 5, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 5, 0, 0, 3, 0, 1, 0, 228, 5, 0, 0, 2, 0, 1, 0, - 32, 0, 0, 0, 2, 0, 0, 0, + 19, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 1, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 225, 5, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 228, 5, 0, 0, 3, 0, 1, 0, + 240, 5, 0, 0, 2, 0, 1, 0, + 22, 0, 0, 0, 5, 0, 0, 0, + 0, 0, 1, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 237, 5, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 236, 5, 0, 0, 3, 0, 1, 0, + 248, 5, 0, 0, 2, 0, 1, 0, + 24, 0, 0, 0, 66, 0, 0, 0, + 0, 0, 1, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 245, 5, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 244, 5, 0, 0, 3, 0, 1, 0, + 0, 6, 0, 0, 2, 0, 1, 0, + 33, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 225, 5, 0, 0, 98, 0, 0, 0, + 253, 5, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 224, 5, 0, 0, 3, 0, 1, 0, - 236, 5, 0, 0, 2, 0, 1, 0, - 34, 0, 0, 0, 3, 0, 0, 0, + 252, 5, 0, 0, 3, 0, 1, 0, + 8, 6, 0, 0, 2, 0, 1, 0, + 35, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 233, 5, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 232, 5, 0, 0, 3, 0, 1, 0, - 4, 6, 0, 0, 2, 0, 1, 0, - 49, 0, 0, 0, 4, 0, 0, 0, - 0, 0, 1, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 6, 0, 0, 186, 0, 0, 0, + 5, 6, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 3, 0, 1, 0, 32, 6, 0, 0, 2, 0, 1, 0, + 50, 0, 0, 0, 4, 0, 0, 0, + 0, 0, 1, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 29, 6, 0, 0, 186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 6, 0, 0, 3, 0, 1, 0, + 60, 6, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 6, 0, 0, 58, 0, 0, 0, + 57, 6, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 6, 0, 0, 3, 0, 1, 0, - 52, 6, 0, 0, 2, 0, 1, 0, - 33, 0, 0, 0, 5, 0, 0, 0, + 52, 6, 0, 0, 3, 0, 1, 0, + 80, 6, 0, 0, 2, 0, 1, 0, + 34, 0, 0, 0, 5, 0, 0, 0, 0, 0, 1, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 6, 0, 0, 98, 0, 0, 0, + 77, 6, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 6, 0, 0, 3, 0, 1, 0, - 60, 6, 0, 0, 2, 0, 1, 0, + 76, 6, 0, 0, 3, 0, 1, 0, + 88, 6, 0, 0, 2, 0, 1, 0, 21, 0, 0, 0, 6, 0, 0, 0, 0, 0, 1, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 6, 0, 0, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 56, 6, 0, 0, 3, 0, 1, 0, - 68, 6, 0, 0, 2, 0, 1, 0, - 5, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 1, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 65, 6, 0, 0, 42, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 60, 6, 0, 0, 3, 0, 1, 0, - 72, 6, 0, 0, 2, 0, 1, 0, - 6, 0, 0, 0, 8, 0, 0, 0, - 0, 0, 1, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 69, 6, 0, 0, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 64, 6, 0, 0, 3, 0, 1, 0, - 76, 6, 0, 0, 2, 0, 1, 0, - 9, 0, 0, 0, 67, 0, 0, 0, - 0, 0, 1, 0, 18, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 73, 6, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 72, 6, 0, 0, 3, 0, 1, 0, - 84, 6, 0, 0, 2, 0, 1, 0, - 47, 0, 0, 0, 68, 0, 0, 0, - 0, 0, 1, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 81, 6, 0, 0, 178, 0, 0, 0, + 85, 6, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 6, 0, 0, 3, 0, 1, 0, 96, 6, 0, 0, 2, 0, 1, 0, - 35, 0, 0, 0, 69, 0, 0, 0, - 0, 0, 1, 0, 20, 0, 0, 0, + 5, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 1, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93, 6, 0, 0, 98, 0, 0, 0, + 93, 6, 0, 0, 42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 88, 6, 0, 0, 3, 0, 1, 0, + 100, 6, 0, 0, 2, 0, 1, 0, + 6, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 1, 0, 17, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 97, 6, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 6, 0, 0, 3, 0, 1, 0, 104, 6, 0, 0, 2, 0, 1, 0, - 36, 0, 0, 0, 70, 0, 0, 0, - 0, 0, 1, 0, 21, 0, 0, 0, + 9, 0, 0, 0, 67, 0, 0, 0, + 0, 0, 1, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 6, 0, 0, 106, 0, 0, 0, + 101, 6, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 6, 0, 0, 3, 0, 1, 0, 112, 6, 0, 0, 2, 0, 1, 0, - 8, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 1, 0, 22, 0, 0, 0, + 48, 0, 0, 0, 68, 0, 0, 0, + 0, 0, 1, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 6, 0, 0, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 104, 6, 0, 0, 3, 0, 1, 0, - 116, 6, 0, 0, 2, 0, 1, 0, - 37, 0, 0, 0, 71, 0, 0, 0, - 0, 0, 1, 0, 23, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 113, 6, 0, 0, 114, 0, 0, 0, + 109, 6, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 6, 0, 0, 3, 0, 1, 0, 124, 6, 0, 0, 2, 0, 1, 0, - 38, 0, 0, 0, 72, 0, 0, 0, - 0, 0, 1, 0, 24, 0, 0, 0, + 36, 0, 0, 0, 69, 0, 0, 0, + 0, 0, 1, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 6, 0, 0, 74, 0, 0, 0, + 121, 6, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 6, 0, 0, 3, 0, 1, 0, 132, 6, 0, 0, 2, 0, 1, 0, - 39, 0, 0, 0, 73, 0, 0, 0, - 0, 0, 1, 0, 25, 0, 0, 0, + 37, 0, 0, 0, 70, 0, 0, 0, + 0, 0, 1, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 6, 0, 0, 146, 0, 0, 0, + 129, 6, 0, 0, 106, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 6, 0, 0, 3, 0, 1, 0, + 140, 6, 0, 0, 2, 0, 1, 0, + 8, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 1, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 137, 6, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 6, 0, 0, 3, 0, 1, 0, 144, 6, 0, 0, 2, 0, 1, 0, - 1, 0, 0, 0, 74, 0, 0, 0, - 0, 0, 1, 0, 26, 0, 0, 0, + 38, 0, 0, 0, 71, 0, 0, 0, + 0, 0, 1, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 141, 6, 0, 0, 74, 0, 0, 0, + 141, 6, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 6, 0, 0, 3, 0, 1, 0, 152, 6, 0, 0, 2, 0, 1, 0, - 23, 0, 0, 0, 10, 0, 0, 0, - 0, 0, 1, 0, 27, 0, 0, 0, + 39, 0, 0, 0, 72, 0, 0, 0, + 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 149, 6, 0, 0, 146, 0, 0, 0, + 149, 6, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 6, 0, 0, 3, 0, 1, 0, - 164, 6, 0, 0, 2, 0, 1, 0, - 40, 0, 0, 0, 75, 0, 0, 0, - 0, 0, 1, 0, 28, 0, 0, 0, + 148, 6, 0, 0, 3, 0, 1, 0, + 160, 6, 0, 0, 2, 0, 1, 0, + 40, 0, 0, 0, 73, 0, 0, 0, + 0, 0, 1, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 161, 6, 0, 0, 114, 0, 0, 0, + 157, 6, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 6, 0, 0, 3, 0, 1, 0, 172, 6, 0, 0, 2, 0, 1, 0, - 48, 0, 0, 0, 76, 0, 0, 0, + 1, 0, 0, 0, 74, 0, 0, 0, + 0, 0, 1, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 169, 6, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 168, 6, 0, 0, 3, 0, 1, 0, + 180, 6, 0, 0, 2, 0, 1, 0, + 23, 0, 0, 0, 10, 0, 0, 0, + 0, 0, 1, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 177, 6, 0, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 180, 6, 0, 0, 3, 0, 1, 0, + 192, 6, 0, 0, 2, 0, 1, 0, + 41, 0, 0, 0, 75, 0, 0, 0, + 0, 0, 1, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 189, 6, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 188, 6, 0, 0, 3, 0, 1, 0, + 200, 6, 0, 0, 2, 0, 1, 0, + 49, 0, 0, 0, 76, 0, 0, 0, 0, 0, 1, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 169, 6, 0, 0, 242, 0, 0, 0, + 197, 6, 0, 0, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 176, 6, 0, 0, 3, 0, 1, 0, - 188, 6, 0, 0, 2, 0, 1, 0, + 204, 6, 0, 0, 3, 0, 1, 0, + 216, 6, 0, 0, 2, 0, 1, 0, 27, 0, 0, 0, 77, 0, 0, 0, 0, 0, 1, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 185, 6, 0, 0, 74, 0, 0, 0, + 213, 6, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 184, 6, 0, 0, 3, 0, 1, 0, - 196, 6, 0, 0, 2, 0, 1, 0, + 212, 6, 0, 0, 3, 0, 1, 0, + 224, 6, 0, 0, 2, 0, 1, 0, 28, 0, 0, 0, 78, 0, 0, 0, 0, 0, 1, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 193, 6, 0, 0, 74, 0, 0, 0, + 221, 6, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 192, 6, 0, 0, 3, 0, 1, 0, - 204, 6, 0, 0, 2, 0, 1, 0, + 220, 6, 0, 0, 3, 0, 1, 0, + 232, 6, 0, 0, 2, 0, 1, 0, 29, 0, 0, 0, 79, 0, 0, 0, 0, 0, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 201, 6, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 200, 6, 0, 0, 3, 0, 1, 0, - 212, 6, 0, 0, 2, 0, 1, 0, - 41, 0, 0, 0, 96, 1, 0, 0, - 0, 0, 1, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 209, 6, 0, 0, 114, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 208, 6, 0, 0, 3, 0, 1, 0, - 220, 6, 0, 0, 2, 0, 1, 0, - 42, 0, 0, 0, 97, 1, 0, 0, - 0, 0, 1, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 217, 6, 0, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 216, 6, 0, 0, 3, 0, 1, 0, - 228, 6, 0, 0, 2, 0, 1, 0, - 25, 0, 0, 0, 98, 1, 0, 0, - 0, 0, 1, 0, 35, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 225, 6, 0, 0, 162, 0, 0, 0, + 229, 6, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 6, 0, 0, 3, 0, 1, 0, 240, 6, 0, 0, 2, 0, 1, 0, + 42, 0, 0, 0, 96, 1, 0, 0, + 0, 0, 1, 0, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 237, 6, 0, 0, 114, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 236, 6, 0, 0, 3, 0, 1, 0, + 248, 6, 0, 0, 2, 0, 1, 0, + 43, 0, 0, 0, 97, 1, 0, 0, + 0, 0, 1, 0, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 245, 6, 0, 0, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 244, 6, 0, 0, 3, 0, 1, 0, + 0, 7, 0, 0, 2, 0, 1, 0, + 25, 0, 0, 0, 98, 1, 0, 0, + 0, 0, 1, 0, 35, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 253, 6, 0, 0, 162, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 3, 0, 1, 0, + 12, 7, 0, 0, 2, 0, 1, 0, 26, 0, 0, 0, 99, 1, 0, 0, 0, 0, 1, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 237, 6, 0, 0, 162, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 240, 6, 0, 0, 3, 0, 1, 0, - 252, 6, 0, 0, 2, 0, 1, 0, - 20, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 1, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 249, 6, 0, 0, 186, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 252, 6, 0, 0, 3, 0, 1, 0, - 8, 7, 0, 0, 2, 0, 1, 0, - 18, 0, 0, 0, 100, 1, 0, 0, - 0, 0, 1, 0, 38, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 5, 7, 0, 0, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 7, 0, 0, 3, 0, 1, 0, - 16, 7, 0, 0, 2, 0, 1, 0, - 17, 0, 0, 0, 101, 1, 0, 0, - 0, 0, 1, 0, 39, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 13, 7, 0, 0, 106, 0, 0, 0, + 9, 7, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 7, 0, 0, 3, 0, 1, 0, 24, 7, 0, 0, 2, 0, 1, 0, + 20, 0, 0, 0, 12, 0, 0, 0, + 0, 0, 1, 0, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 21, 7, 0, 0, 186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 24, 7, 0, 0, 3, 0, 1, 0, + 36, 7, 0, 0, 2, 0, 1, 0, + 18, 0, 0, 0, 100, 1, 0, 0, + 0, 0, 1, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 33, 7, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 7, 0, 0, 3, 0, 1, 0, + 44, 7, 0, 0, 2, 0, 1, 0, + 17, 0, 0, 0, 101, 1, 0, 0, + 0, 0, 1, 0, 39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 41, 7, 0, 0, 106, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 7, 0, 0, 3, 0, 1, 0, + 52, 7, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 102, 1, 0, 0, 0, 0, 1, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 21, 7, 0, 0, 90, 0, 0, 0, + 49, 7, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 7, 0, 0, 3, 0, 1, 0, - 32, 7, 0, 0, 2, 0, 1, 0, - 43, 0, 0, 0, 13, 0, 0, 0, + 48, 7, 0, 0, 3, 0, 1, 0, + 60, 7, 0, 0, 2, 0, 1, 0, + 44, 0, 0, 0, 13, 0, 0, 0, 0, 0, 1, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 7, 0, 0, 82, 0, 0, 0, + 57, 7, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 28, 7, 0, 0, 3, 0, 1, 0, - 40, 7, 0, 0, 2, 0, 1, 0, + 56, 7, 0, 0, 3, 0, 1, 0, + 68, 7, 0, 0, 2, 0, 1, 0, 30, 0, 0, 0, 103, 1, 0, 0, 0, 0, 1, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 7, 0, 0, 90, 0, 0, 0, + 65, 7, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 36, 7, 0, 0, 3, 0, 1, 0, - 48, 7, 0, 0, 2, 0, 1, 0, - 44, 0, 0, 0, 104, 1, 0, 0, + 64, 7, 0, 0, 3, 0, 1, 0, + 76, 7, 0, 0, 2, 0, 1, 0, + 45, 0, 0, 0, 104, 1, 0, 0, 0, 0, 1, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 7, 0, 0, 74, 0, 0, 0, + 73, 7, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 44, 7, 0, 0, 3, 0, 1, 0, - 56, 7, 0, 0, 2, 0, 1, 0, + 72, 7, 0, 0, 3, 0, 1, 0, + 84, 7, 0, 0, 2, 0, 1, 0, 7, 0, 0, 0, 14, 0, 0, 0, 0, 0, 1, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 7, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 52, 7, 0, 0, 3, 0, 1, 0, - 64, 7, 0, 0, 2, 0, 1, 0, - 16, 0, 0, 0, 105, 1, 0, 0, - 0, 0, 1, 0, 45, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 61, 7, 0, 0, 106, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 60, 7, 0, 0, 3, 0, 1, 0, - 72, 7, 0, 0, 2, 0, 1, 0, - 13, 0, 0, 0, 15, 0, 0, 0, - 0, 0, 1, 0, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 69, 7, 0, 0, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 68, 7, 0, 0, 3, 0, 1, 0, - 80, 7, 0, 0, 2, 0, 1, 0, - 31, 0, 0, 0, 106, 1, 0, 0, - 0, 0, 1, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 77, 7, 0, 0, 178, 0, 0, 0, + 81, 7, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 7, 0, 0, 3, 0, 1, 0, 92, 7, 0, 0, 2, 0, 1, 0, - 3, 0, 0, 0, 16, 0, 0, 0, - 0, 0, 1, 0, 48, 0, 0, 0, + 16, 0, 0, 0, 105, 1, 0, 0, + 0, 0, 1, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 7, 0, 0, 130, 0, 0, 0, + 89, 7, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 7, 0, 0, 3, 0, 1, 0, 100, 7, 0, 0, 2, 0, 1, 0, - 50, 0, 0, 0, 107, 1, 0, 0, - 0, 0, 1, 0, 49, 0, 0, 0, + 13, 0, 0, 0, 15, 0, 0, 0, + 0, 0, 1, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 7, 0, 0, 194, 0, 0, 0, + 97, 7, 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 7, 0, 0, 3, 0, 1, 0, - 112, 7, 0, 0, 2, 0, 1, 0, - 45, 0, 0, 0, 17, 0, 0, 0, - 0, 0, 1, 0, 50, 0, 0, 0, + 96, 7, 0, 0, 3, 0, 1, 0, + 108, 7, 0, 0, 2, 0, 1, 0, + 31, 0, 0, 0, 106, 1, 0, 0, + 0, 0, 1, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 7, 0, 0, 74, 0, 0, 0, + 105, 7, 0, 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 7, 0, 0, 3, 0, 1, 0, 120, 7, 0, 0, 2, 0, 1, 0, + 3, 0, 0, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 117, 7, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 116, 7, 0, 0, 3, 0, 1, 0, + 128, 7, 0, 0, 2, 0, 1, 0, + 51, 0, 0, 0, 107, 1, 0, 0, + 0, 0, 1, 0, 49, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 125, 7, 0, 0, 194, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 7, 0, 0, 3, 0, 1, 0, + 140, 7, 0, 0, 2, 0, 1, 0, + 46, 0, 0, 0, 17, 0, 0, 0, + 0, 0, 1, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 137, 7, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 136, 7, 0, 0, 3, 0, 1, 0, + 148, 7, 0, 0, 2, 0, 1, 0, + 32, 0, 0, 0, 108, 1, 0, 0, + 0, 0, 1, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 145, 7, 0, 0, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 144, 7, 0, 0, 3, 0, 1, 0, + 156, 7, 0, 0, 2, 0, 1, 0, 101, 114, 114, 111, 114, 115, 68, 69, 80, 82, 69, 67, 65, 84, 69, 68, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1804,6 +1816,15 @@ static const ::capnp::_::AlignedData<871> b_9da4fa09e052903c = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 101, 115, 112, 65, 99, 116, 105, 118, + 101, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } }; @@ -1817,11 +1838,11 @@ static const ::capnp::_::RawSchema* const d_9da4fa09e052903c[] = { &s_e64e81478e6e60af, &s_ff5ca6835b4acef6, }; -static const uint16_t m_9da4fa09e052903c[] = {16, 42, 5, 38, 19, 6, 11, 48, 12, 49, 40, 26, 47, 43, 28, 10, 50, 24, 46, 0, 32, 13, 41, 3, 4, 14, 23, 33, 20, 39, 45, 34, 21, 25, 18, 36, 35, 7, 37, 9, 15, 29, 8, 27, 30, 31, 1, 44, 17, 2, 22}; -static const uint16_t i_9da4fa09e052903c[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50}; +static const uint16_t m_9da4fa09e052903c[] = {16, 42, 5, 38, 19, 6, 11, 48, 12, 49, 40, 26, 47, 43, 28, 10, 50, 24, 46, 0, 51, 32, 13, 41, 3, 4, 14, 23, 33, 20, 39, 45, 34, 21, 25, 18, 36, 35, 7, 37, 9, 15, 29, 8, 27, 30, 31, 1, 44, 17, 2, 22}; +static const uint16_t i_9da4fa09e052903c[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51}; const ::capnp::_::RawSchema s_9da4fa09e052903c = { - 0x9da4fa09e052903c, b_9da4fa09e052903c.words, 871, d_9da4fa09e052903c, m_9da4fa09e052903c, - 6, 51, i_9da4fa09e052903c, nullptr, nullptr, { &s_9da4fa09e052903c, nullptr, nullptr, 0, 0, nullptr }, false + 0x9da4fa09e052903c, b_9da4fa09e052903c.words, 887, d_9da4fa09e052903c, m_9da4fa09e052903c, + 6, 52, i_9da4fa09e052903c, nullptr, nullptr, { &s_9da4fa09e052903c, nullptr, nullptr, 0, 0, nullptr }, false }; #endif // !CAPNP_LITE static const ::capnp::_::AlignedData<78> b_991a37a6155935a3 = { diff --git a/cereal/gen/cpp/car.capnp.h b/cereal/gen/cpp/car.capnp.h index 37af5c819..9caf74aa7 100644 --- a/cereal/gen/cpp/car.capnp.h +++ b/cereal/gen/cpp/car.capnp.h @@ -142,6 +142,7 @@ enum class EventName_baa8c5d505f727de: uint16_t { LOCATIOND_PERMANENT_ERROR, PARAMSD_PERMANENT_ERROR, ACTUATORS_API_UNAVAILABLE, + ESP_ACTIVE, }; CAPNP_DECLARE_ENUM(EventName, baa8c5d505f727de); CAPNP_DECLARE_SCHEMA(9da4fa09e052903c); @@ -966,6 +967,8 @@ public: inline float getCumLagMs() const; + inline bool getEspActive() const; + private: ::capnp::_::StructReader _reader; template @@ -1173,6 +1176,9 @@ public: inline float getCumLagMs(); inline void setCumLagMs(float value); + inline bool getEspActive(); + inline void setEspActive(bool value); + private: ::capnp::_::StructBuilder _builder; template @@ -4943,6 +4949,20 @@ inline void CarState::Builder::setCumLagMs(float value) { ::capnp::bounded<17>() * ::capnp::ELEMENTS, value); } +inline bool CarState::Reader::getEspActive() const { + return _reader.getDataField( + ::capnp::bounded<364>() * ::capnp::ELEMENTS); +} + +inline bool CarState::Builder::getEspActive() { + return _builder.getDataField( + ::capnp::bounded<364>() * ::capnp::ELEMENTS); +} +inline void CarState::Builder::setEspActive(bool value) { + _builder.setDataField( + ::capnp::bounded<364>() * ::capnp::ELEMENTS, value); +} + inline float CarState::WheelSpeeds::Reader::getFl() const { return _reader.getDataField( ::capnp::bounded<0>() * ::capnp::ELEMENTS); diff --git a/cereal/libcereal_shared.so b/cereal/libcereal_shared.so index 5038713e6..ab2f8f058 100755 Binary files a/cereal/libcereal_shared.so and b/cereal/libcereal_shared.so differ diff --git a/cereal/messaging/.gitignore b/cereal/messaging/.gitignore deleted file mode 100644 index dbbe8e22a..000000000 --- a/cereal/messaging/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -demo -bridge -test_runner -*.o -*.os -*.d -*.a -*.so -messaging_pyx.cpp -build/ diff --git a/cereal/messaging/messaging.h b/cereal/messaging/messaging.h index f3850130e..fb9c261f2 100644 --- a/cereal/messaging/messaging.h +++ b/cereal/messaging/messaging.h @@ -5,20 +5,13 @@ #include #include #include -#include #include #include "cereal/gen/cpp/log.capnp.h" +#include "common/timing.h" #include "msgq/ipc.h" -#ifdef __APPLE__ -#define CLOCK_BOOTTIME CLOCK_MONOTONIC -#endif - -#define MSG_MULTIPLE_PUBLISHERS 100 - - class SubMaster { public: SubMaster(const std::vector &service_list, const std::vector &poll = {}, @@ -53,10 +46,7 @@ public: cereal::Event::Builder initEvent(bool valid = true) { cereal::Event::Builder event = initRoot(); - struct timespec t; - clock_gettime(CLOCK_BOOTTIME, &t); - uint64_t current_time = t.tv_sec * 1000000000ULL + t.tv_nsec; - event.setLogMonoTime(current_time); + event.setLogMonoTime(nanos_since_boot()); event.setValid(valid); return event; } diff --git a/common/params_pyx.so b/common/params_pyx.so index 418788b4a..b099231e8 100755 Binary files a/common/params_pyx.so and b/common/params_pyx.so differ diff --git a/docs/CARS.md b/docs/CARS.md index 2c32a77f0..769fe6e27 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -27,7 +27,7 @@ A supported vehicle is one that just works when you install a comma device. All |Chrysler|Pacifica 2021-23|All|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Chrysler|Pacifica Hybrid 2017|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Chrysler|Pacifica Hybrid 2018|Adaptive Cruise Control (ACC)|Stock|0 mph|9 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Chrysler|Pacifica Hybrid 2019-23|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Chrysler|Pacifica Hybrid 2019-24|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |comma|body|All|openpilot|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|None|| |CUPRA|Ateca 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|openpilot available[1,12](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 USB-C coupler
- 1 VW J533 connector
- 1 comma 3X
- 1 harness box
- 1 long OBD-C cable
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Dodge|Durango 2020-21|Adaptive Cruise Control (ACC)|Stock|0 mph|39 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 FCA connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| @@ -54,17 +54,17 @@ A supported vehicle is one that just works when you install a comma device. All |Genesis|G90 2017-20|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai C connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Genesis|GV60 (Advanced Trim) 2023[5](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Genesis|GV60 (Performance Trim) 2023[5](#footnotes)|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai K connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV70 (2.5T Trim) 2022-23[5](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Genesis|GV70 (3.5T Trim) 2022-23[5](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV70 (2.5T Trim, without HDA II) 2022-23[5](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai L connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Genesis|GV70 (3.5T Trim, without HDA II) 2022-23[5](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Genesis|GV80 2023[5](#footnotes)|All|Stock|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Hyundai M connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |GMC|Sierra 1500 2020-21|Driver Alert Package II|openpilot available[1](#footnotes)|0 mph|6 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 GM connector
- 1 comma 3X
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|Accord 2018-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|Accord Hybrid 2018-22|All|openpilot available[1](#footnotes)|0 mph|3 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|Civic 2016-18|Honda Sensing|openpilot|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|Civic 2019-21|All|openpilot available[1](#footnotes)|0 mph|2 mph[4](#footnotes)|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic 2022-24|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|Civic Hatchback 2017-21|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| -|Honda|Civic Hatchback 2022-23|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| +|Honda|Civic Hatchback 2022-24|All|openpilot available[1](#footnotes)|0 mph|0 mph|[![star](assets/icon-star-full.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch B connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|CR-V 2015-16|Touring Trim|openpilot|25 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-empty.svg)](##)|
Parts- 1 Honda Nidec connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|CR-V 2017-22|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| |Honda|CR-V Hybrid 2017-21|Honda Sensing|openpilot available[1](#footnotes)|0 mph|12 mph|[![star](assets/icon-star-empty.svg)](##)|[![star](assets/icon-star-full.svg)](##)|
Parts- 1 Honda Bosch A connector
- 1 RJ45 cable (7 ft)
- 1 comma 3X
- 1 comma power v2
- 1 harness box
- 1 mount
- 1 right angle OBD-C cable (1.5 ft)
Buy Here
|| diff --git a/docs/new/README.md b/docs/new/README.md new file mode 100644 index 000000000..fc6706f79 --- /dev/null +++ b/docs/new/README.md @@ -0,0 +1,12 @@ +This is the source for a new https://docs.comma.ai. It's not hosted anywhere yet, but it's easy to run locally. + +https://www.mkdocs.org/getting-started/ + +``` +pip install mkdocs mkdocs-terminal +mkdocs --serve +``` + +inspiration: +* https://rerun.io/docs/ +* https://docs.expo.dev/ diff --git a/docs/new/docs/car-porting/brand-port.md b/docs/new/docs/car-porting/brand-port.md new file mode 100644 index 000000000..a3daa7a84 --- /dev/null +++ b/docs/new/docs/car-porting/brand-port.md @@ -0,0 +1,5 @@ +# Developing a car brand port + +A brand port is a port of openpilot to a substantially new car brand or platform within a brand. + +Here's an example of one: https://github.com/commaai/openpilot/pull/23331. diff --git a/docs/new/docs/car-porting/model-port.md b/docs/new/docs/car-porting/model-port.md new file mode 100644 index 000000000..e148a40ec --- /dev/null +++ b/docs/new/docs/car-porting/model-port.md @@ -0,0 +1,5 @@ +# Developing a car model port + +A model port is a port of openpilot to a new car model within an already supported brand. Model ports are easier than brand ports because the car's existing APIs are already known. + +Here's an example of one: https://github.com/commaai/openpilot/pull/30672/. diff --git a/docs/new/docs/car-porting/what-is-a-car-port.md b/docs/new/docs/car-porting/what-is-a-car-port.md new file mode 100644 index 000000000..d089d9513 --- /dev/null +++ b/docs/new/docs/car-porting/what-is-a-car-port.md @@ -0,0 +1,9 @@ +# What is a car port? + +All car ports live in `openpilot/selfdrive/car/`. + +* interface.py: Interface for the car, defines the CarInterface class +* carstate.py: Reads CAN from car and builds openpilot CarState message +* carcontroller.py: Builds CAN messages to send to car +* values.py: Limits for actuation, general constants for cars, and supported car documentation +* radar_interface.py: Interface for parsing radar points from the car diff --git a/docs/new/docs/getting-started/what-is-openpilot.md b/docs/new/docs/getting-started/what-is-openpilot.md new file mode 100644 index 000000000..de45ae035 --- /dev/null +++ b/docs/new/docs/getting-started/what-is-openpilot.md @@ -0,0 +1,12 @@ +# 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). + + +## How do I use it? + +openpilot is designed to be used on the comma 3X. + +## How does it work? + +In short, openpilot uses the car's existing APIs for the built-in [ADAS](https://en.wikipedia.org/wiki/Advanced_driver-assistance_system) system and simply provides better acceleration, braking, and steering inputs than the stock system. diff --git a/docs/new/docs/how-to/turning-the-speed-blue.md b/docs/new/docs/how-to/turning-the-speed-blue.md new file mode 100644 index 000000000..f68faa7b9 --- /dev/null +++ b/docs/new/docs/how-to/turning-the-speed-blue.md @@ -0,0 +1,4 @@ +This section is for how-to's on common workflows. + +They'll be like this blog post we wrote: +https://blog.comma.ai/turning-the-speed-blue/ diff --git a/docs/new/mkdocs.yml b/docs/new/mkdocs.yml new file mode 100644 index 000000000..b0f571954 --- /dev/null +++ b/docs/new/mkdocs.yml @@ -0,0 +1,18 @@ +site_name: openpilot docs +docs_dir: docs +repo_url: https://github.com/commaai/openpilot/ + +theme: + name: terminal + features: + - navigation.side.toc.hide + +nav: + - Getting Started: + - What is openpilot?: getting-started/what-is-openpilot.md + - How-to: + - Turn the speed blue: how-to/turning-the-speed-blue.md + - Car Porting: + - What is a car port?: car-porting/what-is-a-car-port.md + - Porting a car brand: car-porting/brand-port.md + - Porting a car model: car-porting/model-port.md diff --git a/dp_ext/selfdrive/car/toyota/pcm_compensation_controller.py b/dp_ext/selfdrive/car/toyota/pcm_compensation_controller.py new file mode 100644 index 000000000..bf16541e9 --- /dev/null +++ b/dp_ext/selfdrive/car/toyota/pcm_compensation_controller.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# The MIT License +# +# Copyright (c) 2019-, Rick Lan, dragonpilot community, and a number of other of contributors. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +# code originally from @cydia2020, see https://github.com/commaai/openpilot/pull/30697/files + + +from openpilot.common.numpy_fast import clip, interp + +# PCM compensatory force calculation threshold +# a variation in accel command is more pronounced at higher speeds, let compensatory forces ramp to zero before +# applying when speed is high +COMPENSATORY_CALCULATION_THRESHOLD_V = [-0.3, -0.25, 0.] # m/s^2 +COMPENSATORY_CALCULATION_THRESHOLD_BP = [0., 11., 23.] # m/s + +class PCMCompensationController: + def __init__(self, cp, params, is_enabled): + self.cp = cp + self.params = params + self.prohibit_neg_calculation = True + self._is_enabled = is_enabled + pass + + def get_pcm_accel_cmd(self, long_active, v_ego, pcm_neutral_force, accel): + # prohibit negative compensatory calculations when first activating long after accelerator depression or engagement + if not long_active: + self.prohibit_neg_calculation = True + comp_thresh = interp(v_ego, COMPENSATORY_CALCULATION_THRESHOLD_BP, COMPENSATORY_CALCULATION_THRESHOLD_V) + # don't reset until a reasonable compensatory value is reached + if pcm_neutral_force > comp_thresh * self.cp.mass: + self.prohibit_neg_calculation = False + # limit minimum to only positive until first positive is reached after engagement, don't calculate when long isn't active + if long_active and not self.prohibit_neg_calculation: + accel_offset = pcm_neutral_force / self.cp.mass + else: + accel_offset = 0. + # only calculate pcm_accel_cmd when long is active to prevent disengagement from accelerator depression + if long_active: + pcm_accel_cmd = clip(accel + accel_offset, self.params.ACCEL_MIN, self.params.ACCEL_MAX) + else: + pcm_accel_cmd = 0. + + return pcm_accel_cmd + + def is_enabled(self): + return self._is_enabled diff --git a/dp_ext/selfdrive/monitoring/dmonitoringd.py b/dp_ext/selfdrive/monitoring/dmonitoringd.py index 6f1b9ee8b..b0ac7b334 100755 --- a/dp_ext/selfdrive/monitoring/dmonitoringd.py +++ b/dp_ext/selfdrive/monitoring/dmonitoringd.py @@ -18,16 +18,16 @@ def dmonitoringd_thread(sm=None, pm=None): # 10Hz <- dmonitoringmodeld while True: - dat = messaging.new_message('driverStateV2', valid=True) + dat = messaging.new_message('driverStateV2') dat.driverStateV2.leftDriverData.faceOrientation = [0., 0., 0.] dat.driverStateV2.leftDriverData.faceProb = 1.0 dat.driverStateV2.rightDriverData.faceOrientation = [0., 0., 0.] dat.driverStateV2.rightDriverData.faceProb = 1.0 pm.send('driverStateV2', dat) + # dmonitoringd output dat = messaging.new_message('driverMonitoringState', valid=True) dat.driverMonitoringState = { - "events": Events().to_msg(), "faceDetected": True, "isDistracted": False, "awarenessStatus": 1., diff --git a/opendbc/can/libdbc.so b/opendbc/can/libdbc.so index 91f5a56d0..8887300e8 100755 Binary files a/opendbc/can/libdbc.so and b/opendbc/can/libdbc.so differ diff --git a/panda/Jenkinsfile b/panda/Jenkinsfile index 2d4c615df..b3b269086 100644 --- a/panda/Jenkinsfile +++ b/panda/Jenkinsfile @@ -73,56 +73,57 @@ pipeline { } stages { - stage('panda tests') { - parallel { - stage('test dos') { - agent { docker { image 'ghcr.io/commaai/alpine-ssh'; args '--user=root' } } + stage ('Acquire resource locks') { + options { + lock(resource: "pandas") + } + stages { + stage('Build Docker Image') { steps { - phone_steps("panda-dos", [ - ["build", "scons -j4"], - ["flash", "cd tests/ && ./reflash_internal_panda.py"], - ["flash jungle", "cd board/jungle && ./flash.py"], - ["test", "cd tests/hitl && HW_TYPES=6 pytest -n0 --durations=0 [2-9]*.py -k 'not test_send_recv'"], - ]) + timeout(time: 20, unit: 'MINUTES') { + script { + sh 'git archive -v -o panda.tar.gz --format=tar.gz HEAD' + dockerImage = docker.build("${env.DOCKER_IMAGE_TAG}") + } + } + } + } + stage('jungle tests') { + steps { + script { + retry (3) { + docker_run("reset hardware", 3, "python ./tests/hitl/reset_jungles.py") + } + } } } - stage('test tres') { - agent { docker { image 'ghcr.io/commaai/alpine-ssh'; args '--user=root' } } - steps { - phone_steps("panda-tres", [ - ["build", "scons -j4"], - ["flash", "cd tests/ && ./reflash_internal_panda.py"], - ["flash jungle", "cd board/jungle && ./flash.py"], - ["test", "cd tests/hitl && HW_TYPES=9 pytest -n0 --durations=0 2*.py [5-9]*.py"], - ]) - } - } + stage('parallel tests') { + parallel { + stage('test tres') { + agent { docker { image 'ghcr.io/commaai/alpine-ssh'; args '--user=root' } } + steps { + phone_steps("panda-tres", [ + ["build", "scons -j4"], + ["flash", "cd tests/ && ./reflash_internal_panda.py"], + ["flash jungle", "cd board/jungle && ./flash.py"], + ["test", "cd tests/hitl && HW_TYPES=9 pytest -n0 --durations=0 2*.py [5-9]*.py"], + ]) + } + } - stage ('Acquire resource locks') { - options { - lock(resource: "pandas") - } - stages { - stage('Build Docker Image') { + stage('test dos') { + agent { docker { image 'ghcr.io/commaai/alpine-ssh'; args '--user=root' } } steps { - timeout(time: 20, unit: 'MINUTES') { - script { - sh 'git archive -v -o panda.tar.gz --format=tar.gz HEAD' - dockerImage = docker.build("${env.DOCKER_IMAGE_TAG}") - } - } - } - } - stage('jungle tests') { - steps { - script { - retry (3) { - docker_run("reset hardware", 3, "python ./tests/hitl/reset_jungles.py") - } - } + phone_steps("panda-dos", [ + ["build", "scons -j4"], + ["flash", "cd tests/ && ./reflash_internal_panda.py"], + ["flash jungle", "cd board/jungle && ./flash.py"], + ["test", "cd tests/hitl && HW_TYPES=6 pytest -n0 --durations=0 [2-9]*.py -k 'not test_send_recv'"], + ]) } } + stage('bootkick tests') { steps { script { diff --git a/panda/README.md b/panda/README.md index b2830b21e..b9853e590 100644 --- a/panda/README.md +++ b/panda/README.md @@ -23,7 +23,7 @@ Safety modes optionally support `controls_allowed`, which allows or blocks a sub ## Code Rigor -The panda firmware is written for its use in conjuction with [openpilot](https://github.com/commaai/openpilot). The panda firmware, through its safety model, provides and enforces the +The panda firmware is written for its use in conjunction with [openpilot](https://github.com/commaai/openpilot). The panda firmware, through its safety model, provides and enforces the [openpilot safety](https://github.com/commaai/openpilot/blob/master/docs/SAFETY.md). Due to its critical function, it's important that the application code rigor within the `board` folder is held to high standards. These are the [CI regression tests](https://github.com/commaai/panda/actions) we have in place: diff --git a/panda/board/jungle/obj/bootstub.panda_jungle.bin b/panda/board/jungle/obj/bootstub.panda_jungle.bin index 8b02979e3..1e5d1d4e9 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle.bin and b/panda/board/jungle/obj/bootstub.panda_jungle.bin differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle.elf b/panda/board/jungle/obj/bootstub.panda_jungle.elf index 95f00d0b0..749d1c722 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle.elf and b/panda/board/jungle/obj/bootstub.panda_jungle.elf differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin b/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin index 9759d9a5d..faf50578a 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin and b/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin differ diff --git a/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf b/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf index 2916b70a3..001c2719c 100755 Binary files a/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf and b/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf differ diff --git a/panda/board/jungle/obj/panda_jungle.bin b/panda/board/jungle/obj/panda_jungle.bin index 15eb2edd4..3d3e512c0 100755 Binary files a/panda/board/jungle/obj/panda_jungle.bin and b/panda/board/jungle/obj/panda_jungle.bin differ diff --git a/panda/board/jungle/obj/panda_jungle.bin.signed b/panda/board/jungle/obj/panda_jungle.bin.signed index 449ebbc29..a630c26aa 100644 Binary files a/panda/board/jungle/obj/panda_jungle.bin.signed and b/panda/board/jungle/obj/panda_jungle.bin.signed differ diff --git a/panda/board/jungle/obj/panda_jungle.elf b/panda/board/jungle/obj/panda_jungle.elf index 9880976f4..48f11de19 100755 Binary files a/panda/board/jungle/obj/panda_jungle.elf and b/panda/board/jungle/obj/panda_jungle.elf differ diff --git a/panda/board/jungle/obj/panda_jungle_h7.bin b/panda/board/jungle/obj/panda_jungle_h7.bin index 4e890fcd5..9fdf5aaa9 100755 Binary files a/panda/board/jungle/obj/panda_jungle_h7.bin and b/panda/board/jungle/obj/panda_jungle_h7.bin differ diff --git a/panda/board/jungle/obj/panda_jungle_h7.bin.signed b/panda/board/jungle/obj/panda_jungle_h7.bin.signed index b3aa85eac..dc1fb0256 100644 Binary files a/panda/board/jungle/obj/panda_jungle_h7.bin.signed and b/panda/board/jungle/obj/panda_jungle_h7.bin.signed differ diff --git a/panda/board/jungle/obj/panda_jungle_h7.elf b/panda/board/jungle/obj/panda_jungle_h7.elf index 9b26ffa53..9a826077d 100755 Binary files a/panda/board/jungle/obj/panda_jungle_h7.elf and b/panda/board/jungle/obj/panda_jungle_h7.elf differ diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin index 067fd54c7..1d71bc6f4 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/bootstub.panda.elf b/panda/board/obj/bootstub.panda.elf index b7247ad57..f6c9c03a8 100755 Binary files a/panda/board/obj/bootstub.panda.elf and b/panda/board/obj/bootstub.panda.elf differ diff --git a/panda/board/obj/bootstub.panda_h7.bin b/panda/board/obj/bootstub.panda_h7.bin index 60cdf46f7..b1e93ff45 100755 Binary files a/panda/board/obj/bootstub.panda_h7.bin and b/panda/board/obj/bootstub.panda_h7.bin differ diff --git a/panda/board/obj/bootstub.panda_h7.elf b/panda/board/obj/bootstub.panda_h7.elf index c99256b87..6a2bab5d9 100755 Binary files a/panda/board/obj/bootstub.panda_h7.elf and b/panda/board/obj/bootstub.panda_h7.elf differ diff --git a/panda/board/obj/gitversion.h b/panda/board/obj/gitversion.h index c9e29a52c..ecd1d029a 100644 --- a/panda/board/obj/gitversion.h +++ b/panda/board/obj/gitversion.h @@ -1 +1 @@ -const uint8_t gitversion[] = "DEV-1722b595-DEBUG"; +const uint8_t gitversion[] = "DEV-2dfc842c-DEBUG"; diff --git a/panda/board/obj/panda.bin b/panda/board/obj/panda.bin index 1843d908b..fea9de860 100755 Binary files a/panda/board/obj/panda.bin and b/panda/board/obj/panda.bin differ diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed index e1e50b3ad..6d28bb769 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.elf b/panda/board/obj/panda.elf index 791d808e1..0be0d10de 100755 Binary files a/panda/board/obj/panda.elf and b/panda/board/obj/panda.elf differ diff --git a/panda/board/obj/panda_h7.bin b/panda/board/obj/panda_h7.bin index 63cdae027..3c788a8eb 100755 Binary files a/panda/board/obj/panda_h7.bin and b/panda/board/obj/panda_h7.bin differ diff --git a/panda/board/obj/panda_h7.bin.signed b/panda/board/obj/panda_h7.bin.signed index 8a7635a3a..49faae5a8 100644 Binary files a/panda/board/obj/panda_h7.bin.signed and b/panda/board/obj/panda_h7.bin.signed differ diff --git a/panda/board/obj/panda_h7.elf b/panda/board/obj/panda_h7.elf index a563d4451..9a1fc5872 100755 Binary files a/panda/board/obj/panda_h7.elf and b/panda/board/obj/panda_h7.elf differ diff --git a/panda/board/obj/version b/panda/board/obj/version index 32da79122..ec2a71e3d 100644 --- a/panda/board/obj/version +++ b/panda/board/obj/version @@ -1 +1 @@ -DEV-1722b595-DEBUG \ No newline at end of file +DEV-2dfc842c-DEBUG \ No newline at end of file diff --git a/selfdrive/assets/translations_assets.qrc b/selfdrive/assets/translations_assets.qrc index b70d21358..06427759a 100644 --- a/selfdrive/assets/translations_assets.qrc +++ b/selfdrive/assets/translations_assets.qrc @@ -4,6 +4,7 @@ ../ui/translations/main_de.qm ../ui/translations/main_fr.qm ../ui/translations/main_pt-BR.qm +../ui/translations/main_es.qm ../ui/translations/main_tr.qm ../ui/translations/main_ar.qm ../ui/translations/main_th.qm diff --git a/selfdrive/car/chrysler/fingerprints.py b/selfdrive/car/chrysler/fingerprints.py index 5072aad5c..018505a91 100644 --- a/selfdrive/car/chrysler/fingerprints.py +++ b/selfdrive/car/chrysler/fingerprints.py @@ -232,6 +232,7 @@ FW_VERSIONS = { b'68540436AD', b'68598670AB', b'68598670AC', + b'68645752AA', ], (Ecu.eps, 0x75a, None): [ b'68416741AA', @@ -253,6 +254,7 @@ FW_VERSIONS = { b'68526772AD ', b'68526772AH ', b'68599493AC ', + b'68657433AA ', ], (Ecu.hybrid, 0x7e2, None): [ b'05185116AF', @@ -267,6 +269,7 @@ FW_VERSIONS = { b'68540977AH', b'68540977AK', b'68597647AE', + b'68632416AB', ], }, CAR.JEEP_GRAND_CHEROKEE: { @@ -290,6 +293,7 @@ FW_VERSIONS = { (Ecu.abs, 0x747, None): [ b'68252642AG', b'68306178AD', + b'68336275AB', b'68336276AB', ], (Ecu.fwdRadar, 0x753, None): [ @@ -375,6 +379,7 @@ FW_VERSIONS = { b'68449435AE ', b'68496223AA ', b'68504959AD ', + b'68504959AE ', b'68504960AD ', b'68504993AC ', ], @@ -433,6 +438,7 @@ FW_VERSIONS = { b'68527381AE', b'68527382AE', b'68527383AD', + b'68527383AE', b'68527387AE', b'68527403AC', b'68527403AD', @@ -536,6 +542,7 @@ FW_VERSIONS = { b'05190341AD', b'68378695AJ ', b'68378696AJ ', + b'68378696AK ', b'68378701AI ', b'68378702AI ', b'68378710AL ', diff --git a/selfdrive/car/chrysler/values.py b/selfdrive/car/chrysler/values.py index 42ea94cf8..3315a0a98 100644 --- a/selfdrive/car/chrysler/values.py +++ b/selfdrive/car/chrysler/values.py @@ -41,7 +41,7 @@ class CAR(Platforms): CHRYSLER_PACIFICA_2017_HYBRID.specs, ) CHRYSLER_PACIFICA_2019_HYBRID = ChryslerPlatformConfig( - [ChryslerCarDocs("Chrysler Pacifica Hybrid 2019-23")], + [ChryslerCarDocs("Chrysler Pacifica Hybrid 2019-24")], CHRYSLER_PACIFICA_2017_HYBRID.specs, ) CHRYSLER_PACIFICA_2018 = ChryslerPlatformConfig( diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py index 5ea2b1989..d08805048 100755 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -53,7 +53,12 @@ class CarInterface(CarInterfaceBase): friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation) def sig(val): - return 1 / (1 + exp(-val)) - 0.5 + # https://timvieira.github.io/blog/post/2014/02/11/exp-normalize-trick + if val >= 0: + return 1 / (1 + exp(-val)) - 0.5 + else: + z = exp(val) + return z / (1 + z) - 0.5 # The "lat_accel vs torque" relationship is assumed to be the sum of "sigmoid + linear" curves # An important thing to consider is that the slope at 0 should be > 0 (ideally >1) diff --git a/selfdrive/car/honda/fingerprints.py b/selfdrive/car/honda/fingerprints.py index 8a5b79b41..0904d5e12 100644 --- a/selfdrive/car/honda/fingerprints.py +++ b/selfdrive/car/honda/fingerprints.py @@ -877,7 +877,10 @@ FW_VERSIONS = { b'36161-T20-A070\x00\x00', b'36161-T20-A080\x00\x00', b'36161-T24-T070\x00\x00', + b'36161-T47-A050\x00\x00', b'36161-T47-A070\x00\x00', + b'8S102-T20-AA10\x00\x00', + b'8S102-T47-AA10\x00\x00', ], (Ecu.vsa, 0x18da28f1, None): [ b'57114-T20-AB40\x00\x00', diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py index c3005c667..5a78995c0 100644 --- a/selfdrive/car/honda/values.py +++ b/selfdrive/car/honda/values.py @@ -141,8 +141,8 @@ class CAR(Platforms): ) HONDA_CIVIC_2022 = HondaBoschPlatformConfig( [ - HondaCarDocs("Honda Civic 2022-23", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), - HondaCarDocs("Honda Civic Hatchback 2022-23", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), + HondaCarDocs("Honda Civic 2022-24", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), + HondaCarDocs("Honda Civic Hatchback 2022-24", "All", video_link="https://youtu.be/ytiOT5lcp6Q"), ], HONDA_CIVIC_BOSCH.specs, dbc_dict('honda_civic_ex_2022_can_generated', None), diff --git a/selfdrive/car/hyundai/carstate.py b/selfdrive/car/hyundai/carstate.py index 92c489cf3..e77968a66 100644 --- a/selfdrive/car/hyundai/carstate.py +++ b/selfdrive/car/hyundai/carstate.py @@ -52,6 +52,9 @@ class CarState(CarStateBase): self.params = CarControllerParams(CP) + # dp - alka + self._main_on = False + def update(self, cp, cp_cam): if self.CP.carFingerprint in CANFD_CAR: return self.update_canfd(cp, cp_cam) @@ -102,7 +105,9 @@ class CarState(CarStateBase): # cruise state if self.CP.openpilotLongitudinalControl: # These are not used for engage/disengage since openpilot keeps track of state using the buttons - ret.cruiseState.available = cp.vl["TCS13"]["ACCEnable"] == 0 + # dp - alka + # ret.cruiseState.available = cp.vl["TCS13"]["ACCEnable"] == 0 + ret.cruiseState.available = self._main_on ret.cruiseState.enabled = cp.vl["TCS13"]["ACC_REQ"] == 1 ret.cruiseState.standstill = False ret.cruiseState.nonAdaptive = False @@ -119,6 +124,7 @@ class CarState(CarStateBase): ret.brakeHoldActive = cp.vl["TCS15"]["AVH_LAMP"] == 2 # 0 OFF, 1 ERROR, 2 ACTIVE, 3 READY ret.parkingBrake = cp.vl["TCS13"]["PBRAKE_ACT"] == 1 ret.espDisabled = cp.vl["TCS11"]["TCS_PAS"] == 1 + ret.espActive = cp.vl["TCS11"]["ABS_ACT"] == 1 ret.accFaulted = cp.vl["TCS13"]["ACCEnable"] != 0 # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): @@ -163,8 +169,15 @@ class CarState(CarStateBase): self.steer_state = cp.vl["MDPS12"]["CF_Mdps_ToiActive"] # 0 NOT ACTIVE, 1 ACTIVE self.prev_cruise_buttons = self.cruise_buttons[-1] self.cruise_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwState"]) + # dp - alka + main_btn_prev = self.main_buttons[-1] + self.main_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwMain"]) + # dp - alka + if main_btn_prev != self.main_buttons[-1]: + self._main_on = not self._main_on + return ret def update_canfd(self, cp, cp_cam): @@ -218,7 +231,9 @@ class CarState(CarStateBase): # cruise state # CAN FD cars enable on main button press, set available if no TCS faults preventing engagement - ret.cruiseState.available = cp.vl["TCS"]["ACCEnable"] == 0 + # dp - alka + # ret.cruiseState.available = cp.vl["TCS"]["ACCEnable"] == 0 + ret.cruiseState.available = self._main_on if self.CP.openpilotLongitudinalControl: # These are not used for engage/disengage since openpilot keeps track of state using the buttons ret.cruiseState.enabled = cp.vl["TCS"]["ACC_REQ"] == 1 @@ -239,7 +254,14 @@ class CarState(CarStateBase): self.prev_cruise_buttons = self.cruise_buttons[-1] self.cruise_buttons.extend(cp.vl_all[self.cruise_btns_msg_canfd]["CRUISE_BUTTONS"]) + # dp - alka + main_btn_prev = self.main_buttons[-1] + self.main_buttons.extend(cp.vl_all[self.cruise_btns_msg_canfd]["ADAPTIVE_CRUISE_MAIN_BTN"]) + + # dp - alka + if main_btn_prev != self.main_buttons[-1]: + self._main_on = not self._main_on self.buttons_counter = cp.vl[self.cruise_btns_msg_canfd]["COUNTER"] ret.accFaulted = cp.vl["TCS"]["ACCEnable"] != 0 # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED diff --git a/selfdrive/car/hyundai/fingerprints.py b/selfdrive/car/hyundai/fingerprints.py index e489a3cf6..e33f3e415 100644 --- a/selfdrive/car/hyundai/fingerprints.py +++ b/selfdrive/car/hyundai/fingerprints.py @@ -2,10 +2,11 @@ from cereal import car from openpilot.selfdrive.car.hyundai.values import CAR +Ecu = car.CarParams.Ecu + # The existence of SCC or RDR in the fwdRadar FW usually determines the radar's function, # i.e. if it sends the SCC messages or if another ECU like the camera or ADAS Driving ECU does -Ecu = car.CarParams.Ecu FINGERPRINTS = { CAR.HYUNDAI_SANTA_FE: [{ @@ -985,6 +986,7 @@ FW_VERSIONS = { (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00NE1 MFC AT CAN LHD 1.00 1.01 99211-GI010 211007', b'\xf1\x00NE1 MFC AT CAN LHD 1.00 1.05 99211-GI010 220614', + b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.00 99211-GI100 230915', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.01 99211-GI010 211007', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.06 99211-GI000 210813', b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.06 99211-GI010 230110', @@ -993,13 +995,13 @@ FW_VERSIONS = { b'\xf1\x00NE1 MFC AT KOR LHD 1.00 1.00 99211-GI020 230719', b'\xf1\x00NE1 MFC AT KOR LHD 1.00 1.05 99211-GI010 220614', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI020 230719', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI100 230915', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI010 211007', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.02 99211-GI010 211206', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.03 99211-GI010 220401', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.05 99211-GI010 220614', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.06 99211-GI010 230110', - b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI100 230915', - b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.00 99211-GI100 230915', + b'\xf1\x00NE1 MFC AT EUR LHD 1.00 1.01 99211-GI100 240110', ], }, CAR.HYUNDAI_IONIQ_6: { diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py index 8cb29c803..8ed0edd31 100644 --- a/selfdrive/car/hyundai/values.py +++ b/selfdrive/car/hyundai/values.py @@ -520,8 +520,9 @@ class CAR(Platforms): ) GENESIS_GV70_1ST_GEN = HyundaiCanFDPlatformConfig( [ - HyundaiCarDocs("Genesis GV70 (2.5T Trim) 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), - HyundaiCarDocs("Genesis GV70 (3.5T Trim) 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_m])), + # TODO: Hyundai P is likely the correct harness for HDA II for 2.5T (unsupported due to missing ADAS ECU, is that the radar?) + HyundaiCarDocs("Genesis GV70 (2.5T Trim, without HDA II) 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_l])), + HyundaiCarDocs("Genesis GV70 (3.5T Trim, without HDA II) 2022-23", "All", car_parts=CarParts.common([CarHarness.hyundai_m])), ], CarSpecs(mass=1950, wheelbase=2.87, steerRatio=14.6), flags=HyundaiFlags.RADAR_SCC, diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index e5762ed52..54070284e 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -280,6 +280,8 @@ class CarInterfaceBase(ABC): events.add(EventName.wrongCarMode) if cs_out.espDisabled: events.add(EventName.espDisabled) + if cs_out.espActive: + events.add(EventName.espActive) if cs_out.stockFcw: events.add(EventName.stockFcw) if cs_out.stockAeb: diff --git a/selfdrive/car/mazda/fingerprints.py b/selfdrive/car/mazda/fingerprints.py index f460fe995..c7b331b1c 100644 --- a/selfdrive/car/mazda/fingerprints.py +++ b/selfdrive/car/mazda/fingerprints.py @@ -16,6 +16,7 @@ FW_VERSIONS = { b'PX2H-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX2H-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX85-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PXFG-188K2-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PXFG-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'SH54-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], diff --git a/selfdrive/car/toyota/carcontroller.py b/selfdrive/car/toyota/carcontroller.py index eefc05167..f45d1b775 100644 --- a/selfdrive/car/toyota/carcontroller.py +++ b/selfdrive/car/toyota/carcontroller.py @@ -8,7 +8,12 @@ from openpilot.selfdrive.car.toyota.values import CAR, STATIC_DSU_MSGS, NO_STOP_ UNSUPPORTED_DSU_CAR from opendbc.can.packer import CANPacker +# dp +from openpilot.common.params import Params from openpilot.dp_ext.selfdrive.car.toyota.door_lock_controller import DoorLockController +from openpilot.dp_ext.selfdrive.car.toyota.pcm_compensation_controller import PCMCompensationController +# for pcm compensation +LongCtrlState = car.CarControl.Actuators.LongControlState SteerControlType = car.CarParams.SteerControlType VisualAlert = car.CarControl.HUDControl.VisualAlert @@ -45,12 +50,15 @@ class CarController(CarControllerBase): self.accel = 0 # dp self.dlc = DoorLockController() + self.pcc = PCMCompensationController(CP, self.params, Params().get_bool("dp_toyota_pcm_compensation")) def update(self, CC, CS, now_nanos): actuators = CC.actuators hud_control = CC.hudControl pcm_cancel_cmd = CC.cruiseControl.cancel lat_active = CC.latActive and abs(CS.out.steeringTorque) < MAX_USER_TORQUE + # dp - for pcm compensation + stopping = actuators.longControlState == LongCtrlState.stopping # *** control msgs *** can_sends = [] @@ -108,7 +116,10 @@ class CarController(CarControllerBase): lta_active, self.frame // 2, torque_wind_down)) # *** gas and brake *** - pcm_accel_cmd = clip(actuators.accel, self.params.ACCEL_MIN, self.params.ACCEL_MAX) + if self.pcc.is_enabled(): + pcm_accel_cmd = self.pcc.get_pcm_accel_cmd(CC.longActive, CS.out.vEgo, CS.pcm_neutral_force, actuators.accel) + else: + pcm_accel_cmd = clip(actuators.accel, self.params.ACCEL_MIN, self.params.ACCEL_MAX) # on entering standstill, send standstill request if CS.out.standstill and not self.last_standstill and (self.CP.carFingerprint not in NO_STOP_TIMER_CAR): @@ -135,15 +146,19 @@ class CarController(CarControllerBase): else: self.distance_button = 0 + # dp - for pcm compensation + # when stopping, send -2.5 raw acceleration immediately to prevent vehicle from creeping, else send actuators.accel + accel_raw = -2.5 if self.pcc.is_enabled() and stopping else actuators.accel + # Lexus IS uses a different cancellation message if pcm_cancel_cmd and self.CP.carFingerprint in UNSUPPORTED_DSU_CAR: can_sends.append(toyotacan.create_acc_cancel_command(self.packer)) elif self.CP.openpilotLongitudinalControl: - can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, pcm_cancel_cmd, self.standstill_req, lead, CS.acc_type, fcw_alert, + can_sends.append(toyotacan.create_accel_command(self.packer, pcm_accel_cmd, accel_raw, pcm_cancel_cmd, self.standstill_req, lead, CS.acc_type, fcw_alert, self.distance_button)) self.accel = pcm_accel_cmd else: - can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, False, lead, CS.acc_type, False, self.distance_button)) + can_sends.append(toyotacan.create_accel_command(self.packer, 0, 0, pcm_cancel_cmd, False, lead, CS.acc_type, False, self.distance_button)) # *** hud ui *** if self.CP.carFingerprint != CAR.TOYOTA_PRIUS_V: diff --git a/selfdrive/car/toyota/carstate.py b/selfdrive/car/toyota/carstate.py index 26a245b2e..c0be916b4 100644 --- a/selfdrive/car/toyota/carstate.py +++ b/selfdrive/car/toyota/carstate.py @@ -51,7 +51,10 @@ class CarState(CarStateBase): self.acc_type = 1 self.lkas_hud = {} + # dp self.zssc = ZSSController() + # for pcm compensation + self.pcm_neutral_force = 0. def update(self, cp, cp_cam): ret = car.CarState.new_message() @@ -157,6 +160,8 @@ class CarState(CarStateBase): ret.cruiseState.standstill = self.pcm_acc_status == 7 ret.cruiseState.enabled = bool(cp.vl["PCM_CRUISE"]["CRUISE_ACTIVE"]) ret.cruiseState.nonAdaptive = self.pcm_acc_status in (1, 2, 3, 4, 5, 6) + # dp - for pcm compensation + self.pcm_neutral_force = cp.vl["PCM_CRUISE"]["NEUTRAL_FORCE"] ret.genericToggle = bool(cp.vl["LIGHT_STALK"]["AUTO_HIGH_BEAM"]) ret.espDisabled = cp.vl["ESP_CONTROL"]["TC_DISABLED"] != 0 diff --git a/selfdrive/car/toyota/fingerprints.py b/selfdrive/car/toyota/fingerprints.py index 0866a4d43..7bbb48c8f 100644 --- a/selfdrive/car/toyota/fingerprints.py +++ b/selfdrive/car/toyota/fingerprints.py @@ -234,6 +234,7 @@ FW_VERSIONS = { b'\x01F152606390\x00\x00\x00\x00\x00\x00', b'\x01F152606400\x00\x00\x00\x00\x00\x00', b'\x01F152606431\x00\x00\x00\x00\x00\x00', + b'\x01F152633E11\x00\x00\x00\x00\x00\x00', b'F152633310\x00\x00\x00\x00\x00\x00', b'F152633D00\x00\x00\x00\x00\x00\x00', b'F152633D60\x00\x00\x00\x00\x00\x00', @@ -251,6 +252,7 @@ FW_VERSIONS = { b'\x018966306T4000\x00\x00\x00\x00', b'\x018966306T4100\x00\x00\x00\x00', b'\x018966306V1000\x00\x00\x00\x00', + b'\x018966333Z1000\x00\x00\x00\x00', b'\x01896633T20000\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x750, 0xf): [ @@ -266,6 +268,7 @@ FW_VERSIONS = { b'\x028646F3305200\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', b'\x028646F3305300\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', b'\x028646F3305300\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', + b'\x028646F3305400\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', b'\x028646F3305500\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', ], }, @@ -848,6 +851,7 @@ FW_VERSIONS = { b'\x038966347A3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4701003\x00\x00\x00\x00', b'\x038966347A3000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707001\x00\x00\x00\x00', b'\x038966347B6000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', + b'\x038966347B7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF1203001\x00\x00\x00\x00', b'\x038966347B7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710001\x00\x00\x00\x00', ], (Ecu.eps, 0x7a1, None): [ diff --git a/selfdrive/car/toyota/interface.py b/selfdrive/car/toyota/interface.py index 98f63597e..7568c08e5 100644 --- a/selfdrive/car/toyota/interface.py +++ b/selfdrive/car/toyota/interface.py @@ -7,6 +7,9 @@ from openpilot.selfdrive.car import create_button_events, get_safety_config from openpilot.selfdrive.car.disable_ecu import disable_ecu from openpilot.selfdrive.car.interfaces import CarInterfaceBase +# dp +from openpilot.common.params import Params + ButtonType = car.CarState.ButtonEvent.Type EventName = car.CarEvent.EventName SteerControlType = car.CarParams.SteerControlType @@ -142,6 +145,14 @@ class CarInterface(CarInterfaceBase): ret.minEnableSpeed = -1. if stop_and_go else MIN_ACC_SPEED tune = ret.longitudinalTuning + # dp + if Params().get_bool("dp_toyota_pcm_compensation"): + # on stock Toyota this is -2.5 + if candidate in TSS2_CAR: + ret.stopAccel = -1.2 + else: + ret.stopAccel = -2.5 + if candidate in TSS2_CAR: tune.kpV = [0.0] tune.kiV = [0.5] diff --git a/selfdrive/car/toyota/toyotacan.py b/selfdrive/car/toyota/toyotacan.py index 1cc99b41b..058e8ffb0 100644 --- a/selfdrive/car/toyota/toyotacan.py +++ b/selfdrive/car/toyota/toyotacan.py @@ -33,7 +33,7 @@ def create_lta_steer_command(packer, steer_control_type, steer_angle, steer_req, return packer.make_can_msg("STEERING_LTA", 0, values) -def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_type, fcw_alert, distance): +def create_accel_command(packer, accel, accel_raw, pcm_cancel, standstill_req, lead, acc_type, fcw_alert, distance): # TODO: find the exact canceling bit that does not create a chime values = { "ACCEL_CMD": accel, @@ -45,6 +45,7 @@ def create_accel_command(packer, accel, pcm_cancel, standstill_req, lead, acc_ty "CANCEL_REQ": pcm_cancel, "ALLOW_LONG_PRESS": 1, "ACC_CUT_IN": fcw_alert, # only shown when ACC enabled + "ACCEL_CMD_ALT": accel_raw, # raw accel command, pcm uses this to calculate a compensatory force } return packer.make_can_msg("ACC_CONTROL", 0, values) diff --git a/selfdrive/car/volkswagen/fingerprints.py b/selfdrive/car/volkswagen/fingerprints.py index fea530b29..71bdb2cfd 100644 --- a/selfdrive/car/volkswagen/fingerprints.py +++ b/selfdrive/car/volkswagen/fingerprints.py @@ -574,6 +574,7 @@ FW_VERSIONS = { b'\xf1\x8704E906024AP\xf1\x891461', b'\xf1\x8704E906027NB\xf1\x899504', b'\xf1\x8704L906026EJ\xf1\x893661', + b'\xf1\x8704L906026EJ\xf1\x893916', b'\xf1\x8704L906027G \xf1\x899893', b'\xf1\x8705E906018BS\xf1\x890914', b'\xf1\x875N0906259 \xf1\x890002', @@ -604,6 +605,7 @@ FW_VERSIONS = { b'\xf1\x870DD300046K \xf1\x892302', b'\xf1\x870DL300011N \xf1\x892001', b'\xf1\x870DL300011N \xf1\x892012', + b'\xf1\x870DL300011N \xf1\x892014', b'\xf1\x870DL300012M \xf1\x892107', b'\xf1\x870DL300012P \xf1\x892103', b'\xf1\x870DL300013A \xf1\x893005', @@ -617,6 +619,7 @@ FW_VERSIONS = { b'\xf1\x875Q0959655AG\xf1\x890336\xf1\x82\x1316143231313500314617011730179333423100', b'\xf1\x875Q0959655AG\xf1\x890338\xf1\x82\x1316143231313500314617011730179333423100', b'\xf1\x875Q0959655AR\xf1\x890317\xf1\x82\x1331310031333334313132573732379333313100', + b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x1311140031333300314232583632369333423100', b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x1312110031333300314232583732379333423100', b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x1331310031333334313132013730379333423100', b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\x1316143231313500314641011750179333423100', @@ -636,6 +639,7 @@ FW_VERSIONS = { b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A60604A1', b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6000600', b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6017A00', + b'\xf1\x875QF909144 \xf1\x895572\xf1\x82\x0571A60833A1', b'\xf1\x875QF909144A \xf1\x895581\xf1\x82\x0571A60834A1', b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571A60634A1', b'\xf1\x875QF909144B \xf1\x895582\xf1\x82\x0571A62A32A1', diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index d3dbdc5a6..ea5c98b1c 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -67,6 +67,8 @@ class Controls: self._dp_alka_active = True self._dp_lat_lane_change_assist_mode = int(self.params.get("dp_lat_lane_change_assist_mode")) self._dp_lat_lane_change_assist_mode_disable_active = False + self._dp_device_dm_unavailable = self.params.get_bool("dp_device_dm_unavailable") + self._dp_device_dm_unavailable_active = True if self._dp_device_dm_unavailable else False if CI is None: cloudlog.info("controlsd is waiting for CarParams") @@ -89,6 +91,9 @@ class Controls: self.sensor_packets = ["accelerometer", "gyroscope"] self.camera_packets = ["roadCameraState", "driverCameraState", "wideRoadCameraState"] + if self._dp_device_dm_unavailable_active: + self.camera_packets.remove("driverCameraState") + self.log_sock = messaging.sub_sock('androidLog') # TODO: de-couple controlsd with card/conflate on carState without introducing controls mismatches @@ -310,7 +315,14 @@ class Controls: else: if not SIMULATION and not self.rk.lagging: if not self.sm.all_alive(self.camera_packets): - self.events.add(EventName.cameraMalfunction) + if not self._dp_device_dm_unavailable_active and not self.sm.all_alive(['driverCameraState']): + self._dp_device_dm_unavailable_active = True + self.params.put_bool("dp_device_dm_unavailable", True) + + if self._dp_device_dm_unavailable_active and not self.sm.all_alive(['driverCameraState']): + pass + else: + self.events.add(EventName.cameraMalfunction) elif not self.sm.all_freq_ok(self.camera_packets): self.events.add(EventName.cameraFrameRate) if not REPLAY and self.rk.lagging: diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index b01818d70..25833da74 100755 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -831,6 +831,11 @@ EVENTS: dict[int, dict[str, Alert | AlertCallbackType]] = { ET.NO_ENTRY: NoEntryAlert("Cruise Fault: Restart the Car"), }, + EventName.espActive: { + ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Electronic Stability Control Active"), + ET.NO_ENTRY: NoEntryAlert("Electronic Stability Control Active"), + }, + EventName.controlsMismatch: { ET.IMMEDIATE_DISABLE: ImmediateDisableAlert("Controls Mismatch"), ET.NO_ENTRY: NoEntryAlert("Controls Mismatch"), diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py index 00d526139..174e63062 100755 --- a/selfdrive/controls/lib/longitudinal_planner.py +++ b/selfdrive/controls/lib/longitudinal_planner.py @@ -136,10 +136,6 @@ class LongitudinalPlanner: # Reset current state when not engaged, or user is controlling the speed reset_state = long_control_off if self.CP.openpilotLongitudinalControl else not sm['controlsState'].enabled - # dp - if not reset_state: - reset_state = self._dynamic_endtoend_controller.has_changed() - # No change cost when user is controlling the speed, or when standstill prev_accel_constraint = not (reset_state or sm['carState'].standstill) @@ -199,15 +195,11 @@ class LongitudinalPlanner: plan_send.valid = sm.all_checks(service_list=['carState', 'controlsState']) - longitudinalPlan = plan_send.longitudinalPlan longitudinalPlan.modelMonoTime = sm.logMonoTime['modelV2'] longitudinalPlan.processingDelay = (plan_send.logMonoTime / 1e9) - sm.logMonoTime['modelV2'] longitudinalPlan.solverExecutionTime = self.mpc.solve_time - longitudinalPlan.allowBrake = True - longitudinalPlan.allowThrottle = True - longitudinalPlan.speeds = self.v_desired_trajectory.tolist() longitudinalPlan.accels = self.a_desired_trajectory.tolist() longitudinalPlan.jerks = self.j_desired_trajectory.tolist() @@ -224,7 +216,6 @@ class LongitudinalPlanner: pm.send('longitudinalPlan', plan_send) - # dp - extension plan_ext_send = messaging.new_message('longitudinalPlanExt') plan_ext_send.valid = True diff --git a/selfdrive/locationd/locationd b/selfdrive/locationd/locationd index 7e51d23d6..d3f94b28a 100755 Binary files a/selfdrive/locationd/locationd and b/selfdrive/locationd/locationd differ diff --git a/selfdrive/pandad/pandad b/selfdrive/pandad/pandad index 23d6a32e1..92c707da1 100755 Binary files a/selfdrive/pandad/pandad and b/selfdrive/pandad/pandad differ diff --git a/selfdrive/pandad/pandad_api_impl.so b/selfdrive/pandad/pandad_api_impl.so index 8312a5c2e..757c9320e 100755 Binary files a/selfdrive/pandad/pandad_api_impl.so and b/selfdrive/pandad/pandad_api_impl.so differ diff --git a/selfdrive/test/process_replay/model_replay.py b/selfdrive/test/process_replay/model_replay.py index cba2edfd5..28826144e 100755 --- a/selfdrive/test/process_replay/model_replay.py +++ b/selfdrive/test/process_replay/model_replay.py @@ -81,31 +81,6 @@ if __name__ == "__main__": 'wideRoadCameraState': FrameReader(get_url(TEST_ROUTE, SEGMENT, log_type="ecamera"), readahead=True) } - # Update tile refs - if update: - import urllib - import requests - import threading - import http.server - from openpilot.tools.lib.openpilotci import upload_bytes - os.environ['MAPS_HOST'] = 'http://localhost:5000' - - class HTTPRequestHandler(http.server.BaseHTTPRequestHandler): - def do_GET(self): - assert len(self.path) > 10 # Sanity check on path length - r = requests.get(f'https://api.mapbox.com{self.path}', timeout=30) - upload_bytes(r.content, urllib.parse.urlparse(self.path).path.lstrip('/')) - self.send_response(r.status_code) - self.send_header('Content-type','text/html') - self.end_headers() - self.wfile.write(r.content) - - server = http.server.HTTPServer(("127.0.0.1", 5000), HTTPRequestHandler) - thread = threading.Thread(None, server.serve_forever, daemon=True) - thread.start() - else: - os.environ['MAPS_HOST'] = BASE_URL.rstrip('/') - log_msgs = [] # run replays if not NO_MODEL: diff --git a/selfdrive/ui/_spinner b/selfdrive/ui/_spinner index 8a8195c0c..5b6e8c949 100755 Binary files a/selfdrive/ui/_spinner and b/selfdrive/ui/_spinner differ diff --git a/selfdrive/ui/_text b/selfdrive/ui/_text index a277bf1c1..f8e8e75b4 100755 Binary files a/selfdrive/ui/_text and b/selfdrive/ui/_text differ diff --git a/selfdrive/ui/installer/installers/installer_openpilot b/selfdrive/ui/installer/installers/installer_openpilot index b45c0a097..fa43b6ca9 100755 Binary files a/selfdrive/ui/installer/installers/installer_openpilot and b/selfdrive/ui/installer/installers/installer_openpilot differ diff --git a/selfdrive/ui/installer/installers/installer_openpilot_internal b/selfdrive/ui/installer/installers/installer_openpilot_internal index 434a0d1c8..981061417 100755 Binary files a/selfdrive/ui/installer/installers/installer_openpilot_internal and b/selfdrive/ui/installer/installers/installer_openpilot_internal differ diff --git a/selfdrive/ui/installer/installers/installer_openpilot_nightly b/selfdrive/ui/installer/installers/installer_openpilot_nightly index 07d10af9f..9d15ba5a4 100755 Binary files a/selfdrive/ui/installer/installers/installer_openpilot_nightly and b/selfdrive/ui/installer/installers/installer_openpilot_nightly differ diff --git a/selfdrive/ui/installer/installers/installer_openpilot_test b/selfdrive/ui/installer/installers/installer_openpilot_test index 4c5bdaa85..ef70361c3 100755 Binary files a/selfdrive/ui/installer/installers/installer_openpilot_test and b/selfdrive/ui/installer/installers/installer_openpilot_test differ diff --git a/selfdrive/ui/qt/home.h b/selfdrive/ui/qt/home.h index f60b80b21..a19b70ac3 100644 --- a/selfdrive/ui/qt/home.h +++ b/selfdrive/ui/qt/home.h @@ -55,7 +55,6 @@ public slots: void offroadTransition(bool offroad); void showDriverView(bool show); void showSidebar(bool show); - void showMapPanel(bool show); protected: void mousePressEvent(QMouseEvent* e) override; diff --git a/selfdrive/ui/qt/onroad/annotated_camera.h b/selfdrive/ui/qt/onroad/annotated_camera.h index 9eef69405..18d0c13ba 100644 --- a/selfdrive/ui/qt/onroad/annotated_camera.h +++ b/selfdrive/ui/qt/onroad/annotated_camera.h @@ -26,15 +26,12 @@ private: float speed; QString speedUnit; float setSpeed; - float speedLimit; bool is_cruise_set = false; bool is_metric = false; bool dmActive = false; bool hideBottomIcons = false; bool rightHandDM = false; float dm_fade_state = 1.0; - bool has_us_speed_limit = false; - bool has_eu_speed_limit = false; bool v_ego_cluster_seen = false; int status = STATUS_DISENGAGED; std::unique_ptr pm; diff --git a/selfdrive/ui/qt/onroad/onroad_home.h b/selfdrive/ui/qt/onroad/onroad_home.h index b1b79da79..a4aec1cd7 100644 --- a/selfdrive/ui/qt/onroad/onroad_home.h +++ b/selfdrive/ui/qt/onroad/onroad_home.h @@ -12,20 +12,12 @@ class OnroadWindow : public QWidget { public: OnroadWindow(QWidget* parent = 0); - bool isMapVisible() const { return map && map->isVisible(); } - void showMapPanel(bool show) { if (map) map->setVisible(show); } - -signals: - void mapPanelRequested(); private: - void createMapWidget(); void paintEvent(QPaintEvent *event); - void mousePressEvent(QMouseEvent* e) override; OnroadAlerts *alerts; AnnotatedCameraWidget *nvg; QColor bg = bg_colors[STATUS_DISENGAGED]; - QWidget *map = nullptr; QHBoxLayout* split; // dp diff --git a/selfdrive/ui/qt/setup/setup b/selfdrive/ui/qt/setup/setup index 34aa82f19..68ae796cc 100755 Binary files a/selfdrive/ui/qt/setup/setup and b/selfdrive/ui/qt/setup/setup differ diff --git a/selfdrive/ui/qt/setup/updater b/selfdrive/ui/qt/setup/updater index 9a8051b96..4b451f118 100755 Binary files a/selfdrive/ui/qt/setup/updater and b/selfdrive/ui/qt/setup/updater differ diff --git a/selfdrive/ui/qt/util.h b/selfdrive/ui/qt/util.h index 2aae97b86..2bf1a70a6 100644 --- a/selfdrive/ui/qt/util.h +++ b/selfdrive/ui/qt/util.h @@ -26,9 +26,6 @@ void initApp(int argc, char *argv[], bool disable_hidpi = true); QWidget* topWidget(QWidget* widget); QPixmap loadPixmap(const QString &fileName, const QSize &size = {}, Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio); QPixmap bootstrapPixmap(const QString &id); - -void drawRoundedRect(QPainter &painter, const QRectF &rect, qreal xRadiusTop, qreal yRadiusTop, qreal xRadiusBottom, qreal yRadiusBottom); -QColor interpColor(float xv, std::vector xp, std::vector fp); bool hasLongitudinalControl(const cereal::CarParams::Reader &car_params); struct InterFont : public QFont { diff --git a/selfdrive/ui/tests/test_translations b/selfdrive/ui/tests/test_translations index 45915e424..b9eba90e6 100755 Binary files a/selfdrive/ui/tests/test_translations and b/selfdrive/ui/tests/test_translations differ diff --git a/selfdrive/ui/tests/ui_snapshot b/selfdrive/ui/tests/ui_snapshot index eeabb1605..098cf3531 100755 Binary files a/selfdrive/ui/tests/ui_snapshot and b/selfdrive/ui/tests/ui_snapshot differ diff --git a/selfdrive/ui/translations/languages.json b/selfdrive/ui/translations/languages.json index 321cdeedd..132b5088d 100644 --- a/selfdrive/ui/translations/languages.json +++ b/selfdrive/ui/translations/languages.json @@ -3,6 +3,7 @@ "Deutsch": "main_de", "Français": "main_fr", "Português": "main_pt-BR", + "Español": "main_es", "Türkçe": "main_tr", "العربية": "main_ar", "ไทย": "main_th", diff --git a/selfdrive/ui/translations/main_ar.qm b/selfdrive/ui/translations/main_ar.qm index 595f712be..c9dee90dd 100644 Binary files a/selfdrive/ui/translations/main_ar.qm and b/selfdrive/ui/translations/main_ar.qm differ diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts index 8e684f7df..982a8d6da 100644 --- a/selfdrive/ui/translations/main_ar.ts +++ b/selfdrive/ui/translations/main_ar.ts @@ -101,14 +101,6 @@ MAX MAX - - SPEED - SPEED - - - LIMIT - LIMIT - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_de.qm b/selfdrive/ui/translations/main_de.qm index 5c815cf0b..e1e4ac7e8 100644 Binary files a/selfdrive/ui/translations/main_de.qm and b/selfdrive/ui/translations/main_de.qm differ diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index cedb84dac..24e381b68 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -101,14 +101,6 @@ MAX MAX - - SPEED - Geschwindigkeit - - - LIMIT - LIMIT - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_es.qm b/selfdrive/ui/translations/main_es.qm new file mode 100644 index 000000000..9274e71c4 Binary files /dev/null and b/selfdrive/ui/translations/main_es.qm differ diff --git a/selfdrive/ui/translations/main_es.ts b/selfdrive/ui/translations/main_es.ts new file mode 100644 index 000000000..f23ca2553 --- /dev/null +++ b/selfdrive/ui/translations/main_es.ts @@ -0,0 +1,1147 @@ + + + + + AbstractAlert + + Close + Cerrar + + + Snooze Update + Posponer Actualización + + + Reboot and Update + Reiniciar y Actualizar + + + + AdvancedNetworking + + Back + Volver + + + Enable Tethering + Activar Tether + + + Tethering Password + Contraseña de Tethering + + + EDIT + EDITAR + + + Enter new tethering password + Nueva contraseña de tethering + + + IP Address + Dirección IP + + + Enable Roaming + Activar Roaming + + + APN Setting + Configuración de APN + + + Enter APN + Insertar APN + + + leave blank for automatic configuration + dejar en blanco para configuración automática + + + Cellular Metered + Plano de datos limitado + + + Prevent large data uploads when on a metered connection + Evitar grandes descargas de datos cuando tiene una conexión limitada + + + Hidden Network + Red Oculta + + + CONNECT + CONNECTAR + + + Enter SSID + Ingrese SSID + + + Enter password + Ingrese contraseña + + + for "%1" + para "%1" + + + + AnnotatedCameraWidget + + km/h + km/h + + + mph + mph + + + MAX + MAX + + + + ConfirmationDialog + + Ok + OK + + + Cancel + Cancelar + + + + DeclinePage + + You must accept the Terms and Conditions in order to use openpilot. + Debe aceptar los terminos y condiciones para poder utilizar openpilot. + + + Back + Atrás + + + Decline, uninstall %1 + Rechazar, desinstalar %1 + + + + DevicePanel + + Dongle ID + Dongle ID + + + N/A + N/A + + + Serial + Serial + + + Pair Device + Emparejar Dispositivo + + + PAIR + EMPAREJAR + + + Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer. + Empareja tu dispositivo con comma connect (connect.comma.ai) y reclama tu oferta de comma prime. + + + Driver Camera + Cámara del conductor + + + PREVIEW + VISUALIZAR + + + Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off) + Previsualizar la cámara del conductor para garantizar que la monitorización del sistema tenga buena visibilidad (El vehículo tiene que estar apagado) + + + Reset Calibration + Reiniciar Calibración + + + RESET + REINICIAR + + + Are you sure you want to reset calibration? + ¿Seguro qué quiere reiniciar la calibración? + + + Reset + Reiniciar + + + Review Training Guide + Revisar la Guía de Entrenamiento + + + REVIEW + REVISAR + + + Review the rules, features, and limitations of openpilot + Revisar las reglas, características y limitaciones de openpilot + + + Are you sure you want to review the training guide? + ¿Seguro qué quiere revisar la guía de entrenamiento? + + + Review + Revisar + + + Regulatory + Regulador + + + VIEW + VER + + + Change Language + Cambiar Idioma + + + CHANGE + CAMBIAR + + + Select a language + Seleccione el idioma + + + Reboot + Reiniciar + + + Power Off + Apagar + + + openpilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. openpilot is continuously calibrating, resetting is rarely required. + openpilot requiere que el dispositivo sea montado entre 4° izquierda o derecha y entre 5° arriba o 9° abajo. openpilot está constantemente en calibración, reiniciar es rara vez necesario. + + + Your device is pointed %1° %2 and %3° %4. + Su dispositivo está apuntando %1° %2 e %3° %4. + + + down + abajo + + + up + arriba + + + left + izquierda + + + right + derecha + + + Are you sure you want to reboot? + ¿Seguro qué quiere reiniciar? + + + Disengage to Reboot + Desactivar para Reiniciar + + + Are you sure you want to power off? + ¿Seguro qué quiere apagar? + + + Disengage to Power Off + Desactivar para apagar + + + + DriverViewWindow + + camera starting + iniciando cámara + + + + ExperimentalModeButton + + EXPERIMENTAL MODE ON + MODO EXPERIMENTAL + + + CHILL MODE ON + MODO TRANQUILO + + + + InputDialog + + Cancel + Cancelar + + + Need at least %n character(s)! + + ¡Necesita mínimo %n caractere! + ¡Necesita mínimo %n caracteres! + + + + + Installer + + Installing... + Instalando... + + + + MultiOptionDialog + + Select + Seleccione + + + Cancel + Cancelar + + + + Networking + + Advanced + Avanzado + + + Enter password + Ingresar contraseña + + + for "%1" + para "%1" + + + Wrong password + Contraseña equivocada + + + + OffroadAlert + + Device temperature too high. System cooling down before starting. Current internal component temperature: %1 + Temperatura de dispositivo muy alta. Systema enfriando antes de iniciar. Temperatura actual del componente interno: %1 + + + Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won't engage in %1 + Inmediatamente conectar al internet para buscar actualizaciones. Si no se conecta al internet, openpilot no iniciara en %1 + + + Connect to internet to check for updates. openpilot won't automatically start until it connects to internet to check for updates. + Conectar al internet para buscar actualizaciones. openpilot no iniciara automáticamente hasta conectarse al internet para buscar actualizaciones. + + + Unable to download updates +%1 + Incapaz de descargar actualizaciones. +%1 + + + Taking camera snapshots. System won't start until finished. + Tomando instantáneas de la cámara. El sistema no se iniciará hasta que finalice. + + + An update to your device's operating system is downloading in the background. You will be prompted to update when it's ready to install. + Se está descargando una actualización del sistema operativo de su dispositivo en segundo plano. Se le pedirá que actualice cuando esté listo para instalarse. + + + Device failed to register. It will not connect to or upload to comma.ai servers, and receives no support from comma.ai. If this is an official device, visit https://comma.ai/support. + El dispositivo no pudo registrarse. No se conectará ni cargará en los servidores de comma.ai y no recibe soporte de comma.ai. Si este es un dispositivo oficial, visite https://comma.ai/support. + + + NVMe drive not mounted. + Unidad NVMe no montada. + + + Unsupported NVMe drive detected. Device may draw significantly more power and overheat due to the unsupported NVMe. + Se detectó una unidad NVMe no compatible. El dispositivo puede consumir mucha más energía y sobrecalentarse debido a que NVMe no es compatible. + + + openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai. + openpilot no pudo identificar su automóvil. Su automóvil no es compatible o no se reconocen sus ECU. Envíe una solicitud de extracción para agregar las versiones de firmware al vehículo adecuado. ¿Necesitas ayuda? Únase a discord.comma.ai. + + + openpilot was unable to identify your car. Check integrity of cables and ensure all connections are secure, particularly that the comma power is fully inserted in the OBD-II port of the vehicle. Need help? Join discord.comma.ai. + openpilot no pudo identificar su automóvil. Verifique la integridad de los cables y asegúrese de que todas las conexiones estén seguras, en particular que comma power esté completamente insertada en el puerto OBD-II del vehículo. ¿Necesitas ayuda? Únase a discord.comma.ai. + + + openpilot detected a change in the device's mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield. + openpilot detectó un cambio en la posición de montaje del dispositivo. Asegúrese de que el dispositivo esté completamente asentado en el soporte y que el soporte esté firmemente asegurado al parabrisas. + + + + OffroadHome + + UPDATE + ACTUALIZAR + + + ALERTS + ALERTAS + + + ALERT + ALERTA + + + + OnroadAlerts + + openpilot Unavailable + openpilot no disponible + + + Waiting for controls to start + Esperando que los controles inicien + + + TAKE CONTROL IMMEDIATELY + TOME CONTROL INMEDIATAMENTE + + + Controls Unresponsive + Controles no responden + + + Reboot Device + Reiniciar Dispositivo + + + + PairingPopup + + Pair your device to your comma account + Empareje su dispositivo con su cuenta de comma + + + Go to https://connect.comma.ai on your phone + Ve a https://connect.comma.ai en su telefono + + + Click "add new device" and scan the QR code on the right + Clic en "agregar nuevo dispositivo" y escanee el código QR a la derecha + + + Bookmark connect.comma.ai to your home screen to use it like an app + Marcar connect.comma.ai como su pantalla de inicio para usarlo como una aplicación + + + + ParamControl + + Enable + Activar + + + Cancel + Cancelar + + + + PrimeAdWidget + + Upgrade Now + Actualizar Ahora + + + Become a comma prime member at connect.comma.ai + Hazte miembro prime de comma en connect.comma.ai + + + PRIME FEATURES: + BENEFICIOS PRIME: + + + Remote access + Acceso remoto + + + 24/7 LTE connectivity + Conectividad LTE 24/7 + + + 1 year of drive storage + 1 año de almacenamiento en disco + + + Remote snapshots + Istantánea remota + + + + PrimeUserWidget + + ✓ SUBSCRIBED + ✓ SUSCRITO + + + comma prime + comma prime + + + + QObject + + Reboot + Reiniciar + + + Exit + Salir + + + openpilot + openpilot + + + now + ahora + + + %n minute(s) ago + + hace %n min + hace %n mins + + + + %n hour(s) ago + + hace %n hora + hace %n horas + + + + %n day(s) ago + + hace %n día + hace %n días + + + + + Reset + + Reset failed. Reboot to try again. + Reset fallido. Reinicie de nuevo. + + + Resetting device... +This may take up to a minute. + Reiniciando dispositivo... +Esto puede tardar hasta un minuto. + + + Are you sure you want to reset your device? + ¿Seguro que quiere reiniciar su dispositivo? + + + System Reset + Reiniciar Sistema + + + System reset triggered. Press confirm to erase all content and settings. Press cancel to resume boot. + Reinicio del sistema activado. Presione confirmar para borrar todo el contenido y la configuración. Presione cancelar para reanudar el inicio. + + + Cancel + Cancelar + + + Reboot + Reiniciar + + + Confirm + Confirmar + + + Unable to mount data partition. Partition may be corrupted. Press confirm to erase and reset your device. + No es posible montar una partición de datos. Partición corrompida. Confirme para borrar y reiniciar su dispositivo. + + + + SettingsWindow + + × + × + + + Device + Dispositivo + + + Network + Red + + + Toggles + Ajustes + + + Software + Software + + + + Setup + + Something went wrong. Reboot the device. + Algo ha ido mal. Reinicie el dispositivo. + + + Ensure the entered URL is valid, and the device’s internet connection is good. + Asegurese de que la URL insertada es válida, y que el dispositivo tiene buena conexión. + + + No custom software found at this URL. + No hay software personalizado en esta URL. + + + WARNING: Low Voltage + ALERTA: Volage bajo + + + Power your device in a car with a harness or proceed at your own risk. + Encender su dispositivo en el auto con el arnés o proceda bajo su propio riesgo. + + + Power off + Apagar + + + Continue + Continuar + + + Getting Started + Comenzando + + + Before we get on the road, let’s finish installation and cover some details. + Antes de comenzar, terminemos la instalación y cubramos algunos detalles. + + + Connect to Wi-Fi + Conectar a la Wi-Fi + + + Back + Volver + + + Continue without Wi-Fi + Continuar sin Wi-Fi + + + Waiting for internet + Esperando conexión a internet + + + Choose Software to Install + Elija el software para instalar + + + openpilot + openpilot + + + Custom Software + Software personalizado + + + Enter URL + Insertar URL + + + for Custom Software + para Software personalizado + + + Downloading... + Descargando... + + + Download Failed + Descarga fallida + + + Reboot device + Reiniciar Dispositivo + + + Start over + Comenzar de nuevo + + + Select a language + Seleccione el idioma + + + + SetupWidget + + Finish Setup + Terminar configuración + + + Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer. + Empareja tu dispositivo con comma connect (connect.comma.ai) y reclama tu oferta de comma prime. + + + Pair device + Emparejar dispositivo + + + + Sidebar + + CONNECT + CONNECT + + + OFFLINE + SIN LINEA + + + ONLINE + EN LINEA + + + ERROR + ERROR + + + TEMP + TEMP + + + HIGH + ALTA + + + GOOD + BUENO + + + OK + OK + + + VEHICLE + VEHÍCULO + + + NO + SIN + + + PANDA + PANDA + + + GPS + GPS + + + SEARCH + BUSQUEDA + + + -- + -- + + + Wi-Fi + Wi-Fi + + + ETH + ETH + + + 2G + 2G + + + 3G + 3G + + + LTE + LTE + + + 5G + 5G + + + + SoftwarePanel + + Updates are only downloaded while the car is off. + Apague el auto para descargar actualizaciones. + + + Current Version + Versión Actual + + + Download + Descargar + + + CHECK + VERIFICAR + + + Install Update + Actualizar + + + INSTALL + INSTALAR + + + Target Branch + Rama objetivo + + + SELECT + SELECCIONAR + + + Select a branch + Selecione una rama + + + Uninstall %1 + Desinstalar %1 + + + UNINSTALL + DESINSTALAR + + + Are you sure you want to uninstall? + ¿Seguro qué desea desinstalar? + + + Uninstall + Desinstalar + + + failed to check for update + no se pudo buscar actualización + + + DOWNLOAD + DESCARGAR + + + update available + actualización disponible + + + never + nunca + + + up to date, last checked %1 + actualizado, último chequeo %1 + + + + SshControl + + SSH Keys + Clave 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. + Aviso: Esto otorga acceso SSH a todas las claves públicas en su Github. Nunca inserte un nombre de usuario de Github que no sea suyo. Un empleado de comma nunca le pedirá que añada su nombre de Github. + + + ADD + AÑADIR + + + Enter your GitHub username + Ingresa tu usuario de GitHub + + + LOADING + CARGANDO + + + REMOVE + ELIMINAR + + + Username '%1' has no keys on GitHub + Nombre de usuario "%1” no tiene claves en GitHub + + + Request timed out + Solicitud expirada + + + Username '%1' doesn't exist on GitHub + Nombre de usuario '%1' no existe en Github + + + + SshToggle + + Enable SSH + Habilitar SSH + + + + TermsPage + + Terms & Conditions + Terminos & Condiciones + + + Decline + Rechazar + + + Scroll to accept + Desliza para aceptar + + + Agree + Aceptar + + + + TogglesPanel + + Enable openpilot + Activar 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. + Utilice el sistema openpilot para control de crucero adaptativo y asistencia al conductor para mantenerse en el carril. Se requiere su atención en todo momento para utilizar esta función. Cambiar esta configuración solo tendrá efecto con el auto apagado. + + + openpilot Longitudinal Control (Alpha) + Control longitudinal de openpilot (Alfa) + + + WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB). + Aviso: el control longitudinal de openpilot está en fase alfa para este automóvil y desactivará el Frenado Automático de Emergencia (AEB). + + + On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. + En este vehículo, openpilot se configura de manera predeterminada con el Control de Crucero Adaptativo (ACC) incorporado en el automóvil en lugar del control longitudinal de openpilot. Habilita esta opción para cambiar al control longitudinal de openpilot. Se recomienda activar el modo experimental al habilitar el control longitudinal alfa de openpilot. + + + Experimental Mode + Modo Experimental + + + Disengage on Accelerator Pedal + Desactivar con el Acelerador + + + When enabled, pressing the accelerator pedal will disengage openpilot. + Cuando esté activado, presionar el acelerador deshabilitará el openpilot. + + + Enable Lane Departure Warnings + Activar Aviso de Salida de Carril + + + 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). + Recibir alertas para volver dentro del carril cuando su vehículo se sale fuera del carril sin que esté activado la señal de giro mientras esté conduciendo por encima de 50 km/h (31 mph). + + + Always-On Driver Monitoring + Monitoreo del Conductor Siempre Activo + + + Enable driver monitoring even when openpilot is not engaged. + Habilite el monitoreo del conductor incluso cuando Openpilot no esté activado. + + + Record and Upload Driver Camera + Grabar y Subir Cámara del Conductor + + + Upload data from the driver facing camera and help improve the driver monitoring algorithm. + Subir datos de la cámara del conductor para ayudar a mejorar el algoritmo de monitorización del conductor. + + + Use Metric System + Usar Sistema Métrico + + + Display speed in km/h instead of mph. + Mostrar velocidad en km/h en vez de mph. + + + Aggressive + Agresivo + + + Standard + Estándar + + + Relaxed + Relajado + + + Driving Personality + Personalidad de conducción + + + Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button. + Se recomienda estándar. En el modo agresivo, openpilot seguirá a los autos líderes más cerca y será más agresivo con el acelerador y el freno. En modo relajado, openpilot se mantendrá más alejado de los coches líderes. En automóviles compatibles, puede recorrer estas personalidades con el botón de distancia del volante. + + + openpilot defaults to driving in <b>chill mode</b>. Experimental mode enables <b>alpha-level features</b> that aren't ready for chill mode. Experimental features are listed below: + openpilot por defecto conduce en <b>modo chill</b>. El modo Experimental activa <b>recursos de nível-alfa</b> que no están listos para el modo chill. Los recursos del modo expeimental están listados abajo: + + + End-to-End Longitudinal Control + 🌮 Control Longitudinal de Punta a Punta 🌮 + + + Let the driving model control the gas and brakes. openpilot will drive as it thinks a human would, including stopping for red lights and stop signs. Since the driving model decides the speed to drive, the set speed will only act as an upper bound. This is an alpha quality feature; mistakes should be expected. + Dajar que el modelo de conducción controle la aceleración y el frenado. openpilot va a conducir como lo haría una persona, incluiyendo parar en los semaforos en rojo y las señales de stop. Dado que el modelo decide la velocidad de conducción, la velocidad de crucero establecida actuará como limitador. Este recurso es de una calidad alfa; errores pueden ocurrir. + + + New Driving Visualization + Nueva Visualización de la conducción + + + The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner. + La visualización de la conducción cambiará a la cámara que enfoca la carretera a velocidades bajas para mostrar mejor los giros. El logo del modo experimental se mostrará en la esquina superior derecha. + + + Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control. + El modo Experimental no está disponible actualmente para este auto, ya que el ACC del auto está siendo usado para el control longitudinal. + + + openpilot longitudinal control may come in a future update. + El control longitudinal de openpilot podrá llegar en futuras actualizaciones. + + + An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches. + Se puede probar una versión experimental del control longitudinal openpilot, junto con el modo Experimental, en ramas sin liberación. + + + Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode. + Activar el control longitudinal experimental para permitir el modo Experimental. + + + + Updater + + Update Required + Actualización Requerida + + + An operating system update is required. Connect your device to Wi-Fi for the fastest update experience. The download size is approximately 1GB. + Es necesario la actualización del sistema operativo. Conecte su dispositivo a Wi-Fi para una actualización rápida. El tamaño de descarga es de aproximadamente 1GB. + + + Connect to Wi-Fi + Conectarse a la Wi-Fi + + + Install + Instalar + + + Back + Volver + + + Loading... + Cargando... + + + Reboot + Reiniciar + + + Update failed + Actualización fallida + + + + WiFiPromptWidget + + Setup Wi-Fi + Configurar Wi-Fi + + + Connect to Wi-Fi to upload driving data and help improve openpilot + Conectar a Wi-Fi para subir los datos de conducir para mejorar openpilot + + + Open Settings + Abrir Configuraciones + + + Ready to upload + Listo para subir + + + Training data will be pulled periodically while your device is on Wi-Fi + Los datos de entrenamiento se extraerán periódicamente mientras tu dispositivo esté conectado a Wi-Fi + + + + WifiUI + + Scanning for networks... + Buscando redes... + + + CONNECTING... + CONECTANDO... + + + FORGET + OLVIDAR + + + Forget Wi-Fi Network "%1"? + Olvidar Red Wi-Fi "%1"? + + + Forget + Olvidar + + + diff --git a/selfdrive/ui/translations/main_fr.qm b/selfdrive/ui/translations/main_fr.qm index ae1d52be5..50bc8ce2a 100644 Binary files a/selfdrive/ui/translations/main_fr.qm and b/selfdrive/ui/translations/main_fr.qm differ diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index 5865d554d..b3330a2e0 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -101,14 +101,6 @@ MAX MAX - - SPEED - VITESSE - - - LIMIT - LIMITE - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_ja.qm b/selfdrive/ui/translations/main_ja.qm index 5bb70abcb..92a560a3c 100644 Binary files a/selfdrive/ui/translations/main_ja.qm and b/selfdrive/ui/translations/main_ja.qm differ diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index 95255630f..41e1f5e7d 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -101,14 +101,6 @@ MAX 最高速度 - - SPEED - 速度 - - - LIMIT - 制限速度 - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_ko.qm b/selfdrive/ui/translations/main_ko.qm index d520df7c0..dbd2aa919 100644 Binary files a/selfdrive/ui/translations/main_ko.qm and b/selfdrive/ui/translations/main_ko.qm differ diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index 970d713af..a611e4eac 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -101,14 +101,6 @@ MAX MAX - - SPEED - SPEED - - - LIMIT - LIMIT - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_pt-BR.qm b/selfdrive/ui/translations/main_pt-BR.qm index 8f02c6e53..b257fba27 100644 Binary files a/selfdrive/ui/translations/main_pt-BR.qm and b/selfdrive/ui/translations/main_pt-BR.qm differ diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index 0509f8fa3..fcbff8ced 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -101,14 +101,6 @@ MAX LIMITE - - SPEED - MAX - - - LIMIT - VELO - ConfirmationDialog @@ -497,7 +489,7 @@ Remote snapshots - + Captura remota diff --git a/selfdrive/ui/translations/main_th.qm b/selfdrive/ui/translations/main_th.qm index 453b20839..97f2a2973 100644 Binary files a/selfdrive/ui/translations/main_th.qm and b/selfdrive/ui/translations/main_th.qm differ diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index fc1f31693..f2635f6c4 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -101,14 +101,6 @@ MAX สูงสุด - - SPEED - ความเร็ว - - - LIMIT - จำกัด - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_tr.qm b/selfdrive/ui/translations/main_tr.qm index c7621dacc..42b2ab6bb 100644 Binary files a/selfdrive/ui/translations/main_tr.qm and b/selfdrive/ui/translations/main_tr.qm differ diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index 9e1d8ee12..0d5f04bc1 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -101,14 +101,6 @@ MAX MAX - - SPEED - HIZ - - - LIMIT - LİMİT - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_zh-CHS.qm b/selfdrive/ui/translations/main_zh-CHS.qm index ea024936a..9d52bc158 100644 Binary files a/selfdrive/ui/translations/main_zh-CHS.qm and b/selfdrive/ui/translations/main_zh-CHS.qm differ diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index aab377ad9..66ca1bef4 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -101,14 +101,6 @@ MAX 最高定速 - - SPEED - SPEED - - - LIMIT - LIMIT - ConfirmationDialog diff --git a/selfdrive/ui/translations/main_zh-CHT.qm b/selfdrive/ui/translations/main_zh-CHT.qm index d11396479..3fbaf9079 100644 Binary files a/selfdrive/ui/translations/main_zh-CHT.qm and b/selfdrive/ui/translations/main_zh-CHT.qm differ diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index ea1932a7b..00d00239d 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -101,14 +101,6 @@ MAX 最高 - - SPEED - 速度 - - - LIMIT - 速限 - ConfirmationDialog diff --git a/selfdrive/ui/ui b/selfdrive/ui/ui index b7324158e..3d8021a40 100755 Binary files a/selfdrive/ui/ui and b/selfdrive/ui/ui differ diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index eeea87c28..1383c557e 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -105,7 +105,7 @@ typedef struct UIScene { cereal::LongitudinalPersonality personality; float light_sensor = -1; - bool started, ignition, is_metric, map_on_left, longitudinal_control; + bool started, ignition, is_metric, longitudinal_control; bool world_objects_visible = false; uint64_t started_frame; diff --git a/selfdrive/ui/watch3 b/selfdrive/ui/watch3 index a31b12194..c61e370f3 100755 Binary files a/selfdrive/ui/watch3 and b/selfdrive/ui/watch3 differ diff --git a/system/athena/registration.py b/system/athena/registration.py index 97289e419..be9debf61 100755 --- a/system/athena/registration.py +++ b/system/athena/registration.py @@ -13,6 +13,8 @@ from openpilot.system.hardware import HARDWARE, PC from openpilot.system.hardware.hw import Paths from openpilot.common.swaglog import cloudlog +# dp +import os UNREGISTERED_DONGLE_ID = "UnregisteredDevice" @@ -92,6 +94,16 @@ def register(show_spinner=False) -> str | None: if dongle_id: params.put("DongleId", dongle_id) set_offroad_alert("Offroad_UnofficialHardware", (dongle_id == UNREGISTERED_DONGLE_ID) and not PC) + # dp - detecting clone device + if dongle_id == UNREGISTERED_DONGLE_ID: + params.put_bool("dp_device_is_clone", True) + set_offroad_alert("Offroad_UnofficialHardware", False) + else: + # clean log if no longer clone + if params.get_bool("dp_device_is_clone"): + if not PC: + os.system("rm -fr /data/media/0/realdata/*") + params.put_bool("dp_device_is_clone", False) return dongle_id diff --git a/system/camerad/camerad b/system/camerad/camerad index 83403446e..e15271160 100755 Binary files a/system/camerad/camerad and b/system/camerad/camerad differ diff --git a/system/hardware/hardwared.py b/system/hardware/hardwared.py index 4caff20d8..7ee664031 100755 --- a/system/hardware/hardwared.py +++ b/system/hardware/hardwared.py @@ -206,6 +206,9 @@ def hardware_thread(end_event, hw_queue) -> None: fan_controller = None + # dp + dp_device_is_clone = params.get_bool("dp_device_is_clone") + while not end_event.is_set(): sm.update(PANDA_STATES_TIMEOUT) @@ -318,7 +321,8 @@ def hardware_thread(end_event, hw_queue) -> None: set_offroad_alert_if_changed("Offroad_TemperatureTooHigh", show_alert, extra_text=extra_text) # TODO: this should move to TICI.initialize_hardware, but we currently can't import params there - if TICI: + # dp - only check nvme issue with comma device + if TICI and not dp_device_is_clone: if not os.path.isfile("/persist/comma/living-in-the-moment"): if not Path("/data/media").is_mount(): set_offroad_alert_if_changed("Offroad_StorageMissing", True) diff --git a/system/logcatd/logcatd b/system/logcatd/logcatd index dab35f224..b35ede519 100755 Binary files a/system/logcatd/logcatd and b/system/logcatd/logcatd differ diff --git a/system/loggerd/bootlog b/system/loggerd/bootlog index f00830ca8..65c4769db 100755 Binary files a/system/loggerd/bootlog and b/system/loggerd/bootlog differ diff --git a/system/loggerd/deleter.py b/system/loggerd/deleter.py index 2f0b96c90..7d83b490b 100755 --- a/system/loggerd/deleter.py +++ b/system/loggerd/deleter.py @@ -37,9 +37,9 @@ def get_preserved_segments(dirs_by_creation: list[str]) -> list[str]: except ValueError: continue - # preserve segment and its prior - preserved.append(d) - preserved.append(f"{date_str}--{seg_num - 1}") + # preserve segment and two prior + for _seg_num in range(max(0, seg_num - 2), seg_num + 1): + preserved.append(f"{date_str}--{_seg_num}") return preserved diff --git a/system/loggerd/encoderd b/system/loggerd/encoderd index 51ecf26e0..9604d803a 100755 Binary files a/system/loggerd/encoderd and b/system/loggerd/encoderd differ diff --git a/system/loggerd/loggerd b/system/loggerd/loggerd index aed15eb0d..51fe61fcb 100755 Binary files a/system/loggerd/loggerd and b/system/loggerd/loggerd differ diff --git a/system/loggerd/tests/test_logger b/system/loggerd/tests/test_logger index 8d93f78c6..033c63571 100755 Binary files a/system/loggerd/tests/test_logger and b/system/loggerd/tests/test_logger differ diff --git a/system/manager/manager.py b/system/manager/manager.py index c873591f5..cf4599bb6 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -69,6 +69,9 @@ def manager_init() -> None: ("dp_lat_lane_change_assist_auto_timer", "1.5"), ("dp_lat_road_edge_detection", "0"), ("dp_device_disable_logging", "0"), + ("dp_toyota_pcm_compensation", "0"), + ("dp_device_is_clone", "0"), + ("dp_device_dm_unavailable", "0"), ] if not PC: default_params.append(("LastUpdateTime", datetime.datetime.now(datetime.UTC).replace(tzinfo=None).isoformat().encode('utf8'))) @@ -152,6 +155,14 @@ def manager_thread() -> None: params = Params() ignore: list[str] = [] + # dp + dp_device_dm_unavailable = params.get_bool("dp_device_dm_unavailable") + dp_device_is_clone = params.get_bool("dp_device_is_clone") + if dp_device_is_clone or dp_device_dm_unavailable: + ignore += ["manage_athenad", "uploader"] + if dp_device_dm_unavailable: + ignore += ["dmonitoringd", "dmonitoringmodeld"] + if params.get("DongleId", encoding='utf8') in (None, UNREGISTERED_DONGLE_ID): ignore += ["manage_athenad", "uploader"] if os.getenv("NOBOARD") is not None: diff --git a/system/manager/process_config.py b/system/manager/process_config.py index 4e9cdc102..4956cf72c 100644 --- a/system/manager/process_config.py +++ b/system/manager/process_config.py @@ -50,6 +50,9 @@ def dp_onroad_uploads(started, params, CP: car.CarParams) -> bool: else: return always_run(started, params, CP) +def dpdmonitoringd(started, params, CP: car.CarParams) -> bool: + return params.get_bool("dp_device_dm_unavailable") and started + procs = [ DaemonProcess("manage_athenad", "system.athena.manage_athenad", "AthenadPid"), @@ -94,6 +97,9 @@ procs = [ NativeProcess("bridge", "cereal/messaging", ["./bridge"], notcar), PythonProcess("webrtcd", "system.webrtc.webrtcd", notcar), PythonProcess("webjoystick", "tools.bodyteleop.web", notcar), + + #dp + PythonProcess("dpdmonitoringd", "dp_ext.selfdrive.monitoring.dmonitoringd", dpdmonitoringd, enabled=not PC), ] managed_processes = {p.name: p for p in procs} diff --git a/system/proclogd/proclogd b/system/proclogd/proclogd index 8e6c71ca4..7d9810823 100755 Binary files a/system/proclogd/proclogd and b/system/proclogd/proclogd differ diff --git a/system/sensord/sensord b/system/sensord/sensord index 2d7aaddeb..13330e41c 100755 Binary files a/system/sensord/sensord and b/system/sensord/sensord differ diff --git a/system/ubloxd/ubloxd b/system/ubloxd/ubloxd index 377c0dbc5..c09c4349f 100755 Binary files a/system/ubloxd/ubloxd and b/system/ubloxd/ubloxd differ diff --git a/tools/lib/logreader.py b/tools/lib/logreader.py index 98c10941b..f6932c029 100755 --- a/tools/lib/logreader.py +++ b/tools/lib/logreader.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 import bz2 -from functools import partial +from functools import cache, partial import multiprocessing import capnp import enum @@ -87,18 +87,21 @@ Source = Callable[[SegmentRange, ReadMode], LogPaths] InternalUnavailableException = Exception("Internal source not available") + +@cache def default_valid_file(fn: LogPath) -> bool: return fn is not None and file_exists(fn) def auto_strategy(rlog_paths: LogPaths, qlog_paths: LogPaths, interactive: bool, valid_file: ValidFileCallable) -> LogPaths: # auto select logs based on availability - if any(rlog is None or not valid_file(rlog) for rlog in rlog_paths) and all(qlog is not None and valid_file(qlog) for qlog in qlog_paths): + missing_rlogs = [rlog is None or not valid_file(rlog) for rlog in rlog_paths].count(True) + if missing_rlogs != 0: if interactive: - if input("Some rlogs were not found, would you like to fallback to qlogs for those segments? (y/n) ").lower() != "y": + if input(f"{missing_rlogs} rlogs were not found, would you like to fallback to qlogs for those segments? (y/n) ").lower() != "y": return rlog_paths else: - cloudlog.warning("Some rlogs were not found, falling back to qlogs for those segments...") + cloudlog.warning(f"{missing_rlogs} rlogs were not found, falling back to qlogs for those segments...") return [rlog if valid_file(rlog) else (qlog if valid_file(qlog) else None) for (rlog, qlog) in zip(rlog_paths, qlog_paths, strict=True)]