refactor: reorganize service and manager modules

This commit is contained in:
xtkuang 2026-08-17 09:48:42 +08:00
parent f4be2ffaaa
commit cb5f46c598
144 changed files with 1395 additions and 1361 deletions

View File

@ -6,15 +6,15 @@ add_subdirectory(hardware)
add_subdirectory(algorithms) add_subdirectory(algorithms)
add_subdirectory(simulate) add_subdirectory(simulate)
add_subdirectory(devices) add_subdirectory(devices)
add_subdirectory(manager/control_authority) add_subdirectory(manager/control_authority_manager)
add_subdirectory(manager/safety) add_subdirectory(manager/safety_manager)
add_subdirectory(manager/device_manager) add_subdirectory(manager/device_manager)
add_subdirectory(service/stop_all) add_subdirectory(service/grpc/stop_all)
add_subdirectory(manager/media_source_hub) add_subdirectory(manager/media_source_manager)
add_subdirectory(service/quic_edge) add_subdirectory(service/quic_edge)
add_subdirectory(service/arm_teleop_client)
add_subdirectory(task) add_subdirectory(task)
add_subdirectory(task/quic_edge_task) add_subdirectory(task/quic_edge_task)
add_subdirectory(service/grpc/client)
add_subdirectory(task/ume_teleop_task) add_subdirectory(task/ume_teleop_task)
add_subdirectory(manager/task_manager) add_subdirectory(manager/task_manager)
add_subdirectory(service) add_subdirectory(service)

View File

@ -54,7 +54,7 @@ AGV 通用类型应参考 [`types/agv/agv_types.h`](types/agv/agv_types.h),机
- AAC、Opus、PCM 明确 payload format、采样率和声道数; - AAC、Opus、PCM 明确 payload format、采样率和声道数;
- 不把 QUIC、gRPC 或浏览器专有字段加入通用帧。 - 不把 QUIC、gRPC 或浏览器专有字段加入通用帧。
设备媒体接入流程见 [`../manager/README.md`](../manager/README.md) 的 MediaSourceHub 章节。 设备媒体接入流程见 [`../manager/README.md`](../manager/README.md) 的 MediaSourceManager 章节。
## 环形队列选择 ## 环形队列选择

View File

@ -222,7 +222,7 @@ CameraDeviceConfig / AGVDeviceConfig / ... 的外层 id
## 摄像头与麦克风实时流 ## 摄像头与麦克风实时流
设备实现抽象流接口后,由 [`../manager/media_source_hub/`](../manager/media_source_hub/) 适配给 gRPC 和 QUIC,不应在设备后端实现两套协议代码。 设备实现抽象流接口后,由 [`../manager/media_source_manager/`](../manager/media_source_manager/) 适配给 gRPC 和 QUIC,不应在设备后端实现两套协议代码。
当前 Hub 轨道: 当前 Hub 轨道:
@ -312,7 +312,7 @@ adapter 检测到描述变化后创建新 descriptor,设备后端不要自行
- 满队列覆盖旧数据是实时媒体的预期行为; - 满队列覆盖旧数据是实时媒体的预期行为;
- `waitEncodedFrame()` 必须有有限 timeout,不能永久阻塞。 - `waitEncodedFrame()` 必须有有限 timeout,不能永久阻塞。
MediaSourceHub Subscription 同样是单消费者对象,不同协议或客户端必须各自订阅。 MediaSourceManager Subscription 同样是单消费者对象,不同协议或客户端必须各自订阅。
发布后的 `MediaFrame`、`TrackDescriptor` 和 payload 不可再修改。 发布后的 `MediaFrame`、`TrackDescriptor` 和 payload 不可再修改。
@ -334,19 +334,19 @@ MediaSourceHub Subscription 同样是单消费者对象,不同协议或客户
无硬件参考测试: 无硬件参考测试:
- [`camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp`](camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp) - [`camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp`](camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp)
- [`../manager/media_source_hub/tests/media_source_hub_test.cpp`](../manager/media_source_hub/tests/media_source_hub_test.cpp) - [`../manager/media_source_manager/tests/media_source_manager_test.cpp`](../manager/media_source_manager/tests/media_source_manager_test.cpp)
```bash ```bash
cmake -S . -B build \ cmake -S . -B build \
-DCMVR_ARCH=x86 \ -DCMVR_ARCH=x86 \
-DBUILD_TESTING=ON \ -DBUILD_TESTING=ON \
-DCMVR_MEDIA_SOURCE_HUB_BUILD_TESTS=ON -DCMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS=ON
cmake --build build -j"$(nproc)" cmake --build build -j"$(nproc)"
ctest \ ctest \
--test-dir build \ --test-dir build \
-R 'hikvision_camera_callback_test|media_source_hub_test' \ -R 'hikvision_camera_callback_test|media_source_manager_test' \
--output-on-failure --output-on-failure
``` ```

View File

@ -17,7 +17,7 @@
- DeviceManager 配置: - DeviceManager 配置:
[`../../../config/manager/device_manager.pb.txt`](../../../config/manager/device_manager.pb.txt) [`../../../config/manager/device_manager.pb.txt`](../../../config/manager/device_manager.pb.txt)
- ArmService 实现: - ArmService 实现:
[`../../../service/grpc/src/grpc_arm_service.cpp`](../../../service/grpc/src/grpc_arm_service.cpp) [`../../../service/grpc/server/src/grpc_arm_service.cpp`](../../../service/grpc/server/src/grpc_arm_service.cpp)
- Proto:[`../../../../protos/cmvr/api/arm_service.proto`](../../../../protos/cmvr/api/arm_service.proto) - Proto:[`../../../../protos/cmvr/api/arm_service.proto`](../../../../protos/cmvr/api/arm_service.proto)
仓库配置使用 SDK RPC 端口 `30004`。现场部署必须填写真实控制器地址和凭据, 仓库配置使用 SDK RPC 端口 `30004`。现场部署必须填写真实控制器地址和凭据,

View File

@ -6,13 +6,20 @@
## 当前管理器 ## 当前管理器
管理模块目录统一使用 `*_manager` 后缀,主管理类使用 `*Manager` 后缀。工厂、适配器、
账本、快照和结果结构体属于管理器内部的支撑类型,保留其职责名称,不强行改成
`*Manager`。
| 目录 | CMake target | 职责 | | 目录 | CMake target | 职责 |
| --- | --- | --- | | --- | --- | --- |
| [`control_authority_manager/`](control_authority_manager/) | `cmvr_es::control_authority_manager` | 控制权租约、代际、dispatch fence 和 quarantine |
| [`device_manager/`](device_manager/) | `cmvr_es::device_manager` | 按配置创建、初始化、查询和批量启停设备 | | [`device_manager/`](device_manager/) | `cmvr_es::device_manager` | 按配置创建、初始化、查询和批量启停设备 |
| [`safety_manager/`](safety_manager/) | `cmvr_es::safety_manager` | Sensor/Control 安全准入、StopAll、恢复和命令账本 |
| [`task_manager/`](task_manager/) | `cmvr_es::task_manager` | 创建任务、校验运行模式、统一启停和调度周期任务 | | [`task_manager/`](task_manager/) | `cmvr_es::task_manager` | 创建任务、校验运行模式、统一启停和调度周期任务 |
| [`media_source_hub/`](media_source_hub/) | `cmvr_es::media_source_hub`、`cmvr_es::device_media_source_adapter` | 实时媒体源注册、按需启停和多消费者分发 | | [`media_source_manager/`](media_source_manager/) | `cmvr_es::media_source_manager`、`cmvr_es::device_media_source_adapter` | 实时媒体源注册、按需启停和多消费者分发 |
`manager/` 当前没有聚合 `CMakeLists.txt`,三个子目录由 [`../CMakeLists.txt`](../CMakeLists.txt) 分别加入。新增 manager 时必须显式更新该文件。 `manager/` 当前没有聚合 `CMakeLists.txt`,所有模块由 [`../CMakeLists.txt`](../CMakeLists.txt)
按依赖顺序加入。新增 manager 时必须同时更新目录、target、依赖顺序和本 README。
## 进程生命周期 ## 进程生命周期
@ -136,12 +143,12 @@
- 有顺序依赖的工作应放入同一协调任务或显式建模; - 有顺序依赖的工作应放入同一协调任务或显式建模;
- task 返回后,其内部状态并发安全由具体实现负责。 - task 返回后,其内部状态并发安全由具体实现负责。
## MediaSourceHub ## MediaSourceManager
关键文件: 关键文件:
- [`media_source_hub/include/media_source_hub.h`](media_source_hub/include/media_source_hub.h) - [`media_source_manager/include/media_source_manager.h`](media_source_manager/include/media_source_manager.h)
- [`media_source_hub/src/device_media_source_adapter.cpp`](media_source_hub/src/device_media_source_adapter.cpp) - [`media_source_manager/src/device_media_source_adapter.cpp`](media_source_manager/src/device_media_source_adapter.cpp)
- [`../common/media/media_frame.h`](../common/media/media_frame.h) - [`../common/media/media_frame.h`](../common/media/media_frame.h)
- [`../common/base/ring_buffer.h`](../common/base/ring_buffer.h) - [`../common/base/ring_buffer.h`](../common/base/ring_buffer.h)
@ -152,7 +159,8 @@
| 摄像头彩色流 | `<device_id>/video/color` | 64 | | 摄像头彩色流 | `<device_id>/video/color` | 64 |
| 麦克风主流 | `<device_id>/audio/main` | 256 | | 麦克风主流 | `<device_id>/audio/main` | 256 |
当前 gRPC RGB/麦克风流和 QUIC 彩色/麦克风轨道使用 Hub;gRPC Depth/RGBD 仍直接读取设备帧。 当前 gRPC RGB/麦克风流和 QUIC 彩色/麦克风轨道使用 MediaSourceManager;gRPC Depth/RGBD
仍直接读取设备帧。
### 注册新媒体源 ### 注册新媒体源
@ -211,7 +219,7 @@ ring generation 不等于 `TrackDescriptor::generation`,ring 的 `ReadResult.s
## 新增第四种 Manager ## 新增第四种 Manager
1. 先确认能力不是 DeviceManager、TaskManager 或 MediaSourceHub 的子职责; 1. 先确认能力不是 DeviceManager、TaskManager 或 MediaSourceManager 的子职责;
2. 定义所有权、初始化、start/stop 和线程模型; 2. 定义所有权、初始化、start/stop 和线程模型;
3. 避免新增无必要的全局单例; 3. 避免新增无必要的全局单例;
4. 新建独立目录、头文件、实现和 CMake target; 4. 新建独立目录、头文件、实现和 CMake target;
@ -221,13 +229,13 @@ ring generation 不等于 `TrackDescriptor::generation`,ring 的 `ReadResult.s
## 测试 ## 测试
MediaSourceHub: MediaSourceManager:
```bash ```bash
cmake --build build --target media_source_hub_test cmake --build build --target media_source_manager_test
ctest \ ctest \
--test-dir build \ --test-dir build \
-R '^media_source_hub_test$' \ -R '^media_source_manager_test$' \
--output-on-failure --output-on-failure
``` ```

View File

