diff --git a/cmvr-es/service/grpc/src/grpc_system_service.cpp b/cmvr-es/service/grpc/src/grpc_system_service.cpp index b79c036f..69c9002b 100644 --- a/cmvr-es/service/grpc/src/grpc_system_service.cpp +++ b/cmvr-es/service/grpc/src/grpc_system_service.cpp @@ -11,6 +11,79 @@ using namespace cmvr::device; using namespace cmvr::service; +namespace { + +namespace device = cmvr::device; + +cmvr::api::DeviceType toApiDeviceType(device::DeviceKind kind) +{ + switch (kind) { + case device::DeviceKind::AGV: return cmvr::api::DeviceType::AGV; + case device::DeviceKind::Arm: + case device::DeviceKind::Robot: return cmvr::api::DeviceType::Robot; + case device::DeviceKind::Battery: return cmvr::api::DeviceType::Battery; + case device::DeviceKind::BioHead: return cmvr::api::DeviceType::BioHead; + case device::DeviceKind::Camera: return cmvr::api::DeviceType::Camera; + case device::DeviceKind::CanBus: return cmvr::api::DeviceType::CanBus; + case device::DeviceKind::DexHand: return cmvr::api::DeviceType::DexHand; + case device::DeviceKind::Gripper: return cmvr::api::DeviceType::Gripper; + case device::DeviceKind::Microphone: return cmvr::api::DeviceType::Microphone; + case device::DeviceKind::Motor: return cmvr::api::DeviceType::Motor; + case device::DeviceKind::MotorSystem: return cmvr::api::DeviceType::MotorSystem; + case device::DeviceKind::MujocoViewer: return cmvr::api::DeviceType::MujocoViewer; + case device::DeviceKind::MujocoWorld: return cmvr::api::DeviceType::MujocoWorld; + case device::DeviceKind::Speaker: return cmvr::api::DeviceType::Speaker; + case device::DeviceKind::Unknown: + default: return cmvr::api::DeviceType::Unknown; + } +} + +cmvr::api::DeviceKind toApiDeviceKind(device::DeviceKind kind) +{ + switch (kind) { + case device::DeviceKind::AGV: return cmvr::api::DEVICE_KIND_AGV; + case device::DeviceKind::Arm: return cmvr::api::DEVICE_KIND_ARM; + case device::DeviceKind::Battery: return cmvr::api::DEVICE_KIND_BATTERY; + case device::DeviceKind::BioHead: return cmvr::api::DEVICE_KIND_BIO_HEAD; + case device::DeviceKind::Camera: return cmvr::api::DEVICE_KIND_CAMERA; + case device::DeviceKind::CanBus: return cmvr::api::DEVICE_KIND_CAN_BUS; + case device::DeviceKind::DexHand: return cmvr::api::DEVICE_KIND_DEX_HAND; + case device::DeviceKind::Gripper: return cmvr::api::DEVICE_KIND_GRIPPER; + case device::DeviceKind::Microphone: return cmvr::api::DEVICE_KIND_MICROPHONE; + case device::DeviceKind::Motor: return cmvr::api::DEVICE_KIND_MOTOR; + case device::DeviceKind::MotorSystem: return cmvr::api::DEVICE_KIND_MOTOR_SYSTEM; + case device::DeviceKind::MujocoViewer: return cmvr::api::DEVICE_KIND_MUJOCO_VIEWER; + case device::DeviceKind::MujocoWorld: return cmvr::api::DEVICE_KIND_MUJOCO_WORLD; + case device::DeviceKind::Robot: return cmvr::api::DEVICE_KIND_ROBOT; + case device::DeviceKind::Speaker: return cmvr::api::DEVICE_KIND_SPEAKER; + case device::DeviceKind::Unknown: + default: return cmvr::api::DEVICE_KIND_UNKNOWN; + } +} + +std::string vendorForDriverType(const std::string& driver_type) +{ + if (driver_type == "AuboARM") return "AUBO"; + if (driver_type == "HuayanRobot") return "HUAYAN"; + if (driver_type == "SeerRobokitAgv") return "SEER"; + if (driver_type == "HikvisionCamera") return "HIKVISION"; + if (driver_type == "RealSenseCamera") return "Intel RealSense"; + if (driver_type == "MechmindCamera") return "Mech-Mind"; + if (driver_type == "RH56DFTPDexhand") return "Inspire Robots"; + if (driver_type == "ZeroSimTouchDexHand") return "ZeroSim"; + if (driver_type == "EyouMotor") return "EYOU"; + if (driver_type == "Ti5Motor") return "TI5"; + if (driver_type == "MujocoMotor" || driver_type == "MujocoCamera") return "MuJoCo"; + if (driver_type == "MyAgv" || driver_type == "MotorRobotArm" + || driver_type == "BioHeadRobot") return "CMVR"; + if (driver_type == "FFMpegMicroPhone" || driver_type == "FFMpegSpeaker") return "FFmpeg"; + if (driver_type == "UVCCamera") return "UVC"; + if (driver_type == "PX6AXGen3") return "PX6AX"; + return {}; +} + +} // namespace + gRPCSystemServiceImpl::gRPCSystemServiceImpl() : dmgr_(DeviceManager::getInstance()), action_queue_(std::make_unique( @@ -56,38 +129,14 @@ grpc::Status gRPCSystemServiceImpl::GetSystemStatus(grpc::ServerContext* context const api::GetSystemStatusCommand_Request* request, api::GetSystemStatusCommand_Feedback* response) { try { - std::list> dev_list; - dmgr_.getDeviceList(dev_list); - for (auto &pair: dev_list) { + const auto snapshot = dmgr_.snapshot(); + for (const auto& device : snapshot.devices) { auto* dev = response->add_device_list(); - dev->set_device_id(pair.first); - if (pair.second == "AGV") { - dev->set_device_type(api::DeviceType::AGV); - } - else if (pair.second == "Battery") { - dev->set_device_type(api::DeviceType::Battery); - } - else if (pair.second == "Camera") { - dev->set_device_type(api::DeviceType::Camera); - } - else if (pair.second == "DexHand") { - dev->set_device_type(api::DeviceType::DexHand); - } - else if (pair.second == "Gripper") { - dev->set_device_type(api::DeviceType::Gripper); - } - else if (pair.second == "Microphone") { - dev->set_device_type(api::DeviceType::Microphone); - } - else if (pair.second == "Robot") { - dev->set_device_type(api::DeviceType::Robot); - } - else if (pair.second == "Speaker") { - dev->set_device_type(api::DeviceType::Speaker); - } - else if (pair.second == "Unknown") { - dev->set_device_type(api::DeviceType::Unknown); - } + dev->set_device_id(device.id); + dev->set_device_type(toApiDeviceType(device.kind)); + dev->set_device_kind(toApiDeviceKind(device.kind)); + dev->set_driver_type(device.type_name); + dev->set_vendor(vendorForDriverType(device.type_name)); } response->mutable_header()->set_success(true); setCurrentTimestamp(response->mutable_header()->mutable_timestamp()); diff --git a/protos/cmvr/api/system_command.proto b/protos/cmvr/api/system_command.proto index ac91ae03..bd35ae70 100644 --- a/protos/cmvr/api/system_command.proto +++ b/protos/cmvr/api/system_command.proto @@ -14,12 +14,43 @@ enum DeviceType { Microphone = 5; Robot = 6; Speaker = 7; + BioHead = 8; + Motor = 9; + MotorSystem = 10; + MujocoWorld = 11; + MujocoViewer = 12; + CanBus = 13; Unknown = 20; } +// 设备在 cmvr-es 运行时中的稳定大类,与具体厂商驱动无关。 +enum DeviceKind { + DEVICE_KIND_UNKNOWN = 0; + DEVICE_KIND_AGV = 1; + DEVICE_KIND_ARM = 2; + DEVICE_KIND_BATTERY = 3; + DEVICE_KIND_BIO_HEAD = 4; + DEVICE_KIND_CAMERA = 5; + DEVICE_KIND_CAN_BUS = 6; + DEVICE_KIND_DEX_HAND = 7; + DEVICE_KIND_GRIPPER = 8; + DEVICE_KIND_MICROPHONE = 9; + DEVICE_KIND_MOTOR = 10; + DEVICE_KIND_MOTOR_SYSTEM = 11; + DEVICE_KIND_MUJOCO_VIEWER = 12; + DEVICE_KIND_MUJOCO_WORLD = 13; + DEVICE_KIND_ROBOT = 14; + DEVICE_KIND_SPEAKER = 15; +} + message DeviceList { string device_id = 1; DeviceType device_type = 2; + DeviceKind device_kind = 3; + // 具体运行时驱动类型,例如 AuboARM、HuayanRobot、SeerRobokitAgv。 + string driver_type = 4; + // 厂商或驱动生态,例如 AUBO、HUAYAN、SEER。 + string vendor = 5; } message GetSystemInfoCommand {