From 7b19c7465b504dd2622d2550bcb095da3c8e0a12 Mon Sep 17 00:00:00 2001 From: daohu527 Date: Tue, 17 Feb 2026 08:45:39 +0800 Subject: [PATCH] chore: Decoupled chassis code --- modules/canbus/BUILD | 1 + modules/canbus/canbus_component.cc | 1 - modules/canbus/common/vehicle_detail_any.h | 85 +++++++++++++++++++ modules/canbus/vehicle/BUILD | 10 ++- .../canbus/vehicle/ch/ch_vehicle_factory.cc | 4 + .../vehicle/devkit/devkit_vehicle_factory.cc | 4 + .../canbus/vehicle/ge3/ge3_vehicle_factory.cc | 5 ++ .../canbus/vehicle/gem/gem_vehicle_factory.cc | 4 + .../vehicle/lexus/lexus_vehicle_factory.cc | 4 + .../lincoln/lincoln_vehicle_factory.cc | 4 + .../mk_mini/mk_mini_vehicle_factory.cc | 4 + .../neolix_edu/neolix_edu_vehicle_factory.cc | 4 + .../transit/transit_vehicle_factory.cc | 4 + modules/canbus/vehicle/vehicle_factory.cc | 57 ++----------- modules/canbus/vehicle/vehicle_factory.h | 12 +-- .../vehicle/vehicle_factory_register_macro.h | 35 ++++++++ .../canbus/vehicle/vehicle_factory_test.cc | 2 +- .../canbus/vehicle/wey/wey_vehicle_factory.cc | 5 ++ .../vehicle/yunle/yunle_vehicle_factory.cc | 8 +- .../zhongyun/zhongyun_vehicle_factory.cc | 4 + modules/common_msgs/chassis_msgs/BUILD | 11 +-- .../chassis_msgs/chassis_detail.proto | 27 ++---- 22 files changed, 201 insertions(+), 94 deletions(-) create mode 100644 modules/canbus/common/vehicle_detail_any.h create mode 100644 modules/canbus/vehicle/vehicle_factory_register_macro.h diff --git a/modules/canbus/BUILD b/modules/canbus/BUILD index 511fb964..3cb14edb 100644 --- a/modules/canbus/BUILD +++ b/modules/canbus/BUILD @@ -15,6 +15,7 @@ cc_library( "//cyber", "//modules/canbus/common:canbus_common", "//modules/canbus/vehicle:vehicle_factory", + "//modules/canbus/vehicle:vehicle_plugins", "//modules/common/adapters:adapter_gflags", "//modules/common/monitor_log", "//modules/common/status", diff --git a/modules/canbus/canbus_component.cc b/modules/canbus/canbus_component.cc index 0ca3f658..295ac71b 100644 --- a/modules/canbus/canbus_component.cc +++ b/modules/canbus/canbus_component.cc @@ -58,7 +58,6 @@ bool CanbusComponent::Init() { AINFO << "Can client is successfully created."; VehicleFactory vehicle_factory; - vehicle_factory.RegisterVehicleFactory(); auto vehicle_object = vehicle_factory.CreateVehicle(canbus_conf_.vehicle_parameter()); if (!vehicle_object) { diff --git a/modules/canbus/common/vehicle_detail_any.h b/modules/canbus/common/vehicle_detail_any.h new file mode 100644 index 00000000..bd5c6f58 --- /dev/null +++ b/modules/canbus/common/vehicle_detail_any.h @@ -0,0 +1,85 @@ +// Copyright 2026 WheelOS. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Created Date: 2026-02-17 +// Author: daohu527 + +#pragma once + +#include + +#include "modules/common_msgs/chassis_msgs/chassis_detail.pb.h" + +namespace apollo { +namespace canbus { +namespace vehicle_detail { + +template +bool Has(const ChassisDetail& chassis) { + return chassis.has_vehicle_detail() && chassis.vehicle_detail().Is(); +} + +template +const T& Get(const ChassisDetail& chassis) { + thread_local T cached; + cached.Clear(); + if (Has(chassis)) { + chassis.vehicle_detail().UnpackTo(&cached); + } + return cached; +} + +template +bool UnpackTo(const ChassisDetail& chassis, T* detail) { + if (detail == nullptr) { + return false; + } + detail->Clear(); + if (!Has(chassis)) { + return false; + } + return chassis.vehicle_detail().UnpackTo(detail); +} + +template +class Editor { + public: + explicit Editor(ChassisDetail* chassis) : chassis_(chassis) { + if (chassis_ != nullptr && Has(*chassis_)) { + chassis_->vehicle_detail().UnpackTo(&detail_); + } + } + + ~Editor() { + if (chassis_ != nullptr) { + chassis_->mutable_vehicle_detail()->PackFrom(detail_); + } + } + + T* operator->() { return &detail_; } + T* get() { return &detail_; } + + private: + ChassisDetail* chassis_ = nullptr; + T detail_; +}; + +template +Editor Edit(ChassisDetail* chassis) { + return Editor(chassis); +} + +} // namespace vehicle_detail +} // namespace canbus +} // namespace apollo diff --git a/modules/canbus/vehicle/BUILD b/modules/canbus/vehicle/BUILD index af1bc032..1231499f 100644 --- a/modules/canbus/vehicle/BUILD +++ b/modules/canbus/vehicle/BUILD @@ -44,6 +44,13 @@ cc_library( copts = CANBUS_COPTS, deps = [ ":abstract_vehicle_factory", + "//modules/common/util:factory", + ], +) + +cc_library( + name = "vehicle_plugins", + deps = [ "//modules/canbus/vehicle/ch:ch_vehicle_factory", "//modules/canbus/vehicle/devkit:devkit_vehicle_factory", "//modules/canbus/vehicle/ge3:ge3_vehicle_factory", @@ -56,8 +63,8 @@ cc_library( "//modules/canbus/vehicle/wey:wey_vehicle_factory", "//modules/canbus/vehicle/yunle:yunle_vehicle_factory", "//modules/canbus/vehicle/zhongyun:zhongyun_vehicle_factory", - "//modules/common/util:factory", ], + alwayslink = True, ) cc_test( @@ -66,6 +73,7 @@ cc_test( srcs = ["vehicle_factory_test.cc"], deps = [ ":vehicle_factory", + ":vehicle_plugins", "@com_google_googletest//:gtest_main", ], ) diff --git a/modules/canbus/vehicle/ch/ch_vehicle_factory.cc b/modules/canbus/vehicle/ch/ch_vehicle_factory.cc index dad3bcc1..7abb8e71 100644 --- a/modules/canbus/vehicle/ch/ch_vehicle_factory.cc +++ b/modules/canbus/vehicle/ch/ch_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/ch/ch_controller.h" #include "modules/canbus/vehicle/ch/ch_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -36,3 +37,6 @@ ChVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::CH, + apollo::canbus::ChVehicleFactory) diff --git a/modules/canbus/vehicle/devkit/devkit_vehicle_factory.cc b/modules/canbus/vehicle/devkit/devkit_vehicle_factory.cc index e227b1cc..88247d11 100755 --- a/modules/canbus/vehicle/devkit/devkit_vehicle_factory.cc +++ b/modules/canbus/vehicle/devkit/devkit_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/devkit/devkit_controller.h" #include "modules/canbus/vehicle/devkit/devkit_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -37,3 +38,6 @@ DevkitVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::DKIT, + apollo::canbus::DevkitVehicleFactory) diff --git a/modules/canbus/vehicle/ge3/ge3_vehicle_factory.cc b/modules/canbus/vehicle/ge3/ge3_vehicle_factory.cc index e8c8480b..b837c571 100644 --- a/modules/canbus/vehicle/ge3/ge3_vehicle_factory.cc +++ b/modules/canbus/vehicle/ge3/ge3_vehicle_factory.cc @@ -15,8 +15,10 @@ *****************************************************************************/ #include "modules/canbus/vehicle/ge3/ge3_vehicle_factory.h" + #include "modules/canbus/vehicle/ge3/ge3_controller.h" #include "modules/canbus/vehicle/ge3/ge3_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -35,3 +37,6 @@ Ge3VehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::GE3, + apollo::canbus::Ge3VehicleFactory) diff --git a/modules/canbus/vehicle/gem/gem_vehicle_factory.cc b/modules/canbus/vehicle/gem/gem_vehicle_factory.cc index 8dffa680..de867285 100644 --- a/modules/canbus/vehicle/gem/gem_vehicle_factory.cc +++ b/modules/canbus/vehicle/gem/gem_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/gem/gem_controller.h" #include "modules/canbus/vehicle/gem/gem_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -37,3 +38,6 @@ GemVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::GEM, + apollo::canbus::GemVehicleFactory) diff --git a/modules/canbus/vehicle/lexus/lexus_vehicle_factory.cc b/modules/canbus/vehicle/lexus/lexus_vehicle_factory.cc index cb5f3c86..a08832e8 100644 --- a/modules/canbus/vehicle/lexus/lexus_vehicle_factory.cc +++ b/modules/canbus/vehicle/lexus/lexus_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/lexus/lexus_controller.h" #include "modules/canbus/vehicle/lexus/lexus_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -37,3 +38,6 @@ LexusVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::LEXUS, + apollo::canbus::LexusVehicleFactory) diff --git a/modules/canbus/vehicle/lincoln/lincoln_vehicle_factory.cc b/modules/canbus/vehicle/lincoln/lincoln_vehicle_factory.cc index 7f7ec5fb..f14580d8 100644 --- a/modules/canbus/vehicle/lincoln/lincoln_vehicle_factory.cc +++ b/modules/canbus/vehicle/lincoln/lincoln_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/lincoln/lincoln_controller.h" #include "modules/canbus/vehicle/lincoln/lincoln_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -37,3 +38,6 @@ LincolnVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::LINCOLN_MKZ, + apollo::canbus::LincolnVehicleFactory) diff --git a/modules/canbus/vehicle/mk_mini/mk_mini_vehicle_factory.cc b/modules/canbus/vehicle/mk_mini/mk_mini_vehicle_factory.cc index 09b17553..c96369e5 100644 --- a/modules/canbus/vehicle/mk_mini/mk_mini_vehicle_factory.cc +++ b/modules/canbus/vehicle/mk_mini/mk_mini_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/mk_mini/mk_mini_controller.h" #include "modules/canbus/vehicle/mk_mini/mk_mini_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -37,3 +38,6 @@ Mk_miniVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::MK_MINI, + apollo::canbus::Mk_miniVehicleFactory) diff --git a/modules/canbus/vehicle/neolix_edu/neolix_edu_vehicle_factory.cc b/modules/canbus/vehicle/neolix_edu/neolix_edu_vehicle_factory.cc index 6980b0d1..2137e0db 100644 --- a/modules/canbus/vehicle/neolix_edu/neolix_edu_vehicle_factory.cc +++ b/modules/canbus/vehicle/neolix_edu/neolix_edu_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/neolix_edu/neolix_edu_controller.h" #include "modules/canbus/vehicle/neolix_edu/neolix_edu_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -38,3 +39,6 @@ Neolix_eduVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::NEOLIX, + apollo::canbus::Neolix_eduVehicleFactory) diff --git a/modules/canbus/vehicle/transit/transit_vehicle_factory.cc b/modules/canbus/vehicle/transit/transit_vehicle_factory.cc index b0a014da..be50bbd9 100644 --- a/modules/canbus/vehicle/transit/transit_vehicle_factory.cc +++ b/modules/canbus/vehicle/transit/transit_vehicle_factory.cc @@ -19,6 +19,7 @@ #include "cyber/common/log.h" #include "modules/canbus/vehicle/transit/transit_controller.h" #include "modules/canbus/vehicle/transit/transit_message_manager.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/common/util/util.h" namespace apollo { @@ -37,3 +38,6 @@ TransitVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::TRANSIT, + apollo::canbus::TransitVehicleFactory) diff --git a/modules/canbus/vehicle/vehicle_factory.cc b/modules/canbus/vehicle/vehicle_factory.cc index 9f5958f7..ced5579f 100644 --- a/modules/canbus/vehicle/vehicle_factory.cc +++ b/modules/canbus/vehicle/vehicle_factory.cc @@ -17,63 +17,18 @@ #include "modules/canbus/vehicle/vehicle_factory.h" #include "modules/canbus/proto/vehicle_parameter.pb.h" - -#include "modules/canbus/vehicle/ch/ch_vehicle_factory.h" -#include "modules/canbus/vehicle/devkit/devkit_vehicle_factory.h" -#include "modules/canbus/vehicle/ge3/ge3_vehicle_factory.h" -#include "modules/canbus/vehicle/gem/gem_vehicle_factory.h" -#include "modules/canbus/vehicle/lexus/lexus_vehicle_factory.h" -#include "modules/canbus/vehicle/lincoln/lincoln_vehicle_factory.h" -#include "modules/canbus/vehicle/mk_mini/mk_mini_vehicle_factory.h" -#include "modules/canbus/vehicle/neolix_edu/neolix_edu_vehicle_factory.h" -#include "modules/canbus/vehicle/transit/transit_vehicle_factory.h" -#include "modules/canbus/vehicle/wey/wey_vehicle_factory.h" -#include "modules/canbus/vehicle/yunle/yunle_vehicle_factory.h" -#include "modules/canbus/vehicle/zhongyun/zhongyun_vehicle_factory.h" namespace apollo { namespace canbus { -void VehicleFactory::RegisterVehicleFactory() { - Register(apollo::common::LINCOLN_MKZ, []() -> AbstractVehicleFactory * { - return new LincolnVehicleFactory(); - }); - Register(apollo::common::GEM, []() -> AbstractVehicleFactory * { - return new GemVehicleFactory(); - }); - Register(apollo::common::LEXUS, []() -> AbstractVehicleFactory * { - return new LexusVehicleFactory(); - }); - Register(apollo::common::TRANSIT, []() -> AbstractVehicleFactory * { - return new TransitVehicleFactory(); - }); - Register(apollo::common::GE3, []() -> AbstractVehicleFactory * { - return new Ge3VehicleFactory(); - }); - Register(apollo::common::WEY, []() -> AbstractVehicleFactory * { - return new WeyVehicleFactory(); - }); - Register(apollo::common::ZHONGYUN, []() -> AbstractVehicleFactory * { - return new ZhongyunVehicleFactory(); - }); - Register(apollo::common::CH, - []() -> AbstractVehicleFactory * { return new ChVehicleFactory(); }); - Register(apollo::common::DKIT, []() -> AbstractVehicleFactory * { - return new DevkitVehicleFactory(); - }); - Register(apollo::common::NEOLIX, []() -> AbstractVehicleFactory * { - return new Neolix_eduVehicleFactory(); - }); - Register(apollo::common::MK_MINI, []() -> AbstractVehicleFactory * { - return new Mk_miniVehicleFactory(); - }); - Register(apollo::common::YUNLE, []() -> AbstractVehicleFactory * { - return new YunleVehicleFactory(); - }); +VehicleFactoryRegistry& VehicleFactoryRegistry::Instance() { + static VehicleFactoryRegistry registry; + return registry; } std::unique_ptr VehicleFactory::CreateVehicle( - const VehicleParameter &vehicle_parameter) { - auto abstract_factory = CreateObject(vehicle_parameter.brand()); + const VehicleParameter& vehicle_parameter) { + auto abstract_factory = VehicleFactoryRegistry::Instance().CreateObject( + vehicle_parameter.brand()); if (!abstract_factory) { AERROR << "failed to create vehicle factory with " << vehicle_parameter.DebugString(); diff --git a/modules/canbus/vehicle/vehicle_factory.h b/modules/canbus/vehicle/vehicle_factory.h index b16adbdf..4b6f2532 100644 --- a/modules/canbus/vehicle/vehicle_factory.h +++ b/modules/canbus/vehicle/vehicle_factory.h @@ -38,21 +38,21 @@ namespace canbus { * @brief This class is a factory class that will generate different * vehicle factories based on the vehicle brand. */ -class VehicleFactory +class VehicleFactoryRegistry : public common::util::Factory { public: - /** - * @brief register supported vehicle factories. - */ - void RegisterVehicleFactory(); + static VehicleFactoryRegistry& Instance(); +}; +class VehicleFactory { + public: /** * @brief Creates an AbstractVehicleFactory object based on vehicle_parameter * @param vehicle_parameter is defined in vehicle_parameter.proto */ std::unique_ptr CreateVehicle( - const VehicleParameter &vehicle_parameter); + const VehicleParameter& vehicle_parameter); }; } // namespace canbus diff --git a/modules/canbus/vehicle/vehicle_factory_register_macro.h b/modules/canbus/vehicle/vehicle_factory_register_macro.h new file mode 100644 index 00000000..8ef8e306 --- /dev/null +++ b/modules/canbus/vehicle/vehicle_factory_register_macro.h @@ -0,0 +1,35 @@ +// Copyright 2026 WheelOS. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Created Date: 2026-02-17 +// Author: daohu527 + +#pragma once + +#include "modules/canbus/vehicle/vehicle_factory.h" + +// TODO(zero): Unified registration function + +#define CANBUS_REGISTER_VEHICLE_FACTORY(BrandEnum, FactoryType) \ + namespace { \ + struct FactoryType##Register { \ + FactoryType##Register() { \ + apollo::canbus::VehicleFactoryRegistry::Instance().Register( \ + BrandEnum, []() -> apollo::canbus::AbstractVehicleFactory* { \ + return new FactoryType(); \ + }); \ + } \ + }; \ + static FactoryType##Register g_register_##FactoryType; \ + } diff --git a/modules/canbus/vehicle/vehicle_factory_test.cc b/modules/canbus/vehicle/vehicle_factory_test.cc index 42204173..babc6f64 100644 --- a/modules/canbus/vehicle/vehicle_factory_test.cc +++ b/modules/canbus/vehicle/vehicle_factory_test.cc @@ -25,7 +25,7 @@ namespace canbus { class VehicleFactoryTest : public ::testing::Test { public: - virtual void SetUp() { factory_.RegisterVehicleFactory(); } + virtual void SetUp() {} protected: VehicleFactory factory_; diff --git a/modules/canbus/vehicle/wey/wey_vehicle_factory.cc b/modules/canbus/vehicle/wey/wey_vehicle_factory.cc index 5d03f717..18c03e2b 100644 --- a/modules/canbus/vehicle/wey/wey_vehicle_factory.cc +++ b/modules/canbus/vehicle/wey/wey_vehicle_factory.cc @@ -15,6 +15,8 @@ *****************************************************************************/ #include "modules/canbus/vehicle/wey/wey_vehicle_factory.h" + +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/canbus/vehicle/wey/wey_controller.h" #include "modules/canbus/vehicle/wey/wey_message_manager.h" #include "modules/common/util/util.h" @@ -35,3 +37,6 @@ WeyVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::WEY, + apollo::canbus::WeyVehicleFactory) diff --git a/modules/canbus/vehicle/yunle/yunle_vehicle_factory.cc b/modules/canbus/vehicle/yunle/yunle_vehicle_factory.cc index 4651065b..42e80571 100644 --- a/modules/canbus/vehicle/yunle/yunle_vehicle_factory.cc +++ b/modules/canbus/vehicle/yunle/yunle_vehicle_factory.cc @@ -16,9 +16,10 @@ #include "modules/canbus/vehicle/yunle/yunle_vehicle_factory.h" +#include "cyber/common/log.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/canbus/vehicle/yunle/yunle_controller.h" #include "modules/canbus/vehicle/yunle/yunle_message_manager.h" -#include "cyber/common/log.h" #include "modules/common/util/util.h" namespace apollo { @@ -32,8 +33,11 @@ YunleVehicleFactory::CreateVehicleController() { std::unique_ptr> YunleVehicleFactory::CreateMessageManager() { return std::unique_ptr>( - new yunle::YunleMessageManager()); + new yunle::YunleMessageManager()); } } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::YUNLE, + apollo::canbus::YunleVehicleFactory) diff --git a/modules/canbus/vehicle/zhongyun/zhongyun_vehicle_factory.cc b/modules/canbus/vehicle/zhongyun/zhongyun_vehicle_factory.cc index 036c85a0..82484865 100644 --- a/modules/canbus/vehicle/zhongyun/zhongyun_vehicle_factory.cc +++ b/modules/canbus/vehicle/zhongyun/zhongyun_vehicle_factory.cc @@ -17,6 +17,7 @@ #include "modules/canbus/vehicle/zhongyun/zhongyun_vehicle_factory.h" #include "cyber/common/log.h" +#include "modules/canbus/vehicle/vehicle_factory_register_macro.h" #include "modules/canbus/vehicle/zhongyun/zhongyun_controller.h" #include "modules/canbus/vehicle/zhongyun/zhongyun_message_manager.h" #include "modules/common/util/util.h" @@ -37,3 +38,6 @@ ZhongyunVehicleFactory::CreateMessageManager() { } // namespace canbus } // namespace apollo + +CANBUS_REGISTER_VEHICLE_FACTORY(apollo::common::ZHONGYUN, + apollo::canbus::ZhongyunVehicleFactory) diff --git a/modules/common_msgs/chassis_msgs/BUILD b/modules/common_msgs/chassis_msgs/BUILD index 6513fb27..c4c47509 100644 --- a/modules/common_msgs/chassis_msgs/BUILD +++ b/modules/common_msgs/chassis_msgs/BUILD @@ -119,18 +119,9 @@ proto_library( name = "chassis_detail_proto", srcs = ["chassis_detail.proto"], deps = [ - ":ch_proto", ":chassis_proto", - ":devkit_proto", - ":ge3_proto", - ":lexus_proto", - ":mk_mini_proto", - ":neolix_edu_proto", - ":transit_proto", - ":wey_proto", - ":yunle_proto", - ":zhongyun_proto", "//modules/common_msgs/basic_msgs:vehicle_id_proto", + "@com_google_protobuf//:any_proto", ], ) diff --git a/modules/common_msgs/chassis_msgs/chassis_detail.proto b/modules/common_msgs/chassis_msgs/chassis_detail.proto index 48d12c23..893d3882 100644 --- a/modules/common_msgs/chassis_msgs/chassis_detail.proto +++ b/modules/common_msgs/chassis_msgs/chassis_detail.proto @@ -2,18 +2,9 @@ syntax = "proto2"; package apollo.canbus; +import "google/protobuf/any.proto"; import "modules/common_msgs/basic_msgs/vehicle_id.proto"; import "modules/common_msgs/chassis_msgs/chassis.proto"; -import "modules/common_msgs/chassis_msgs/ch.proto"; -import "modules/common_msgs/chassis_msgs/devkit.proto"; -import "modules/common_msgs/chassis_msgs/ge3.proto"; -import "modules/common_msgs/chassis_msgs/lexus.proto"; -import "modules/common_msgs/chassis_msgs/neolix_edu.proto"; -import "modules/common_msgs/chassis_msgs/transit.proto"; -import "modules/common_msgs/chassis_msgs/wey.proto"; -import "modules/common_msgs/chassis_msgs/zhongyun.proto"; -import "modules/common_msgs/chassis_msgs/mk_mini.proto"; -import "modules/common_msgs/chassis_msgs/yunle.proto"; message ChassisDetail { enum Type { @@ -38,21 +29,13 @@ message ChassisDetail { optional License license = 16 [deprecated = true]; // License info optional Surround surround = 17; // Surround information - optional Gem gem = 18; - optional Lexus lexus = 19; - optional Transit transit = 20; - optional Ge3 ge3 = 21; - optional Wey wey = 22; - optional Zhongyun zhongyun = 23; - optional Ch ch = 24; - optional Devkit devkit = 25; - optional Neolix_edu neolix_edu = 26; - optional Mk_mini mk_mini = 27; - - optional Yunle yunle = 50; + // Vehicle-specific detail payload. + optional google.protobuf.Any vehicle_detail = 200; // Reserve fields for other vehicles optional apollo.common.VehicleID vehicle_id = 101; + + reserved 18 to 27, 50; } // CheckResponseSignal