@ -1,17 +1,17 @@
add_library(control_authority STATIC add_library(control_authority_manager STATIC
src/control_authority_manager.cpp src/control_authority_manager.cpp
) )
target_compile_features(control_authority PUBLIC cxx_std_17) target_compile_features(control_authority_manager PUBLIC cxx_std_17)
target_include_directories(control_authority target_include_directories(control_authority_manager
PUBLIC PUBLIC
${PROJECT_SOURCE_DIR}/cmvr-es ${PROJECT_SOURCE_DIR}/cmvr-es
) )
add_library( add_library(
cmvr_es::control_authority cmvr_es::control_authority_manager
ALIAS control_authority ALIAS control_authority_manager
) )
install(TARGETS control_authority ARCHIVE DESTINATION lib) install(TARGETS control_authority_manager ARCHIVE DESTINATION lib)
if(BUILD_TESTING) if(BUILD_TESTING)
add_executable(control_authority_manager_test add_executable(control_authority_manager_test
@ -19,7 +19,7 @@ if(BUILD_TESTING)
) )
target_link_libraries(control_authority_manager_test target_link_libraries(control_authority_manager_test
PRIVATE PRIVATE
cmvr_es::control_authority cmvr_es::control_authority_manager
gtest gtest
gtest_main gtest_main
pthread pthread

View File

@ -1,4 +1,4 @@
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include <utility> #include <utility>

View File

@ -1,4 +1,4 @@
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include <chrono> #include <chrono>
#include <future> #include <future>

View File

@ -8,7 +8,7 @@ target_include_directories(device_manager PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(device_manager PRIVATE target_link_libraries(device_manager PRIVATE
cmvr_es::proto cmvr_es::proto
cmvr_es::safety_coordinator cmvr_es::safety_manager
cmvr_es::device::camera cmvr_es::device::camera
cmvr_es::device::agv cmvr_es::device::agv
cmvr_es::device::speaker cmvr_es::device::speaker

View File

@ -15,7 +15,7 @@
#include "device_factory.h" #include "device_factory.h"
#include "cmvr/config/device_manager_config/device_manager_config.pb.h" #include "cmvr/config/device_manager_config/device_manager_config.pb.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
namespace cmvr::device { namespace cmvr::device {
@ -48,13 +48,13 @@ namespace cmvr::device {
std::vector<DeviceInventoryEntry> inventorySnapshot() const; std::vector<DeviceInventoryEntry> inventorySnapshot() const;
DeviceManagerSnapshot snapshot() const; DeviceManagerSnapshot snapshot() const;
safety::SafetyCoordinator& safetyCoordinator() noexcept safety::SafetyManager& safetyManager() noexcept
{ {
return *safety_coordinator_; return *safety_manager_;
} }
const safety::SafetyCoordinator& safetyCoordinator() const noexcept const safety::SafetyManager& safetyManager() const noexcept
{ {
return *safety_coordinator_; return *safety_manager_;
} }
std::string version() const; std::string version() const;
@ -74,7 +74,7 @@ namespace cmvr::device {
std::unordered_map<std::string, DeviceRecord> devices_; std::unordered_map<std::string, DeviceRecord> devices_;
std::unordered_map<std::string, ManagedDeviceSnapshot> device_statuses_; std::unordered_map<std::string, ManagedDeviceSnapshot> device_statuses_;
std::unique_ptr<DeviceFactory> dev_factory_; std::unique_ptr<DeviceFactory> dev_factory_;
std::unique_ptr<safety::SafetyCoordinator> safety_coordinator_; std::unique_ptr<safety::SafetyManager> safety_manager_;
bool initialized_{false}; bool initialized_{false};
explicit DeviceManager(const config::DeviceManagerConfig &cfg); explicit DeviceManager(const config::DeviceManagerConfig &cfg);

View File

@ -4,7 +4,7 @@
#include <memory> #include <memory>
#include "devices/abstract_device.h" #include "devices/abstract_device.h"
#include "manager/safety/include/safety_participant.h" #include "manager/safety_manager/include/safety_participant.h"
namespace cmvr::device { namespace cmvr::device {

View File

@ -38,10 +38,10 @@ using MotorJointSelections = std::unordered_map<std::string, GroupJointSelection
constexpr std::size_t kMaxDeviceErrorLength = 512; constexpr std::size_t kMaxDeviceErrorLength = 512;
constexpr auto kSafetyStartupValidationTimeout = std::chrono::seconds(2); constexpr auto kSafetyStartupValidationTimeout = std::chrono::seconds(2);
cmvr::safety::SafetyCoordinatorConfig safetyConfigFrom( cmvr::safety::SafetyManagerConfig safetyConfigFrom(
const cmvr::config::DeviceManagerConfig& config) const cmvr::config::DeviceManagerConfig& config)
{ {
cmvr::safety::SafetyCoordinatorConfig result; cmvr::safety::SafetyManagerConfig result;
if (!config.has_safety()) { if (!config.has_safety()) {
result.enforcement_mode = cmvr::safety::EnforcementMode::Shadow; result.enforcement_mode = cmvr::safety::EnforcementMode::Shadow;
return result; return result;
@ -49,18 +49,18 @@ cmvr::safety::SafetyCoordinatorConfig safetyConfigFrom(
const auto& source = config.safety(); const auto& source = config.safety();
switch (source.mode()) { switch (source.mode()) {
case cmvr::config::SafetyCoordinatorConfig::LEGACY: case cmvr::config::SafetyManagerConfig::LEGACY:
result.enforcement_mode = cmvr::safety::EnforcementMode::Legacy; result.enforcement_mode = cmvr::safety::EnforcementMode::Legacy;
break; break;
case cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED: case cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED:
result.enforcement_mode = result.enforcement_mode =
cmvr::safety::EnforcementMode::EnforceSelected; cmvr::safety::EnforcementMode::EnforceSelected;
break; break;
case cmvr::config::SafetyCoordinatorConfig::ENFORCE_ALL: case cmvr::config::SafetyManagerConfig::ENFORCE_ALL:
result.enforcement_mode = cmvr::safety::EnforcementMode::EnforceAll; result.enforcement_mode = cmvr::safety::EnforcementMode::EnforceAll;
break; break;
case cmvr::config::SafetyCoordinatorConfig::SHADOW: case cmvr::config::SafetyManagerConfig::SHADOW:
case cmvr::config::SafetyCoordinatorConfig::ENFORCEMENT_MODE_UNSPECIFIED: case cmvr::config::SafetyManagerConfig::ENFORCEMENT_MODE_UNSPECIFIED:
default: default:
result.enforcement_mode = cmvr::safety::EnforcementMode::Shadow; result.enforcement_mode = cmvr::safety::EnforcementMode::Shadow;
break; break;
@ -236,7 +236,7 @@ std::mutex DeviceManager::init_mutex_;
DeviceManager::DeviceManager(const config::DeviceManagerConfig& cfg) DeviceManager::DeviceManager(const config::DeviceManagerConfig& cfg)
: cfg_(cfg), : cfg_(cfg),
dev_factory_(std::make_unique<DeviceFactory>()), dev_factory_(std::make_unique<DeviceFactory>()),
safety_coordinator_(std::make_unique<safety::SafetyCoordinator>( safety_manager_(std::make_unique<safety::SafetyManager>(
safetyConfigFrom(cfg))) safetyConfigFrom(cfg)))
{ {
initialize_device_statuses_(); initialize_device_statuses_();
@ -313,7 +313,7 @@ bool DeviceManager::start(){
bool started = false; bool started = false;
std::string error_message; std::string error_message;
try { try {
(void)safety_coordinator_->advanceDeviceGeneration(id); (void)safety_manager_->advanceDeviceGeneration(id);
started = device->start(); started = device->start();
if (!started) { if (!started) {
error_message = "device start returned false: " + id; error_message = "device start returned false: " + id;
@ -342,7 +342,7 @@ bool DeviceManager::start(){
} }
} }
if (all_started) { if (all_started) {
const auto coverage = safety_coordinator_->validateStartupCoverage( const auto coverage = safety_manager_->validateStartupCoverage(
safety::SafetyClock::now() + kSafetyStartupValidationTimeout); safety::SafetyClock::now() + kSafetyStartupValidationTimeout);
if (!coverage.ready) { if (!coverage.ready) {
all_started = false; all_started = false;
@ -363,7 +363,7 @@ bool DeviceManager::start(){
// explicit stop() records Stopped/Error transitions. // explicit stop() records Stopped/Error transitions.
stop_devices_(false); stop_devices_(false);
} else { } else {
safety_coordinator_->markStartupComplete(); safety_manager_->markStartupComplete();
} }
return all_started; return all_started;
} }
@ -422,7 +422,7 @@ void DeviceManager::stop_devices_(const bool update_status) {
update_device_status_(id, ManagedDeviceState::Stopped); update_device_status_(id, ManagedDeviceState::Stopped);
} }
CMVR_LOG(INFO) << "[DeviceManager]: Stop device " << id << " Success"; CMVR_LOG(INFO) << "[DeviceManager]: Stop device " << id << " Success";
safety_coordinator_->updateDeviceRuntimeState( safety_manager_->updateDeviceRuntimeState(
id, ManagedDeviceState::Stopped, id, ManagedDeviceState::Stopped,
sample_device_health_(device)); sample_device_health_(device));
} else { } else {
@ -431,7 +431,7 @@ void DeviceManager::stop_devices_(const bool update_status) {
id, ManagedDeviceState::Error, error_message); id, ManagedDeviceState::Error, error_message);
} }
CMVR_LOG(ERROR) << "[DeviceManager]: Stop device " << id << " Failed"; CMVR_LOG(ERROR) << "[DeviceManager]: Stop device " << id << " Failed";
safety_coordinator_->updateDeviceRuntimeState( safety_manager_->updateDeviceRuntimeState(
id, ManagedDeviceState::Error, id, ManagedDeviceState::Error,
{DeviceHealthState::Fault, error_message}); {DeviceHealthState::Fault, error_message});
} }
@ -634,7 +634,7 @@ void DeviceManager::update_device_status_(
status.status_updated_at_unix_ms = unixTimeMs(); status.status_updated_at_unix_ms = unixTimeMs();
health = status.health; health = status.health;
} }
safety_coordinator_->updateDeviceRuntimeState(device_id, state, health); safety_manager_->updateDeviceRuntimeState(device_id, state, health);
} }
DeviceManagerSnapshot DeviceManager::snapshot() const DeviceManagerSnapshot DeviceManager::snapshot() const
@ -724,7 +724,7 @@ void DeviceManager::update_device_health_(
status.status_updated_at_unix_ms = unixTimeMs(); status.status_updated_at_unix_ms = unixTimeMs();
health = status.health; health = status.health;
} }
safety_coordinator_->updateDeviceRuntimeState( safety_manager_->updateDeviceRuntimeState(
device_id, lifecycle, std::move(health)); device_id, lifecycle, std::move(health));
} }
@ -750,7 +750,7 @@ bool DeviceManager::register_device_safety_(
return false; return false;
} }
const bool registered = const bool registered =
safety_coordinator_->registerDevice(std::move(registration)); safety_manager_->registerDevice(std::move(registration));
return registered; return registered;
} }

View File

@ -21,8 +21,8 @@
#include "devices/microphone/abstract_microphone.h" #include "devices/microphone/abstract_microphone.h"
#include "devices/motor/manager/include/motor_manager.h" #include "devices/motor/manager/include/motor_manager.h"
#include "devices/speaker/abstract_speaker.h" #include "devices/speaker/abstract_speaker.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "manager/safety/include/device_safety_endpoint.h" #include "manager/safety_manager/include/device_safety_endpoint.h"
namespace cmvr::device { namespace cmvr::device {

View File

@ -127,14 +127,14 @@ TEST_F(DeviceManagerLifecycleTest,
cmvr::config::DeviceManagerConfig config; cmvr::config::DeviceManagerConfig config;
auto* safety = config.mutable_safety(); auto* safety = config.mutable_safety();
safety->set_mode( safety->set_mode(
cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED); cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED);
safety->add_enforced_device_ids("missing-arm"); safety->add_enforced_device_ids("missing-arm");
auto& manager = cmvr::device::DeviceManager::getInstance(config); auto& manager = cmvr::device::DeviceManager::getInstance(config);
ASSERT_TRUE(manager.initialized()); ASSERT_TRUE(manager.initialized());
EXPECT_FALSE(manager.start()); EXPECT_FALSE(manager.start());
EXPECT_EQ( EXPECT_EQ(
manager.safetyCoordinator().snapshot().system_state, manager.safetyManager().snapshot().system_state,
cmvr::safety::SystemAdmissionState::Starting); cmvr::safety::SystemAdmissionState::Starting);
} }
@ -143,7 +143,7 @@ TEST_F(DeviceManagerLifecycleTest,
{ {
cmvr::config::DeviceManagerConfig config; cmvr::config::DeviceManagerConfig config;
config.mutable_safety()->set_mode( config.mutable_safety()->set_mode(
cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED); cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED);
auto& manager = cmvr::device::DeviceManager::getInstance(config); auto& manager = cmvr::device::DeviceManager::getInstance(config);
ASSERT_TRUE(manager.initialized()); ASSERT_TRUE(manager.initialized());

View File

@ -1,28 +1,28 @@
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
cmake_minimum_required(VERSION 3.22) cmake_minimum_required(VERSION 3.22)
project(cmvr_media_source_hub LANGUAGES CXX) project(cmvr_media_source_manager LANGUAGES CXX)
enable_testing() enable_testing()
add_subdirectory( add_subdirectory(
${CMAKE_CURRENT_SOURCE_DIR}/../../service/stop_all ${CMAKE_CURRENT_SOURCE_DIR}/../../service/grpc/stop_all
${CMAKE_CURRENT_BINARY_DIR}/stop_all ${CMAKE_CURRENT_BINARY_DIR}/stop_all
) )
endif() endif()
add_library(media_source_hub STATIC add_library(media_source_manager STATIC
src/media_source_hub.cpp src/media_source_manager.cpp
) )
target_compile_features(media_source_hub PUBLIC cxx_std_17) target_compile_features(media_source_manager PUBLIC cxx_std_17)
target_include_directories(media_source_hub target_include_directories(media_source_manager
PUBLIC PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../.. ${CMAKE_CURRENT_SOURCE_DIR}/../..
) )
target_link_libraries(media_source_hub target_link_libraries(media_source_manager
PUBLIC PUBLIC
cmvr_es::stop_all_admission_gate cmvr_es::stop_all_admission_gate
) )
add_library(cmvr_es::media_source_hub ALIAS media_source_hub) add_library(cmvr_es::media_source_manager ALIAS media_source_manager)
if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
add_library(device_media_source_adapter STATIC add_library(device_media_source_adapter STATIC
@ -35,11 +35,11 @@ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
) )
target_link_libraries(device_media_source_adapter target_link_libraries(device_media_source_adapter
PUBLIC PUBLIC
cmvr_es::media_source_hub cmvr_es::media_source_manager
cmvr_es::common cmvr_es::common
cmvr_es::proto cmvr_es::proto
cmvr_es::logging cmvr_es::logging
cmvr_es::safety_coordinator cmvr_es::safety_manager
) )
add_library(cmvr_es::device_media_source_adapter ALIAS device_media_source_adapter) add_library(cmvr_es::device_media_source_adapter ALIAS device_media_source_adapter)
@ -71,27 +71,27 @@ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
endif() endif()
endif() endif()
option(CMVR_MEDIA_SOURCE_HUB_BUILD_TESTS option(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS
"Build the standalone MediaSourceHub self-test" "Build the standalone MediaSourceManager self-test"
${PROJECT_IS_TOP_LEVEL}) ${PROJECT_IS_TOP_LEVEL})
if(CMVR_MEDIA_SOURCE_HUB_BUILD_TESTS) if(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
add_executable(media_source_hub_test add_executable(media_source_manager_test
tests/media_source_hub_test.cpp tests/media_source_manager_test.cpp
) )
target_compile_features(media_source_hub_test PRIVATE cxx_std_17) target_compile_features(media_source_manager_test PRIVATE cxx_std_17)
target_link_libraries(media_source_hub_test target_link_libraries(media_source_manager_test
PRIVATE PRIVATE
cmvr_es::media_source_hub cmvr_es::media_source_manager
Threads::Threads Threads::Threads
) )
# This self-test only links the static Hub and pthreads. In the root build, # This self-test only links the static Hub and pthreads. In the root build,
# the project-wide third-party RUNPATH can otherwise make the loader pick up # the project-wide third-party RUNPATH can otherwise make the loader pick up
# a vendor libstdc++.so (for example from the AUBO SDK), even though the test # a vendor libstdc++.so (for example from the AUBO SDK), even though the test
# has no dependency on that SDK. # has no dependency on that SDK.
set_target_properties(media_source_hub_test PROPERTIES set_target_properties(media_source_manager_test PROPERTIES
SKIP_BUILD_RPATH TRUE SKIP_BUILD_RPATH TRUE
) )
add_test(NAME media_source_hub_test COMMAND media_source_hub_test) add_test(NAME media_source_manager_test COMMAND media_source_manager_test)
endif() endif()

View File

@ -9,13 +9,13 @@
#include "devices/camera/abstract_camera.h" #include "devices/camera/abstract_camera.h"
#include "devices/microphone/abstract_microphone.h" #include "devices/microphone/abstract_microphone.h"
#include "manager/media_source_hub/include/media_source_hub.h" #include "manager/media_source_manager/include/media_source_manager.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
namespace cmvr::media { namespace cmvr::media {
// Process-wide protocol-neutral media hub shared by gRPC and QUIC services. // Process-wide protocol-neutral media hub shared by gRPC and QUIC services.
MediaSourceHub& globalMediaSourceHub(); MediaSourceManager& globalMediaSourceManager();
std::string cameraColorTrackId(const std::string& device_id); std::string cameraColorTrackId(const std::string& device_id);
std::string microphoneTrackId(const std::string& device_id); std::string microphoneTrackId(const std::string& device_id);
@ -24,7 +24,7 @@ std::string microphoneTrackId(const std::string& device_id);
// device endpoint's final hardware check. Keep the returned guard alive until // device endpoint's final hardware check. Keep the returned guard alive until
// the operation which can start the physical media producer has returned. // the operation which can start the physical media producer has returned.
safety::DispatchGuard beginMediaSourceStartDispatch( safety::DispatchGuard beginMediaSourceStartDispatch(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::string& device_id); const std::string& device_id);
// Registration is idempotent for an already registered track. The adapter owns a // Registration is idempotent for an already registered track. The adapter owns a
@ -32,12 +32,12 @@ safety::DispatchGuard beginMediaSourceStartDispatch(
// at least one Hub subscription is active. It ensures start() succeeds but deliberately // at least one Hub subscription is active. It ensures start() succeeds but deliberately
// does not call stop(), because the base device lifecycle can also be owned by control RPCs. // does not call stop(), because the base device lifecycle can also be owned by control RPCs.
bool ensureCameraMediaSource( bool ensureCameraMediaSource(
MediaSourceHub& hub, MediaSourceManager& hub,
const std::shared_ptr<device::AbstractCamera>& camera, const std::shared_ptr<device::AbstractCamera>& camera,
size_t ring_capacity = 64); size_t ring_capacity = 64);
bool ensureMicrophoneMediaSource( bool ensureMicrophoneMediaSource(
MediaSourceHub& hub, MediaSourceManager& hub,
const std::shared_ptr<device::AbstractMicrophone>& microphone, const std::shared_ptr<device::AbstractMicrophone>& microphone,
size_t ring_capacity = 256); size_t ring_capacity = 256);

View File

@ -1,5 +1,5 @@
#ifndef CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H #ifndef CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H
#define CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H #define CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H
#pragma once #pragma once
@ -21,15 +21,15 @@ class StopAllAdmissionGate;
namespace cmvr::media { namespace cmvr::media {
// MediaSourceHub owns no protocol-specific state. A device or capture adapter registers // MediaSourceManager owns no protocol-specific state. A device or capture adapter registers
// start/stop callbacks and receives a sink callback when the first consumer subscribes. // start/stop callbacks and receives a sink callback when the first consumer subscribes.
class MediaSourceHub final { class MediaSourceManager final {
public: public:
using FrameRing = BroadcastFrameRing<MediaFrame>; using FrameRing = BroadcastFrameRing<MediaFrame>;
using FrameReadResult = FrameRing::ReadResult; using FrameReadResult = FrameRing::ReadResult;
using StartPosition = FrameRing::StartPosition; using StartPosition = FrameRing::StartPosition;
using FrameSink = std::function<void(MediaFramePtr)>; using FrameSink = std::function<void(MediaFramePtr)>;
// Cancellation checks run while MediaSourceHub protects source lifecycle // Cancellation checks run while MediaSourceManager protects source lifecycle
// state. Predicates must therefore be fast, non-blocking and must not call // state. Predicates must therefore be fast, non-blocking and must not call
// back into the same hub. // back into the same hub.
using CancelPredicate = std::function<bool()>; using CancelPredicate = std::function<bool()>;
@ -37,7 +37,7 @@ public:
struct SourceCallbacks { struct SourceCallbacks {
// start() may run asynchronously. It must observe cancelled during any // start() may run asynchronously. It must observe cancelled during any
// potentially blocking startup work and return false promptly once set. // potentially blocking startup work and return false promptly once set.
// MediaSourceHub retains the callback state until a non-cooperative start // MediaSourceManager retains the callback state until a non-cooperative start
// eventually returns, so late completion cannot access destroyed state. // eventually returns, so late completion cannot access destroyed state.
std::function<bool( std::function<bool(
const FrameSink& sink, const FrameSink& sink,
@ -84,7 +84,7 @@ public:
void reset(); void reset();
private: private:
friend class MediaSourceHub; friend class MediaSourceManager;
Subscription(std::shared_ptr<SourceState> source, FrameRing::Cursor cursor); Subscription(std::shared_ptr<SourceState> source, FrameRing::Cursor cursor);
std::shared_ptr<SourceState> source_; std::shared_ptr<SourceState> source_;
@ -94,12 +94,12 @@ public:
// Pass the process-wide StopAll gate for a hub whose sources are part of // Pass the process-wide StopAll gate for a hub whose sources are part of
// whole-machine operational stopping. Test/private hubs may remain local. // whole-machine operational stopping. Test/private hubs may remain local.
explicit MediaSourceHub( explicit MediaSourceManager(
service::StopAllAdmissionGate* admission_gate = nullptr); service::StopAllAdmissionGate* admission_gate = nullptr);
~MediaSourceHub(); ~MediaSourceManager();
MediaSourceHub(const MediaSourceHub&) = delete; MediaSourceManager(const MediaSourceManager&) = delete;
MediaSourceHub& operator=(const MediaSourceHub&) = delete; MediaSourceManager& operator=(const MediaSourceManager&) = delete;
bool registerSource( bool registerSource(
TrackDescriptorPtr initial_descriptor, TrackDescriptorPtr initial_descriptor,
@ -159,4 +159,4 @@ private:
} // namespace cmvr::media } // namespace cmvr::media
#endif // CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H #endif // CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H

View File

@ -1,6 +1,6 @@
#include "manager/media_source_hub/include/device_media_source_adapter.h" #include "manager/media_source_manager/include/device_media_source_adapter.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
@ -131,8 +131,8 @@ struct PumpState : public std::enable_shared_from_this<PumpState<DeviceT>> {
} }
bool begin( bool begin(
const MediaSourceHub::FrameSink& frame_sink, const MediaSourceManager::FrameSink& frame_sink,
const MediaSourceHub::CancelPredicate& cancelled) { const MediaSourceManager::CancelPredicate& cancelled) {
if (!frame_sink || !device) { if (!frame_sink || !device) {
return false; return false;
} }
@ -288,7 +288,7 @@ struct PumpState : public std::enable_shared_from_this<PumpState<DeviceT>> {
std::atomic<bool> running{false}; std::atomic<bool> running{false};
std::mutex mutex; std::mutex mutex;
std::thread worker; std::thread worker;
MediaSourceHub::FrameSink sink; MediaSourceManager::FrameSink sink;
bool streaming_started{false}; bool streaming_started{false};
}; };
@ -448,7 +448,7 @@ struct CameraPump final : PumpState<device::AbstractCamera> {
frame.key_frame = source.bKey; frame.key_frame = source.bKey;
frame.discontinuity = pending_discontinuity; frame.discontinuity = pending_discontinuity;
MediaSourceHub::FrameSink current_sink; MediaSourceManager::FrameSink current_sink;
{ {
std::lock_guard<std::mutex> lock(mutex); std::lock_guard<std::mutex> lock(mutex);
current_sink = sink; current_sink = sink;
@ -581,7 +581,7 @@ struct MicrophonePump final : PumpState<device::AbstractMicrophone> {
frame.key_frame = true; frame.key_frame = true;
frame.discontinuity = pending_discontinuity; frame.discontinuity = pending_discontinuity;
MediaSourceHub::FrameSink current_sink; MediaSourceManager::FrameSink current_sink;
{ {
std::lock_guard<std::mutex> lock(mutex); std::lock_guard<std::mutex> lock(mutex);
current_sink = sink; current_sink = sink;
@ -619,8 +619,8 @@ TrackDescriptorPtr initialTrack(
} // namespace } // namespace
MediaSourceHub& globalMediaSourceHub() { MediaSourceManager& globalMediaSourceManager() {
static MediaSourceHub hub(&service::globalStopAllAdmissionGate()); static MediaSourceManager hub(&service::globalStopAllAdmissionGate());
return hub; return hub;
} }
@ -633,12 +633,12 @@ std::string microphoneTrackId(const std::string& device_id) {
} }
safety::DispatchGuard beginMediaSourceStartDispatch( safety::DispatchGuard beginMediaSourceStartDispatch(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::string& device_id) const std::string& device_id)
{ {
safety::AdmissionRequest request; safety::AdmissionRequest request;
request.command = { request.command = {
"cmvr.internal.MediaSourceHub/StartSource", "cmvr.internal.MediaSourceManager/StartSource",
safety::CommandIntent::StartActivity, safety::CommandIntent::StartActivity,
safety::SafetyPolicyFamily::Sensor, safety::SafetyPolicyFamily::Sensor,
true, true,
@ -670,7 +670,7 @@ safety::DispatchGuard beginMediaSourceStartDispatch(
} }
bool ensureCameraMediaSource( bool ensureCameraMediaSource(
MediaSourceHub& hub, MediaSourceManager& hub,
const std::shared_ptr<device::AbstractCamera>& camera, const std::shared_ptr<device::AbstractCamera>& camera,
const size_t ring_capacity) { const size_t ring_capacity) {
if (!camera || camera->id().empty()) { if (!camera || camera->id().empty()) {
@ -682,10 +682,10 @@ bool ensureCameraMediaSource(
} }
const auto pump = std::make_shared<CameraPump>(camera, track_id); const auto pump = std::make_shared<CameraPump>(camera, track_id);
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [pump]( callbacks.start = [pump](
const MediaSourceHub::FrameSink& sink, const MediaSourceManager::FrameSink& sink,
const MediaSourceHub::CancelPredicate& cancelled) { const MediaSourceManager::CancelPredicate& cancelled) {
return pump->begin(sink, cancelled); return pump->begin(sink, cancelled);
}; };
callbacks.stop_confirmed = [pump] { return pump->stop(); }; callbacks.stop_confirmed = [pump] { return pump->stop(); };
@ -702,7 +702,7 @@ bool ensureCameraMediaSource(
} }
bool ensureMicrophoneMediaSource( bool ensureMicrophoneMediaSource(
MediaSourceHub& hub, MediaSourceManager& hub,
const std::shared_ptr<device::AbstractMicrophone>& microphone, const std::shared_ptr<device::AbstractMicrophone>& microphone,
const size_t ring_capacity) { const size_t ring_capacity) {
if (!microphone || microphone->id().empty()) { if (!microphone || microphone->id().empty()) {
@ -714,10 +714,10 @@ bool ensureMicrophoneMediaSource(
} }
const auto pump = std::make_shared<MicrophonePump>(microphone, track_id); const auto pump = std::make_shared<MicrophonePump>(microphone, track_id);
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [pump]( callbacks.start = [pump](
const MediaSourceHub::FrameSink& sink, const MediaSourceManager::FrameSink& sink,
const MediaSourceHub::CancelPredicate& cancelled) { const MediaSourceManager::CancelPredicate& cancelled) {
return pump->begin(sink, cancelled); return pump->begin(sink, cancelled);
}; };
callbacks.stop_confirmed = [pump] { return pump->stop(); }; callbacks.stop_confirmed = [pump] { return pump->stop(); };

View File

@ -1,4 +1,4 @@
#include "manager/media_source_hub/include/media_source_hub.h" #include "manager/media_source_manager/include/media_source_manager.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
@ -9,11 +9,11 @@
#include <unordered_set> #include <unordered_set>
#include <utility> #include <utility>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::media { namespace cmvr::media {
struct MediaSourceHub::SourceState final : public std::enable_shared_from_this<SourceState> { struct MediaSourceManager::SourceState final : public std::enable_shared_from_this<SourceState> {
enum class Lifecycle { enum class Lifecycle {
STOPPED, STOPPED,
STARTING, STARTING,
@ -406,7 +406,7 @@ struct MediaSourceHub::SourceState final : public std::enable_shared_from_this<S
std::shared_ptr<StartAttempt> start_attempt; std::shared_ptr<StartAttempt> start_attempt;
}; };
struct MediaSourceHub::Impl final { struct MediaSourceManager::Impl final {
explicit Impl(service::StopAllAdmissionGate* source_admission_gate) explicit Impl(service::StopAllAdmissionGate* source_admission_gate)
: admission_gate(source_admission_gate) {} : admission_gate(source_admission_gate) {}
@ -420,25 +420,25 @@ struct MediaSourceHub::Impl final {
service::StopAllAdmissionGate* const admission_gate; service::StopAllAdmissionGate* const admission_gate;
}; };
MediaSourceHub::Subscription::Subscription( MediaSourceManager::Subscription::Subscription(
std::shared_ptr<SourceState> source, std::shared_ptr<SourceState> source,
FrameRing::Cursor cursor) FrameRing::Cursor cursor)
: source_(std::move(source)), : source_(std::move(source)),
cursor_(std::move(cursor)), cursor_(std::move(cursor)),
active_(static_cast<bool>(source_)) {} active_(static_cast<bool>(source_)) {}
MediaSourceHub::Subscription::~Subscription() { MediaSourceManager::Subscription::~Subscription() {
reset(); reset();
} }
MediaSourceHub::Subscription::Subscription(Subscription&& other) noexcept MediaSourceManager::Subscription::Subscription(Subscription&& other) noexcept
: source_(std::move(other.source_)), : source_(std::move(other.source_)),
cursor_(other.cursor_), cursor_(other.cursor_),
active_(other.active_) { active_(other.active_) {
other.active_ = false; other.active_ = false;
} }
MediaSourceHub::Subscription& MediaSourceHub::Subscription::operator=(Subscription&& other) noexcept { MediaSourceManager::Subscription& MediaSourceManager::Subscription::operator=(Subscription&& other) noexcept {
if (this == &other) { if (this == &other) {
return *this; return *this;
} }
@ -450,22 +450,22 @@ MediaSourceHub::Subscription& MediaSourceHub::Subscription::operator=(Subscripti
return *this; return *this;
} }
bool MediaSourceHub::Subscription::valid() const { bool MediaSourceManager::Subscription::valid() const {
return active_ && source_ && source_->validForSubscription(); return active_ && source_ && source_->validForSubscription();
} }
TrackDescriptorPtr MediaSourceHub::Subscription::descriptor() const { TrackDescriptorPtr MediaSourceManager::Subscription::descriptor() const {
return source_ ? source_->currentDescriptor() : nullptr; return source_ ? source_->currentDescriptor() : nullptr;
} }
std::optional<MediaSourceHub::FrameReadResult> MediaSourceHub::Subscription::tryRead() { std::optional<MediaSourceManager::FrameReadResult> MediaSourceManager::Subscription::tryRead() {
if (!active_ || !source_) { if (!active_ || !source_) {
return std::nullopt; return std::nullopt;
} }
return source_->ring.tryRead(cursor_); return source_->ring.tryRead(cursor_);
} }
std::optional<MediaSourceHub::FrameReadResult> MediaSourceHub::Subscription::waitRead( std::optional<MediaSourceManager::FrameReadResult> MediaSourceManager::Subscription::waitRead(
const std::chrono::milliseconds timeout) { const std::chrono::milliseconds timeout) {
if (!active_ || !source_) { if (!active_ || !source_) {
return std::nullopt; return std::nullopt;
@ -473,7 +473,7 @@ std::optional<MediaSourceHub::FrameReadResult> MediaSourceHub::Subscription::wai
return source_->ring.waitRead(cursor_, timeout); return source_->ring.waitRead(cursor_, timeout);
} }
uint64_t MediaSourceHub::Subscription::discardPendingIfExceeds( uint64_t MediaSourceManager::Subscription::discardPendingIfExceeds(
const size_t maximum_pending_frames) { const size_t maximum_pending_frames) {
if (!active_ || !source_) { if (!active_ || !source_) {
return 0; return 0;
@ -481,11 +481,11 @@ uint64_t MediaSourceHub::Subscription::discardPendingIfExceeds(
return source_->ring.discardPendingIfExceeds(cursor_, maximum_pending_frames); return source_->ring.discardPendingIfExceeds(cursor_, maximum_pending_frames);
} }
uint64_t MediaSourceHub::Subscription::droppedCount() const noexcept { uint64_t MediaSourceManager::Subscription::droppedCount() const noexcept {
return cursor_.dropped_count; return cursor_.dropped_count;
} }
void MediaSourceHub::Subscription::reset() { void MediaSourceManager::Subscription::reset() {
if (active_ && source_) { if (active_ && source_) {
source_->release(); source_->release();
} }
@ -493,15 +493,15 @@ void MediaSourceHub::Subscription::reset() {
source_.reset(); source_.reset();
} }
MediaSourceHub::MediaSourceHub( MediaSourceManager::MediaSourceManager(
service::StopAllAdmissionGate* admission_gate) service::StopAllAdmissionGate* admission_gate)
: impl_(std::make_shared<Impl>(admission_gate)) {} : impl_(std::make_shared<Impl>(admission_gate)) {}
MediaSourceHub::~MediaSourceHub() { MediaSourceManager::~MediaSourceManager() {
shutdown(); shutdown();
} }
bool MediaSourceHub::registerSource( bool MediaSourceManager::registerSource(
TrackDescriptorPtr initial_descriptor, TrackDescriptorPtr initial_descriptor,
SourceCallbacks callbacks, SourceCallbacks callbacks,
const size_t ring_capacity) { const size_t ring_capacity) {
@ -556,7 +556,7 @@ bool MediaSourceHub::registerSource(
return inserted; return inserted;
} }
bool MediaSourceHub::unregisterSource(const std::string& track_id) { bool MediaSourceManager::unregisterSource(const std::string& track_id) {
if (!impl_ || track_id.empty()) { if (!impl_ || track_id.empty()) {
return false; return false;
} }
@ -590,7 +590,7 @@ bool MediaSourceHub::unregisterSource(const std::string& track_id) {
return false; return false;
} }
bool MediaSourceHub::hasSource(const std::string& track_id) const { bool MediaSourceManager::hasSource(const std::string& track_id) const {
if (!impl_) { if (!impl_) {
return false; return false;
} }
@ -598,7 +598,7 @@ bool MediaSourceHub::hasSource(const std::string& track_id) const {
return impl_->sources.find(track_id) != impl_->sources.end(); return impl_->sources.find(track_id) != impl_->sources.end();
} }
std::vector<TrackDescriptorPtr> MediaSourceHub::listTracks() const { std::vector<TrackDescriptorPtr> MediaSourceManager::listTracks() const {
std::vector<std::shared_ptr<SourceState>> sources; std::vector<std::shared_ptr<SourceState>> sources;
if (!impl_) { if (!impl_) {
return {}; return {};
@ -625,7 +625,7 @@ std::vector<TrackDescriptorPtr> MediaSourceHub::listTracks() const {
return descriptors; return descriptors;
} }
std::vector<std::string> MediaSourceHub::trackedSourceIds() const { std::vector<std::string> MediaSourceManager::trackedSourceIds() const {
if (!impl_) { if (!impl_) {
return {}; return {};
} }
@ -644,7 +644,7 @@ std::vector<std::string> MediaSourceHub::trackedSourceIds() const {
return source_ids; return source_ids;
} }
size_t MediaSourceHub::subscriberCount(const std::string& track_id) const { size_t MediaSourceManager::subscriberCount(const std::string& track_id) const {
if (!impl_) { if (!impl_) {
return 0; return 0;
} }
@ -660,7 +660,7 @@ size_t MediaSourceHub::subscriberCount(const std::string& track_id) const {
return source->subscriberCount(); return source->subscriberCount();
} }
bool MediaSourceHub::requestKeyFrame(const std::string& track_id) const { bool MediaSourceManager::requestKeyFrame(const std::string& track_id) const {
if (!impl_) { if (!impl_) {
return false; return false;
} }
@ -676,7 +676,7 @@ bool MediaSourceHub::requestKeyFrame(const std::string& track_id) const {
return source->requestKeyFrame(); return source->requestKeyFrame();
} }
MediaSourceHub::Subscription MediaSourceHub::subscribe( MediaSourceManager::Subscription MediaSourceManager::subscribe(
const std::string& track_id, const std::string& track_id,
const StartPosition start_position, const StartPosition start_position,
CancelPredicate cancelled) { CancelPredicate cancelled) {
@ -701,7 +701,7 @@ MediaSourceHub::Subscription MediaSourceHub::subscribe(
return Subscription(std::move(source), std::move(cursor)); return Subscription(std::move(source), std::move(cursor));
} }
bool MediaSourceHub::stopSourcesForDevice( bool MediaSourceManager::stopSourcesForDevice(
const std::string& source_id, const std::string& source_id,
std::vector<std::string>* failures) { std::vector<std::string>* failures) {
if (source_id.empty()) { if (source_id.empty()) {
@ -713,11 +713,11 @@ bool MediaSourceHub::stopSourcesForDevice(
return stopSources(source_id, failures); return stopSources(source_id, failures);
} }
bool MediaSourceHub::stopAllSources(std::vector<std::string>* failures) { bool MediaSourceManager::stopAllSources(std::vector<std::string>* failures) {
return stopSources(std::nullopt, failures); return stopSources(std::nullopt, failures);
} }
bool MediaSourceHub::stopSources( bool MediaSourceManager::stopSources(
const std::optional<std::string>& source_id, const std::optional<std::string>& source_id,
std::vector<std::string>* failures) { std::vector<std::string>* failures) {
if (failures) { if (failures) {
@ -796,7 +796,7 @@ bool MediaSourceHub::stopSources(
return quarantined.empty(); return quarantined.empty();
} }
void MediaSourceHub::shutdown() { void MediaSourceManager::shutdown() {
(void)stopAllSources(); (void)stopAllSources();
} }

View File

@ -1,4 +1,4 @@
#include "manager/media_source_hub/include/device_media_source_adapter.h" #include "manager/media_source_manager/include/device_media_source_adapter.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -7,7 +7,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "manager/safety/include/device_safety_endpoint.h" #include "manager/safety_manager/include/device_safety_endpoint.h"
namespace cmvr::media { namespace cmvr::media {
namespace { namespace {
@ -81,9 +81,9 @@ private:
TEST(DeviceMediaSourceAdapterTest, TEST(DeviceMediaSourceAdapterTest,
SensorStartUsesFinalCheckAndQuarantineRejectsRestart) SensorStartUsesFinalCheckAndQuarantineRejectsRestart)
{ {
safety::SafetyCoordinatorConfig config; safety::SafetyManagerConfig config;
config.enforcement_mode = safety::EnforcementMode::EnforceAll; config.enforcement_mode = safety::EnforcementMode::EnforceAll;
safety::SafetyCoordinator coordinator(config); safety::SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeSensorEndpoint>("camera"); auto endpoint = std::make_shared<FakeSensorEndpoint>("camera");
ASSERT_TRUE(coordinator.registerDevice( ASSERT_TRUE(coordinator.registerDevice(
{endpoint->descriptor(), endpoint, {}})); {endpoint->descriptor(), endpoint, {}}));

View File

@ -1,5 +1,5 @@
#include "manager/media_source_hub/include/media_source_hub.h" #include "manager/media_source_manager/include/media_source_manager.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -20,7 +20,7 @@ using cmvr::media::Codec;
using cmvr::media::MediaFrame; using cmvr::media::MediaFrame;
using cmvr::media::MediaFramePtr; using cmvr::media::MediaFramePtr;
using cmvr::media::MediaKind; using cmvr::media::MediaKind;
using cmvr::media::MediaSourceHub; using cmvr::media::MediaSourceManager;
using cmvr::media::PayloadFormat; using cmvr::media::PayloadFormat;
using cmvr::media::Rational; using cmvr::media::Rational;
using cmvr::media::TrackDescriptor; using cmvr::media::TrackDescriptor;
@ -349,17 +349,17 @@ void testBroadcastConcurrency() {
} }
void testHubLifecycleAndDescriptorRefresh() { void testHubLifecycleAndDescriptorRefresh() {
MediaSourceHub hub; MediaSourceManager hub;
const auto initial_descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); const auto initial_descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
std::atomic<int> start_count{0}; std::atomic<int> start_count{0};
std::atomic<int> stop_count{0}; std::atomic<int> stop_count{0};
std::atomic<int> key_frame_requests{0}; std::atomic<int> key_frame_requests{0};
std::mutex sink_mutex; std::mutex sink_mutex;
MediaSourceHub::FrameSink sink; MediaSourceManager::FrameSink sink;
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [&](const MediaSourceHub::FrameSink& callback_sink, callbacks.start = [&](const MediaSourceManager::FrameSink& callback_sink,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
{ {
std::lock_guard<std::mutex> lock(sink_mutex); std::lock_guard<std::mutex> lock(sink_mutex);
sink = callback_sink; sink = callback_sink;
@ -394,7 +394,7 @@ void testHubLifecycleAndDescriptorRefresh() {
// Content changes at the same generation must atomically replace the initial descriptor. // Content changes at the same generation must atomically replace the initial descriptor.
const auto actual_descriptor = makeVideoDescriptor(Codec::H264, 1, {0, 0, 0, 1, 0x67}); const auto actual_descriptor = makeVideoDescriptor(Codec::H264, 1, {0, 0, 0, 1, 0x67});
MediaSourceHub::FrameSink producer; MediaSourceManager::FrameSink producer;
{ {
std::lock_guard<std::mutex> lock(sink_mutex); std::lock_guard<std::mutex> lock(sink_mutex);
producer = sink; producer = sink;
@ -429,14 +429,14 @@ void testHubLifecycleAndDescriptorRefresh() {
} }
void testSubscriptionDiscardPending() { void testSubscriptionDiscardPending() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::H264, 1); const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
std::mutex sink_mutex; std::mutex sink_mutex;
MediaSourceHub::FrameSink sink; MediaSourceManager::FrameSink sink;
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [&](const MediaSourceHub::FrameSink& callback_sink, callbacks.start = [&](const MediaSourceManager::FrameSink& callback_sink,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
std::lock_guard<std::mutex> lock(sink_mutex); std::lock_guard<std::mutex> lock(sink_mutex);
sink = callback_sink; sink = callback_sink;
return true; return true;
@ -450,7 +450,7 @@ void testSubscriptionDiscardPending() {
auto subscription = hub.subscribe(descriptor->id); auto subscription = hub.subscribe(descriptor->id);
CHECK_TRUE(subscription.valid()); CHECK_TRUE(subscription.valid());
MediaSourceHub::FrameSink producer; MediaSourceManager::FrameSink producer;
{ {
std::lock_guard<std::mutex> lock(sink_mutex); std::lock_guard<std::mutex> lock(sink_mutex);
producer = sink; producer = sink;
@ -471,13 +471,13 @@ void testSubscriptionDiscardPending() {
} }
void testHubFailedStartAndShutdown() { void testHubFailedStartAndShutdown() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
std::atomic<int> start_attempts{0}; std::atomic<int> start_attempts{0};
std::atomic<int> retry_stop_count{0}; std::atomic<int> retry_stop_count{0};
MediaSourceHub::SourceCallbacks failed_callbacks; MediaSourceManager::SourceCallbacks failed_callbacks;
failed_callbacks.start = [&](const MediaSourceHub::FrameSink&, failed_callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
return ++start_attempts >= 2; return ++start_attempts >= 2;
}; };
failed_callbacks.stop = [&] { ++retry_stop_count; }; failed_callbacks.stop = [&] { ++retry_stop_count; };
@ -492,9 +492,9 @@ void testHubFailedStartAndShutdown() {
CHECK_TRUE(hub.unregisterSource(descriptor->id)); CHECK_TRUE(hub.unregisterSource(descriptor->id));
std::atomic<int> stop_count{0}; std::atomic<int> stop_count{0};
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [](const MediaSourceHub::FrameSink&, callbacks.start = [](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
return true; return true;
}; };
callbacks.stop = [&] { ++stop_count; }; callbacks.stop = [&] { ++stop_count; };
@ -508,13 +508,13 @@ void testHubFailedStartAndShutdown() {
} }
void testHubStopAllSourcesAllowsReregistration() { void testHubStopAllSourcesAllowsReregistration() {
MediaSourceHub hub; MediaSourceManager hub;
const auto first_descriptor = makeVideoDescriptor(Codec::H264, 1); const auto first_descriptor = makeVideoDescriptor(Codec::H264, 1);
std::atomic<int> first_stop_count{0}; std::atomic<int> first_stop_count{0};
MediaSourceHub::SourceCallbacks first_callbacks; MediaSourceManager::SourceCallbacks first_callbacks;
first_callbacks.start = [](const MediaSourceHub::FrameSink&, first_callbacks.start = [](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
return true; return true;
}; };
first_callbacks.stop = [&] { ++first_stop_count; }; first_callbacks.stop = [&] { ++first_stop_count; };
@ -538,9 +538,9 @@ void testHubStopAllSourcesAllowsReregistration() {
const auto second_descriptor = makeVideoDescriptor(Codec::H264, 2); const auto second_descriptor = makeVideoDescriptor(Codec::H264, 2);
std::atomic<int> second_start_count{0}; std::atomic<int> second_start_count{0};
std::atomic<int> second_stop_count{0}; std::atomic<int> second_stop_count{0};
MediaSourceHub::SourceCallbacks second_callbacks; MediaSourceManager::SourceCallbacks second_callbacks;
second_callbacks.start = [&](const MediaSourceHub::FrameSink&, second_callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++second_start_count; ++second_start_count;
return true; return true;
}; };
@ -559,13 +559,13 @@ void testHubStopAllSourcesAllowsReregistration() {
} }
void testStopAllSourcesReportsAndRetriesUnconfirmedStop() { void testStopAllSourcesReportsAndRetriesUnconfirmedStop() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::H264, 1); const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
std::atomic<int> stop_attempts{0}; std::atomic<int> stop_attempts{0};
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [](const MediaSourceHub::FrameSink&, callbacks.start = [](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
return true; return true;
}; };
callbacks.stop_confirmed = [&] { callbacks.stop_confirmed = [&] {
@ -590,7 +590,7 @@ void testStopAllSourcesReportsAndRetriesUnconfirmedStop() {
} }
void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() { void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() {
MediaSourceHub hub; MediaSourceManager hub;
const auto front_video = makeVideoDescriptor( const auto front_video = makeVideoDescriptor(
Codec::H264, 1, {}, "front.video", "camera.front"); Codec::H264, 1, {}, "front.video", "camera.front");
const auto front_depth = makeVideoDescriptor( const auto front_depth = makeVideoDescriptor(
@ -604,10 +604,10 @@ void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() {
auto register_source = [&]( auto register_source = [&](
const TrackDescriptorPtr& descriptor, const TrackDescriptorPtr& descriptor,
std::function<bool()> stop_confirmed) { std::function<bool()> stop_confirmed) {
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = []( callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
callbacks.stop_confirmed = std::move(stop_confirmed); callbacks.stop_confirmed = std::move(stop_confirmed);
return hub.registerSource(descriptor, std::move(callbacks), 2); return hub.registerSource(descriptor, std::move(callbacks), 2);
}; };
@ -665,7 +665,7 @@ void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() {
} }
void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() { void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
MediaSourceHub hub; MediaSourceManager hub;
const auto first = makeVideoDescriptor( const auto first = makeVideoDescriptor(
Codec::H264, 1, {}, "first.video", "camera.first"); Codec::H264, 1, {}, "first.video", "camera.first");
const auto second = makeVideoDescriptor( const auto second = makeVideoDescriptor(
@ -677,10 +677,10 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
auto register_blocking_source = [&]( auto register_blocking_source = [&](
const TrackDescriptorPtr& descriptor, const TrackDescriptorPtr& descriptor,
std::atomic<bool>& entered) { std::atomic<bool>& entered) {
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = []( callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
callbacks.stop = [&entered, &release_stops] { callbacks.stop = [&entered, &release_stops] {
entered.store(true, std::memory_order_release); entered.store(true, std::memory_order_release);
while (!release_stops.load(std::memory_order_acquire)) { while (!release_stops.load(std::memory_order_acquire)) {
@ -720,10 +720,10 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
} }
CHECK_TRUE(second_stop_entered.load(std::memory_order_acquire)); CHECK_TRUE(second_stop_entered.load(std::memory_order_acquire));
MediaSourceHub::SourceCallbacks replacement_callbacks; MediaSourceManager::SourceCallbacks replacement_callbacks;
replacement_callbacks.start = []( replacement_callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
replacement_callbacks.stop = [] {}; replacement_callbacks.stop = [] {};
auto matching_registration = std::async(std::launch::async, [&] { auto matching_registration = std::async(std::launch::async, [&] {
return hub.registerSource( return hub.registerSource(
@ -760,7 +760,7 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
} }
void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() { void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
MediaSourceHub hub; MediaSourceManager hub;
const auto first = makeVideoDescriptor( const auto first = makeVideoDescriptor(
Codec::H264, 1, {}, "first.video", "camera.first"); Codec::H264, 1, {}, "first.video", "camera.first");
const auto other = makeVideoDescriptor( const auto other = makeVideoDescriptor(
@ -769,10 +769,10 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
std::atomic<bool> release_first_stop{false}; std::atomic<bool> release_first_stop{false};
std::atomic<int> other_stops{0}; std::atomic<int> other_stops{0};
MediaSourceHub::SourceCallbacks first_callbacks; MediaSourceManager::SourceCallbacks first_callbacks;
first_callbacks.start = []( first_callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
first_callbacks.stop = [&] { first_callbacks.stop = [&] {
first_stop_entered.store(true, std::memory_order_release); first_stop_entered.store(true, std::memory_order_release);
while (!release_first_stop.load(std::memory_order_acquire)) { while (!release_first_stop.load(std::memory_order_acquire)) {
@ -798,10 +798,10 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
}); });
CHECK_TRUE(stop_all.wait_for(20ms) == std::future_status::timeout); CHECK_TRUE(stop_all.wait_for(20ms) == std::future_status::timeout);
MediaSourceHub::SourceCallbacks other_callbacks; MediaSourceManager::SourceCallbacks other_callbacks;
other_callbacks.start = []( other_callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
other_callbacks.stop = [&] { ++other_stops; }; other_callbacks.stop = [&] { ++other_stops; };
CHECK_TRUE(hub.registerSource(other, std::move(other_callbacks), 2)); CHECK_TRUE(hub.registerSource(other, std::move(other_callbacks), 2));
auto other_subscription = hub.subscribe(other->id); auto other_subscription = hub.subscribe(other->id);
@ -824,15 +824,15 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
} }
void testConcurrentRegistrationWaitsForStopAllSources() { void testConcurrentRegistrationWaitsForStopAllSources() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::H264, 1); const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
std::atomic<bool> stop_entered{false}; std::atomic<bool> stop_entered{false};
std::atomic<bool> release_stop{false}; std::atomic<bool> release_stop{false};
std::atomic<int> old_stop_count{0}; std::atomic<int> old_stop_count{0};
MediaSourceHub::SourceCallbacks old_callbacks; MediaSourceManager::SourceCallbacks old_callbacks;
old_callbacks.start = [](const MediaSourceHub::FrameSink&, old_callbacks.start = [](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
return true; return true;
}; };
old_callbacks.stop = [&] { old_callbacks.stop = [&] {
@ -856,9 +856,9 @@ void testConcurrentRegistrationWaitsForStopAllSources() {
CHECK_TRUE(stop_entered.load(std::memory_order_acquire)); CHECK_TRUE(stop_entered.load(std::memory_order_acquire));
std::atomic<int> new_start_count{0}; std::atomic<int> new_start_count{0};
MediaSourceHub::SourceCallbacks new_callbacks; MediaSourceManager::SourceCallbacks new_callbacks;
new_callbacks.start = [&](const MediaSourceHub::FrameSink&, new_callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++new_start_count; ++new_start_count;
return true; return true;
}; };
@ -889,7 +889,7 @@ void testConcurrentRegistrationWaitsForStopAllSources() {
void testSystemStopAllAdmissionFencesRegistrationAndStartup() { void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
cmvr::service::StopAllAdmissionGate admission_gate; cmvr::service::StopAllAdmissionGate admission_gate;
MediaSourceHub hub(&admission_gate); MediaSourceManager hub(&admission_gate);
const auto dormant = makeVideoDescriptor( const auto dormant = makeVideoDescriptor(
Codec::H264, 1, {}, "dormant.video", "camera.dormant"); Codec::H264, 1, {}, "dormant.video", "camera.dormant");
const auto new_source = makeVideoDescriptor( const auto new_source = makeVideoDescriptor(
@ -897,10 +897,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
std::atomic<int> dormant_starts{0}; std::atomic<int> dormant_starts{0};
std::atomic<int> new_starts{0}; std::atomic<int> new_starts{0};
MediaSourceHub::SourceCallbacks dormant_callbacks; MediaSourceManager::SourceCallbacks dormant_callbacks;
dormant_callbacks.start = [&]( dormant_callbacks.start = [&](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++dormant_starts; ++dormant_starts;
return true; return true;
}; };
@ -911,10 +911,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
const auto stop_ticket = admission_gate.beginStopAll(); const auto stop_ticket = admission_gate.beginStopAll();
CHECK_TRUE(stop_ticket.valid()); CHECK_TRUE(stop_ticket.valid());
MediaSourceHub::SourceCallbacks rejected_callbacks; MediaSourceManager::SourceCallbacks rejected_callbacks;
rejected_callbacks.start = [&]( rejected_callbacks.start = [&](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++new_starts; ++new_starts;
return true; return true;
}; };
@ -928,10 +928,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
CHECK_TRUE(admission_gate.finishStopAll(stop_ticket, true)); CHECK_TRUE(admission_gate.finishStopAll(stop_ticket, true));
MediaSourceHub::SourceCallbacks recovered_callbacks; MediaSourceManager::SourceCallbacks recovered_callbacks;
recovered_callbacks.start = [&]( recovered_callbacks.start = [&](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++new_starts; ++new_starts;
return true; return true;
}; };
@ -949,7 +949,7 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
void testSystemStopAllRejectsRegistrationWaitingForLocalStop() { void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
cmvr::service::StopAllAdmissionGate admission_gate; cmvr::service::StopAllAdmissionGate admission_gate;
MediaSourceHub hub(&admission_gate); MediaSourceManager hub(&admission_gate);
const auto old_source = makeVideoDescriptor( const auto old_source = makeVideoDescriptor(
Codec::H264, 1, {}, "old.video", "camera.shared"); Codec::H264, 1, {}, "old.video", "camera.shared");
const auto replacement = makeVideoDescriptor( const auto replacement = makeVideoDescriptor(
@ -957,10 +957,10 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
std::atomic<bool> stop_entered{false}; std::atomic<bool> stop_entered{false};
std::atomic<bool> release_stop{false}; std::atomic<bool> release_stop{false};
MediaSourceHub::SourceCallbacks old_callbacks; MediaSourceManager::SourceCallbacks old_callbacks;
old_callbacks.start = []( old_callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
old_callbacks.stop = [&] { old_callbacks.stop = [&] {
stop_entered.store(true, std::memory_order_release); stop_entered.store(true, std::memory_order_release);
while (!release_stop.load(std::memory_order_acquire)) { while (!release_stop.load(std::memory_order_acquire)) {
@ -983,10 +983,10 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
CHECK_TRUE(stop_entered.load(std::memory_order_acquire)); CHECK_TRUE(stop_entered.load(std::memory_order_acquire));
auto make_replacement_callbacks = [] { auto make_replacement_callbacks = [] {
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = []( callbacks.start = [](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { return true; }; const MediaSourceManager::CancelPredicate&) { return true; };
callbacks.stop = [] {}; callbacks.stop = [] {};
return callbacks; return callbacks;
}; };
@ -1021,17 +1021,17 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() { void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() {
cmvr::service::StopAllAdmissionGate admission_gate; cmvr::service::StopAllAdmissionGate admission_gate;
MediaSourceHub hub(&admission_gate); MediaSourceManager hub(&admission_gate);
const auto descriptor = makeVideoDescriptor( const auto descriptor = makeVideoDescriptor(
Codec::H264, 1, {}, "waiting.video", "camera.waiting"); Codec::H264, 1, {}, "waiting.video", "camera.waiting");
std::atomic<bool> stop_entered{false}; std::atomic<bool> stop_entered{false};
std::atomic<bool> release_stop{false}; std::atomic<bool> release_stop{false};
std::atomic<int> starts{0}; std::atomic<int> starts{0};
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [&]( callbacks.start = [&](
const MediaSourceHub::FrameSink&, const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++starts; ++starts;
return true; return true;
}; };
@ -1084,15 +1084,15 @@ void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() {
} }
void testStopAllSourcesCancelsStartingSourceBeforeReuse() { void testStopAllSourcesCancelsStartingSourceBeforeReuse() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
std::atomic<bool> old_start_entered{false}; std::atomic<bool> old_start_entered{false};
std::atomic<bool> release_old_start{false}; std::atomic<bool> release_old_start{false};
std::atomic<int> old_stop_count{0}; std::atomic<int> old_stop_count{0};
MediaSourceHub::SourceCallbacks old_callbacks; MediaSourceManager::SourceCallbacks old_callbacks;
old_callbacks.start = [&](const MediaSourceHub::FrameSink&, old_callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate& cancelled) { const MediaSourceManager::CancelPredicate& cancelled) {
old_start_entered.store(true, std::memory_order_release); old_start_entered.store(true, std::memory_order_release);
while (!release_old_start.load(std::memory_order_acquire)) { while (!release_old_start.load(std::memory_order_acquire)) {
if (cancelled()) { if (cancelled()) {
@ -1134,9 +1134,9 @@ void testStopAllSourcesCancelsStartingSourceBeforeReuse() {
CHECK_TRUE(hub.stopAllSources()); CHECK_TRUE(hub.stopAllSources());
std::atomic<int> new_start_count{0}; std::atomic<int> new_start_count{0};
MediaSourceHub::SourceCallbacks new_callbacks; MediaSourceManager::SourceCallbacks new_callbacks;
new_callbacks.start = [&](const MediaSourceHub::FrameSink&, new_callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
++new_start_count; ++new_start_count;
return true; return true;
}; };
@ -1150,15 +1150,15 @@ void testStopAllSourcesCancelsStartingSourceBeforeReuse() {
} }
void testKeyFrameRequestIsOrderedBeforeStop() { void testKeyFrameRequestIsOrderedBeforeStop() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::H264, 1); const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
std::atomic<bool> key_frame_entered{false}; std::atomic<bool> key_frame_entered{false};
std::atomic<bool> release_key_frame{false}; std::atomic<bool> release_key_frame{false};
std::atomic<int> stop_count{0}; std::atomic<int> stop_count{0};
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [](const MediaSourceHub::FrameSink&, callbacks.start = [](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
return true; return true;
}; };
callbacks.stop = [&] { ++stop_count; }; callbacks.stop = [&] { ++stop_count; };
@ -1196,14 +1196,14 @@ void testKeyFrameRequestIsOrderedBeforeStop() {
} }
void testHubCancelsBlockedStartWithoutBlockingShutdown() { void testHubCancelsBlockedStartWithoutBlockingShutdown() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
std::atomic<bool> start_entered{false}; std::atomic<bool> start_entered{false};
std::atomic<bool> start_exited{false}; std::atomic<bool> start_exited{false};
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [&](const MediaSourceHub::FrameSink&, callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate& cancelled) { const MediaSourceManager::CancelPredicate& cancelled) {
start_entered.store(true, std::memory_order_release); start_entered.store(true, std::memory_order_release);
while (!cancelled()) { while (!cancelled()) {
std::this_thread::sleep_for(2ms); std::this_thread::sleep_for(2ms);
@ -1246,16 +1246,16 @@ void testHubCancelsBlockedStartWithoutBlockingShutdown() {
} }
void testHubQuarantinesNonCooperativeStart() { void testHubQuarantinesNonCooperativeStart() {
MediaSourceHub hub; MediaSourceManager hub;
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
std::atomic<bool> start_entered{false}; std::atomic<bool> start_entered{false};
std::atomic<bool> release_start{false}; std::atomic<bool> release_start{false};
std::atomic<bool> start_exited{false}; std::atomic<bool> start_exited{false};
std::atomic<int> stop_count{0}; std::atomic<int> stop_count{0};
MediaSourceHub::SourceCallbacks callbacks; MediaSourceManager::SourceCallbacks callbacks;
callbacks.start = [&](const MediaSourceHub::FrameSink&, callbacks.start = [&](const MediaSourceManager::FrameSink&,
const MediaSourceHub::CancelPredicate&) { const MediaSourceManager::CancelPredicate&) {
start_entered.store(true, std::memory_order_release); start_entered.store(true, std::memory_order_release);
while (!release_start.load(std::memory_order_acquire)) { while (!release_start.load(std::memory_order_acquire)) {
std::this_thread::sleep_for(2ms); std::this_thread::sleep_for(2ms);
@ -1330,9 +1330,9 @@ int main() {
testHubQuarantinesNonCooperativeStart(); testHubQuarantinesNonCooperativeStart();
if (failures != 0) { if (failures != 0) {
std::cerr << failures << " media_source_hub checks failed\n"; std::cerr << failures << " media_source_manager checks failed\n";
return 1; return 1;
} }
std::cout << "media_source_hub self-test passed\n"; std::cout << "media_source_manager self-test passed\n";
return 0; return 0;
} }

View File

@ -1,28 +1,28 @@
add_library(safety_coordinator STATIC add_library(safety_manager STATIC
src/command_ledger.cpp src/command_ledger.cpp
src/safety_coordinator.cpp src/safety_manager.cpp
src/safety_reason.cpp src/safety_reason.cpp
src/safety_snapshot_store.cpp src/safety_snapshot_store.cpp
) )
target_include_directories(safety_coordinator PUBLIC target_include_directories(safety_manager PUBLIC
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/cmvr-es ${CMAKE_SOURCE_DIR}/cmvr-es
) )
target_link_libraries(safety_coordinator PUBLIC target_link_libraries(safety_manager PUBLIC
cmvr_es::control_authority cmvr_es::control_authority_manager
) )
add_library(cmvr_es::safety_coordinator ALIAS safety_coordinator) add_library(cmvr_es::safety_manager ALIAS safety_manager)
install(TARGETS safety_coordinator LIBRARY DESTINATION lib) install(TARGETS safety_manager LIBRARY DESTINATION lib)
if(BUILD_TESTING) if(BUILD_TESTING)
add_executable(safety_snapshot_store_test add_executable(safety_snapshot_store_test
tests/safety_snapshot_store_test.cpp tests/safety_snapshot_store_test.cpp
) )
target_link_libraries(safety_snapshot_store_test PRIVATE target_link_libraries(safety_snapshot_store_test PRIVATE
cmvr_es::safety_coordinator cmvr_es::safety_manager
gtest gtest
gtest_main gtest_main
pthread pthread
@ -37,7 +37,7 @@ if(BUILD_TESTING)
tests/command_ledger_test.cpp tests/command_ledger_test.cpp
) )
target_link_libraries(command_ledger_test PRIVATE target_link_libraries(command_ledger_test PRIVATE
cmvr_es::safety_coordinator cmvr_es::safety_manager
gtest gtest
gtest_main gtest_main
pthread pthread
@ -48,18 +48,18 @@ if(BUILD_TESTING)
) )
set_tests_properties(command_ledger_test PROPERTIES TIMEOUT 10) set_tests_properties(command_ledger_test PROPERTIES TIMEOUT 10)
add_executable(safety_coordinator_test add_executable(safety_manager_test
tests/safety_coordinator_test.cpp tests/safety_manager_test.cpp
) )
target_link_libraries(safety_coordinator_test PRIVATE target_link_libraries(safety_manager_test PRIVATE
cmvr_es::safety_coordinator cmvr_es::safety_manager
gtest gtest
gtest_main gtest_main
pthread pthread
) )
add_test( add_test(
NAME safety_coordinator_test NAME safety_manager_test
COMMAND safety_coordinator_test COMMAND safety_manager_test
) )
set_tests_properties(safety_coordinator_test PROPERTIES TIMEOUT 15) set_tests_properties(safety_manager_test PROPERTIES TIMEOUT 15)
endif() endif()

View File

@ -9,7 +9,7 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include "manager/safety/include/safety_types.h" #include "manager/safety_manager/include/safety_types.h"
namespace cmvr::safety { namespace cmvr::safety {

View File

@ -3,7 +3,7 @@
#include <functional> #include <functional>
#include <memory> #include <memory>
#include "manager/safety/include/safety_types.h" #include "manager/safety_manager/include/safety_types.h"
namespace cmvr::safety { namespace cmvr::safety {

View File

@ -10,14 +10,14 @@
#include <unordered_set> #include <unordered_set>
#include <vector> #include <vector>
#include "manager/safety/include/command_ledger.h" #include "manager/safety_manager/include/command_ledger.h"
#include "manager/safety/include/device_safety_endpoint.h" #include "manager/safety_manager/include/device_safety_endpoint.h"
#include "manager/safety/include/safety_participant.h" #include "manager/safety_manager/include/safety_participant.h"
#include "manager/safety/include/safety_snapshot_store.h" #include "manager/safety_manager/include/safety_snapshot_store.h"
namespace cmvr::safety { namespace cmvr::safety {
struct SafetyCoordinatorConfig { struct SafetyManagerConfig {
EnforcementMode enforcement_mode{EnforcementMode::Shadow}; EnforcementMode enforcement_mode{EnforcementMode::Shadow};
std::unordered_set<std::string> enforced_device_ids; std::unordered_set<std::string> enforced_device_ids;
std::chrono::milliseconds stop_all_timeout{15000}; std::chrono::milliseconds stop_all_timeout{15000};
@ -72,7 +72,7 @@ struct ParticipantSafetyStateView {
ParticipantResultView last_release; ParticipantResultView last_release;
}; };
struct SafetyCoordinatorSnapshot { struct SafetyManagerSnapshot {
SystemAdmissionState system_state{SystemAdmissionState::Starting}; SystemAdmissionState system_state{SystemAdmissionState::Starting};
std::uint64_t safety_epoch{0}; std::uint64_t safety_epoch{0};
std::string service_instance_id; std::string service_instance_id;
@ -135,7 +135,7 @@ struct RecoveryResult {
std::vector<SafetyTargetResult> targets; std::vector<SafetyTargetResult> targets;
}; };
class SafetyCoordinator; class SafetyManager;
class DispatchGuard final { class DispatchGuard final {
public: public:
@ -153,23 +153,23 @@ public:
} }
private: private:
friend class SafetyCoordinator; friend class SafetyManager;
DispatchGuard(SafetyCoordinator* coordinator, DispatchGuard(SafetyManager* coordinator,
std::string device_id, std::string device_id,
HardwareCheckResult hardware_check) noexcept; HardwareCheckResult hardware_check) noexcept;
void reset_() noexcept; void reset_() noexcept;
SafetyCoordinator* coordinator_{nullptr}; SafetyManager* coordinator_{nullptr};
std::string device_id_; std::string device_id_;
HardwareCheckResult hardware_check_; HardwareCheckResult hardware_check_;
}; };
class SafetyCoordinator final { class SafetyManager final {
public: public:
explicit SafetyCoordinator(SafetyCoordinatorConfig config = {}); explicit SafetyManager(SafetyManagerConfig config = {});
~SafetyCoordinator(); ~SafetyManager();
SafetyCoordinator(const SafetyCoordinator&) = delete; SafetyManager(const SafetyManager&) = delete;
SafetyCoordinator& operator=(const SafetyCoordinator&) = delete; SafetyManager& operator=(const SafetyManager&) = delete;
bool registerDevice(DeviceSafetyRegistration registration); bool registerDevice(DeviceSafetyRegistration registration);
bool unregisterDevice(const std::string& device_id); bool unregisterDevice(const std::string& device_id);
@ -205,13 +205,13 @@ public:
SafetyClock::time_point deadline = SafetyClock::time_point::max()); SafetyClock::time_point deadline = SafetyClock::time_point::max());
RecoveryResult recover(const RecoveryRequest& request); RecoveryResult recover(const RecoveryRequest& request);
SafetyCoordinatorSnapshot snapshot() const; SafetyManagerSnapshot snapshot() const;
SafetySnapshotStore& snapshotStore() noexcept; SafetySnapshotStore& snapshotStore() noexcept;
const SafetySnapshotStore& snapshotStore() const noexcept; const SafetySnapshotStore& snapshotStore() const noexcept;
CommandLedger& commandLedger() noexcept; CommandLedger& commandLedger() noexcept;
const CommandLedger& commandLedger() const noexcept; const CommandLedger& commandLedger() const noexcept;
const std::string& serviceInstanceId() const noexcept; const std::string& serviceInstanceId() const noexcept;
const SafetyCoordinatorConfig& config() const noexcept; const SafetyManagerConfig& config() const noexcept;
private: private:
friend class DispatchGuard; friend class DispatchGuard;

View File

@ -5,7 +5,7 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include "manager/safety/include/safety_types.h" #include "manager/safety_manager/include/safety_types.h"
namespace cmvr::safety { namespace cmvr::safety {

View File

@ -7,7 +7,7 @@
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include "manager/safety/include/safety_types.h" #include "manager/safety_manager/include/safety_types.h"
namespace cmvr::safety { namespace cmvr::safety {

View File

@ -7,7 +7,7 @@
#include <vector> #include <vector>
#include "devices/device_types.h" #include "devices/device_types.h"
#include "manager/safety/include/safety_reason.h" #include "manager/safety_manager/include/safety_reason.h"
namespace cmvr::safety { namespace cmvr::safety {

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/command_ledger.h" #include "manager/safety_manager/include/command_ledger.h"
#include <algorithm> #include <algorithm>
#include <cctype> #include <cctype>

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
@ -187,10 +187,10 @@ int phaseRank(const ParticipantPhase phase) noexcept
} // namespace } // namespace
struct SafetyCoordinator::Impl { struct SafetyManager::Impl {
struct PublisherBinding { struct PublisherBinding {
std::atomic<bool> active{true}; std::atomic<bool> active{true};
SafetyCoordinator* coordinator{nullptr}; SafetyManager* coordinator{nullptr};
}; };
struct DeviceSlot { struct DeviceSlot {
@ -240,7 +240,7 @@ struct SafetyCoordinator::Impl {
RecoveryResult result; RecoveryResult result;
}; };
explicit Impl(SafetyCoordinatorConfig source) explicit Impl(SafetyManagerConfig source)
: config(std::move(source)), : config(std::move(source)),
ledger(config.command_ledger), ledger(config.command_ledger),
service_instance_id(makeInstanceId()), service_instance_id(makeInstanceId()),
@ -249,7 +249,7 @@ struct SafetyCoordinator::Impl {
if (config.stop_all_timeout <= std::chrono::milliseconds::zero() || if (config.stop_all_timeout <= std::chrono::milliseconds::zero() ||
config.recovery_timeout <= std::chrono::milliseconds::zero() || config.recovery_timeout <= std::chrono::milliseconds::zero() ||
config.event_history_capacity == 0) { config.event_history_capacity == 0) {
throw std::invalid_argument("invalid SafetyCoordinatorConfig"); throw std::invalid_argument("invalid SafetyManagerConfig");
} }
} }
@ -339,7 +339,7 @@ struct SafetyCoordinator::Impl {
return false; return false;
} }
SafetyCoordinatorConfig config; SafetyManagerConfig config;
SafetySnapshotStore snapshots; SafetySnapshotStore snapshots;
CommandLedger ledger; CommandLedger ledger;
const std::string service_instance_id; const std::string service_instance_id;
@ -367,7 +367,7 @@ struct SafetyCoordinator::Impl {
}; };
DispatchGuard::DispatchGuard( DispatchGuard::DispatchGuard(
SafetyCoordinator* coordinator, SafetyManager* coordinator,
std::string device_id, std::string device_id,
HardwareCheckResult hardware_check) noexcept HardwareCheckResult hardware_check) noexcept
: coordinator_(coordinator), : coordinator_(coordinator),
@ -408,12 +408,12 @@ void DispatchGuard::reset_() noexcept
coordinator->endDispatch_(device_id_); coordinator->endDispatch_(device_id_);
} }
SafetyCoordinator::SafetyCoordinator(SafetyCoordinatorConfig config) SafetyManager::SafetyManager(SafetyManagerConfig config)
: impl_(std::make_unique<Impl>(std::move(config))) : impl_(std::make_unique<Impl>(std::move(config)))
{ {
} }
SafetyCoordinator::~SafetyCoordinator() SafetyManager::~SafetyManager()
{ {
beginShutdown(); beginShutdown();
std::vector<std::shared_ptr<DeviceSafetyEndpoint>> endpoints; std::vector<std::shared_ptr<DeviceSafetyEndpoint>> endpoints;
@ -436,7 +436,7 @@ SafetyCoordinator::~SafetyCoordinator()
} }
} }
bool SafetyCoordinator::registerDevice(DeviceSafetyRegistration registration) bool SafetyManager::registerDevice(DeviceSafetyRegistration registration)
{ {
if (registration.descriptor.device_id.empty() || if (registration.descriptor.device_id.empty() ||
registration.descriptor.maximum_snapshot_age <= registration.descriptor.maximum_snapshot_age <=
@ -531,7 +531,7 @@ bool SafetyCoordinator::registerDevice(DeviceSafetyRegistration registration)
return true; return true;
} }
bool SafetyCoordinator::unregisterDevice(const std::string& device_id) bool SafetyManager::unregisterDevice(const std::string& device_id)
{ {
std::shared_ptr<DeviceSafetyEndpoint> endpoint; std::shared_ptr<DeviceSafetyEndpoint> endpoint;
std::string participant_id; std::string participant_id;
@ -576,7 +576,7 @@ bool SafetyCoordinator::unregisterDevice(const std::string& device_id)
return true; return true;
} }
bool SafetyCoordinator::registerParticipant( bool SafetyManager::registerParticipant(
std::shared_ptr<SafetyParticipant> participant) std::shared_ptr<SafetyParticipant> participant)
{ {
if (!participant) { if (!participant) {
@ -597,7 +597,7 @@ bool SafetyCoordinator::registerParticipant(
return true; return true;
} }
bool SafetyCoordinator::unregisterParticipant( bool SafetyManager::unregisterParticipant(
const std::string& participant_id) const std::string& participant_id)
{ {
std::lock_guard lock(impl_->mutex); std::lock_guard lock(impl_->mutex);
@ -615,7 +615,7 @@ bool SafetyCoordinator::unregisterParticipant(
return true; return true;
} }
void SafetyCoordinator::updateDeviceRuntimeState( void SafetyManager::updateDeviceRuntimeState(
const std::string& device_id, const std::string& device_id,
const device::ManagedDeviceState lifecycle, const device::ManagedDeviceState lifecycle,
device::DeviceHealthSnapshot health) device::DeviceHealthSnapshot health)
@ -633,7 +633,7 @@ void SafetyCoordinator::updateDeviceRuntimeState(
impl_->state_changed.notify_all(); impl_->state_changed.notify_all();
} }
bool SafetyCoordinator::publishSafetySnapshot(DeviceSafetySnapshot snapshot) bool SafetyManager::publishSafetySnapshot(DeviceSafetySnapshot snapshot)
{ {
const std::string device_id = snapshot.device_id; const std::string device_id = snapshot.device_id;
if (!impl_->snapshots.publish(std::move(snapshot))) { if (!impl_->snapshots.publish(std::move(snapshot))) {
@ -679,7 +679,7 @@ bool SafetyCoordinator::publishSafetySnapshot(DeviceSafetySnapshot snapshot)
return true; return true;
} }
std::optional<std::uint64_t> SafetyCoordinator::advanceDeviceGeneration( std::optional<std::uint64_t> SafetyManager::advanceDeviceGeneration(
const std::string& device_id) const std::string& device_id)
{ {
const auto generation = impl_->snapshots.bumpGeneration(device_id); const auto generation = impl_->snapshots.bumpGeneration(device_id);
@ -709,7 +709,7 @@ std::optional<std::uint64_t> SafetyCoordinator::advanceDeviceGeneration(
return generation; return generation;
} }
StartupCoverageResult SafetyCoordinator::validateStartupCoverage( StartupCoverageResult SafetyManager::validateStartupCoverage(
const SafetyClock::time_point deadline) const SafetyClock::time_point deadline)
{ {
struct Target { struct Target {
@ -844,7 +844,7 @@ StartupCoverageResult SafetyCoordinator::validateStartupCoverage(
return result; return result;
} }
void SafetyCoordinator::markStartupComplete() void SafetyManager::markStartupComplete()
{ {
std::lock_guard lock(impl_->mutex); std::lock_guard lock(impl_->mutex);
if (impl_->system_state != SystemAdmissionState::Starting) { if (impl_->system_state != SystemAdmissionState::Starting) {
@ -863,7 +863,7 @@ void SafetyCoordinator::markStartupComplete()
impl_->state_changed.notify_all(); impl_->state_changed.notify_all();
} }
void SafetyCoordinator::beginShutdown() noexcept void SafetyManager::beginShutdown() noexcept
{ {
if (!impl_) { if (!impl_) {
return; return;
@ -885,7 +885,7 @@ void SafetyCoordinator::beginShutdown() noexcept
} }
} }
AdmissionDecision SafetyCoordinator::evaluate( AdmissionDecision SafetyManager::evaluate(
const AdmissionRequest& request) const const AdmissionRequest& request) const
{ {
AdmissionDecision decision; AdmissionDecision decision;
@ -1039,7 +1039,7 @@ AdmissionDecision SafetyCoordinator::evaluate(
return allow(); return allow();
} }
AdmissionResult SafetyCoordinator::admit(const AdmissionRequest& request) AdmissionResult SafetyManager::admit(const AdmissionRequest& request)
{ {
AdmissionResult result; AdmissionResult result;
result.decision = evaluate(request); result.decision = evaluate(request);
@ -1060,7 +1060,7 @@ AdmissionResult SafetyCoordinator::admit(const AdmissionRequest& request)
return result; return result;
} }
HardwareCheckResult SafetyCoordinator::revalidatePermit( HardwareCheckResult SafetyManager::revalidatePermit(
const AdmissionPermit& permit) const const AdmissionPermit& permit) const
{ {
const auto rejected = [](const SafetyReason reason, std::string detail) { const auto rejected = [](const SafetyReason reason, std::string detail) {
@ -1114,7 +1114,7 @@ HardwareCheckResult SafetyCoordinator::revalidatePermit(
return {true, SafetyReason::None, {}}; return {true, SafetyReason::None, {}};
} }
DispatchGuard SafetyCoordinator::beginDispatch( DispatchGuard SafetyManager::beginDispatch(
const AdmissionPermit& permit) const AdmissionPermit& permit)
{ {
const auto rejected = [&permit]( const auto rejected = [&permit](
@ -1205,7 +1205,7 @@ DispatchGuard SafetyCoordinator::beginDispatch(
return DispatchGuard(this, permit.device_id, std::move(hardware_check)); return DispatchGuard(this, permit.device_id, std::move(hardware_check));
} }
void SafetyCoordinator::endDispatch_(const std::string& device_id) noexcept void SafetyManager::endDispatch_(const std::string& device_id) noexcept
{ {
try { try {
std::lock_guard lock(impl_->mutex); std::lock_guard lock(impl_->mutex);
@ -1219,7 +1219,7 @@ void SafetyCoordinator::endDispatch_(const std::string& device_id) noexcept
} }
} }
void SafetyCoordinator::quarantineDevice( void SafetyManager::quarantineDevice(
const std::string& device_id, const std::string& device_id,
const SafetyReason reason, const SafetyReason reason,
std::string operation_id) std::string operation_id)
@ -1245,7 +1245,7 @@ void SafetyCoordinator::quarantineDevice(
impl_->state_changed.notify_all(); impl_->state_changed.notify_all();
} }
StopAllResult SafetyCoordinator::stopAll( StopAllResult SafetyManager::stopAll(
std::string operation_id, std::string operation_id,
SafetyClock::time_point deadline) SafetyClock::time_point deadline)
{ {
@ -1754,7 +1754,7 @@ StopAllResult SafetyCoordinator::stopAll(
return result; return result;
} }
RecoveryResult SafetyCoordinator::recover(const RecoveryRequest& request) RecoveryResult SafetyManager::recover(const RecoveryRequest& request)
{ {
RecoveryResult invalid; RecoveryResult invalid;
invalid.recovery_id = request.recovery_id; invalid.recovery_id = request.recovery_id;
@ -2323,9 +2323,9 @@ RecoveryResult SafetyCoordinator::recover(const RecoveryRequest& request)
return result; return result;
} }
SafetyCoordinatorSnapshot SafetyCoordinator::snapshot() const SafetyManagerSnapshot SafetyManager::snapshot() const
{ {
SafetyCoordinatorSnapshot result; SafetyManagerSnapshot result;
std::lock_guard lock(impl_->mutex); std::lock_guard lock(impl_->mutex);
result.system_state = impl_->system_state; result.system_state = impl_->system_state;
result.safety_epoch = impl_->safety_epoch; result.safety_epoch = impl_->safety_epoch;
@ -2376,32 +2376,32 @@ SafetyCoordinatorSnapshot SafetyCoordinator::snapshot() const
return result; return result;
} }
SafetySnapshotStore& SafetyCoordinator::snapshotStore() noexcept SafetySnapshotStore& SafetyManager::snapshotStore() noexcept
{ {
return impl_->snapshots; return impl_->snapshots;
} }
const SafetySnapshotStore& SafetyCoordinator::snapshotStore() const noexcept const SafetySnapshotStore& SafetyManager::snapshotStore() const noexcept
{ {
return impl_->snapshots; return impl_->snapshots;
} }
CommandLedger& SafetyCoordinator::commandLedger() noexcept CommandLedger& SafetyManager::commandLedger() noexcept
{ {
return impl_->ledger; return impl_->ledger;
} }
const CommandLedger& SafetyCoordinator::commandLedger() const noexcept const CommandLedger& SafetyManager::commandLedger() const noexcept
{ {
return impl_->ledger; return impl_->ledger;
} }
const std::string& SafetyCoordinator::serviceInstanceId() const noexcept const std::string& SafetyManager::serviceInstanceId() const noexcept
{ {
return impl_->service_instance_id; return impl_->service_instance_id;
} }
const SafetyCoordinatorConfig& SafetyCoordinator::config() const noexcept const SafetyManagerConfig& SafetyManager::config() const noexcept
{ {
return impl_->config; return impl_->config;
} }

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/safety_reason.h" #include "manager/safety_manager/include/safety_reason.h"
namespace cmvr::safety { namespace cmvr::safety {

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/safety_snapshot_store.h" #include "manager/safety_manager/include/safety_snapshot_store.h"
#include <algorithm> #include <algorithm>
#include <limits> #include <limits>

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/command_ledger.h" #include "manager/safety_manager/include/command_ledger.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -166,9 +166,9 @@ AdmissionRequest actuateRequest()
return request; return request;
} }
TEST(SafetyCoordinatorTest, ShadowReportsDenyWithoutChangingLegacyBehavior) TEST(SafetyManagerTest, ShadowReportsDenyWithoutChangingLegacyBehavior)
{ {
SafetyCoordinator coordinator; SafetyManager coordinator;
ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}})); ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}}));
coordinator.markStartupComplete(); coordinator.markStartupComplete();
@ -180,22 +180,22 @@ TEST(SafetyCoordinatorTest, ShadowReportsDenyWithoutChangingLegacyBehavior)
EXPECT_TRUE(result.permit.has_value()); EXPECT_TRUE(result.permit.has_value());
} }
TEST(SafetyCoordinatorTest, TEST(SafetyManagerTest,
EnforceSelectedStartupRejectsEmptyOrUnknownCoverage) EnforceSelectedStartupRejectsEmptyOrUnknownCoverage)
{ {
SafetyCoordinatorConfig empty_config; SafetyManagerConfig empty_config;
empty_config.enforcement_mode = EnforcementMode::EnforceSelected; empty_config.enforcement_mode = EnforcementMode::EnforceSelected;
SafetyCoordinator empty(empty_config); SafetyManager empty(empty_config);
const auto empty_result = empty.validateStartupCoverage( const auto empty_result = empty.validateStartupCoverage(
SafetyClock::now() + std::chrono::milliseconds(10)); SafetyClock::now() + std::chrono::milliseconds(10));
ASSERT_FALSE(empty_result.ready); ASSERT_FALSE(empty_result.ready);
ASSERT_EQ(empty_result.issues.size(), 1U); ASSERT_EQ(empty_result.issues.size(), 1U);
EXPECT_EQ(empty_result.issues.front().reason, SafetyReason::InvalidArgument); EXPECT_EQ(empty_result.issues.front().reason, SafetyReason::InvalidArgument);
SafetyCoordinatorConfig missing_config; SafetyManagerConfig missing_config;
missing_config.enforcement_mode = EnforcementMode::EnforceSelected; missing_config.enforcement_mode = EnforcementMode::EnforceSelected;
missing_config.enforced_device_ids.insert("missing-arm"); missing_config.enforced_device_ids.insert("missing-arm");
SafetyCoordinator missing(missing_config); SafetyManager missing(missing_config);
const auto missing_result = missing.validateStartupCoverage( const auto missing_result = missing.validateStartupCoverage(
SafetyClock::now() + std::chrono::milliseconds(10)); SafetyClock::now() + std::chrono::milliseconds(10));
ASSERT_FALSE(missing_result.ready); ASSERT_FALSE(missing_result.ready);
@ -204,13 +204,13 @@ TEST(SafetyCoordinatorTest,
EXPECT_EQ(missing_result.issues.front().reason, SafetyReason::DeviceNotFound); EXPECT_EQ(missing_result.issues.front().reason, SafetyReason::DeviceNotFound);
} }
TEST(SafetyCoordinatorTest, TEST(SafetyManagerTest,
EnforceAllStartupRequiresEndpointParticipantAndFreshSnapshot) EnforceAllStartupRequiresEndpointParticipantAndFreshSnapshot)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator missing_capability(config); SafetyManager missing_capability(config);
ASSERT_TRUE(missing_capability.registerDevice( ASSERT_TRUE(missing_capability.registerDevice(
{controlDescriptor(), {}, {}})); {controlDescriptor(), {}, {}}));
const auto structural = missing_capability.validateStartupCoverage( const auto structural = missing_capability.validateStartupCoverage(
@ -218,7 +218,7 @@ TEST(SafetyCoordinatorTest,
EXPECT_FALSE(structural.ready); EXPECT_FALSE(structural.ready);
EXPECT_EQ(structural.issues.size(), 2U); EXPECT_EQ(structural.issues.size(), 2U);
SafetyCoordinator missing_sample(config); SafetyManager missing_sample(config);
auto silent_endpoint = auto silent_endpoint =
std::make_shared<FakeEndpoint>(controlDescriptor()); std::make_shared<FakeEndpoint>(controlDescriptor());
silent_endpoint->publish_on_refresh = false; silent_endpoint->publish_on_refresh = false;
@ -233,12 +233,12 @@ TEST(SafetyCoordinatorTest,
EXPECT_EQ(stale.issues.front().reason, SafetyReason::SafetyStateMissing); EXPECT_EQ(stale.issues.front().reason, SafetyReason::SafetyStateMissing);
} }
TEST(SafetyCoordinatorTest, TEST(SafetyManagerTest,
HardwareUnsafeSnapshotBlocksAdmissionButNotStructuralStartup) HardwareUnsafeSnapshotBlocksAdmissionButNotStructuralStartup)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
endpoint->condition = SafetyCondition::Unsafe; endpoint->condition = SafetyCondition::Unsafe;
endpoint->emergency_stop = TriState::True; endpoint->emergency_stop = TriState::True;
@ -258,11 +258,11 @@ TEST(SafetyCoordinatorTest,
admission.decision.reason, SafetyReason::EmergencyStopActive); admission.decision.reason, SafetyReason::EmergencyStopActive);
} }
TEST(SafetyCoordinatorTest, EnforceAllFailsClosedOnUnknownControlState) TEST(SafetyManagerTest, EnforceAllFailsClosedOnUnknownControlState)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}})); ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}}));
coordinator.markStartupComplete(); coordinator.markStartupComplete();
@ -273,11 +273,11 @@ TEST(SafetyCoordinatorTest, EnforceAllFailsClosedOnUnknownControlState)
EXPECT_FALSE(result.permit.has_value()); EXPECT_FALSE(result.permit.has_value());
} }
TEST(SafetyCoordinatorTest, ControlSafetyBitsMustBeExplicitlyFalse) TEST(SafetyManagerTest, ControlSafetyBitsMustBeExplicitlyFalse)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
endpoint->protective_stop = TriState::Unknown; endpoint->protective_stop = TriState::Unknown;
ASSERT_TRUE(coordinator.registerDevice( ASSERT_TRUE(coordinator.registerDevice(
@ -296,11 +296,11 @@ TEST(SafetyCoordinatorTest, ControlSafetyBitsMustBeExplicitlyFalse)
DeviceAdmissionState::Blocked); DeviceAdmissionState::Blocked);
} }
TEST(SafetyCoordinatorTest, EnforcedDispatchRunsFinalHardwareCheck) TEST(SafetyManagerTest, EnforcedDispatchRunsFinalHardwareCheck)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
ASSERT_TRUE(coordinator.registerDevice( ASSERT_TRUE(coordinator.registerDevice(
{controlDescriptor(), endpoint, {}})); {controlDescriptor(), endpoint, {}}));
@ -317,12 +317,12 @@ TEST(SafetyCoordinatorTest, EnforcedDispatchRunsFinalHardwareCheck)
EXPECT_EQ(endpoint->hardware_checks.load(), 1); EXPECT_EQ(endpoint->hardware_checks.load(), 1);
} }
TEST(SafetyCoordinatorTest, TEST(SafetyManagerTest,
StartActivityMayEnterFromRestrictedButActuationMayNot) StartActivityMayEnterFromRestrictedButActuationMayNot)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
endpoint->condition = SafetyCondition::Restricted; endpoint->condition = SafetyCondition::Restricted;
endpoint->ready = TriState::False; endpoint->ready = TriState::False;
@ -346,11 +346,11 @@ TEST(SafetyCoordinatorTest,
EXPECT_EQ(actuation.decision.reason, SafetyReason::HardwareUnsafe); EXPECT_EQ(actuation.decision.reason, SafetyReason::HardwareUnsafe);
} }
TEST(SafetyCoordinatorTest, SuccessfulStopInvalidatesOldPermitAndReopens) TEST(SafetyManagerTest, SuccessfulStopInvalidatesOldPermitAndReopens)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
auto participant = std::make_shared<FakeParticipant>(); auto participant = std::make_shared<FakeParticipant>();
ASSERT_TRUE(coordinator.registerDevice( ASSERT_TRUE(coordinator.registerDevice(
@ -388,11 +388,11 @@ TEST(SafetyCoordinatorTest, SuccessfulStopInvalidatesOldPermitAndReopens)
EXPECT_TRUE(snapshot.participants.front().last_release.success); EXPECT_TRUE(snapshot.participants.front().last_release.success);
} }
TEST(SafetyCoordinatorTest, FailedStopRequiresVerifiedRecovery) TEST(SafetyManagerTest, FailedStopRequiresVerifiedRecovery)
{ {
SafetyCoordinatorConfig config; SafetyManagerConfig config;
config.enforcement_mode = EnforcementMode::EnforceAll; config.enforcement_mode = EnforcementMode::EnforceAll;
SafetyCoordinator coordinator(config); SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
auto participant = std::make_shared<FakeParticipant>(); auto participant = std::make_shared<FakeParticipant>();
participant->verify_result = { participant->verify_result = {
@ -437,9 +437,9 @@ TEST(SafetyCoordinatorTest, FailedStopRequiresVerifiedRecovery)
EXPECT_TRUE(reopened.participants.front().last_release.success); EXPECT_TRUE(reopened.participants.front().last_release.success);
} }
TEST(SafetyCoordinatorTest, RecoveryCannotIgnoreEmergencyStop) TEST(SafetyManagerTest, RecoveryCannotIgnoreEmergencyStop)
{ {
SafetyCoordinator coordinator; SafetyManager coordinator;
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
auto participant = std::make_shared<FakeParticipant>(); auto participant = std::make_shared<FakeParticipant>();
ASSERT_TRUE(coordinator.registerDevice( ASSERT_TRUE(coordinator.registerDevice(
@ -466,9 +466,9 @@ TEST(SafetyCoordinatorTest, RecoveryCannotIgnoreEmergencyStop)
EXPECT_EQ(endpoint->recoveries.load(), 0); EXPECT_EQ(endpoint->recoveries.load(), 0);
} }
TEST(SafetyCoordinatorTest, RecoveryAuditFailureCannotReleaseLatch) TEST(SafetyManagerTest, RecoveryAuditFailureCannotReleaseLatch)
{ {
SafetyCoordinator coordinator; SafetyManager coordinator;
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor()); auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
auto participant = std::make_shared<FakeParticipant>(); auto participant = std::make_shared<FakeParticipant>();
participant->verify_result = { participant->verify_result = {

View File

@ -1,4 +1,4 @@
#include "manager/safety/include/safety_snapshot_store.h" #include "manager/safety_manager/include/safety_snapshot_store.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>

View File

@ -9,7 +9,7 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "common/config/config_files.h" #include "common/config/config_files.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include "task/task_factory.h" #include "task/task_factory.h"
using namespace cmvr; using namespace cmvr;

View File

@ -12,7 +12,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include "task/task_factory.h" #include "task/task_factory.h"
namespace { namespace {

View File

@ -1,548 +1,4 @@
# Service is intentionally split by transport. The QUIC edge target is added
add_library(service # from the project root before task targets; the gRPC tree is added here after
stop_all/src/stop_operation_dispatcher.cpp # its manager and task dependencies are available.
action/src/action_queue_executor.cpp add_subdirectory(grpc)
grpc/src/camera_ptz_activity_registry.cpp
grpc/src/media_activity_coordinator.cpp
grpc/src/motor_activity_coordinator.cpp
grpc/src/grpc_camera_service.cpp
grpc/src/grpc_command_transaction.cpp
grpc/src/grpc_error_logging_interceptor.cpp
grpc/src/grpc_recovery_audit.cpp
grpc/src/grpc_safety_proto.cpp
grpc/src/grpc_safety_participants.cpp
grpc/src/grpc_security.cpp
grpc/src/grpc_system_service.cpp
grpc/src/grpc_speaker_service.cpp
grpc/src/grpc_microphone_service.cpp
grpc/src/grpc_head_service.cpp
grpc/src/grpc_dexhand_service.cpp
grpc/src/grpc_arm_service.cpp
grpc/src/grpc_arm_teleop_service.cpp
grpc/src/grpc_robot_arm_teleop_backend.cpp
grpc/src/grpc_motor_service.cpp
grpc/src/grpc_agv_service.cpp
grpc/src/grpc_hlc_service.cpp
../task/grpc_server_task/src/grpc_server_task.cpp
)
target_include_directories(service PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(service PRIVATE
cmvr_es::proto
cmvr_es::stop_all_admission_gate
cmvr_es::camera_operational_activity_registry
osqp
cmvr_es::control_authority
cmvr_es::device_manager
cmvr_es::task_manager
cmvr_es::algorithms::controller
cmvr_es::task
cmvr_es::media_source_hub
cmvr_es::device_media_source_adapter
protobuf::libprotobuf
)
add_library(cmvr_es::service ALIAS service)
install(TARGETS service LIBRARY DESTINATION lib)
if(BUILD_TESTING)
add_executable(stop_all_admission_gate_test
stop_all/tests/stop_all_admission_gate_test.cpp
stop_all/src/stop_all_admission_gate.cpp
)
target_include_directories(stop_all_admission_gate_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(stop_all_admission_gate_test PRIVATE
gtest
gtest_main
pthread
)
add_test(
NAME stop_all_admission_gate_test
COMMAND stop_all_admission_gate_test
)
set_tests_properties(stop_all_admission_gate_test PROPERTIES TIMEOUT 10)
add_executable(stop_operation_dispatcher_test
stop_all/tests/stop_operation_dispatcher_test.cpp
stop_all/src/stop_operation_dispatcher.cpp
)
target_include_directories(stop_operation_dispatcher_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(stop_operation_dispatcher_test PRIVATE
gtest
gtest_main
pthread
)
add_test(
NAME stop_operation_dispatcher_test
COMMAND stop_operation_dispatcher_test
)
set_tests_properties(stop_operation_dispatcher_test PROPERTIES TIMEOUT 10)
add_executable(camera_operational_activity_registry_test
grpc/tests/camera_operational_activity_registry_test.cpp
)
target_include_directories(camera_operational_activity_registry_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(camera_operational_activity_registry_test PRIVATE
cmvr_es::proto
cmvr_es::camera_operational_activity_registry
gtest
gtest_main
pthread
)
add_test(
NAME camera_operational_activity_registry_test
COMMAND camera_operational_activity_registry_test
)
set_tests_properties(camera_operational_activity_registry_test PROPERTIES
TIMEOUT 10)
add_executable(camera_ptz_activity_registry_test
grpc/tests/camera_ptz_activity_registry_test.cpp
grpc/src/camera_ptz_activity_registry.cpp
stop_all/src/stop_all_admission_gate.cpp
)
target_include_directories(camera_ptz_activity_registry_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(camera_ptz_activity_registry_test PRIVATE
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME camera_ptz_activity_registry_test
COMMAND camera_ptz_activity_registry_test
)
set_tests_properties(camera_ptz_activity_registry_test PROPERTIES TIMEOUT 10)
add_executable(media_activity_coordinator_test
grpc/tests/media_activity_coordinator_test.cpp
grpc/src/media_activity_coordinator.cpp
stop_all/src/stop_all_admission_gate.cpp
)
target_include_directories(media_activity_coordinator_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(media_activity_coordinator_test PRIVATE
cmvr_es::logging
pthread
)
add_test(
NAME media_activity_coordinator_test
COMMAND media_activity_coordinator_test
)
set(_grpc_media_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_media_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(media_activity_coordinator_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_media_test_environment}"
)
add_executable(motor_activity_coordinator_test
grpc/tests/motor_activity_coordinator_test.cpp
grpc/src/motor_activity_coordinator.cpp
)
target_include_directories(motor_activity_coordinator_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(motor_activity_coordinator_test PRIVATE
cmvr_es::logging
pthread
)
add_test(
NAME motor_activity_coordinator_test
COMMAND motor_activity_coordinator_test
)
set_tests_properties(motor_activity_coordinator_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_media_test_environment}"
)
add_executable(grpc_camera_stream_policy_test
grpc/tests/grpc_camera_stream_policy_test.cpp
)
target_include_directories(grpc_camera_stream_policy_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
add_test(
NAME grpc_camera_stream_policy_test
COMMAND grpc_camera_stream_policy_test
)
set_tests_properties(grpc_camera_stream_policy_test PROPERTIES TIMEOUT 10)
add_executable(grpc_system_service_test
grpc/tests/grpc_system_service_test.cpp
)
target_include_directories(grpc_system_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_system_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_system_service_test
COMMAND grpc_system_service_test
)
set(_grpc_system_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_system_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_system_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_error_logging_interceptor_test
grpc/tests/grpc_error_logging_interceptor_test.cpp
grpc/src/grpc_error_logging_interceptor.cpp
)
target_include_directories(grpc_error_logging_interceptor_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_error_logging_interceptor_test
PRIVATE
cmvr_es::logging
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_error_logging_interceptor_test
COMMAND grpc_error_logging_interceptor_test
)
set_tests_properties(grpc_error_logging_interceptor_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_security_test
grpc/tests/grpc_security_test.cpp
grpc/src/grpc_security.cpp
)
target_include_directories(grpc_security_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_security_test
PRIVATE
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_security_test
COMMAND grpc_security_test
)
set_tests_properties(grpc_security_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_command_transaction_test
grpc/tests/grpc_command_transaction_test.cpp
grpc/src/grpc_command_transaction.cpp
grpc/src/grpc_safety_proto.cpp
grpc/src/grpc_security.cpp
)
target_include_directories(grpc_command_transaction_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_command_transaction_test PRIVATE
cmvr_es::safety_coordinator
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_command_transaction_test
COMMAND grpc_command_transaction_test
)
set_tests_properties(grpc_command_transaction_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_arm_service_test
grpc/tests/grpc_arm_service_test.cpp
)
target_include_directories(grpc_arm_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_arm_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_arm_service_test
COMMAND grpc_arm_service_test
)
set_tests_properties(grpc_arm_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_arm_teleop_service_test
grpc/tests/grpc_arm_teleop_service_test.cpp
)
target_include_directories(grpc_arm_teleop_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_arm_teleop_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_arm_teleop_service_test
COMMAND grpc_arm_teleop_service_test
)
set(_grpc_arm_teleop_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_arm_teleop_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_arm_teleop_service_test PROPERTIES
TIMEOUT 20
ENVIRONMENT "${_grpc_arm_teleop_test_environment}"
)
add_executable(grpc_robot_arm_teleop_backend_test
grpc/tests/grpc_robot_arm_teleop_backend_test.cpp
)
target_include_directories(grpc_robot_arm_teleop_backend_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_robot_arm_teleop_backend_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_robot_arm_teleop_backend_test
COMMAND grpc_robot_arm_teleop_backend_test
)
set_tests_properties(grpc_robot_arm_teleop_backend_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_arm_teleop_test_environment}"
)
add_executable(grpc_motor_service_test
grpc/tests/grpc_motor_service_test.cpp
)
target_include_directories(grpc_motor_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_motor_service_test
PRIVATE
service
gtest
gtest_main
pthread
)
add_test(
NAME grpc_motor_service_test
COMMAND grpc_motor_service_test
)
set(_grpc_motor_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_motor_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_motor_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_motor_test_environment}"
)
add_executable(grpc_agv_service_test
grpc/tests/grpc_agv_service_test.cpp
)
target_include_directories(grpc_agv_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_agv_service_test
PRIVATE
service
gtest
gtest_main
pthread
)
add_test(
NAME grpc_agv_service_test
COMMAND grpc_agv_service_test
)
set(_grpc_agv_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_agv_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_agv_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_agv_test_environment}"
)
add_executable(grpc_head_service_test
grpc/tests/grpc_head_service_test.cpp
)
target_include_directories(grpc_head_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_head_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_head_service_test
COMMAND grpc_head_service_test
)
set_tests_properties(grpc_head_service_test PROPERTIES
TIMEOUT 15
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_dexhand_service_test
grpc/tests/grpc_dexhand_service_test.cpp
)
target_include_directories(grpc_dexhand_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_dexhand_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_dexhand_service_test
COMMAND grpc_dexhand_service_test
)
set_tests_properties(grpc_dexhand_service_test PROPERTIES
TIMEOUT 15
ENVIRONMENT "${_grpc_system_test_environment}"
)
endif()
# --------------------------------------------------------
# Unit test
# --------------------------------------------------------
find_package(OpenCV REQUIRED)
include_directories(
${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/include
)
link_directories(
${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/lib
)
add_executable(grpc_arm_client_test
grpc/src/grpc_arm_client_test.cpp
)
target_link_libraries(grpc_arm_client_test
PRIVATE
cmvr_es::device::canbus
cmvr_es::device::ti5_canopen_motor_driver
osqp
gtest
gtest_main
pthread
glog
cmvr_es::proto
ccd
fcl
cmvr_es::device_manager
${OpenCV_LIBS}
)
add_executable(grpc_hlc_client_test
grpc/src/grpc_hlc_client_test.cpp
)
target_link_libraries(grpc_hlc_client_test
PRIVATE
cmvr_es::device::canbus
cmvr_es::device::ti5_canopen_motor_driver
osqp
gtest
gtest_main
pthread
glog
cmvr_es::proto
ccd
fcl
cmvr_es::device_manager
)

View File

@ -6,14 +6,33 @@
## 当前结构 ## 当前结构
`service/` 顶层只按传输协议保留两个子目录:`grpc/` 和 `quic_edge/`。gRPC
内部再按运行角色分层,避免把队列、停止控制、客户端和服务端实现混在同一层。
```text
service/
├── grpc/
│ ├── action/ # ActionQueue 校验、账本和 FIFO 执行器
│ ├── client/ # 边缘端使用的 gRPC client
│ ├── server/ # gRPC service、协调器和安全扩展
│ │ ├── include/
│ │ ├── src/
│ │ └── tests/
│ └── stop_all/ # 高优先级 StopAll 通道
└── quic_edge/ # QUIC client、控制状态机和媒体 packetizer
```
| 目录 | 职责 | | 目录 | 职责 |
| --- | --- | | --- | --- |
| `action/` | SystemService ActionQueue 的校验、幂等账本和边缘端 FIFO 执行器 | | `grpc/action/` | SystemService ActionQueue 的校验、幂等账本和边缘端 FIFO 执行器 |
| `grpc/` | 入站设备控制、状态查询和兼容流式接口 | | `grpc/client/` | 面向边缘端内部调用的 gRPC client |
| `grpc/server/` | 入站设备控制、状态查询、兼容流式接口和安全控制面 |
| `grpc/stop_all/` | 不进入普通命令队列的高优先级停止通道 |
| `quic_edge/` | 边缘端主动连接平台的 QUIC client、控制状态机和媒体 packetizer | | `quic_edge/` | 边缘端主动连接平台的 QUIC client、控制状态机和媒体 packetizer |
| `quic_edge/tests/` | 已登记到 CTest 的 QUIC 协议测试 | | `quic_edge/tests/` | 已登记到 CTest 的 QUIC 协议测试 |
两个遗留 gRPC client test 位于 `grpc/src/*_client_test.cpp`,当前没有通过 `add_test()` 登记。 两个遗留 gRPC client test 位于 `grpc/server/tests/*_client_test.cpp`,当前没有通过
`add_test()` 登记;它们是历史可执行文件,不代表默认自动覆盖。
gRPC 和 QUIC 的职责边界: gRPC 和 QUIC 的职责边界:
@ -99,10 +118,10 @@ ActionQueue 遵循以下执行语义:
- Proto:[`../../protos/cmvr/api/motor_service.proto`](../../protos/cmvr/api/motor_service.proto) - Proto:[`../../protos/cmvr/api/motor_service.proto`](../../protos/cmvr/api/motor_service.proto)
和 [`../../protos/cmvr/api/motor_command.proto`](../../protos/cmvr/api/motor_command.proto) 和 [`../../protos/cmvr/api/motor_command.proto`](../../protos/cmvr/api/motor_command.proto)
- 实现:[`grpc/include/grpc_motor_service.h`](grpc/include/grpc_motor_service.h) - 实现:[`grpc/server/include/grpc_motor_service.h`](grpc/server/include/grpc_motor_service.h)
和 [`grpc/src/grpc_motor_service.cpp`](grpc/src/grpc_motor_service.cpp) 和 [`grpc/server/src/grpc_motor_service.cpp`](grpc/server/src/grpc_motor_service.cpp)
- 注册:[`../task/grpc_server_task/src/grpc_server_task.cpp`](../task/grpc_server_task/src/grpc_server_task.cpp) - 注册:[`../task/grpc_server_task/src/grpc_server_task.cpp`](../task/grpc_server_task/src/grpc_server_task.cpp)
- 单元测试:[`grpc/tests/grpc_motor_service_test.cpp`](grpc/tests/grpc_motor_service_test.cpp) - 单元测试:[`grpc/server/tests/grpc_motor_service_test.cpp`](grpc/server/tests/grpc_motor_service_test.cpp)
服务按单电机仲裁。同步 Profile 命令、Cyclic Position/Velocity 双向流、 服务按单电机仲裁。同步 Profile 命令、Cyclic Position/Velocity 双向流、
`setEnabled`、状态读取和软件 `emergencyStop` 共用同一控制权状态: `setEnabled`、状态读取和软件 `emergencyStop` 共用同一控制权状态:
@ -140,6 +159,7 @@ import 路径必须相对于 `protos/`。兼容规则见 [`../../protos/README.m
```text ```text
service/grpc/ service/grpc/
└── server/
├── include/grpc_example_service.h ├── include/grpc_example_service.h
└── src/grpc_example_service.cpp └── src/grpc_example_service.cpp
``` ```
@ -203,7 +223,7 @@ cmvr::api::ExampleService::Service
- 检查 `context->IsCancelled()`; - 检查 `context->IsCancelled()`;
- 检查 `Read()` / `Write()` 返回; - 检查 `Read()` / `Write()` 返回;
- 使用 RAII 或 MediaSourceHub Subscription 释放 producer lease; - 使用 RAII 或 MediaSourceManager Subscription 释放 producer lease;
- 不持有设备状态锁进行网络写; - 不持有设备状态锁进行网络写;
- 为 wait/read 使用有限 timeout; - 为 wait/read 使用有限 timeout;
- 慢客户端不能阻塞设备生产线程; - 慢客户端不能阻塞设备生产线程;
@ -211,7 +231,7 @@ cmvr::api::ExampleService::Service
- gRPC RGB 流在积压超过 `camera_stream_max_pending_frames` 或帧龄超过 - gRPC RGB 流在积压超过 `camera_stream_max_pending_frames` 或帧龄超过
`camera_stream_max_frame_age_ms` 时主动丢弃旧帧,请求 IDR,并从下一个关键帧恢复。 `camera_stream_max_frame_age_ms` 时主动丢弃旧帧,请求 IDR,并从下一个关键帧恢复。
当前仅 gRPC RGB 和麦克风流使用 MediaSourceHub;Depth/RGBD 仍直接读取设备帧。 当前仅 gRPC RGB 和麦克风流使用 MediaSourceManager;Depth/RGBD 仍直接读取设备帧。
gRPC 相机实时流默认最多保留 2 帧积压、最大允许 250 ms 帧龄。两个配置项填 0 gRPC 相机实时流默认最多保留 2 帧积压、最大允许 250 ms 帧龄。两个配置项填 0
时使用上述默认值。该策略以低延迟为目标,不保证每个视频帧都到达客户端;控制命令 时使用上述默认值。该策略以低延迟为目标,不保证每个视频帧都到达客户端;控制命令

View File

@ -0,0 +1,550 @@
add_library(service
stop_all/src/stop_operation_dispatcher.cpp
action/src/action_queue_executor.cpp
server/src/camera_ptz_activity_registry.cpp
server/src/media_activity_coordinator.cpp
server/src/motor_activity_coordinator.cpp
server/src/grpc_camera_service.cpp
server/src/grpc_command_transaction.cpp
server/src/grpc_error_logging_interceptor.cpp
server/src/grpc_recovery_audit.cpp
server/src/grpc_safety_proto.cpp
server/src/grpc_safety_participants.cpp
server/src/grpc_security.cpp
server/src/grpc_system_service.cpp
server/src/grpc_speaker_service.cpp
server/src/grpc_microphone_service.cpp
server/src/grpc_head_service.cpp
server/src/grpc_dexhand_service.cpp
server/src/grpc_arm_service.cpp
server/src/grpc_arm_teleop_service.cpp
server/src/grpc_robot_arm_teleop_backend.cpp
server/src/grpc_motor_service.cpp
server/src/grpc_agv_service.cpp
server/src/grpc_hlc_service.cpp
../../task/grpc_server_task/src/grpc_server_task.cpp
)
target_include_directories(service PUBLIC
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(service PRIVATE
cmvr_es::proto
cmvr_es::stop_all_admission_gate
cmvr_es::camera_operational_activity_registry
osqp
cmvr_es::control_authority_manager
cmvr_es::device_manager
cmvr_es::task_manager
cmvr_es::algorithms::controller
cmvr_es::task
cmvr_es::media_source_manager
cmvr_es::device_media_source_adapter
protobuf::libprotobuf
)
add_library(cmvr_es::service ALIAS service)
install(TARGETS service LIBRARY DESTINATION lib)
if(BUILD_TESTING)
add_executable(stop_all_admission_gate_test
stop_all/tests/stop_all_admission_gate_test.cpp
stop_all/src/stop_all_admission_gate.cpp
)
target_include_directories(stop_all_admission_gate_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(stop_all_admission_gate_test PRIVATE
gtest
gtest_main
pthread
)
add_test(
NAME stop_all_admission_gate_test
COMMAND stop_all_admission_gate_test
)
set_tests_properties(stop_all_admission_gate_test PROPERTIES TIMEOUT 10)
add_executable(stop_operation_dispatcher_test
stop_all/tests/stop_operation_dispatcher_test.cpp
stop_all/src/stop_operation_dispatcher.cpp
)
target_include_directories(stop_operation_dispatcher_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(stop_operation_dispatcher_test PRIVATE
gtest
gtest_main
pthread
)
add_test(
NAME stop_operation_dispatcher_test
COMMAND stop_operation_dispatcher_test
)
set_tests_properties(stop_operation_dispatcher_test PROPERTIES TIMEOUT 10)
add_executable(camera_operational_activity_registry_test
server/tests/camera_operational_activity_registry_test.cpp
)
target_include_directories(camera_operational_activity_registry_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(camera_operational_activity_registry_test PRIVATE
cmvr_es::proto
cmvr_es::camera_operational_activity_registry
gtest
gtest_main
pthread
)
add_test(
NAME camera_operational_activity_registry_test
COMMAND camera_operational_activity_registry_test
)
set_tests_properties(camera_operational_activity_registry_test PROPERTIES
TIMEOUT 10)
add_executable(camera_ptz_activity_registry_test
server/tests/camera_ptz_activity_registry_test.cpp
server/src/camera_ptz_activity_registry.cpp
stop_all/src/stop_all_admission_gate.cpp
)
target_include_directories(camera_ptz_activity_registry_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(camera_ptz_activity_registry_test PRIVATE
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME camera_ptz_activity_registry_test
COMMAND camera_ptz_activity_registry_test
)
set_tests_properties(camera_ptz_activity_registry_test PROPERTIES TIMEOUT 10)
add_executable(media_activity_coordinator_test
server/tests/media_activity_coordinator_test.cpp
server/src/media_activity_coordinator.cpp
stop_all/src/stop_all_admission_gate.cpp
)
target_include_directories(media_activity_coordinator_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(media_activity_coordinator_test PRIVATE
cmvr_es::logging
pthread
)
add_test(
NAME media_activity_coordinator_test
COMMAND media_activity_coordinator_test
)
set(_grpc_media_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_media_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(media_activity_coordinator_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_media_test_environment}"
)
add_executable(motor_activity_coordinator_test
server/tests/motor_activity_coordinator_test.cpp
server/src/motor_activity_coordinator.cpp
)
target_include_directories(motor_activity_coordinator_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(motor_activity_coordinator_test PRIVATE
cmvr_es::logging
pthread
)
add_test(
NAME motor_activity_coordinator_test
COMMAND motor_activity_coordinator_test
)
set_tests_properties(motor_activity_coordinator_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_media_test_environment}"
)
add_executable(grpc_camera_stream_policy_test
server/tests/grpc_camera_stream_policy_test.cpp
)
target_include_directories(grpc_camera_stream_policy_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
add_test(
NAME grpc_camera_stream_policy_test
COMMAND grpc_camera_stream_policy_test
)
set_tests_properties(grpc_camera_stream_policy_test PROPERTIES TIMEOUT 10)
add_executable(grpc_system_service_test
server/tests/grpc_system_service_test.cpp
)
target_include_directories(grpc_system_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_system_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_system_service_test
COMMAND grpc_system_service_test
)
set(_grpc_system_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_system_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_system_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_error_logging_interceptor_test
server/tests/grpc_error_logging_interceptor_test.cpp
server/src/grpc_error_logging_interceptor.cpp
)
target_include_directories(grpc_error_logging_interceptor_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_error_logging_interceptor_test
PRIVATE
cmvr_es::logging
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_error_logging_interceptor_test
COMMAND grpc_error_logging_interceptor_test
)
set_tests_properties(grpc_error_logging_interceptor_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_security_test
server/tests/grpc_security_test.cpp
server/src/grpc_security.cpp
)
target_include_directories(grpc_security_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_security_test
PRIVATE
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_security_test
COMMAND grpc_security_test
)
set_tests_properties(grpc_security_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_command_transaction_test
server/tests/grpc_command_transaction_test.cpp
server/src/grpc_command_transaction.cpp
server/src/grpc_safety_proto.cpp
server/src/grpc_security.cpp
)
target_include_directories(grpc_command_transaction_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_command_transaction_test PRIVATE
cmvr_es::safety_manager
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_command_transaction_test
COMMAND grpc_command_transaction_test
)
set_tests_properties(grpc_command_transaction_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_arm_service_test
server/tests/grpc_arm_service_test.cpp
)
target_include_directories(grpc_arm_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_arm_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_arm_service_test
COMMAND grpc_arm_service_test
)
set_tests_properties(grpc_arm_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_arm_teleop_service_test
server/tests/grpc_arm_teleop_service_test.cpp
)
target_include_directories(grpc_arm_teleop_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_arm_teleop_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_arm_teleop_service_test
COMMAND grpc_arm_teleop_service_test
)
set(_grpc_arm_teleop_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_arm_teleop_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_arm_teleop_service_test PROPERTIES
TIMEOUT 20
ENVIRONMENT "${_grpc_arm_teleop_test_environment}"
)
add_executable(grpc_robot_arm_teleop_backend_test
server/tests/grpc_robot_arm_teleop_backend_test.cpp
)
target_include_directories(grpc_robot_arm_teleop_backend_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
)
target_link_libraries(grpc_robot_arm_teleop_backend_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_robot_arm_teleop_backend_test
COMMAND grpc_robot_arm_teleop_backend_test
)
set_tests_properties(grpc_robot_arm_teleop_backend_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_arm_teleop_test_environment}"
)
add_executable(grpc_motor_service_test
server/tests/grpc_motor_service_test.cpp
)
target_include_directories(grpc_motor_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_motor_service_test
PRIVATE
service
gtest
gtest_main
pthread
)
add_test(
NAME grpc_motor_service_test
COMMAND grpc_motor_service_test
)
set(_grpc_motor_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_motor_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_motor_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_motor_test_environment}"
)
add_executable(grpc_agv_service_test
server/tests/grpc_agv_service_test.cpp
)
target_include_directories(grpc_agv_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_agv_service_test
PRIVATE
service
gtest
gtest_main
pthread
)
add_test(
NAME grpc_agv_service_test
COMMAND grpc_agv_service_test
)
set(_grpc_agv_test_environment
"LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}"
)
if(CMVR_TEST_SYSTEM_LIBSTDCXX)
list(APPEND _grpc_agv_test_environment
"LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}")
endif()
set_tests_properties(grpc_agv_service_test PROPERTIES
TIMEOUT 10
ENVIRONMENT "${_grpc_agv_test_environment}"
)
add_executable(grpc_head_service_test
server/tests/grpc_head_service_test.cpp
)
target_include_directories(grpc_head_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_head_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_head_service_test
COMMAND grpc_head_service_test
)
set_tests_properties(grpc_head_service_test PROPERTIES
TIMEOUT 15
ENVIRONMENT "${_grpc_system_test_environment}"
)
add_executable(grpc_dexhand_service_test
server/tests/grpc_dexhand_service_test.cpp
)
target_include_directories(grpc_dexhand_service_test
PRIVATE
${CMAKE_SOURCE_DIR}/cmvr-es
${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager
)
target_link_libraries(grpc_dexhand_service_test
PRIVATE
service
cmvr_es::proto
gtest
gtest_main
pthread
)
add_test(
NAME grpc_dexhand_service_test
COMMAND grpc_dexhand_service_test
)
set_tests_properties(grpc_dexhand_service_test PROPERTIES
TIMEOUT 15
ENVIRONMENT "${_grpc_system_test_environment}"
)
endif()
# --------------------------------------------------------
# Unit test
# --------------------------------------------------------
find_package(OpenCV REQUIRED)
include_directories(
${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/include
)
link_directories(
${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/lib
)
add_executable(grpc_arm_client_test
server/tests/grpc_arm_client_test.cpp
)
target_link_libraries(grpc_arm_client_test
PRIVATE
cmvr_es::device::canbus
cmvr_es::device::ti5_canopen_motor_driver
osqp
gtest
gtest_main
pthread
glog
cmvr_es::proto
ccd
fcl
cmvr_es::device_manager
${OpenCV_LIBS}
)
add_executable(grpc_hlc_client_test
server/tests/grpc_hlc_client_test.cpp
)
target_link_libraries(grpc_hlc_client_test
PRIVATE
cmvr_es::device::canbus
cmvr_es::device::ti5_canopen_motor_driver
osqp
gtest
gtest_main
pthread
glog
cmvr_es::proto
ccd
fcl
cmvr_es::device_manager
)

View File

@ -9,7 +9,7 @@
#include <string> #include <string>
#include "cmvr/api/system_command.pb.h" #include "cmvr/api/system_command.pb.h"
#include "manager/safety/include/safety_types.h" #include "manager/safety_manager/include/safety_types.h"
namespace cmvr::device { namespace cmvr::device {
class DeviceManager; class DeviceManager;

View File

@ -1,4 +1,4 @@
#include "service/action/include/action_queue_executor.h" #include "service/grpc/action/include/action_queue_executor.h"
#include <algorithm> #include <algorithm>
#include <array> #include <array>
@ -36,10 +36,10 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "devices/agv/abstract_agv.h" #include "devices/agv/abstract_agv.h"
#include "devices/arm/robot_arm.h" #include "devices/arm/robot_arm.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "manager/device_manager/include/device_manager.h" #include "manager/device_manager/include/device_manager.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {
@ -1965,7 +1965,7 @@ struct ActionQueueExecutor::Impl {
} }
request.authority_generation = token.generation; request.authority_generation = token.generation;
request.deadline = deadline; request.deadline = deadline;
return device_manager.safetyCoordinator().admit(request); return device_manager.safetyManager().admit(request);
} }
static std::string admissionFailure( static std::string admissionFailure(
@ -2010,7 +2010,7 @@ struct ActionQueueExecutor::Impl {
StepOutcome::Canceled, StepOutcome::Canceled,
"RobotArm ActionQueue control was preempted before dispatch"}; "RobotArm ActionQueue control was preempted before dispatch"};
} }
auto safety_dispatch = device_manager.safetyCoordinator() auto safety_dispatch = device_manager.safetyManager()
.beginDispatch(*safety_admission.permit); .beginDispatch(*safety_admission.permit);
if (!safety_dispatch.acquired()) { if (!safety_dispatch.acquired()) {
return { return {
@ -2171,7 +2171,7 @@ struct ActionQueueExecutor::Impl {
StepOutcome::Canceled, StepOutcome::Canceled,
"AGV ActionQueue control was preempted before dispatch"}; "AGV ActionQueue control was preempted before dispatch"};
} }
auto safety_dispatch = device_manager.safetyCoordinator() auto safety_dispatch = device_manager.safetyManager()
.beginDispatch(*safety_admission.permit); .beginDispatch(*safety_admission.permit);
if (!safety_dispatch.acquired()) { if (!safety_dispatch.acquired()) {
return { return {

View File

@ -1,4 +1,4 @@
#include "service/arm_teleop_client/include/grpc_arm_teleop_client.h" #include "service/grpc/client/include/grpc_arm_teleop_client.h"
#include <exception> #include <exception>
#include <string> #include <string>

View File

@ -12,7 +12,7 @@
#include <unistd.h> #include <unistd.h>
#include "cmvr/api/arm_teleop_v1.grpc.pb.h" #include "cmvr/api/arm_teleop_v1.grpc.pb.h"
#include "service/arm_teleop_client/include/grpc_arm_teleop_client.h" #include "service/grpc/client/include/grpc_arm_teleop_client.h"
namespace { namespace {

View File

@ -9,7 +9,7 @@
#include <grpcpp/grpcpp.h> #include <grpcpp/grpcpp.h>
#include "cmvr/api/arm_teleop_v1.grpc.pb.h" #include "cmvr/api/arm_teleop_v1.grpc.pb.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
namespace cmvr::service { namespace cmvr::service {
@ -18,7 +18,7 @@ class GrpcSecurityGateway;
} // namespace cmvr::service } // namespace cmvr::service
namespace cmvr::safety { namespace cmvr::safety {
class SafetyCoordinator; class SafetyManager;
} }
namespace cmvr::service { namespace cmvr::service {
@ -87,7 +87,7 @@ public:
makeDisabledArmTeleopBackend(), makeDisabledArmTeleopBackend(),
control::ControlAuthorityManager* authority = nullptr, control::ControlAuthorityManager* authority = nullptr,
std::shared_ptr<GrpcSecurityGateway> security_gateway = nullptr, std::shared_ptr<GrpcSecurityGateway> security_gateway = nullptr,
safety::SafetyCoordinator* safety_coordinator = nullptr); safety::SafetyManager* safety_manager = nullptr);
~ArmTeleopServiceImpl() override = default; ~ArmTeleopServiceImpl() override = default;
grpc::Status Teleoperate( grpc::Status Teleoperate(
@ -99,7 +99,7 @@ private:
std::shared_ptr<ArmTeleopBackend> backend_; std::shared_ptr<ArmTeleopBackend> backend_;
control::ControlAuthorityManager* authority_{nullptr}; control::ControlAuthorityManager* authority_{nullptr};
std::shared_ptr<GrpcSecurityGateway> security_gateway_; std::shared_ptr<GrpcSecurityGateway> security_gateway_;
safety::SafetyCoordinator* safety_coordinator_{nullptr}; safety::SafetyManager* safety_manager_{nullptr};
}; };
} // namespace cmvr::service } // namespace cmvr::service

View File

@ -11,7 +11,7 @@
#include "common/base/grpc_utils.h" #include "common/base/grpc_utils.h"
#include "manager/device_manager/include/device_manager.h" #include "manager/device_manager/include/device_manager.h"
#include "devices/camera/abstract_camera.h" #include "devices/camera/abstract_camera.h"
#include "service/grpc/include/grpc_camera_stream_policy.h" #include "service/grpc/server/include/grpc_camera_stream_policy.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -11,8 +11,8 @@
#include <google/protobuf/message.h> #include <google/protobuf/message.h>
#include "cmvr/api/common.pb.h" #include "cmvr/api/common.pb.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
namespace cmvr::service { namespace cmvr::service {
@ -38,7 +38,7 @@ struct GrpcStreamingSafetyOpen {
class GrpcStreamingSafetySession final { class GrpcStreamingSafetySession final {
public: public:
GrpcStreamingSafetySession( GrpcStreamingSafetySession(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const GrpcRequestContext& request_context, const GrpcRequestContext& request_context,
GrpcStreamingSafetyOpen open); GrpcStreamingSafetyOpen open);
@ -67,7 +67,7 @@ public:
private: private:
void reject_(safety::SafetyReason reason, std::string detail); void reject_(safety::SafetyReason reason, std::string detail);
safety::SafetyCoordinator* coordinator_{nullptr}; safety::SafetyManager* coordinator_{nullptr};
std::optional<safety::AdmissionPermit> permit_; std::optional<safety::AdmissionPermit> permit_;
safety::AdmissionDecision admission_decision_; safety::AdmissionDecision admission_decision_;
grpc::Status status_; grpc::Status status_;
@ -79,7 +79,7 @@ private:
class GrpcCommandTransaction final { class GrpcCommandTransaction final {
public: public:
GrpcCommandTransaction( GrpcCommandTransaction(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
GrpcRequestContext request_context, GrpcRequestContext request_context,
GrpcMethodPolicy method_policy, GrpcMethodPolicy method_policy,
const google::protobuf::Message& request, const google::protobuf::Message& request,
@ -153,7 +153,7 @@ private:
const std::string& detail); const std::string& detail);
void abandon_() noexcept; void abandon_() noexcept;
safety::SafetyCoordinator* coordinator_{nullptr}; safety::SafetyManager* coordinator_{nullptr};
GrpcRequestContext request_context_; GrpcRequestContext request_context_;
GrpcMethodPolicy method_policy_; GrpcMethodPolicy method_policy_;
google::protobuf::Message* response_{nullptr}; google::protobuf::Message* response_{nullptr};
@ -181,7 +181,7 @@ using GrpcUnaryCommandOperation =
grpc::Status executeRegisteredGrpcCommand( grpc::Status executeRegisteredGrpcCommand(
const std::shared_ptr<GrpcSecurityGateway>& gateway, const std::shared_ptr<GrpcSecurityGateway>& gateway,
grpc::ServerContext* server_context, grpc::ServerContext* server_context,
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::string& full_method_name, const std::string& full_method_name,
const google::protobuf::Message* request, const google::protobuf::Message* request,
google::protobuf::Message* response, google::protobuf::Message* response,
@ -194,7 +194,7 @@ grpc::Status executeRegisteredGrpcCommand(
grpc::Status executeServerDerivedGrpcCommand( grpc::Status executeServerDerivedGrpcCommand(
const std::shared_ptr<GrpcSecurityGateway>& gateway, const std::shared_ptr<GrpcSecurityGateway>& gateway,
grpc::ServerContext* server_context, grpc::ServerContext* server_context,
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::string& full_method_name, const std::string& full_method_name,
GrpcMethodPolicy effective_policy, GrpcMethodPolicy effective_policy,
const google::protobuf::Message* request, const google::protobuf::Message* request,

View File

@ -10,7 +10,7 @@
#include "cmvr/api/motor_service.grpc.pb.h" #include "cmvr/api/motor_service.grpc.pb.h"
#include "devices/motor/abstract_motor.h" #include "devices/motor/abstract_motor.h"
#include "service/grpc/include/motor_activity_coordinator.h" #include "service/grpc/server/include/motor_activity_coordinator.h"
namespace cmvr::device { namespace cmvr::device {
class DeviceManager; class DeviceManager;

View File

@ -4,7 +4,7 @@
#include "cmvr/config/grpc_server_config/grpc_server_config.pb.h" #include "cmvr/config/grpc_server_config/grpc_server_config.pb.h"
#include "devices/arm/robot_arm.h" #include "devices/arm/robot_arm.h"
#include "service/grpc/include/grpc_arm_teleop_service.h" #include "service/grpc/server/include/grpc_arm_teleop_service.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -3,7 +3,7 @@
#include <memory> #include <memory>
namespace cmvr::safety { namespace cmvr::safety {
class SafetyCoordinator; class SafetyManager;
} }
namespace cmvr::service { namespace cmvr::service {
@ -26,7 +26,7 @@ public:
private: private:
friend std::unique_ptr<GrpcSafetyParticipantRegistration> friend std::unique_ptr<GrpcSafetyParticipantRegistration>
registerGrpcSafetyParticipants( registerGrpcSafetyParticipants(
safety::SafetyCoordinator&, safety::SafetyManager&,
std::shared_ptr<ActionQueueExecutor>, std::shared_ptr<ActionQueueExecutor>,
std::shared_ptr<StopOperationDispatcher>); std::shared_ptr<StopOperationDispatcher>);
struct Impl; struct Impl;
@ -36,7 +36,7 @@ private:
std::unique_ptr<GrpcSafetyParticipantRegistration> std::unique_ptr<GrpcSafetyParticipantRegistration>
registerGrpcSafetyParticipants( registerGrpcSafetyParticipants(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
std::shared_ptr<ActionQueueExecutor> action_queue, std::shared_ptr<ActionQueueExecutor> action_queue,
std::shared_ptr<StopOperationDispatcher> stop_dispatcher); std::shared_ptr<StopOperationDispatcher> stop_dispatcher);

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include "cmvr/api/safety_command.pb.h" #include "cmvr/api/safety_command.pb.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -13,7 +13,7 @@
#include <grpcpp/support/status.h> #include <grpcpp/support/status.h>
#include "cmvr/config/grpc_server_config/grpc_server_config.pb.h" #include "cmvr/config/grpc_server_config/grpc_server_config.pb.h"
#include "manager/safety/include/safety_types.h" #include "manager/safety_manager/include/safety_types.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -8,7 +8,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "service/stop_all/include/deferred_stop_operation.h" #include "service/grpc/stop_all/include/deferred_stop_operation.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -9,7 +9,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "service/stop_all/include/deferred_stop_operation.h" #include "service/grpc/stop_all/include/deferred_stop_operation.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -1,9 +1,9 @@
#include "service/grpc/include/camera_operational_activity_registry.h" #include "service/grpc/server/include/camera_operational_activity_registry.h"
#include <algorithm> #include <algorithm>
#include <exception> #include <exception>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {

View File

@ -1,10 +1,10 @@
#include "service/grpc/include/camera_ptz_activity_registry.h" #include "service/grpc/server/include/camera_ptz_activity_registry.h"
#include <algorithm> #include <algorithm>
#include <exception> #include <exception>
#include <utility> #include <utility>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_agv_service.h" #include "service/grpc/server/include/grpc_agv_service.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -11,10 +11,10 @@
#include <google/protobuf/util/time_util.h> #include <google/protobuf/util/time_util.h>
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
using google::protobuf::util::TimeUtil; using google::protobuf::util::TimeUtil;
@ -668,7 +668,7 @@ grpc::Status gRPCAgvServiceImpl::emergencyStop(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/emergencyStop", request, response, "/cmvr.api.AgvService/emergencyStop", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -696,7 +696,7 @@ grpc::Status gRPCAgvServiceImpl::clearFault(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/clearFault", request, response, "/cmvr.api.AgvService/clearFault", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -727,7 +727,7 @@ grpc::Status gRPCAgvServiceImpl::navigateToPose(grpc::ServerContext* context,
api::AgvNavigateToPoseCommand_Feedback* response) api::AgvNavigateToPoseCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/navigateToPose", request, response, "/cmvr.api.AgvService/navigateToPose", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
if (context && context->IsCancelled()) { if (context && context->IsCancelled()) {
@ -766,7 +766,7 @@ grpc::Status gRPCAgvServiceImpl::navigateToStation(grpc::ServerContext* context,
api::AgvNavigateToStationCommand_Feedback* response) api::AgvNavigateToStationCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/navigateToStation", request, response, "/cmvr.api.AgvService/navigateToStation", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
if (context && context->IsCancelled()) { if (context && context->IsCancelled()) {
@ -806,7 +806,7 @@ grpc::Status gRPCAgvServiceImpl::followPath(grpc::ServerContext* context,
api::AgvFollowPathCommand_Feedback* response) api::AgvFollowPathCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/followPath", request, response, "/cmvr.api.AgvService/followPath", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
if (context && context->IsCancelled()) { if (context && context->IsCancelled()) {
@ -854,7 +854,7 @@ grpc::Status gRPCAgvServiceImpl::translate(
api::AgvTranslateCommand_Feedback* response) api::AgvTranslateCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/translate", request, response, "/cmvr.api.AgvService/translate", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
if (context && context->IsCancelled()) { if (context && context->IsCancelled()) {
@ -892,7 +892,7 @@ grpc::Status gRPCAgvServiceImpl::pauseNavigation(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/pauseNavigation", request, response, "/cmvr.api.AgvService/pauseNavigation", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -924,7 +924,7 @@ grpc::Status gRPCAgvServiceImpl::resumeNavigation(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/resumeNavigation", request, response, "/cmvr.api.AgvService/resumeNavigation", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -956,7 +956,7 @@ grpc::Status gRPCAgvServiceImpl::cancelNavigation(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/cancelNavigation", request, response, "/cmvr.api.AgvService/cancelNavigation", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -984,7 +984,7 @@ grpc::Status gRPCAgvServiceImpl::setVelocity(grpc::ServerContext* context,
api::AgvSetVelocityCommand_Feedback* response) api::AgvSetVelocityCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/setVelocity", request, response, "/cmvr.api.AgvService/setVelocity", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -1015,7 +1015,7 @@ grpc::Status gRPCAgvServiceImpl::stopVelocityControl(grpc::ServerContext* contex
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/stopVelocityControl", request, response, "/cmvr.api.AgvService/stopVelocityControl", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -1095,7 +1095,7 @@ grpc::Status gRPCAgvServiceImpl::switchMap(grpc::ServerContext* context,
api::AgvMapCommand_Feedback* response) api::AgvMapCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/switchMap", request, response, "/cmvr.api.AgvService/switchMap", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -1126,7 +1126,7 @@ grpc::Status gRPCAgvServiceImpl::uploadMap(grpc::ServerContext* context,
api::AgvMapCommand_Feedback* response) api::AgvMapCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/uploadMap", request, response, "/cmvr.api.AgvService/uploadMap", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -1181,7 +1181,7 @@ grpc::Status gRPCAgvServiceImpl::startMapping(grpc::ServerContext* context,
api::AgvStartMappingCommand_Feedback* response) api::AgvStartMappingCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/startMapping", request, response, "/cmvr.api.AgvService/startMapping", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -1292,7 +1292,7 @@ grpc::Status gRPCAgvServiceImpl::stopMapping(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.AgvService/stopMapping", request, response, "/cmvr.api.AgvService/stopMapping", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_arm_service.h" #include "service/grpc/server/include/grpc_arm_service.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -7,10 +7,10 @@
#include <google/protobuf/util/time_util.h> #include <google/protobuf/util/time_util.h>
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
using google::protobuf::util::TimeUtil; using google::protobuf::util::TimeUtil;
@ -381,7 +381,7 @@ grpc::Status gRPCArmServiceImpl::torqueOff(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/torqueOff", request, response, "/cmvr.api.ArmService/torqueOff", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -415,7 +415,7 @@ grpc::Status gRPCArmServiceImpl::torqueOn(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/torqueOn", request, response, "/cmvr.api.ArmService/torqueOn", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -471,7 +471,7 @@ grpc::Status gRPCArmServiceImpl::moveJ(grpc::ServerContext* context,
api::MoveJ_Response* response) api::MoveJ_Response* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/moveJ", request, response, "/cmvr.api.ArmService/moveJ", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -511,7 +511,7 @@ grpc::Status gRPCArmServiceImpl::moveL(grpc::ServerContext* context,
api::MoveL_Response* response) api::MoveL_Response* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/moveL", request, response, "/cmvr.api.ArmService/moveL", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -553,7 +553,7 @@ grpc::Status gRPCArmServiceImpl::speedJ(grpc::ServerContext* context,
api::SpeedJ_Response* response) api::SpeedJ_Response* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/speedJ", request, response, "/cmvr.api.ArmService/speedJ", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -593,7 +593,7 @@ grpc::Status gRPCArmServiceImpl::speedL(grpc::ServerContext* context,
api::SpeedL_Response* response) api::SpeedL_Response* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/speedL", request, response, "/cmvr.api.ArmService/speedL", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -634,7 +634,7 @@ grpc::Status gRPCArmServiceImpl::servoJ(grpc::ServerContext* context,
api::ServoJ_Response* response) api::ServoJ_Response* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/servoJ", request, response, "/cmvr.api.ArmService/servoJ", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -670,7 +670,7 @@ grpc::Status gRPCArmServiceImpl::stopMotion(grpc::ServerContext* context,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/stopMotion", request, response, "/cmvr.api.ArmService/stopMotion", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();
@ -763,7 +763,7 @@ grpc::Status gRPCArmServiceImpl::calibrateZeroQ(grpc::ServerContext* context,
api::CalibrateZeroQ_Response* response) api::CalibrateZeroQ_Response* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/calibrateZeroQ", request, response, "/cmvr.api.ArmService/calibrateZeroQ", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -821,7 +821,7 @@ grpc::Status gRPCArmServiceImpl::ExecuteJsonCommand(
api::JsonDeviceCommand_Feedback* response) api::JsonDeviceCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/ExecuteJsonCommand", request, response, "/cmvr.api.ArmService/ExecuteJsonCommand", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->header().device_id(); const std::string device_id = request->header().device_id();
@ -870,7 +870,7 @@ grpc::Status gRPCArmServiceImpl::clearFault(grpc::ServerContext *context,
cmvr::api::CommandHeader_Feedback *response) cmvr::api::CommandHeader_Feedback *response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.ArmService/clearFault", request, response, "/cmvr.api.ArmService/clearFault", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const std::string device_id = request->device_id(); const std::string device_id = request->device_id();

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_arm_teleop_service.h" #include "service/grpc/server/include/grpc_arm_teleop_service.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
@ -14,9 +14,9 @@
#include <unordered_set> #include <unordered_set>
#include <utility> #include <utility>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
namespace cmvr::service { namespace cmvr::service {
@ -440,7 +440,7 @@ ArmTeleopServiceImpl::ArmTeleopServiceImpl(
std::shared_ptr<ArmTeleopBackend> backend, std::shared_ptr<ArmTeleopBackend> backend,
control::ControlAuthorityManager* authority, control::ControlAuthorityManager* authority,
std::shared_ptr<GrpcSecurityGateway> security_gateway, std::shared_ptr<GrpcSecurityGateway> security_gateway,
safety::SafetyCoordinator* safety_coordinator) safety::SafetyManager* safety_manager)
: backend_(std::move(backend)), : backend_(std::move(backend)),
authority_( authority_(
authority ? authority authority ? authority
@ -448,7 +448,7 @@ ArmTeleopServiceImpl::ArmTeleopServiceImpl(
security_gateway_(security_gateway security_gateway_(security_gateway
? std::move(security_gateway) ? std::move(security_gateway)
: makeDefaultGrpcSecurityGateway()), : makeDefaultGrpcSecurityGateway()),
safety_coordinator_(safety_coordinator) safety_manager_(safety_manager)
{ {
if (!backend_) { if (!backend_) {
backend_ = makeDisabledArmTeleopBackend(); backend_ = makeDisabledArmTeleopBackend();
@ -541,7 +541,7 @@ grpc::Status ArmTeleopServiceImpl::Teleoperate(
}); });
std::optional<GrpcStreamingSafetySession> safety_session; std::optional<GrpcStreamingSafetySession> safety_session;
if (safety_coordinator_) { if (safety_manager_) {
GrpcStreamingSafetyOpen safety_open; GrpcStreamingSafetyOpen safety_open;
safety_open.full_method_name = safety_open.full_method_name =
"/cmvr.api.armteleop.v1.ArmTeleopService/Teleoperate"; "/cmvr.api.armteleop.v1.ArmTeleopService/Teleoperate";
@ -550,7 +550,7 @@ grpc::Status ArmTeleopServiceImpl::Teleoperate(
safety_open.authority_generation = control_lease.generation; safety_open.authority_generation = control_lease.generation;
safety_open.deadline = cmvr_grpc_call_guard.context().deadline; safety_open.deadline = cmvr_grpc_call_guard.context().deadline;
safety_session.emplace( safety_session.emplace(
*safety_coordinator_, *safety_manager_,
cmvr_grpc_call_guard.context(), cmvr_grpc_call_guard.context(),
std::move(safety_open)); std::move(safety_open));
if (!safety_session->admitted()) { if (!safety_session->admitted()) {

View File

@ -1,10 +1,10 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "manager/media_source_hub/include/device_media_source_adapter.h" #include "manager/media_source_manager/include/device_media_source_adapter.h"
#include "service/grpc/include/camera_operational_activity_registry.h" #include "service/grpc/server/include/camera_operational_activity_registry.h"
#include "service/grpc/include/camera_ptz_activity_registry.h" #include "service/grpc/server/include/camera_ptz_activity_registry.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
// //
// Created by xtkuang on 2025/6/1. // Created by xtkuang on 2025/6/1.
// //
@ -72,7 +72,7 @@ bool toPtzCommand(cmvr::api::ControlPtzCommand_Command command, PtzCommand& out)
} }
// The legacy depth/RGBD RPCs acquire the camera's shared producer directly // The legacy depth/RGBD RPCs acquire the camera's shared producer directly
// instead of going through MediaSourceHub. Keep that lease exception-safe: // instead of going through MediaSourceManager. Keep that lease exception-safe:
// cancellation, a failed Write(), or any conversion error must release exactly // cancellation, a failed Write(), or any conversion error must release exactly
// the one startStreaming() reference acquired by this call. // the one startStreaming() reference acquired by this call.
class CameraStreamingLease final { class CameraStreamingLease final {
@ -80,7 +80,7 @@ public:
CameraStreamingLease( CameraStreamingLease(
std::shared_ptr<AbstractCamera> camera, std::shared_ptr<AbstractCamera> camera,
const MediaActivityCoordinator::Session& session, const MediaActivityCoordinator::Session& session,
cmvr::safety::SafetyCoordinator& coordinator) cmvr::safety::SafetyManager& coordinator)
: camera_(std::move(camera)) { : camera_(std::move(camera)) {
(void)session.runIfCurrent([this, &coordinator] { (void)session.runIfCurrent([this, &coordinator] {
auto dispatch = cmvr::media::beginMediaSourceStartDispatch( auto dispatch = cmvr::media::beginMediaSourceStartDispatch(
@ -184,7 +184,7 @@ grpc::Status gRPCCameraServiceImpl::StartCamera(grpc::ServerContext* context,
const api::StartCameraCommand_Request* request, api::StartCameraCommand_Feedback* response) const api::StartCameraCommand_Request* request, api::StartCameraCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.CameraService/StartCamera", request, response, "/cmvr.api.CameraService/StartCamera", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
auto media_session = globalMediaActivityCoordinator().beginSession(); auto media_session = globalMediaActivityCoordinator().beginSession();
@ -234,7 +234,7 @@ grpc::Status gRPCCameraServiceImpl::StopCamera(grpc::ServerContext* context,
const api::StopCameraCommand_Request* request, api::StopCameraCommand_Feedback* response) const api::StopCameraCommand_Request* request, api::StopCameraCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.CameraService/StopCamera", request, response, "/cmvr.api.CameraService/StopCamera", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -502,7 +502,7 @@ grpc::Status gRPCCameraServiceImpl::StartRecording(grpc::ServerContext* context,
const api::StartCameraRecordingCommand_Request* request, api::StartCameraRecordingCommand_Feedback* response) const api::StartCameraRecordingCommand_Request* request, api::StartCameraRecordingCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.CameraService/StartRecording", request, response, "/cmvr.api.CameraService/StartRecording", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
auto media_session = globalMediaActivityCoordinator().beginSession(); auto media_session = globalMediaActivityCoordinator().beginSession();
@ -540,7 +540,7 @@ grpc::Status gRPCCameraServiceImpl::StopRecording(grpc::ServerContext* context,
const api::StopCameraRecordingCommand_Request* request, api::StopCameraRecordingCommand_Feedback* response) const api::StopCameraRecordingCommand_Request* request, api::StopCameraRecordingCommand_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.CameraService/StopRecording", request, response, "/cmvr.api.CameraService/StopRecording", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -581,7 +581,7 @@ grpc::Status gRPCCameraServiceImpl::ControlPtz(grpc::ServerContext* context,
} }
return executeServerDerivedGrpcCommand( return executeServerDerivedGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.CameraService/ControlPtz", std::move(effective_policy), "/cmvr.api.CameraService/ControlPtz", std::move(effective_policy),
request, response, request, response,
[this, request, response](GrpcCommandTransaction& command_tx) { [this, request, response](GrpcCommandTransaction& command_tx) {
@ -666,7 +666,7 @@ grpc::Status gRPCCameraServiceImpl::GetDepthImageStream(grpc::ServerContext* con
return grpc::Status::OK; return grpc::Status::OK;
} }
CameraStreamingLease stream_lease( CameraStreamingLease stream_lease(
dev, media_session, dmgr_.safetyCoordinator()); dev, media_session, dmgr_.safetyManager());
if (!stream_lease) { if (!stream_lease) {
api::GetDepthImageStreamCommand_Feedback response; api::GetDepthImageStreamCommand_Feedback response;
response.mutable_header()->set_success(false); response.mutable_header()->set_success(false);
@ -763,7 +763,7 @@ grpc::Status gRPCCameraServiceImpl::GetRGBDImagesStream(grpc::ServerContext* con
return grpc::Status::OK; return grpc::Status::OK;
} }
CameraStreamingLease stream_lease( CameraStreamingLease stream_lease(
dev, media_session, dmgr_.safetyCoordinator()); dev, media_session, dmgr_.safetyManager());
if (!stream_lease) { if (!stream_lease) {
api::GetRGBDImagesStreamCommand_Feedback response; api::GetRGBDImagesStreamCommand_Feedback response;
response.mutable_header()->set_success(false); response.mutable_header()->set_success(false);
@ -867,7 +867,7 @@ grpc::Status gRPCCameraServiceImpl::GetRGBImageStream(grpc::ServerContext* conte
stream->Write(response); stream->Write(response);
return grpc::Status::OK; return grpc::Status::OK;
} }
auto& media_hub = cmvr::media::globalMediaSourceHub(); auto& media_hub = cmvr::media::globalMediaSourceManager();
const std::string track_id = cmvr::media::cameraColorTrackId(dev_id); const std::string track_id = cmvr::media::cameraColorTrackId(dev_id);
bool source_ready = false; bool source_ready = false;
const bool source_setup_allowed = media_session.runIfCurrent([&] { const bool source_setup_allowed = media_session.runIfCurrent([&] {
@ -885,15 +885,15 @@ grpc::Status gRPCCameraServiceImpl::GetRGBImageStream(grpc::ServerContext* conte
return grpc::Status::OK; return grpc::Status::OK;
} }
auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch( auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch(
dmgr_.safetyCoordinator(), dev_id); dmgr_.safetyManager(), dev_id);
auto subscription = source_dispatch.acquired() auto subscription = source_dispatch.acquired()
? media_hub.subscribe( ? media_hub.subscribe(
track_id, track_id,
cmvr::media::MediaSourceHub::StartPosition::NEXT_PUBLISHED, cmvr::media::MediaSourceManager::StartPosition::NEXT_PUBLISHED,
[context, &media_session] { [context, &media_session] {
return context->IsCancelled() || media_session.cancelled(); return context->IsCancelled() || media_session.cancelled();
}) })
: cmvr::media::MediaSourceHub::Subscription{}; : cmvr::media::MediaSourceManager::Subscription{};
if (!subscription) { if (!subscription) {
api::GetRGBImageStreamCommand_Feedback response; api::GetRGBImageStreamCommand_Feedback response;
response.mutable_header()->set_success(false); response.mutable_header()->set_success(false);

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include <algorithm> #include <algorithm>
#include <array> #include <array>
@ -15,7 +15,7 @@
#include <google/protobuf/io/zero_copy_stream_impl_lite.h> #include <google/protobuf/io/zero_copy_stream_impl_lite.h>
#include <google/protobuf/util/time_util.h> #include <google/protobuf/util/time_util.h>
#include "service/grpc/include/grpc_safety_proto.h" #include "service/grpc/server/include/grpc_safety_proto.h"
namespace cmvr::service { namespace cmvr::service {
@ -145,7 +145,7 @@ std::uint64_t stableHash(
} }
bool isEnforced( bool isEnforced(
const safety::SafetyCoordinatorConfig& config, const safety::SafetyManagerConfig& config,
const std::string& device_id) const std::string& device_id)
{ {
switch (config.enforcement_mode) { switch (config.enforcement_mode) {
@ -316,7 +316,7 @@ grpc::Status grpcStatusForSafetyReason(
} }
GrpcStreamingSafetySession::GrpcStreamingSafetySession( GrpcStreamingSafetySession::GrpcStreamingSafetySession(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const GrpcRequestContext& request_context, const GrpcRequestContext& request_context,
GrpcStreamingSafetyOpen open) GrpcStreamingSafetyOpen open)
: coordinator_(&coordinator), : coordinator_(&coordinator),
@ -469,7 +469,7 @@ std::string deterministicGrpcPayloadHash(
} }
GrpcCommandTransaction::GrpcCommandTransaction( GrpcCommandTransaction::GrpcCommandTransaction(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
GrpcRequestContext request_context, GrpcRequestContext request_context,
GrpcMethodPolicy method_policy, GrpcMethodPolicy method_policy,
const google::protobuf::Message& request, const google::protobuf::Message& request,
@ -1166,7 +1166,7 @@ void GrpcCommandTransaction::abandon_() noexcept
grpc::Status executeRegisteredGrpcCommand( grpc::Status executeRegisteredGrpcCommand(
const std::shared_ptr<GrpcSecurityGateway>& gateway, const std::shared_ptr<GrpcSecurityGateway>& gateway,
grpc::ServerContext* server_context, grpc::ServerContext* server_context,
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::string& full_method_name, const std::string& full_method_name,
const google::protobuf::Message* request, const google::protobuf::Message* request,
google::protobuf::Message* response, google::protobuf::Message* response,
@ -1208,7 +1208,7 @@ grpc::Status executeRegisteredGrpcCommand(
grpc::Status executeServerDerivedGrpcCommand( grpc::Status executeServerDerivedGrpcCommand(
const std::shared_ptr<GrpcSecurityGateway>& gateway, const std::shared_ptr<GrpcSecurityGateway>& gateway,
grpc::ServerContext* server_context, grpc::ServerContext* server_context,
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::string& full_method_name, const std::string& full_method_name,
GrpcMethodPolicy effective_policy, GrpcMethodPolicy effective_policy,
const google::protobuf::Message* request, const google::protobuf::Message* request,

View File

@ -15,11 +15,11 @@
#include <vector> #include <vector>
#include "devices/dexhand/rh56dftp_dexhand/include/rh56dftp_dexhand.h" #include "devices/dexhand/rh56dftp_dexhand/include/rh56dftp_dexhand.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
using namespace std; using namespace std;
using namespace cmvr::service; using namespace cmvr::service;
@ -367,7 +367,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandPos(grpc::ServerContext* context
, const cmvr::api::SetDexHandPositionsCommand_Request* request , const cmvr::api::SetDexHandPositionsCommand_Request* request
, cmvr::api::SetDexHandPositionsCommand_Feedback* response) { , cmvr::api::SetDexHandPositionsCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.DexHandService/SetDexHandPos", request, response, "/cmvr.api.DexHandService/SetDexHandPos", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -415,7 +415,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandAngle(grpc::ServerContext* contex
, const cmvr::api::SetDexHandAnglesCommand_Request* request , const cmvr::api::SetDexHandAnglesCommand_Request* request
, cmvr::api::SetDexHandAnglesCommand_Feedback* response) { , cmvr::api::SetDexHandAnglesCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.DexHandService/SetDexHandAngle", request, response, "/cmvr.api.DexHandService/SetDexHandAngle", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -477,7 +477,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandForce(grpc::ServerContext* contex
, const cmvr::api::SetDexHandForceCommand_Request* request , const cmvr::api::SetDexHandForceCommand_Request* request
, cmvr::api::SetDexHandForceCommand_Feedback* response) { , cmvr::api::SetDexHandForceCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.DexHandService/SetDexHandForce", request, response, "/cmvr.api.DexHandService/SetDexHandForce", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -525,7 +525,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandSpeed(grpc::ServerContext* contex
, const cmvr::api::SetDexHandSpeedCommand_Request* request , const cmvr::api::SetDexHandSpeedCommand_Request* request
, cmvr::api::SetDexHandSpeedCommand_Feedback* response) { , cmvr::api::SetDexHandSpeedCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.DexHandService/SetDexHandSpeed", request, response, "/cmvr.api.DexHandService/SetDexHandSpeed", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -573,7 +573,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandPresetAct(grpc::ServerContext* co
, const cmvr::api::SetDexHandPresetActCommand_Request* request , const cmvr::api::SetDexHandPresetActCommand_Request* request
, cmvr::api::SetDexHandPresetActCommand_Feedback* response) { , cmvr::api::SetDexHandPresetActCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.DexHandService/SetDexHandPresetAct", request, response, "/cmvr.api.DexHandService/SetDexHandPresetAct", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_error_logging_interceptor.h" #include "service/grpc/server/include/grpc_error_logging_interceptor.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>

View File

@ -5,10 +5,10 @@
#include "manager/device_manager/include/device_manager.h" #include "manager/device_manager/include/device_manager.h"
#include "common/base/grpc_utils.h" #include "common/base/grpc_utils.h"
#include "biohead/biohead_esp32/include/biohead_esp32.h" #include "biohead/biohead_esp32/include/biohead_esp32.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include <chrono> #include <chrono>
#include <algorithm> #include <algorithm>
#include <iostream> #include <iostream>
@ -65,7 +65,7 @@ grpc::Status executeHeadOperationalCommand(
Operation&& operation) Operation&& operation)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway, context, device_manager.safetyCoordinator(), security_gateway, context, device_manager.safetyManager(),
full_method_name, request, response, full_method_name, request, response,
[&device_manager, request, response, rpc_name, [&device_manager, request, response, rpc_name,
operation = std::forward<Operation>(operation)]( operation = std::forward<Operation>(operation)](
@ -245,7 +245,7 @@ grpc::Status gRPCMBioHeadServiceImpl::StreamExpression(
safety_open.deadline = safety_open.deadline =
cmvr_grpc_call_guard.context().deadline; cmvr_grpc_call_guard.context().deadline;
safety_session.emplace( safety_session.emplace(
dmgr_.safetyCoordinator(), dmgr_.safetyManager(),
cmvr_grpc_call_guard.context(), cmvr_grpc_call_guard.context(),
std::move(safety_open)); std::move(safety_open));
if (!safety_session->admitted()) { if (!safety_session->admitted()) {
@ -417,7 +417,7 @@ grpc::Status gRPCMBioHeadServiceImpl::EmergencyStop(
EmergencyStop_Feedback* response) EmergencyStop_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.BioHeadService/EmergencyStop", request, response, "/cmvr.api.BioHeadService/EmergencyStop", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const string dev_id = request->header().device_id(); const string dev_id = request->header().device_id();
@ -460,7 +460,7 @@ grpc::Status gRPCMBioHeadServiceImpl::SpeakStart(grpc::ServerContext* context, c
grpc::Status gRPCMBioHeadServiceImpl::SpeakStop(grpc::ServerContext* context, const cmvr::api::SpeakStop_Request* request, cmvr::api::SpeakStop_Feedback* response) grpc::Status gRPCMBioHeadServiceImpl::SpeakStop(grpc::ServerContext* context, const cmvr::api::SpeakStop_Request* request, cmvr::api::SpeakStop_Feedback* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.BioHeadService/SpeakStop", request, response, "/cmvr.api.BioHeadService/SpeakStop", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
const string dev_id = request->header().device_id(); const string dev_id = request->header().device_id();

View File

@ -14,9 +14,9 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "manager/task_manager/include/task_manager.h" #include "manager/task_manager/include/task_manager.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include "task/touch_screen_task/include/touch_screen_task.h" #include "task/touch_screen_task/include/touch_screen_task.h"
@ -92,7 +92,7 @@ grpc::Status gRPCHlcServiceImpl::touch(
normalized_request.mutable_header()->set_device_id(arm_id); normalized_request.mutable_header()->set_device_id(arm_id);
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.HlcService/touch", &normalized_request, response, "/cmvr.api.HlcService/touch", &normalized_request, response,
[context, request, response, touch_task]( [context, request, response, touch_task](
GrpcCommandTransaction& command) { GrpcCommandTransaction& command) {

View File

@ -1,8 +1,8 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "manager/media_source_hub/include/device_media_source_adapter.h" #include "manager/media_source_manager/include/device_media_source_adapter.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include <algorithm> #include <algorithm>
#include <chrono> #include <chrono>
#include <cstdint> #include <cstdint>
@ -84,7 +84,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::GetStatus(grpc::ServerContext* context,
grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context,
const api::StartMicRecordingCommand_Request* request, api::StartMicRecordingCommand_Feedback* response) { const api::StartMicRecordingCommand_Request* request, api::StartMicRecordingCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MicPhoneService/StartRecord", request, response, "/cmvr.api.MicPhoneService/StartRecord", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
auto media_session = globalMediaActivityCoordinator().beginSession(); auto media_session = globalMediaActivityCoordinator().beginSession();
@ -131,7 +131,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context
grpc::Status gRPCMicroPhoneServiceImpl::StopRecord(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::StopRecord(grpc::ServerContext* context,
const api::StopMicRecordingCommand_Request* request, api::StopMicRecordingCommand_Feedback* response) { const api::StopMicRecordingCommand_Request* request, api::StopMicRecordingCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MicPhoneService/StopRecord", request, response, "/cmvr.api.MicPhoneService/StopRecord", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -154,7 +154,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StopRecord(grpc::ServerContext* context,
grpc::Status gRPCMicroPhoneServiceImpl::PauseRecord(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::PauseRecord(grpc::ServerContext* context,
const api::PauseMicRecordingCommand_Request* request, api::PauseMicRecordingCommand_Feedback* response) { const api::PauseMicRecordingCommand_Request* request, api::PauseMicRecordingCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MicPhoneService/PauseRecord", request, response, "/cmvr.api.MicPhoneService/PauseRecord", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -177,7 +177,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::PauseRecord(grpc::ServerContext* context
grpc::Status gRPCMicroPhoneServiceImpl::ResumeRecord(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::ResumeRecord(grpc::ServerContext* context,
const api::ResumeMicRecordingCommand_Request* request, api::ResumeMicRecordingCommand_Feedback* response) { const api::ResumeMicRecordingCommand_Request* request, api::ResumeMicRecordingCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MicPhoneService/ResumeRecord", request, response, "/cmvr.api.MicPhoneService/ResumeRecord", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
auto media_session = globalMediaActivityCoordinator().beginSession(); auto media_session = globalMediaActivityCoordinator().beginSession();
@ -240,7 +240,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context
return grpc::Status::OK; return grpc::Status::OK;
} }
auto& media_hub = cmvr::media::globalMediaSourceHub(); auto& media_hub = cmvr::media::globalMediaSourceManager();
const std::string track_id = cmvr::media::microphoneTrackId(dev_id); const std::string track_id = cmvr::media::microphoneTrackId(dev_id);
bool source_ready = false; bool source_ready = false;
const bool source_setup_allowed = media_session.runIfCurrent([&] { const bool source_setup_allowed = media_session.runIfCurrent([&] {
@ -260,15 +260,15 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context
} }
auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch( auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch(
dmgr_.safetyCoordinator(), dev_id); dmgr_.safetyManager(), dev_id);
auto subscription = source_dispatch.acquired() auto subscription = source_dispatch.acquired()
? media_hub.subscribe( ? media_hub.subscribe(
track_id, track_id,
cmvr::media::MediaSourceHub::StartPosition::NEXT_PUBLISHED, cmvr::media::MediaSourceManager::StartPosition::NEXT_PUBLISHED,
[context, &media_session] { [context, &media_session] {
return context->IsCancelled() || media_session.cancelled(); return context->IsCancelled() || media_session.cancelled();
}) })
: cmvr::media::MediaSourceHub::Subscription{}; : cmvr::media::MediaSourceManager::Subscription{};
if (!subscription) { if (!subscription) {
api::StreamMicAudioCommand_Feedback feedback; api::StreamMicAudioCommand_Feedback feedback;
feedback.mutable_header()->set_success(false); feedback.mutable_header()->set_success(false);
@ -356,7 +356,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context
grpc::Status gRPCMicroPhoneServiceImpl::SetVolume(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::SetVolume(grpc::ServerContext* context,
const api::SetMicPhoneVolumeCommand_Request* request, api::SetMicPhoneVolumeCommand_Feedback* response) { const api::SetMicPhoneVolumeCommand_Request* request, api::SetMicPhoneVolumeCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MicPhoneService/SetVolume", request, response, "/cmvr.api.MicPhoneService/SetVolume", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_motor_service.h" #include "service/grpc/server/include/grpc_motor_service.h"
#include <algorithm> #include <algorithm>
#include <chrono> #include <chrono>
@ -15,9 +15,9 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "devices/motor/manager/include/motor_manager.h" #include "devices/motor/manager/include/motor_manager.h"
#include "manager/device_manager/include/device_manager.h" #include "manager/device_manager/include/device_manager.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
@ -870,7 +870,7 @@ grpc::Status gRPCMotorServiceImpl::setZero(
api::MotorCommandResponse* response) api::MotorCommandResponse* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MotorService/setZero", request, response, "/cmvr.api.MotorService/setZero", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
return runUnaryGuarded( return runUnaryGuarded(
@ -892,7 +892,7 @@ grpc::Status gRPCMotorServiceImpl::moveToZero(
api::MotorCommandResponse* response) api::MotorCommandResponse* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MotorService/moveToZero", request, response, "/cmvr.api.MotorService/moveToZero", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
return runUnaryGuarded( return runUnaryGuarded(
@ -914,7 +914,7 @@ grpc::Status gRPCMotorServiceImpl::profilePosition(
api::MotorCommandResponse* response) api::MotorCommandResponse* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MotorService/profilePosition", request, response, "/cmvr.api.MotorService/profilePosition", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
return runUnaryGuarded( return runUnaryGuarded(
@ -936,7 +936,7 @@ grpc::Status gRPCMotorServiceImpl::profileVelocity(
api::MotorCommandResponse* response) api::MotorCommandResponse* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MotorService/profileVelocity", request, response, "/cmvr.api.MotorService/profileVelocity", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
return runUnaryGuarded( return runUnaryGuarded(
@ -1004,7 +1004,7 @@ grpc::Status gRPCMotorServiceImpl::emergencyStop(
api::MotorCommandResponse* response) api::MotorCommandResponse* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MotorService/emergencyStop", request, response, "/cmvr.api.MotorService/emergencyStop", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
return runUnaryGuarded( return runUnaryGuarded(
@ -1039,7 +1039,7 @@ grpc::Status gRPCMotorServiceImpl::setEnabled(
api::MotorCommandResponse* response) api::MotorCommandResponse* response)
{ {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.MotorService/setEnabled", request, response, "/cmvr.api.MotorService/setEnabled", request, response,
[this, context, request, response](GrpcCommandTransaction& command) { [this, context, request, response](GrpcCommandTransaction& command) {
return runUnaryGuarded( return runUnaryGuarded(
@ -1821,7 +1821,7 @@ grpc::Status gRPCMotorServiceImpl::streamCyclicPositionImpl(
safety_open.authority_generation = generation; safety_open.authority_generation = generation;
safety_open.deadline = request_context.deadline; safety_open.deadline = request_context.deadline;
GrpcStreamingSafetySession safety_session( GrpcStreamingSafetySession safety_session(
dmgr_.safetyCoordinator(), request_context, dmgr_.safetyManager(), request_context,
std::move(safety_open)); std::move(safety_open));
if (!safety_session.admitted()) { if (!safety_session.admitted()) {
return safety_session.status(); return safety_session.status();
@ -1980,7 +1980,7 @@ grpc::Status gRPCMotorServiceImpl::streamCyclicVelocityImpl(
safety_open.authority_generation = generation; safety_open.authority_generation = generation;
safety_open.deadline = request_context.deadline; safety_open.deadline = request_context.deadline;
GrpcStreamingSafetySession safety_session( GrpcStreamingSafetySession safety_session(
dmgr_.safetyCoordinator(), request_context, dmgr_.safetyManager(), request_context,
std::move(safety_open)); std::move(safety_open));
if (!safety_session.admitted()) { if (!safety_session.admitted()) {
return safety_session.status(); return safety_session.status();

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_recovery_audit.h" #include "service/grpc/server/include/grpc_recovery_audit.h"
#include <cerrno> #include <cerrno>
#include <cstring> #include <cstring>

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_robot_arm_teleop_backend.h" #include "service/grpc/server/include/grpc_robot_arm_teleop_backend.h"
#include <algorithm> #include <algorithm>
#include <chrono> #include <chrono>

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_safety_participants.h" #include "service/grpc/server/include/grpc_safety_participants.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
@ -12,16 +12,16 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "manager/media_source_hub/include/device_media_source_adapter.h" #include "manager/media_source_manager/include/device_media_source_adapter.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
#include "manager/task_manager/include/task_manager.h" #include "manager/task_manager/include/task_manager.h"
#include "service/action/include/action_queue_executor.h" #include "service/grpc/action/include/action_queue_executor.h"
#include "service/grpc/include/camera_operational_activity_registry.h" #include "service/grpc/server/include/camera_operational_activity_registry.h"
#include "service/grpc/include/camera_ptz_activity_registry.h" #include "service/grpc/server/include/camera_ptz_activity_registry.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/motor_activity_coordinator.h" #include "service/grpc/server/include/motor_activity_coordinator.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include "service/stop_all/include/stop_operation_dispatcher.h" #include "service/grpc/stop_all/include/stop_operation_dispatcher.h"
namespace cmvr::service { namespace cmvr::service {
@ -966,7 +966,7 @@ std::vector<DeferredStopOperation> mediaSourceStopOperations()
const auto merge = [&unique_ids](const std::vector<std::string>& ids) { const auto merge = [&unique_ids](const std::vector<std::string>& ids) {
unique_ids.insert(ids.begin(), ids.end()); unique_ids.insert(ids.begin(), ids.end());
}; };
merge(media::globalMediaSourceHub().trackedSourceIds()); merge(media::globalMediaSourceManager().trackedSourceIds());
merge(globalCameraOperationalActivityRegistry().trackedDeviceIds()); merge(globalCameraOperationalActivityRegistry().trackedDeviceIds());
std::vector<DeferredStopOperation> operations; std::vector<DeferredStopOperation> operations;
@ -976,7 +976,7 @@ std::vector<DeferredStopOperation> mediaSourceStopOperations()
"media-source:" + id, "media-source:" + id,
[id] { [id] {
std::vector<std::string> failures; std::vector<std::string> failures;
bool stopped = media::globalMediaSourceHub() bool stopped = media::globalMediaSourceManager()
.stopSourcesForDevice(id, &failures); .stopSourcesForDevice(id, &failures);
if (!globalCameraOperationalActivityRegistry() if (!globalCameraOperationalActivityRegistry()
.stopActivitiesForDevice(id, &failures)) { .stopActivitiesForDevice(id, &failures)) {
@ -996,11 +996,11 @@ struct SharedParticipants {
}; };
std::mutex shared_participants_mutex; std::mutex shared_participants_mutex;
std::unordered_map<safety::SafetyCoordinator*, SharedParticipants> std::unordered_map<safety::SafetyManager*, SharedParticipants>
shared_participants; shared_participants;
void acquireSharedParticipants( void acquireSharedParticipants(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
const std::shared_ptr<StopOperationDispatcher>& dispatcher) const std::shared_ptr<StopOperationDispatcher>& dispatcher)
{ {
std::lock_guard lock(shared_participants_mutex); std::lock_guard lock(shared_participants_mutex);
@ -1057,7 +1057,7 @@ void acquireSharedParticipants(
shared_participants.emplace(&coordinator, std::move(entry)); shared_participants.emplace(&coordinator, std::move(entry));
} }
void releaseSharedParticipants(safety::SafetyCoordinator& coordinator) noexcept void releaseSharedParticipants(safety::SafetyManager& coordinator) noexcept
{ {
try { try {
std::lock_guard lock(shared_participants_mutex); std::lock_guard lock(shared_participants_mutex);
@ -1078,7 +1078,7 @@ void releaseSharedParticipants(safety::SafetyCoordinator& coordinator) noexcept
} // namespace } // namespace
struct GrpcSafetyParticipantRegistration::Impl { struct GrpcSafetyParticipantRegistration::Impl {
safety::SafetyCoordinator* coordinator{nullptr}; safety::SafetyManager* coordinator{nullptr};
std::string action_participant_id; std::string action_participant_id;
bool shared_acquired{false}; bool shared_acquired{false};
@ -1112,7 +1112,7 @@ GrpcSafetyParticipantRegistration::operator=(
std::unique_ptr<GrpcSafetyParticipantRegistration> std::unique_ptr<GrpcSafetyParticipantRegistration>
registerGrpcSafetyParticipants( registerGrpcSafetyParticipants(
safety::SafetyCoordinator& coordinator, safety::SafetyManager& coordinator,
std::shared_ptr<ActionQueueExecutor> action_queue, std::shared_ptr<ActionQueueExecutor> action_queue,
std::shared_ptr<StopOperationDispatcher> stop_dispatcher) std::shared_ptr<StopOperationDispatcher> stop_dispatcher)
{ {

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_safety_proto.h" #include "service/grpc/server/include/grpc_safety_proto.h"
#include <cstdint> #include <cstdint>

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>

View File

@ -1,7 +1,7 @@
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "service/grpc/include/grpc_command_transaction.h" #include "service/grpc/server/include/grpc_command_transaction.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include <memory> #include <memory>
#include <optional> #include <optional>
#include <utility> #include <utility>
@ -147,7 +147,7 @@ grpc::Status gRPCSpeakerServiceImpl::GetStatus(grpc::ServerContext* context,
grpc::Status gRPCSpeakerServiceImpl::PlayAudio(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::PlayAudio(grpc::ServerContext* context,
const api::PlayAudioCommand_Request* request, api::PlayAudioCommand_Feedback* response) { const api::PlayAudioCommand_Request* request, api::PlayAudioCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.SpeakerService/PlayAudio", request, response, "/cmvr.api.SpeakerService/PlayAudio", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
auto media_session = globalMediaActivityCoordinator().beginSession(); auto media_session = globalMediaActivityCoordinator().beginSession();
@ -240,7 +240,7 @@ grpc::Status gRPCSpeakerServiceImpl::StreamAudio(grpc::ServerContext* context,
safety_open.deadline = safety_open.deadline =
cmvr_grpc_call_guard.context().deadline; cmvr_grpc_call_guard.context().deadline;
safety_session.emplace( safety_session.emplace(
dmgr_.safetyCoordinator(), dmgr_.safetyManager(),
cmvr_grpc_call_guard.context(), cmvr_grpc_call_guard.context(),
std::move(safety_open)); std::move(safety_open));
if (!safety_session->admitted()) { if (!safety_session->admitted()) {
@ -307,7 +307,7 @@ grpc::Status gRPCSpeakerServiceImpl::StreamAudio(grpc::ServerContext* context,
grpc::Status gRPCSpeakerServiceImpl::StopPlayback(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::StopPlayback(grpc::ServerContext* context,
const api::StopSpeakerCommand_Request* request, api::StopSpeakerCommand_Feedback* response) { const api::StopSpeakerCommand_Request* request, api::StopSpeakerCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.SpeakerService/StopPlayback", request, response, "/cmvr.api.SpeakerService/StopPlayback", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -332,7 +332,7 @@ grpc::Status gRPCSpeakerServiceImpl::StopPlayback(grpc::ServerContext* context,
grpc::Status gRPCSpeakerServiceImpl::PausePlayback(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::PausePlayback(grpc::ServerContext* context,
const api::PauseSpeakerCommand_Request* request, api::PauseSpeakerCommand_Feedback* response) { const api::PauseSpeakerCommand_Request* request, api::PauseSpeakerCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.SpeakerService/PausePlayback", request, response, "/cmvr.api.SpeakerService/PausePlayback", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();
@ -355,7 +355,7 @@ grpc::Status gRPCSpeakerServiceImpl::PausePlayback(grpc::ServerContext* context,
grpc::Status gRPCSpeakerServiceImpl::ResumePlayback(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::ResumePlayback(grpc::ServerContext* context,
const api::ResumeSpeakerCommand_Request* request, api::ResumeSpeakerCommand_Feedback* response) { const api::ResumeSpeakerCommand_Request* request, api::ResumeSpeakerCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.SpeakerService/ResumePlayback", request, response, "/cmvr.api.SpeakerService/ResumePlayback", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
auto media_session = globalMediaActivityCoordinator().beginSession(); auto media_session = globalMediaActivityCoordinator().beginSession();
@ -396,7 +396,7 @@ grpc::Status gRPCSpeakerServiceImpl::ResumePlayback(grpc::ServerContext* context
grpc::Status gRPCSpeakerServiceImpl::SetVolume(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::SetVolume(grpc::ServerContext* context,
const api::SetSpeakerVolumeCommand_Request* request, api::SetSpeakerVolumeCommand_Feedback* response) { const api::SetSpeakerVolumeCommand_Request* request, api::SetSpeakerVolumeCommand_Feedback* response) {
return executeRegisteredGrpcCommand( return executeRegisteredGrpcCommand(
security_gateway_, context, dmgr_.safetyCoordinator(), security_gateway_, context, dmgr_.safetyManager(),
"/cmvr.api.SpeakerService/SetVolume", request, response, "/cmvr.api.SpeakerService/SetVolume", request, response,
[this, request, response](GrpcCommandTransaction& command) { [this, request, response](GrpcCommandTransaction& command) {
string dev_id = request->header().device_id(); string dev_id = request->header().device_id();

View File

@ -27,20 +27,20 @@
#include "devices/gripper/abstract_gripper.h" #include "devices/gripper/abstract_gripper.h"
#include "devices/microphone/abstract_microphone.h" #include "devices/microphone/abstract_microphone.h"
#include "devices/speaker/abstract_speaker.h" #include "devices/speaker/abstract_speaker.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "manager/media_source_hub/include/device_media_source_adapter.h" #include "manager/media_source_manager/include/device_media_source_adapter.h"
#include "manager/task_manager/include/task_manager.h" #include "manager/task_manager/include/task_manager.h"
#include "service/action/include/action_queue_executor.h" #include "service/grpc/action/include/action_queue_executor.h"
#include "service/grpc/include/camera_operational_activity_registry.h" #include "service/grpc/server/include/camera_operational_activity_registry.h"
#include "service/grpc/include/camera_ptz_activity_registry.h" #include "service/grpc/server/include/camera_ptz_activity_registry.h"
#include "service/grpc/include/grpc_recovery_audit.h" #include "service/grpc/server/include/grpc_recovery_audit.h"
#include "service/grpc/include/grpc_safety_proto.h" #include "service/grpc/server/include/grpc_safety_proto.h"
#include "service/grpc/include/grpc_safety_participants.h" #include "service/grpc/server/include/grpc_safety_participants.h"
#include "service/grpc/include/grpc_security.h" #include "service/grpc/server/include/grpc_security.h"
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "service/grpc/include/motor_activity_coordinator.h" #include "service/grpc/server/include/motor_activity_coordinator.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include "service/stop_all/include/stop_operation_dispatcher.h" #include "service/grpc/stop_all/include/stop_operation_dispatcher.h"
using namespace cmvr::device; using namespace cmvr::device;
using namespace cmvr::service; using namespace cmvr::service;
@ -718,7 +718,7 @@ StopOutcome stopCameraActivities(
const std::shared_ptr<cmvr::device::AbstractCamera>& camera) const std::shared_ptr<cmvr::device::AbstractCamera>& camera)
{ {
std::vector<std::string> failures; std::vector<std::string> failures;
bool stopped = cmvr::media::globalMediaSourceHub() bool stopped = cmvr::media::globalMediaSourceManager()
.stopSourcesForDevice(device_id, &failures); .stopSourcesForDevice(device_id, &failures);
if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice( if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice(
device_id, &failures)) { device_id, &failures)) {
@ -767,7 +767,7 @@ StopOutcome stopMicrophone(
const std::shared_ptr<cmvr::device::AbstractMicrophone>& microphone) const std::shared_ptr<cmvr::device::AbstractMicrophone>& microphone)
{ {
std::vector<std::string> failures; std::vector<std::string> failures;
bool stopped = cmvr::media::globalMediaSourceHub() bool stopped = cmvr::media::globalMediaSourceManager()
.stopSourcesForDevice(device_id, &failures); .stopSourcesForDevice(device_id, &failures);
try { try {
cmvr::device::MicrophoneState state{}; cmvr::device::MicrophoneState state{};
@ -811,7 +811,7 @@ StopOutcome stopSpeaker(
StopOutcome stopTrackedMediaActivities(const std::string& device_id) StopOutcome stopTrackedMediaActivities(const std::string& device_id)
{ {
std::vector<std::string> failures; std::vector<std::string> failures;
bool stopped = cmvr::media::globalMediaSourceHub() bool stopped = cmvr::media::globalMediaSourceManager()
.stopSourcesForDevice(device_id, &failures); .stopSourcesForDevice(device_id, &failures);
if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice( if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice(
device_id, &failures)) { device_id, &failures)) {
@ -1162,7 +1162,7 @@ gRPCSystemServiceImpl::gRPCSystemServiceImpl(
acquireProcessStopDispatcher(stop_dispatcher_); acquireProcessStopDispatcher(stop_dispatcher_);
try { try {
safety_participant_registration_ = registerGrpcSafetyParticipants( safety_participant_registration_ = registerGrpcSafetyParticipants(
dmgr_.safetyCoordinator(), action_queue_, stop_dispatcher_); dmgr_.safetyManager(), action_queue_, stop_dispatcher_);
} catch (...) { } catch (...) {
releaseProcessStopDispatcher(stop_dispatcher_); releaseProcessStopDispatcher(stop_dispatcher_);
throw; throw;
@ -1217,7 +1217,7 @@ grpc::Status gRPCSystemServiceImpl::GetSystemInfo(grpc::ServerContext* context,
toString(security.recovery_exposure)); toString(security.recovery_exposure));
response->set_grpc_insecure_non_loopback( response->set_grpc_insecure_non_loopback(
security.insecure_non_loopback); security.insecure_non_loopback);
const auto safety = dmgr_.safetyCoordinator().snapshot(); const auto safety = dmgr_.safetyManager().snapshot();
response->set_control_service_instance_id( response->set_control_service_instance_id(
safety.service_instance_id); safety.service_instance_id);
response->set_safety_enforcement_mode( response->set_safety_enforcement_mode(
@ -1365,7 +1365,7 @@ grpc::Status gRPCSystemServiceImpl::GetSafetyState(
return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, scope.error); return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, scope.error);
} }
const auto snapshot = dmgr_.safetyCoordinator().snapshot(); const auto snapshot = dmgr_.safetyManager().snapshot();
response->set_system_state( response->set_system_state(
toApiSystemAdmissionState(snapshot.system_state)); toApiSystemAdmissionState(snapshot.system_state));
response->set_safety_epoch(snapshot.safety_epoch); response->set_safety_epoch(snapshot.safety_epoch);
@ -1486,7 +1486,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState(
auto deadline = cmvr_grpc_call_guard.context().deadline; auto deadline = cmvr_grpc_call_guard.context().deadline;
const auto configured_deadline = const auto configured_deadline =
cmvr::safety::SafetyClock::now() + cmvr::safety::SafetyClock::now() +
dmgr_.safetyCoordinator().config().recovery_timeout; dmgr_.safetyManager().config().recovery_timeout;
if (deadline == cmvr::safety::SafetyClock::time_point::max() || if (deadline == cmvr::safety::SafetyClock::time_point::max() ||
configured_deadline < deadline) { configured_deadline < deadline) {
deadline = configured_deadline; deadline = configured_deadline;
@ -1528,7 +1528,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState(
} }
const auto result = const auto result =
dmgr_.safetyCoordinator().recover(coordinator_request); dmgr_.safetyManager().recover(coordinator_request);
response->set_recovery_id(result.recovery_id); response->set_recovery_id(result.recovery_id);
response->set_result(toApiRecoveryResult(result.result)); response->set_result(toApiRecoveryResult(result.result));
response->set_previous_safety_epoch(result.previous_safety_epoch); response->set_previous_safety_epoch(result.previous_safety_epoch);
@ -1544,7 +1544,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState(
header->set_success(success); header->set_success(success);
header->set_command_id(request->recovery_id()); header->set_command_id(request->recovery_id());
header->set_service_instance_id( header->set_service_instance_id(
dmgr_.safetyCoordinator().serviceInstanceId()); dmgr_.safetyManager().serviceInstanceId());
header->set_safety_epoch(result.current_safety_epoch); header->set_safety_epoch(result.current_safety_epoch);
header->set_execution_state( header->set_execution_state(
success ? cmvr::api::COMMAND_EXECUTION_STATE_COMPLETED success ? cmvr::api::COMMAND_EXECUTION_STATE_COMPLETED
@ -1596,7 +1596,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
grpc::StatusCode::INVALID_ARGUMENT, grpc::StatusCode::INVALID_ARGUMENT,
"StopAll request and response are required"); "StopAll request and response are required");
} }
if (dmgr_.safetyCoordinator().config().enforcement_mode != if (dmgr_.safetyManager().config().enforcement_mode !=
cmvr::safety::EnforcementMode::Legacy) { cmvr::safety::EnforcementMode::Legacy) {
auto deadline = cmvr_grpc_call_guard.context().deadline; auto deadline = cmvr_grpc_call_guard.context().deadline;
const auto configured_deadline = const auto configured_deadline =
@ -1616,7 +1616,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
if (operation_id.empty() && request->has_header()) { if (operation_id.empty() && request->has_header()) {
operation_id = request->header().command_id(); operation_id = request->header().command_id();
} }
const auto result = dmgr_.safetyCoordinator().stopAll( const auto result = dmgr_.safetyManager().stopAll(
std::move(operation_id), deadline); std::move(operation_id), deadline);
response->set_operation_id(result.operation_id); response->set_operation_id(result.operation_id);
response->set_previous_safety_epoch( response->set_previous_safety_epoch(
@ -1633,7 +1633,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
header->set_success(result.success); header->set_success(result.success);
header->set_command_id(result.operation_id); header->set_command_id(result.operation_id);
header->set_service_instance_id( header->set_service_instance_id(
dmgr_.safetyCoordinator().serviceInstanceId()); dmgr_.safetyManager().serviceInstanceId());
header->set_safety_epoch(result.current_safety_epoch); header->set_safety_epoch(result.current_safety_epoch);
header->set_execution_state( header->set_execution_state(
result.success result.success
@ -1826,7 +1826,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
tracked_media_ids.insert(ids.begin(), ids.end()); tracked_media_ids.insert(ids.begin(), ids.end());
}; };
merge_tracked_ids( merge_tracked_ids(
cmvr::media::globalMediaSourceHub().trackedSourceIds()); cmvr::media::globalMediaSourceManager().trackedSourceIds());
merge_tracked_ids( merge_tracked_ids(
globalCameraPtzActivityRegistry().trackedDeviceIds()); globalCameraPtzActivityRegistry().trackedDeviceIds());
merge_tracked_ids( merge_tracked_ids(

View File

@ -1,7 +1,7 @@
#include "service/grpc/include/media_activity_coordinator.h" #include "service/grpc/server/include/media_activity_coordinator.h"
#include "common/base/logging/logger.h" #include "common/base/logging/logger.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/motor_activity_coordinator.h" #include "service/grpc/server/include/motor_activity_coordinator.h"
#include <algorithm> #include <algorithm>
#include <condition_variable> #include <condition_variable>

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/camera_operational_activity_registry.h" #include "service/grpc/server/include/camera_operational_activity_registry.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -11,7 +11,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/camera_ptz_activity_registry.h" #include "service/grpc/server/include/camera_ptz_activity_registry.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -10,7 +10,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_agv_service.h" #include "service/grpc/server/include/grpc_agv_service.h"
#include <chrono> #include <chrono>
#include <future> #include <future>
@ -11,9 +11,9 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "cmvr/config/device_manager_config/device_manager_config.pb.h" #include "cmvr/config/device_manager_config/device_manager_config.pb.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "manager/device_manager/include/device_manager.h" #include "manager/device_manager/include/device_manager.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_arm_service.h" #include "service/grpc/server/include/grpc_arm_service.h"
#include <chrono> #include <chrono>
#include <cstdio> #include <cstdio>
@ -20,10 +20,10 @@
#include <unistd.h> #include <unistd.h>
#include "cmvr/config/device_manager_config/device_manager_config.pb.h" #include "cmvr/config/device_manager_config/device_manager_config.pb.h"
#include "manager/control_authority/include/control_authority_manager.h" #include "manager/control_authority_manager/include/control_authority_manager.h"
#include "manager/device_manager/include/device_manager.h" #include "manager/device_manager/include/device_manager.h"
#include "service/grpc/include/grpc_error_logging_interceptor.h" #include "service/grpc/server/include/grpc_error_logging_interceptor.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {
@ -599,7 +599,7 @@ protected:
header->set_command_id(command_id); header->set_command_id(command_id);
header->set_expected_service_instance_id( header->set_expected_service_instance_id(
device::DeviceManager::getInstance() device::DeviceManager::getInstance()
.safetyCoordinator() .safetyManager()
.serviceInstanceId()); .serviceInstanceId());
header->set_valid_for_ms(1000); header->set_valid_for_ms(1000);
request.mutable_target()->add_position(position); request.mutable_target()->add_position(position);

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_arm_teleop_service.h" #include "service/grpc/server/include/grpc_arm_teleop_service.h"
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
@ -17,9 +17,9 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <unistd.h> #include <unistd.h>
#include "manager/safety/include/device_safety_endpoint.h" #include "manager/safety_manager/include/device_safety_endpoint.h"
#include "manager/safety/include/safety_coordinator.h" #include "manager/safety_manager/include/safety_manager.h"
#include "service/stop_all/include/stop_all_admission_gate.h" #include "service/grpc/stop_all/include/stop_all_admission_gate.h"
namespace cmvr::service { namespace cmvr::service {
namespace { namespace {
@ -338,10 +338,10 @@ class TeleopServerHarness final {
public: public:
explicit TeleopServerHarness( explicit TeleopServerHarness(
std::shared_ptr<ArmTeleopBackend> backend, std::shared_ptr<ArmTeleopBackend> backend,
safety::SafetyCoordinator* safety_coordinator = nullptr) safety::SafetyManager* safety_manager = nullptr)
: service_( : service_(
std::move(backend), nullptr, nullptr, std::move(backend), nullptr, nullptr,
safety_coordinator) safety_manager)
{ {
socket_path_ = socket_path_ =
"/tmp/cmvr_arm_teleop_service_test_" + "/tmp/cmvr_arm_teleop_service_test_" +
@ -862,9 +862,9 @@ TEST(ArmTeleopServiceTest,
TEST(ArmTeleopServiceTest, TEST(ArmTeleopServiceTest,
CoordinatorInvalidationStopsExistingSessionBeforeAnotherSetpoint) CoordinatorInvalidationStopsExistingSessionBeforeAnotherSetpoint)
{ {
safety::SafetyCoordinatorConfig config; safety::SafetyManagerConfig config;
config.enforcement_mode = safety::EnforcementMode::EnforceAll; config.enforcement_mode = safety::EnforcementMode::EnforceAll;
safety::SafetyCoordinator coordinator(config); safety::SafetyManager coordinator(config);
auto endpoint = std::make_shared<FakeTeleopSafetyEndpoint>(); auto endpoint = std::make_shared<FakeTeleopSafetyEndpoint>();
ASSERT_TRUE(coordinator.registerDevice( ASSERT_TRUE(coordinator.registerDevice(
{endpoint->descriptor(), endpoint, {}})); {endpoint->descriptor(), endpoint, {}}));

View File

@ -1,4 +1,4 @@
#include "service/grpc/include/grpc_camera_stream_policy.h" #include "service/grpc/server/include/grpc_camera_stream_policy.h"
#include <chrono> #include <chrono>
#include <cstdint> #include <cstdint>

Some files were not shown because too many files have changed in this diff Show More