refactor: reorganize service and manager modules
This commit is contained in:
parent
f4be2ffaaa
commit
cb5f46c598
@ -6,15 +6,15 @@ add_subdirectory(hardware)
|
||||
add_subdirectory(algorithms)
|
||||
add_subdirectory(simulate)
|
||||
add_subdirectory(devices)
|
||||
add_subdirectory(manager/control_authority)
|
||||
add_subdirectory(manager/safety)
|
||||
add_subdirectory(manager/control_authority_manager)
|
||||
add_subdirectory(manager/safety_manager)
|
||||
add_subdirectory(manager/device_manager)
|
||||
add_subdirectory(service/stop_all)
|
||||
add_subdirectory(manager/media_source_hub)
|
||||
add_subdirectory(service/grpc/stop_all)
|
||||
add_subdirectory(manager/media_source_manager)
|
||||
add_subdirectory(service/quic_edge)
|
||||
add_subdirectory(service/arm_teleop_client)
|
||||
add_subdirectory(task)
|
||||
add_subdirectory(task/quic_edge_task)
|
||||
add_subdirectory(service/grpc/client)
|
||||
add_subdirectory(task/ume_teleop_task)
|
||||
add_subdirectory(manager/task_manager)
|
||||
add_subdirectory(service)
|
||||
|
||||
@ -54,7 +54,7 @@ AGV 通用类型应参考 [`types/agv/agv_types.h`](types/agv/agv_types.h),机
|
||||
- AAC、Opus、PCM 明确 payload format、采样率和声道数;
|
||||
- 不把 QUIC、gRPC 或浏览器专有字段加入通用帧。
|
||||
|
||||
设备媒体接入流程见 [`../manager/README.md`](../manager/README.md) 的 MediaSourceHub 章节。
|
||||
设备媒体接入流程见 [`../manager/README.md`](../manager/README.md) 的 MediaSourceManager 章节。
|
||||
|
||||
## 环形队列选择
|
||||
|
||||
|
||||
@ -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 轨道:
|
||||
|
||||
@ -312,7 +312,7 @@ adapter 检测到描述变化后创建新 descriptor,设备后端不要自行
|
||||
- 满队列覆盖旧数据是实时媒体的预期行为;
|
||||
- `waitEncodedFrame()` 必须有有限 timeout,不能永久阻塞。
|
||||
|
||||
MediaSourceHub Subscription 同样是单消费者对象,不同协议或客户端必须各自订阅。
|
||||
MediaSourceManager Subscription 同样是单消费者对象,不同协议或客户端必须各自订阅。
|
||||
|
||||
发布后的 `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)
|
||||
- [`../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
|
||||
cmake -S . -B build \
|
||||
-DCMVR_ARCH=x86 \
|
||||
-DBUILD_TESTING=ON \
|
||||
-DCMVR_MEDIA_SOURCE_HUB_BUILD_TESTS=ON
|
||||
-DCMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS=ON
|
||||
|
||||
cmake --build build -j"$(nproc)"
|
||||
|
||||
ctest \
|
||||
--test-dir build \
|
||||
-R 'hikvision_camera_callback_test|media_source_hub_test' \
|
||||
-R 'hikvision_camera_callback_test|media_source_manager_test' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
- DeviceManager 配置:
|
||||
[`../../../config/manager/device_manager.pb.txt`](../../../config/manager/device_manager.pb.txt)
|
||||
- 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)
|
||||
|
||||
仓库配置使用 SDK RPC 端口 `30004`。现场部署必须填写真实控制器地址和凭据,
|
||||
|
||||
@ -6,13 +6,20 @@
|
||||
|
||||
## 当前管理器
|
||||
|
||||
管理模块目录统一使用 `*_manager` 后缀,主管理类使用 `*Manager` 后缀。工厂、适配器、
|
||||
账本、快照和结果结构体属于管理器内部的支撑类型,保留其职责名称,不强行改成
|
||||
`*Manager`。
|
||||
|
||||
| 目录 | CMake target | 职责 |
|
||||
| --- | --- | --- |
|
||||
| [`control_authority_manager/`](control_authority_manager/) | `cmvr_es::control_authority_manager` | 控制权租约、代际、dispatch fence 和 quarantine |
|
||||
| [`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` | 创建任务、校验运行模式、统一启停和调度周期任务 |
|
||||
| [`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 返回后,其内部状态并发安全由具体实现负责。
|
||||
|
||||
## MediaSourceHub
|
||||
## MediaSourceManager
|
||||
|
||||
关键文件:
|
||||
|
||||
- [`media_source_hub/include/media_source_hub.h`](media_source_hub/include/media_source_hub.h)
|
||||
- [`media_source_hub/src/device_media_source_adapter.cpp`](media_source_hub/src/device_media_source_adapter.cpp)
|
||||
- [`media_source_manager/include/media_source_manager.h`](media_source_manager/include/media_source_manager.h)
|
||||
- [`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/base/ring_buffer.h`](../common/base/ring_buffer.h)
|
||||
|
||||
@ -152,7 +159,8 @@
|
||||
| 摄像头彩色流 | `<device_id>/video/color` | 64 |
|
||||
| 麦克风主流 | `<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
|
||||
|
||||
1. 先确认能力不是 DeviceManager、TaskManager 或 MediaSourceHub 的子职责;
|
||||
1. 先确认能力不是 DeviceManager、TaskManager 或 MediaSourceManager 的子职责;
|
||||
2. 定义所有权、初始化、start/stop 和线程模型;
|
||||
3. 避免新增无必要的全局单例;
|
||||
4. 新建独立目录、头文件、实现和 CMake target;
|
||||
@ -221,13 +229,13 @@ ring generation 不等于 `TrackDescriptor::generation`,ring 的 `ReadResult.s
|
||||
|
||||
## 测试
|
||||
|
||||
MediaSourceHub:
|
||||
MediaSourceManager:
|
||||
|
||||
```bash
|
||||
cmake --build build --target media_source_hub_test
|
||||
cmake --build build --target media_source_manager_test
|
||||
ctest \
|
||||
--test-dir build \
|
||||
-R '^media_source_hub_test$' \
|
||||
-R '^media_source_manager_test$' \
|
||||
--output-on-failure
|
||||
```
|
||||
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
add_library(control_authority STATIC
|
||||
add_library(control_authority_manager STATIC
|
||||
src/control_authority_manager.cpp
|
||||
)
|
||||
target_compile_features(control_authority PUBLIC cxx_std_17)
|
||||
target_include_directories(control_authority
|
||||
target_compile_features(control_authority_manager PUBLIC cxx_std_17)
|
||||
target_include_directories(control_authority_manager
|
||||
PUBLIC
|
||||
${PROJECT_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
|
||||
add_library(
|
||||
cmvr_es::control_authority
|
||||
ALIAS control_authority
|
||||
cmvr_es::control_authority_manager
|
||||
ALIAS control_authority_manager
|
||||
)
|
||||
install(TARGETS control_authority ARCHIVE DESTINATION lib)
|
||||
install(TARGETS control_authority_manager ARCHIVE DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(control_authority_manager_test
|
||||
@ -19,7 +19,7 @@ if(BUILD_TESTING)
|
||||
)
|
||||
target_link_libraries(control_authority_manager_test
|
||||
PRIVATE
|
||||
cmvr_es::control_authority
|
||||
cmvr_es::control_authority_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
@ -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>
|
||||
|
||||
@ -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 <future>
|
||||
@ -8,7 +8,7 @@ target_include_directories(device_manager PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
target_link_libraries(device_manager PRIVATE
|
||||
cmvr_es::proto
|
||||
cmvr_es::safety_coordinator
|
||||
cmvr_es::safety_manager
|
||||
cmvr_es::device::camera
|
||||
cmvr_es::device::agv
|
||||
cmvr_es::device::speaker
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
|
||||
#include "device_factory.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 {
|
||||
|
||||
@ -48,13 +48,13 @@ namespace cmvr::device {
|
||||
std::vector<DeviceInventoryEntry> inventorySnapshot() 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;
|
||||
@ -74,7 +74,7 @@ namespace cmvr::device {
|
||||
std::unordered_map<std::string, DeviceRecord> devices_;
|
||||
std::unordered_map<std::string, ManagedDeviceSnapshot> device_statuses_;
|
||||
std::unique_ptr<DeviceFactory> dev_factory_;
|
||||
std::unique_ptr<safety::SafetyCoordinator> safety_coordinator_;
|
||||
std::unique_ptr<safety::SafetyManager> safety_manager_;
|
||||
bool initialized_{false};
|
||||
|
||||
explicit DeviceManager(const config::DeviceManagerConfig &cfg);
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "devices/abstract_device.h"
|
||||
#include "manager/safety/include/safety_participant.h"
|
||||
#include "manager/safety_manager/include/safety_participant.h"
|
||||
|
||||
namespace cmvr::device {
|
||||
|
||||
|
||||
@ -38,10 +38,10 @@ using MotorJointSelections = std::unordered_map<std::string, GroupJointSelection
|
||||
constexpr std::size_t kMaxDeviceErrorLength = 512;
|
||||
constexpr auto kSafetyStartupValidationTimeout = std::chrono::seconds(2);
|
||||
|
||||
cmvr::safety::SafetyCoordinatorConfig safetyConfigFrom(
|
||||
cmvr::safety::SafetyManagerConfig safetyConfigFrom(
|
||||
const cmvr::config::DeviceManagerConfig& config)
|
||||
{
|
||||
cmvr::safety::SafetyCoordinatorConfig result;
|
||||
cmvr::safety::SafetyManagerConfig result;
|
||||
if (!config.has_safety()) {
|
||||
result.enforcement_mode = cmvr::safety::EnforcementMode::Shadow;
|
||||
return result;
|
||||
@ -49,18 +49,18 @@ cmvr::safety::SafetyCoordinatorConfig safetyConfigFrom(
|
||||
|
||||
const auto& source = config.safety();
|
||||
switch (source.mode()) {
|
||||
case cmvr::config::SafetyCoordinatorConfig::LEGACY:
|
||||
case cmvr::config::SafetyManagerConfig::LEGACY:
|
||||
result.enforcement_mode = cmvr::safety::EnforcementMode::Legacy;
|
||||
break;
|
||||
case cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED:
|
||||
case cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED:
|
||||
result.enforcement_mode =
|
||||
cmvr::safety::EnforcementMode::EnforceSelected;
|
||||
break;
|
||||
case cmvr::config::SafetyCoordinatorConfig::ENFORCE_ALL:
|
||||
case cmvr::config::SafetyManagerConfig::ENFORCE_ALL:
|
||||
result.enforcement_mode = cmvr::safety::EnforcementMode::EnforceAll;
|
||||
break;
|
||||
case cmvr::config::SafetyCoordinatorConfig::SHADOW:
|
||||
case cmvr::config::SafetyCoordinatorConfig::ENFORCEMENT_MODE_UNSPECIFIED:
|
||||
case cmvr::config::SafetyManagerConfig::SHADOW:
|
||||
case cmvr::config::SafetyManagerConfig::ENFORCEMENT_MODE_UNSPECIFIED:
|
||||
default:
|
||||
result.enforcement_mode = cmvr::safety::EnforcementMode::Shadow;
|
||||
break;
|
||||
@ -236,7 +236,7 @@ std::mutex DeviceManager::init_mutex_;
|
||||
DeviceManager::DeviceManager(const config::DeviceManagerConfig& cfg)
|
||||
: cfg_(cfg),
|
||||
dev_factory_(std::make_unique<DeviceFactory>()),
|
||||
safety_coordinator_(std::make_unique<safety::SafetyCoordinator>(
|
||||
safety_manager_(std::make_unique<safety::SafetyManager>(
|
||||
safetyConfigFrom(cfg)))
|
||||
{
|
||||
initialize_device_statuses_();
|
||||
@ -313,7 +313,7 @@ bool DeviceManager::start(){
|
||||
bool started = false;
|
||||
std::string error_message;
|
||||
try {
|
||||
(void)safety_coordinator_->advanceDeviceGeneration(id);
|
||||
(void)safety_manager_->advanceDeviceGeneration(id);
|
||||
started = device->start();
|
||||
if (!started) {
|
||||
error_message = "device start returned false: " + id;
|
||||
@ -342,7 +342,7 @@ bool DeviceManager::start(){
|
||||
}
|
||||
}
|
||||
if (all_started) {
|
||||
const auto coverage = safety_coordinator_->validateStartupCoverage(
|
||||
const auto coverage = safety_manager_->validateStartupCoverage(
|
||||
safety::SafetyClock::now() + kSafetyStartupValidationTimeout);
|
||||
if (!coverage.ready) {
|
||||
all_started = false;
|
||||
@ -363,7 +363,7 @@ bool DeviceManager::start(){
|
||||
// explicit stop() records Stopped/Error transitions.
|
||||
stop_devices_(false);
|
||||
} else {
|
||||
safety_coordinator_->markStartupComplete();
|
||||
safety_manager_->markStartupComplete();
|
||||
}
|
||||
return all_started;
|
||||
}
|
||||
@ -422,7 +422,7 @@ void DeviceManager::stop_devices_(const bool update_status) {
|
||||
update_device_status_(id, ManagedDeviceState::Stopped);
|
||||
}
|
||||
CMVR_LOG(INFO) << "[DeviceManager]: Stop device " << id << " Success";
|
||||
safety_coordinator_->updateDeviceRuntimeState(
|
||||
safety_manager_->updateDeviceRuntimeState(
|
||||
id, ManagedDeviceState::Stopped,
|
||||
sample_device_health_(device));
|
||||
} else {
|
||||
@ -431,7 +431,7 @@ void DeviceManager::stop_devices_(const bool update_status) {
|
||||
id, ManagedDeviceState::Error, error_message);
|
||||
}
|
||||
CMVR_LOG(ERROR) << "[DeviceManager]: Stop device " << id << " Failed";
|
||||
safety_coordinator_->updateDeviceRuntimeState(
|
||||
safety_manager_->updateDeviceRuntimeState(
|
||||
id, ManagedDeviceState::Error,
|
||||
{DeviceHealthState::Fault, error_message});
|
||||
}
|
||||
@ -634,7 +634,7 @@ void DeviceManager::update_device_status_(
|
||||
status.status_updated_at_unix_ms = unixTimeMs();
|
||||
health = status.health;
|
||||
}
|
||||
safety_coordinator_->updateDeviceRuntimeState(device_id, state, health);
|
||||
safety_manager_->updateDeviceRuntimeState(device_id, state, health);
|
||||
}
|
||||
|
||||
DeviceManagerSnapshot DeviceManager::snapshot() const
|
||||
@ -724,7 +724,7 @@ void DeviceManager::update_device_health_(
|
||||
status.status_updated_at_unix_ms = unixTimeMs();
|
||||
health = status.health;
|
||||
}
|
||||
safety_coordinator_->updateDeviceRuntimeState(
|
||||
safety_manager_->updateDeviceRuntimeState(
|
||||
device_id, lifecycle, std::move(health));
|
||||
}
|
||||
|
||||
@ -750,7 +750,7 @@ bool DeviceManager::register_device_safety_(
|
||||
return false;
|
||||
}
|
||||
const bool registered =
|
||||
safety_coordinator_->registerDevice(std::move(registration));
|
||||
safety_manager_->registerDevice(std::move(registration));
|
||||
return registered;
|
||||
}
|
||||
|
||||
|
||||
@ -21,8 +21,8 @@
|
||||
#include "devices/microphone/abstract_microphone.h"
|
||||
#include "devices/motor/manager/include/motor_manager.h"
|
||||
#include "devices/speaker/abstract_speaker.h"
|
||||
#include "manager/control_authority/include/control_authority_manager.h"
|
||||
#include "manager/safety/include/device_safety_endpoint.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
|
||||
namespace cmvr::device {
|
||||
|
||||
|
||||
@ -127,14 +127,14 @@ TEST_F(DeviceManagerLifecycleTest,
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
auto* safety = config.mutable_safety();
|
||||
safety->set_mode(
|
||||
cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED);
|
||||
cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED);
|
||||
safety->add_enforced_device_ids("missing-arm");
|
||||
|
||||
auto& manager = cmvr::device::DeviceManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
EXPECT_FALSE(manager.start());
|
||||
EXPECT_EQ(
|
||||
manager.safetyCoordinator().snapshot().system_state,
|
||||
manager.safetyManager().snapshot().system_state,
|
||||
cmvr::safety::SystemAdmissionState::Starting);
|
||||
}
|
||||
|
||||
@ -143,7 +143,7 @@ TEST_F(DeviceManagerLifecycleTest,
|
||||
{
|
||||
cmvr::config::DeviceManagerConfig config;
|
||||
config.mutable_safety()->set_mode(
|
||||
cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED);
|
||||
cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED);
|
||||
|
||||
auto& manager = cmvr::device::DeviceManager::getInstance(config);
|
||||
ASSERT_TRUE(manager.initialized());
|
||||
|
||||
@ -1,28 +1,28 @@
|
||||
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
project(cmvr_media_source_hub LANGUAGES CXX)
|
||||
project(cmvr_media_source_manager LANGUAGES CXX)
|
||||
enable_testing()
|
||||
add_subdirectory(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../service/stop_all
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../service/grpc/stop_all
|
||||
${CMAKE_CURRENT_BINARY_DIR}/stop_all
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(media_source_hub STATIC
|
||||
src/media_source_hub.cpp
|
||||
add_library(media_source_manager STATIC
|
||||
src/media_source_manager.cpp
|
||||
)
|
||||
|
||||
target_compile_features(media_source_hub PUBLIC cxx_std_17)
|
||||
target_include_directories(media_source_hub
|
||||
target_compile_features(media_source_manager PUBLIC cxx_std_17)
|
||||
target_include_directories(media_source_manager
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../..
|
||||
)
|
||||
target_link_libraries(media_source_hub
|
||||
target_link_libraries(media_source_manager
|
||||
PUBLIC
|
||||
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)
|
||||
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
|
||||
PUBLIC
|
||||
cmvr_es::media_source_hub
|
||||
cmvr_es::media_source_manager
|
||||
cmvr_es::common
|
||||
cmvr_es::proto
|
||||
cmvr_es::logging
|
||||
cmvr_es::safety_coordinator
|
||||
cmvr_es::safety_manager
|
||||
)
|
||||
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()
|
||||
|
||||
option(CMVR_MEDIA_SOURCE_HUB_BUILD_TESTS
|
||||
"Build the standalone MediaSourceHub self-test"
|
||||
option(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS
|
||||
"Build the standalone MediaSourceManager self-test"
|
||||
${PROJECT_IS_TOP_LEVEL})
|
||||
|
||||
if(CMVR_MEDIA_SOURCE_HUB_BUILD_TESTS)
|
||||
if(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS)
|
||||
find_package(Threads REQUIRED)
|
||||
add_executable(media_source_hub_test
|
||||
tests/media_source_hub_test.cpp
|
||||
add_executable(media_source_manager_test
|
||||
tests/media_source_manager_test.cpp
|
||||
)
|
||||
target_compile_features(media_source_hub_test PRIVATE cxx_std_17)
|
||||
target_link_libraries(media_source_hub_test
|
||||
target_compile_features(media_source_manager_test PRIVATE cxx_std_17)
|
||||
target_link_libraries(media_source_manager_test
|
||||
PRIVATE
|
||||
cmvr_es::media_source_hub
|
||||
cmvr_es::media_source_manager
|
||||
Threads::Threads
|
||||
)
|
||||
# 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
|
||||
# a vendor libstdc++.so (for example from the AUBO SDK), even though the test
|
||||
# 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
|
||||
)
|
||||
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()
|
||||
@ -9,13 +9,13 @@
|
||||
|
||||
#include "devices/camera/abstract_camera.h"
|
||||
#include "devices/microphone/abstract_microphone.h"
|
||||
#include "manager/media_source_hub/include/media_source_hub.h"
|
||||
#include "manager/safety/include/safety_coordinator.h"
|
||||
#include "manager/media_source_manager/include/media_source_manager.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
|
||||
namespace cmvr::media {
|
||||
|
||||
// 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 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
|
||||
// the operation which can start the physical media producer has returned.
|
||||
safety::DispatchGuard beginMediaSourceStartDispatch(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::string& device_id);
|
||||
|
||||
// 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
|
||||
// does not call stop(), because the base device lifecycle can also be owned by control RPCs.
|
||||
bool ensureCameraMediaSource(
|
||||
MediaSourceHub& hub,
|
||||
MediaSourceManager& hub,
|
||||
const std::shared_ptr<device::AbstractCamera>& camera,
|
||||
size_t ring_capacity = 64);
|
||||
|
||||
bool ensureMicrophoneMediaSource(
|
||||
MediaSourceHub& hub,
|
||||
MediaSourceManager& hub,
|
||||
const std::shared_ptr<device::AbstractMicrophone>& microphone,
|
||||
size_t ring_capacity = 256);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H
|
||||
#define CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H
|
||||
#ifndef CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H
|
||||
#define CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -21,15 +21,15 @@ class StopAllAdmissionGate;
|
||||
|
||||
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.
|
||||
class MediaSourceHub final {
|
||||
class MediaSourceManager final {
|
||||
public:
|
||||
using FrameRing = BroadcastFrameRing<MediaFrame>;
|
||||
using FrameReadResult = FrameRing::ReadResult;
|
||||
using StartPosition = FrameRing::StartPosition;
|
||||
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
|
||||
// back into the same hub.
|
||||
using CancelPredicate = std::function<bool()>;
|
||||
@ -37,7 +37,7 @@ public:
|
||||
struct SourceCallbacks {
|
||||
// start() may run asynchronously. It must observe cancelled during any
|
||||
// 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.
|
||||
std::function<bool(
|
||||
const FrameSink& sink,
|
||||
@ -84,7 +84,7 @@ public:
|
||||
void reset();
|
||||
|
||||
private:
|
||||
friend class MediaSourceHub;
|
||||
friend class MediaSourceManager;
|
||||
Subscription(std::shared_ptr<SourceState> source, FrameRing::Cursor cursor);
|
||||
|
||||
std::shared_ptr<SourceState> source_;
|
||||
@ -94,12 +94,12 @@ public:
|
||||
|
||||
// Pass the process-wide StopAll gate for a hub whose sources are part of
|
||||
// whole-machine operational stopping. Test/private hubs may remain local.
|
||||
explicit MediaSourceHub(
|
||||
explicit MediaSourceManager(
|
||||
service::StopAllAdmissionGate* admission_gate = nullptr);
|
||||
~MediaSourceHub();
|
||||
~MediaSourceManager();
|
||||
|
||||
MediaSourceHub(const MediaSourceHub&) = delete;
|
||||
MediaSourceHub& operator=(const MediaSourceHub&) = delete;
|
||||
MediaSourceManager(const MediaSourceManager&) = delete;
|
||||
MediaSourceManager& operator=(const MediaSourceManager&) = delete;
|
||||
|
||||
bool registerSource(
|
||||
TrackDescriptorPtr initial_descriptor,
|
||||
@ -159,4 +159,4 @@ private:
|
||||
|
||||
} // namespace cmvr::media
|
||||
|
||||
#endif // CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H
|
||||
#endif // CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H
|
||||
@ -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 <atomic>
|
||||
@ -131,8 +131,8 @@ struct PumpState : public std::enable_shared_from_this<PumpState<DeviceT>> {
|
||||
}
|
||||
|
||||
bool begin(
|
||||
const MediaSourceHub::FrameSink& frame_sink,
|
||||
const MediaSourceHub::CancelPredicate& cancelled) {
|
||||
const MediaSourceManager::FrameSink& frame_sink,
|
||||
const MediaSourceManager::CancelPredicate& cancelled) {
|
||||
if (!frame_sink || !device) {
|
||||
return false;
|
||||
}
|
||||
@ -288,7 +288,7 @@ struct PumpState : public std::enable_shared_from_this<PumpState<DeviceT>> {
|
||||
std::atomic<bool> running{false};
|
||||
std::mutex mutex;
|
||||
std::thread worker;
|
||||
MediaSourceHub::FrameSink sink;
|
||||
MediaSourceManager::FrameSink sink;
|
||||
bool streaming_started{false};
|
||||
};
|
||||
|
||||
@ -448,7 +448,7 @@ struct CameraPump final : PumpState<device::AbstractCamera> {
|
||||
frame.key_frame = source.bKey;
|
||||
frame.discontinuity = pending_discontinuity;
|
||||
|
||||
MediaSourceHub::FrameSink current_sink;
|
||||
MediaSourceManager::FrameSink current_sink;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
current_sink = sink;
|
||||
@ -581,7 +581,7 @@ struct MicrophonePump final : PumpState<device::AbstractMicrophone> {
|
||||
frame.key_frame = true;
|
||||
frame.discontinuity = pending_discontinuity;
|
||||
|
||||
MediaSourceHub::FrameSink current_sink;
|
||||
MediaSourceManager::FrameSink current_sink;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
current_sink = sink;
|
||||
@ -619,8 +619,8 @@ TrackDescriptorPtr initialTrack(
|
||||
|
||||
} // namespace
|
||||
|
||||
MediaSourceHub& globalMediaSourceHub() {
|
||||
static MediaSourceHub hub(&service::globalStopAllAdmissionGate());
|
||||
MediaSourceManager& globalMediaSourceManager() {
|
||||
static MediaSourceManager hub(&service::globalStopAllAdmissionGate());
|
||||
return hub;
|
||||
}
|
||||
|
||||
@ -633,12 +633,12 @@ std::string microphoneTrackId(const std::string& device_id) {
|
||||
}
|
||||
|
||||
safety::DispatchGuard beginMediaSourceStartDispatch(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::string& device_id)
|
||||
{
|
||||
safety::AdmissionRequest request;
|
||||
request.command = {
|
||||
"cmvr.internal.MediaSourceHub/StartSource",
|
||||
"cmvr.internal.MediaSourceManager/StartSource",
|
||||
safety::CommandIntent::StartActivity,
|
||||
safety::SafetyPolicyFamily::Sensor,
|
||||
true,
|
||||
@ -670,7 +670,7 @@ safety::DispatchGuard beginMediaSourceStartDispatch(
|
||||
}
|
||||
|
||||
bool ensureCameraMediaSource(
|
||||
MediaSourceHub& hub,
|
||||
MediaSourceManager& hub,
|
||||
const std::shared_ptr<device::AbstractCamera>& camera,
|
||||
const size_t ring_capacity) {
|
||||
if (!camera || camera->id().empty()) {
|
||||
@ -682,10 +682,10 @@ bool ensureCameraMediaSource(
|
||||
}
|
||||
|
||||
const auto pump = std::make_shared<CameraPump>(camera, track_id);
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [pump](
|
||||
const MediaSourceHub::FrameSink& sink,
|
||||
const MediaSourceHub::CancelPredicate& cancelled) {
|
||||
const MediaSourceManager::FrameSink& sink,
|
||||
const MediaSourceManager::CancelPredicate& cancelled) {
|
||||
return pump->begin(sink, cancelled);
|
||||
};
|
||||
callbacks.stop_confirmed = [pump] { return pump->stop(); };
|
||||
@ -702,7 +702,7 @@ bool ensureCameraMediaSource(
|
||||
}
|
||||
|
||||
bool ensureMicrophoneMediaSource(
|
||||
MediaSourceHub& hub,
|
||||
MediaSourceManager& hub,
|
||||
const std::shared_ptr<device::AbstractMicrophone>& microphone,
|
||||
const size_t ring_capacity) {
|
||||
if (!microphone || microphone->id().empty()) {
|
||||
@ -714,10 +714,10 @@ bool ensureMicrophoneMediaSource(
|
||||
}
|
||||
|
||||
const auto pump = std::make_shared<MicrophonePump>(microphone, track_id);
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [pump](
|
||||
const MediaSourceHub::FrameSink& sink,
|
||||
const MediaSourceHub::CancelPredicate& cancelled) {
|
||||
const MediaSourceManager::FrameSink& sink,
|
||||
const MediaSourceManager::CancelPredicate& cancelled) {
|
||||
return pump->begin(sink, cancelled);
|
||||
};
|
||||
callbacks.stop_confirmed = [pump] { return pump->stop(); };
|
||||
@ -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 <atomic>
|
||||
@ -9,11 +9,11 @@
|
||||
#include <unordered_set>
|
||||
#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 {
|
||||
|
||||
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 {
|
||||
STOPPED,
|
||||
STARTING,
|
||||
@ -406,7 +406,7 @@ struct MediaSourceHub::SourceState final : public std::enable_shared_from_this<S
|
||||
std::shared_ptr<StartAttempt> start_attempt;
|
||||
};
|
||||
|
||||
struct MediaSourceHub::Impl final {
|
||||
struct MediaSourceManager::Impl final {
|
||||
explicit Impl(service::StopAllAdmissionGate* source_admission_gate)
|
||||
: admission_gate(source_admission_gate) {}
|
||||
|
||||
@ -420,25 +420,25 @@ struct MediaSourceHub::Impl final {
|
||||
service::StopAllAdmissionGate* const admission_gate;
|
||||
};
|
||||
|
||||
MediaSourceHub::Subscription::Subscription(
|
||||
MediaSourceManager::Subscription::Subscription(
|
||||
std::shared_ptr<SourceState> source,
|
||||
FrameRing::Cursor cursor)
|
||||
: source_(std::move(source)),
|
||||
cursor_(std::move(cursor)),
|
||||
active_(static_cast<bool>(source_)) {}
|
||||
|
||||
MediaSourceHub::Subscription::~Subscription() {
|
||||
MediaSourceManager::Subscription::~Subscription() {
|
||||
reset();
|
||||
}
|
||||
|
||||
MediaSourceHub::Subscription::Subscription(Subscription&& other) noexcept
|
||||
MediaSourceManager::Subscription::Subscription(Subscription&& other) noexcept
|
||||
: source_(std::move(other.source_)),
|
||||
cursor_(other.cursor_),
|
||||
active_(other.active_) {
|
||||
other.active_ = false;
|
||||
}
|
||||
|
||||
MediaSourceHub::Subscription& MediaSourceHub::Subscription::operator=(Subscription&& other) noexcept {
|
||||
MediaSourceManager::Subscription& MediaSourceManager::Subscription::operator=(Subscription&& other) noexcept {
|
||||
if (this == &other) {
|
||||
return *this;
|
||||
}
|
||||
@ -450,22 +450,22 @@ MediaSourceHub::Subscription& MediaSourceHub::Subscription::operator=(Subscripti
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool MediaSourceHub::Subscription::valid() const {
|
||||
bool MediaSourceManager::Subscription::valid() const {
|
||||
return active_ && source_ && source_->validForSubscription();
|
||||
}
|
||||
|
||||
TrackDescriptorPtr MediaSourceHub::Subscription::descriptor() const {
|
||||
TrackDescriptorPtr MediaSourceManager::Subscription::descriptor() const {
|
||||
return source_ ? source_->currentDescriptor() : nullptr;
|
||||
}
|
||||
|
||||
std::optional<MediaSourceHub::FrameReadResult> MediaSourceHub::Subscription::tryRead() {
|
||||
std::optional<MediaSourceManager::FrameReadResult> MediaSourceManager::Subscription::tryRead() {
|
||||
if (!active_ || !source_) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return source_->ring.tryRead(cursor_);
|
||||
}
|
||||
|
||||
std::optional<MediaSourceHub::FrameReadResult> MediaSourceHub::Subscription::waitRead(
|
||||
std::optional<MediaSourceManager::FrameReadResult> MediaSourceManager::Subscription::waitRead(
|
||||
const std::chrono::milliseconds timeout) {
|
||||
if (!active_ || !source_) {
|
||||
return std::nullopt;
|
||||
@ -473,7 +473,7 @@ std::optional<MediaSourceHub::FrameReadResult> MediaSourceHub::Subscription::wai
|
||||
return source_->ring.waitRead(cursor_, timeout);
|
||||
}
|
||||
|
||||
uint64_t MediaSourceHub::Subscription::discardPendingIfExceeds(
|
||||
uint64_t MediaSourceManager::Subscription::discardPendingIfExceeds(
|
||||
const size_t maximum_pending_frames) {
|
||||
if (!active_ || !source_) {
|
||||
return 0;
|
||||
@ -481,11 +481,11 @@ uint64_t MediaSourceHub::Subscription::discardPendingIfExceeds(
|
||||
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;
|
||||
}
|
||||
|
||||
void MediaSourceHub::Subscription::reset() {
|
||||
void MediaSourceManager::Subscription::reset() {
|
||||
if (active_ && source_) {
|
||||
source_->release();
|
||||
}
|
||||
@ -493,15 +493,15 @@ void MediaSourceHub::Subscription::reset() {
|
||||
source_.reset();
|
||||
}
|
||||
|
||||
MediaSourceHub::MediaSourceHub(
|
||||
MediaSourceManager::MediaSourceManager(
|
||||
service::StopAllAdmissionGate* admission_gate)
|
||||
: impl_(std::make_shared<Impl>(admission_gate)) {}
|
||||
|
||||
MediaSourceHub::~MediaSourceHub() {
|
||||
MediaSourceManager::~MediaSourceManager() {
|
||||
shutdown();
|
||||
}
|
||||
|
||||
bool MediaSourceHub::registerSource(
|
||||
bool MediaSourceManager::registerSource(
|
||||
TrackDescriptorPtr initial_descriptor,
|
||||
SourceCallbacks callbacks,
|
||||
const size_t ring_capacity) {
|
||||
@ -556,7 +556,7 @@ bool MediaSourceHub::registerSource(
|
||||
return inserted;
|
||||
}
|
||||
|
||||
bool MediaSourceHub::unregisterSource(const std::string& track_id) {
|
||||
bool MediaSourceManager::unregisterSource(const std::string& track_id) {
|
||||
if (!impl_ || track_id.empty()) {
|
||||
return false;
|
||||
}
|
||||
@ -590,7 +590,7 @@ bool MediaSourceHub::unregisterSource(const std::string& track_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MediaSourceHub::hasSource(const std::string& track_id) const {
|
||||
bool MediaSourceManager::hasSource(const std::string& track_id) const {
|
||||
if (!impl_) {
|
||||
return false;
|
||||
}
|
||||
@ -598,7 +598,7 @@ bool MediaSourceHub::hasSource(const std::string& track_id) const {
|
||||
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;
|
||||
if (!impl_) {
|
||||
return {};
|
||||
@ -625,7 +625,7 @@ std::vector<TrackDescriptorPtr> MediaSourceHub::listTracks() const {
|
||||
return descriptors;
|
||||
}
|
||||
|
||||
std::vector<std::string> MediaSourceHub::trackedSourceIds() const {
|
||||
std::vector<std::string> MediaSourceManager::trackedSourceIds() const {
|
||||
if (!impl_) {
|
||||
return {};
|
||||
}
|
||||
@ -644,7 +644,7 @@ std::vector<std::string> MediaSourceHub::trackedSourceIds() const {
|
||||
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_) {
|
||||
return 0;
|
||||
}
|
||||
@ -660,7 +660,7 @@ size_t MediaSourceHub::subscriberCount(const std::string& track_id) const {
|
||||
return source->subscriberCount();
|
||||
}
|
||||
|
||||
bool MediaSourceHub::requestKeyFrame(const std::string& track_id) const {
|
||||
bool MediaSourceManager::requestKeyFrame(const std::string& track_id) const {
|
||||
if (!impl_) {
|
||||
return false;
|
||||
}
|
||||
@ -676,7 +676,7 @@ bool MediaSourceHub::requestKeyFrame(const std::string& track_id) const {
|
||||
return source->requestKeyFrame();
|
||||
}
|
||||
|
||||
MediaSourceHub::Subscription MediaSourceHub::subscribe(
|
||||
MediaSourceManager::Subscription MediaSourceManager::subscribe(
|
||||
const std::string& track_id,
|
||||
const StartPosition start_position,
|
||||
CancelPredicate cancelled) {
|
||||
@ -701,7 +701,7 @@ MediaSourceHub::Subscription MediaSourceHub::subscribe(
|
||||
return Subscription(std::move(source), std::move(cursor));
|
||||
}
|
||||
|
||||
bool MediaSourceHub::stopSourcesForDevice(
|
||||
bool MediaSourceManager::stopSourcesForDevice(
|
||||
const std::string& source_id,
|
||||
std::vector<std::string>* failures) {
|
||||
if (source_id.empty()) {
|
||||
@ -713,11 +713,11 @@ bool MediaSourceHub::stopSourcesForDevice(
|
||||
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);
|
||||
}
|
||||
|
||||
bool MediaSourceHub::stopSources(
|
||||
bool MediaSourceManager::stopSources(
|
||||
const std::optional<std::string>& source_id,
|
||||
std::vector<std::string>* failures) {
|
||||
if (failures) {
|
||||
@ -796,7 +796,7 @@ bool MediaSourceHub::stopSources(
|
||||
return quarantined.empty();
|
||||
}
|
||||
|
||||
void MediaSourceHub::shutdown() {
|
||||
void MediaSourceManager::shutdown() {
|
||||
(void)stopAllSources();
|
||||
}
|
||||
|
||||
@ -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 <chrono>
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
#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 {
|
||||
@ -81,9 +81,9 @@ private:
|
||||
TEST(DeviceMediaSourceAdapterTest,
|
||||
SensorStartUsesFinalCheckAndQuarantineRejectsRestart)
|
||||
{
|
||||
safety::SafetyCoordinatorConfig config;
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyCoordinator coordinator(config);
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeSensorEndpoint>("camera");
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
@ -1,5 +1,5 @@
|
||||
#include "manager/media_source_hub/include/media_source_hub.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "manager/media_source_manager/include/media_source_manager.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
@ -20,7 +20,7 @@ using cmvr::media::Codec;
|
||||
using cmvr::media::MediaFrame;
|
||||
using cmvr::media::MediaFramePtr;
|
||||
using cmvr::media::MediaKind;
|
||||
using cmvr::media::MediaSourceHub;
|
||||
using cmvr::media::MediaSourceManager;
|
||||
using cmvr::media::PayloadFormat;
|
||||
using cmvr::media::Rational;
|
||||
using cmvr::media::TrackDescriptor;
|
||||
@ -349,17 +349,17 @@ void testBroadcastConcurrency() {
|
||||
}
|
||||
|
||||
void testHubLifecycleAndDescriptorRefresh() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto initial_descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
|
||||
std::atomic<int> start_count{0};
|
||||
std::atomic<int> stop_count{0};
|
||||
std::atomic<int> key_frame_requests{0};
|
||||
std::mutex sink_mutex;
|
||||
MediaSourceHub::FrameSink sink;
|
||||
MediaSourceManager::FrameSink sink;
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceHub::FrameSink& callback_sink,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceManager::FrameSink& callback_sink,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(sink_mutex);
|
||||
sink = callback_sink;
|
||||
@ -394,7 +394,7 @@ void testHubLifecycleAndDescriptorRefresh() {
|
||||
|
||||
// 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});
|
||||
MediaSourceHub::FrameSink producer;
|
||||
MediaSourceManager::FrameSink producer;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(sink_mutex);
|
||||
producer = sink;
|
||||
@ -429,14 +429,14 @@ void testHubLifecycleAndDescriptorRefresh() {
|
||||
}
|
||||
|
||||
void testSubscriptionDiscardPending() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
|
||||
std::mutex sink_mutex;
|
||||
MediaSourceHub::FrameSink sink;
|
||||
MediaSourceManager::FrameSink sink;
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceHub::FrameSink& callback_sink,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceManager::FrameSink& callback_sink,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
std::lock_guard<std::mutex> lock(sink_mutex);
|
||||
sink = callback_sink;
|
||||
return true;
|
||||
@ -450,7 +450,7 @@ void testSubscriptionDiscardPending() {
|
||||
auto subscription = hub.subscribe(descriptor->id);
|
||||
CHECK_TRUE(subscription.valid());
|
||||
|
||||
MediaSourceHub::FrameSink producer;
|
||||
MediaSourceManager::FrameSink producer;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(sink_mutex);
|
||||
producer = sink;
|
||||
@ -471,13 +471,13 @@ void testSubscriptionDiscardPending() {
|
||||
}
|
||||
|
||||
void testHubFailedStartAndShutdown() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
|
||||
std::atomic<int> start_attempts{0};
|
||||
std::atomic<int> retry_stop_count{0};
|
||||
MediaSourceHub::SourceCallbacks failed_callbacks;
|
||||
failed_callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks failed_callbacks;
|
||||
failed_callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
return ++start_attempts >= 2;
|
||||
};
|
||||
failed_callbacks.stop = [&] { ++retry_stop_count; };
|
||||
@ -492,9 +492,9 @@ void testHubFailedStartAndShutdown() {
|
||||
CHECK_TRUE(hub.unregisterSource(descriptor->id));
|
||||
|
||||
std::atomic<int> stop_count{0};
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
return true;
|
||||
};
|
||||
callbacks.stop = [&] { ++stop_count; };
|
||||
@ -508,13 +508,13 @@ void testHubFailedStartAndShutdown() {
|
||||
}
|
||||
|
||||
void testHubStopAllSourcesAllowsReregistration() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto first_descriptor = makeVideoDescriptor(Codec::H264, 1);
|
||||
std::atomic<int> first_stop_count{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks first_callbacks;
|
||||
first_callbacks.start = [](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks first_callbacks;
|
||||
first_callbacks.start = [](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
return true;
|
||||
};
|
||||
first_callbacks.stop = [&] { ++first_stop_count; };
|
||||
@ -538,9 +538,9 @@ void testHubStopAllSourcesAllowsReregistration() {
|
||||
const auto second_descriptor = makeVideoDescriptor(Codec::H264, 2);
|
||||
std::atomic<int> second_start_count{0};
|
||||
std::atomic<int> second_stop_count{0};
|
||||
MediaSourceHub::SourceCallbacks second_callbacks;
|
||||
second_callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks second_callbacks;
|
||||
second_callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++second_start_count;
|
||||
return true;
|
||||
};
|
||||
@ -559,13 +559,13 @@ void testHubStopAllSourcesAllowsReregistration() {
|
||||
}
|
||||
|
||||
void testStopAllSourcesReportsAndRetriesUnconfirmedStop() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
|
||||
std::atomic<int> stop_attempts{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
return true;
|
||||
};
|
||||
callbacks.stop_confirmed = [&] {
|
||||
@ -590,7 +590,7 @@ void testStopAllSourcesReportsAndRetriesUnconfirmedStop() {
|
||||
}
|
||||
|
||||
void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto front_video = makeVideoDescriptor(
|
||||
Codec::H264, 1, {}, "front.video", "camera.front");
|
||||
const auto front_depth = makeVideoDescriptor(
|
||||
@ -604,10 +604,10 @@ void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() {
|
||||
auto register_source = [&](
|
||||
const TrackDescriptorPtr& descriptor,
|
||||
std::function<bool()> stop_confirmed) {
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
callbacks.stop_confirmed = std::move(stop_confirmed);
|
||||
return hub.registerSource(descriptor, std::move(callbacks), 2);
|
||||
};
|
||||
@ -665,7 +665,7 @@ void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() {
|
||||
}
|
||||
|
||||
void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto first = makeVideoDescriptor(
|
||||
Codec::H264, 1, {}, "first.video", "camera.first");
|
||||
const auto second = makeVideoDescriptor(
|
||||
@ -677,10 +677,10 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
|
||||
auto register_blocking_source = [&](
|
||||
const TrackDescriptorPtr& descriptor,
|
||||
std::atomic<bool>& entered) {
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
callbacks.stop = [&entered, &release_stops] {
|
||||
entered.store(true, std::memory_order_release);
|
||||
while (!release_stops.load(std::memory_order_acquire)) {
|
||||
@ -720,10 +720,10 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
|
||||
}
|
||||
CHECK_TRUE(second_stop_entered.load(std::memory_order_acquire));
|
||||
|
||||
MediaSourceHub::SourceCallbacks replacement_callbacks;
|
||||
MediaSourceManager::SourceCallbacks replacement_callbacks;
|
||||
replacement_callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
replacement_callbacks.stop = [] {};
|
||||
auto matching_registration = std::async(std::launch::async, [&] {
|
||||
return hub.registerSource(
|
||||
@ -760,7 +760,7 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() {
|
||||
}
|
||||
|
||||
void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto first = makeVideoDescriptor(
|
||||
Codec::H264, 1, {}, "first.video", "camera.first");
|
||||
const auto other = makeVideoDescriptor(
|
||||
@ -769,10 +769,10 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
|
||||
std::atomic<bool> release_first_stop{false};
|
||||
std::atomic<int> other_stops{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks first_callbacks;
|
||||
MediaSourceManager::SourceCallbacks first_callbacks;
|
||||
first_callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
first_callbacks.stop = [&] {
|
||||
first_stop_entered.store(true, std::memory_order_release);
|
||||
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);
|
||||
|
||||
MediaSourceHub::SourceCallbacks other_callbacks;
|
||||
MediaSourceManager::SourceCallbacks other_callbacks;
|
||||
other_callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
other_callbacks.stop = [&] { ++other_stops; };
|
||||
CHECK_TRUE(hub.registerSource(other, std::move(other_callbacks), 2));
|
||||
auto other_subscription = hub.subscribe(other->id);
|
||||
@ -824,15 +824,15 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() {
|
||||
}
|
||||
|
||||
void testConcurrentRegistrationWaitsForStopAllSources() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
|
||||
std::atomic<bool> stop_entered{false};
|
||||
std::atomic<bool> release_stop{false};
|
||||
std::atomic<int> old_stop_count{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks old_callbacks;
|
||||
old_callbacks.start = [](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks old_callbacks;
|
||||
old_callbacks.start = [](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
return true;
|
||||
};
|
||||
old_callbacks.stop = [&] {
|
||||
@ -856,9 +856,9 @@ void testConcurrentRegistrationWaitsForStopAllSources() {
|
||||
CHECK_TRUE(stop_entered.load(std::memory_order_acquire));
|
||||
|
||||
std::atomic<int> new_start_count{0};
|
||||
MediaSourceHub::SourceCallbacks new_callbacks;
|
||||
new_callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks new_callbacks;
|
||||
new_callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++new_start_count;
|
||||
return true;
|
||||
};
|
||||
@ -889,7 +889,7 @@ void testConcurrentRegistrationWaitsForStopAllSources() {
|
||||
|
||||
void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
|
||||
cmvr::service::StopAllAdmissionGate admission_gate;
|
||||
MediaSourceHub hub(&admission_gate);
|
||||
MediaSourceManager hub(&admission_gate);
|
||||
const auto dormant = makeVideoDescriptor(
|
||||
Codec::H264, 1, {}, "dormant.video", "camera.dormant");
|
||||
const auto new_source = makeVideoDescriptor(
|
||||
@ -897,10 +897,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
|
||||
std::atomic<int> dormant_starts{0};
|
||||
std::atomic<int> new_starts{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks dormant_callbacks;
|
||||
MediaSourceManager::SourceCallbacks dormant_callbacks;
|
||||
dormant_callbacks.start = [&](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++dormant_starts;
|
||||
return true;
|
||||
};
|
||||
@ -911,10 +911,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
|
||||
const auto stop_ticket = admission_gate.beginStopAll();
|
||||
CHECK_TRUE(stop_ticket.valid());
|
||||
|
||||
MediaSourceHub::SourceCallbacks rejected_callbacks;
|
||||
MediaSourceManager::SourceCallbacks rejected_callbacks;
|
||||
rejected_callbacks.start = [&](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++new_starts;
|
||||
return true;
|
||||
};
|
||||
@ -928,10 +928,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
|
||||
|
||||
CHECK_TRUE(admission_gate.finishStopAll(stop_ticket, true));
|
||||
|
||||
MediaSourceHub::SourceCallbacks recovered_callbacks;
|
||||
MediaSourceManager::SourceCallbacks recovered_callbacks;
|
||||
recovered_callbacks.start = [&](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++new_starts;
|
||||
return true;
|
||||
};
|
||||
@ -949,7 +949,7 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() {
|
||||
|
||||
void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
|
||||
cmvr::service::StopAllAdmissionGate admission_gate;
|
||||
MediaSourceHub hub(&admission_gate);
|
||||
MediaSourceManager hub(&admission_gate);
|
||||
const auto old_source = makeVideoDescriptor(
|
||||
Codec::H264, 1, {}, "old.video", "camera.shared");
|
||||
const auto replacement = makeVideoDescriptor(
|
||||
@ -957,10 +957,10 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
|
||||
std::atomic<bool> stop_entered{false};
|
||||
std::atomic<bool> release_stop{false};
|
||||
|
||||
MediaSourceHub::SourceCallbacks old_callbacks;
|
||||
MediaSourceManager::SourceCallbacks old_callbacks;
|
||||
old_callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
old_callbacks.stop = [&] {
|
||||
stop_entered.store(true, std::memory_order_release);
|
||||
while (!release_stop.load(std::memory_order_acquire)) {
|
||||
@ -983,10 +983,10 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
|
||||
CHECK_TRUE(stop_entered.load(std::memory_order_acquire));
|
||||
|
||||
auto make_replacement_callbacks = [] {
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) { return true; };
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) { return true; };
|
||||
callbacks.stop = [] {};
|
||||
return callbacks;
|
||||
};
|
||||
@ -1021,17 +1021,17 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() {
|
||||
|
||||
void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() {
|
||||
cmvr::service::StopAllAdmissionGate admission_gate;
|
||||
MediaSourceHub hub(&admission_gate);
|
||||
MediaSourceManager hub(&admission_gate);
|
||||
const auto descriptor = makeVideoDescriptor(
|
||||
Codec::H264, 1, {}, "waiting.video", "camera.waiting");
|
||||
std::atomic<bool> stop_entered{false};
|
||||
std::atomic<bool> release_stop{false};
|
||||
std::atomic<int> starts{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](
|
||||
const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++starts;
|
||||
return true;
|
||||
};
|
||||
@ -1084,15 +1084,15 @@ void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() {
|
||||
}
|
||||
|
||||
void testStopAllSourcesCancelsStartingSourceBeforeReuse() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
|
||||
std::atomic<bool> old_start_entered{false};
|
||||
std::atomic<bool> release_old_start{false};
|
||||
std::atomic<int> old_stop_count{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks old_callbacks;
|
||||
old_callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate& cancelled) {
|
||||
MediaSourceManager::SourceCallbacks old_callbacks;
|
||||
old_callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate& cancelled) {
|
||||
old_start_entered.store(true, std::memory_order_release);
|
||||
while (!release_old_start.load(std::memory_order_acquire)) {
|
||||
if (cancelled()) {
|
||||
@ -1134,9 +1134,9 @@ void testStopAllSourcesCancelsStartingSourceBeforeReuse() {
|
||||
CHECK_TRUE(hub.stopAllSources());
|
||||
|
||||
std::atomic<int> new_start_count{0};
|
||||
MediaSourceHub::SourceCallbacks new_callbacks;
|
||||
new_callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks new_callbacks;
|
||||
new_callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
++new_start_count;
|
||||
return true;
|
||||
};
|
||||
@ -1150,15 +1150,15 @@ void testStopAllSourcesCancelsStartingSourceBeforeReuse() {
|
||||
}
|
||||
|
||||
void testKeyFrameRequestIsOrderedBeforeStop() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::H264, 1);
|
||||
std::atomic<bool> key_frame_entered{false};
|
||||
std::atomic<bool> release_key_frame{false};
|
||||
std::atomic<int> stop_count{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
return true;
|
||||
};
|
||||
callbacks.stop = [&] { ++stop_count; };
|
||||
@ -1196,14 +1196,14 @@ void testKeyFrameRequestIsOrderedBeforeStop() {
|
||||
}
|
||||
|
||||
void testHubCancelsBlockedStartWithoutBlockingShutdown() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
|
||||
std::atomic<bool> start_entered{false};
|
||||
std::atomic<bool> start_exited{false};
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate& cancelled) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate& cancelled) {
|
||||
start_entered.store(true, std::memory_order_release);
|
||||
while (!cancelled()) {
|
||||
std::this_thread::sleep_for(2ms);
|
||||
@ -1246,16 +1246,16 @@ void testHubCancelsBlockedStartWithoutBlockingShutdown() {
|
||||
}
|
||||
|
||||
void testHubQuarantinesNonCooperativeStart() {
|
||||
MediaSourceHub hub;
|
||||
MediaSourceManager hub;
|
||||
const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1);
|
||||
std::atomic<bool> start_entered{false};
|
||||
std::atomic<bool> release_start{false};
|
||||
std::atomic<bool> start_exited{false};
|
||||
std::atomic<int> stop_count{0};
|
||||
|
||||
MediaSourceHub::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceHub::FrameSink&,
|
||||
const MediaSourceHub::CancelPredicate&) {
|
||||
MediaSourceManager::SourceCallbacks callbacks;
|
||||
callbacks.start = [&](const MediaSourceManager::FrameSink&,
|
||||
const MediaSourceManager::CancelPredicate&) {
|
||||
start_entered.store(true, std::memory_order_release);
|
||||
while (!release_start.load(std::memory_order_acquire)) {
|
||||
std::this_thread::sleep_for(2ms);
|
||||
@ -1330,9 +1330,9 @@ int main() {
|
||||
testHubQuarantinesNonCooperativeStart();
|
||||
|
||||
if (failures != 0) {
|
||||
std::cerr << failures << " media_source_hub checks failed\n";
|
||||
std::cerr << failures << " media_source_manager checks failed\n";
|
||||
return 1;
|
||||
}
|
||||
std::cout << "media_source_hub self-test passed\n";
|
||||
std::cout << "media_source_manager self-test passed\n";
|
||||
return 0;
|
||||
}
|
||||
@ -1,28 +1,28 @@
|
||||
add_library(safety_coordinator STATIC
|
||||
add_library(safety_manager STATIC
|
||||
src/command_ledger.cpp
|
||||
src/safety_coordinator.cpp
|
||||
src/safety_manager.cpp
|
||||
src/safety_reason.cpp
|
||||
src/safety_snapshot_store.cpp
|
||||
)
|
||||
|
||||
target_include_directories(safety_coordinator PUBLIC
|
||||
target_include_directories(safety_manager PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/cmvr-es
|
||||
)
|
||||
|
||||
target_link_libraries(safety_coordinator PUBLIC
|
||||
cmvr_es::control_authority
|
||||
target_link_libraries(safety_manager PUBLIC
|
||||
cmvr_es::control_authority_manager
|
||||
)
|
||||
|
||||
add_library(cmvr_es::safety_coordinator ALIAS safety_coordinator)
|
||||
install(TARGETS safety_coordinator LIBRARY DESTINATION lib)
|
||||
add_library(cmvr_es::safety_manager ALIAS safety_manager)
|
||||
install(TARGETS safety_manager LIBRARY DESTINATION lib)
|
||||
|
||||
if(BUILD_TESTING)
|
||||
add_executable(safety_snapshot_store_test
|
||||
tests/safety_snapshot_store_test.cpp
|
||||
)
|
||||
target_link_libraries(safety_snapshot_store_test PRIVATE
|
||||
cmvr_es::safety_coordinator
|
||||
cmvr_es::safety_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
@ -37,7 +37,7 @@ if(BUILD_TESTING)
|
||||
tests/command_ledger_test.cpp
|
||||
)
|
||||
target_link_libraries(command_ledger_test PRIVATE
|
||||
cmvr_es::safety_coordinator
|
||||
cmvr_es::safety_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
@ -48,18 +48,18 @@ if(BUILD_TESTING)
|
||||
)
|
||||
set_tests_properties(command_ledger_test PROPERTIES TIMEOUT 10)
|
||||
|
||||
add_executable(safety_coordinator_test
|
||||
tests/safety_coordinator_test.cpp
|
||||
add_executable(safety_manager_test
|
||||
tests/safety_manager_test.cpp
|
||||
)
|
||||
target_link_libraries(safety_coordinator_test PRIVATE
|
||||
cmvr_es::safety_coordinator
|
||||
target_link_libraries(safety_manager_test PRIVATE
|
||||
cmvr_es::safety_manager
|
||||
gtest
|
||||
gtest_main
|
||||
pthread
|
||||
)
|
||||
add_test(
|
||||
NAME safety_coordinator_test
|
||||
COMMAND safety_coordinator_test
|
||||
NAME safety_manager_test
|
||||
COMMAND safety_manager_test
|
||||
)
|
||||
set_tests_properties(safety_coordinator_test PROPERTIES TIMEOUT 15)
|
||||
set_tests_properties(safety_manager_test PROPERTIES TIMEOUT 15)
|
||||
endif()
|
||||
@ -9,7 +9,7 @@
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "manager/safety/include/safety_types.h"
|
||||
#include "manager/safety_manager/include/safety_types.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
#include "manager/safety/include/safety_types.h"
|
||||
#include "manager/safety_manager/include/safety_types.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -10,14 +10,14 @@
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
#include "manager/safety/include/command_ledger.h"
|
||||
#include "manager/safety/include/device_safety_endpoint.h"
|
||||
#include "manager/safety/include/safety_participant.h"
|
||||
#include "manager/safety/include/safety_snapshot_store.h"
|
||||
#include "manager/safety_manager/include/command_ledger.h"
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
#include "manager/safety_manager/include/safety_participant.h"
|
||||
#include "manager/safety_manager/include/safety_snapshot_store.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
struct SafetyCoordinatorConfig {
|
||||
struct SafetyManagerConfig {
|
||||
EnforcementMode enforcement_mode{EnforcementMode::Shadow};
|
||||
std::unordered_set<std::string> enforced_device_ids;
|
||||
std::chrono::milliseconds stop_all_timeout{15000};
|
||||
@ -72,7 +72,7 @@ struct ParticipantSafetyStateView {
|
||||
ParticipantResultView last_release;
|
||||
};
|
||||
|
||||
struct SafetyCoordinatorSnapshot {
|
||||
struct SafetyManagerSnapshot {
|
||||
SystemAdmissionState system_state{SystemAdmissionState::Starting};
|
||||
std::uint64_t safety_epoch{0};
|
||||
std::string service_instance_id;
|
||||
@ -135,7 +135,7 @@ struct RecoveryResult {
|
||||
std::vector<SafetyTargetResult> targets;
|
||||
};
|
||||
|
||||
class SafetyCoordinator;
|
||||
class SafetyManager;
|
||||
|
||||
class DispatchGuard final {
|
||||
public:
|
||||
@ -153,23 +153,23 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
friend class SafetyCoordinator;
|
||||
DispatchGuard(SafetyCoordinator* coordinator,
|
||||
friend class SafetyManager;
|
||||
DispatchGuard(SafetyManager* coordinator,
|
||||
std::string device_id,
|
||||
HardwareCheckResult hardware_check) noexcept;
|
||||
void reset_() noexcept;
|
||||
|
||||
SafetyCoordinator* coordinator_{nullptr};
|
||||
SafetyManager* coordinator_{nullptr};
|
||||
std::string device_id_;
|
||||
HardwareCheckResult hardware_check_;
|
||||
};
|
||||
|
||||
class SafetyCoordinator final {
|
||||
class SafetyManager final {
|
||||
public:
|
||||
explicit SafetyCoordinator(SafetyCoordinatorConfig config = {});
|
||||
~SafetyCoordinator();
|
||||
SafetyCoordinator(const SafetyCoordinator&) = delete;
|
||||
SafetyCoordinator& operator=(const SafetyCoordinator&) = delete;
|
||||
explicit SafetyManager(SafetyManagerConfig config = {});
|
||||
~SafetyManager();
|
||||
SafetyManager(const SafetyManager&) = delete;
|
||||
SafetyManager& operator=(const SafetyManager&) = delete;
|
||||
|
||||
bool registerDevice(DeviceSafetyRegistration registration);
|
||||
bool unregisterDevice(const std::string& device_id);
|
||||
@ -205,13 +205,13 @@ public:
|
||||
SafetyClock::time_point deadline = SafetyClock::time_point::max());
|
||||
RecoveryResult recover(const RecoveryRequest& request);
|
||||
|
||||
SafetyCoordinatorSnapshot snapshot() const;
|
||||
SafetyManagerSnapshot snapshot() const;
|
||||
SafetySnapshotStore& snapshotStore() noexcept;
|
||||
const SafetySnapshotStore& snapshotStore() const noexcept;
|
||||
CommandLedger& commandLedger() noexcept;
|
||||
const CommandLedger& commandLedger() const noexcept;
|
||||
const std::string& serviceInstanceId() const noexcept;
|
||||
const SafetyCoordinatorConfig& config() const noexcept;
|
||||
const SafetyManagerConfig& config() const noexcept;
|
||||
|
||||
private:
|
||||
friend class DispatchGuard;
|
||||
@ -5,7 +5,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "manager/safety/include/safety_types.h"
|
||||
#include "manager/safety_manager/include/safety_types.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "manager/safety/include/safety_types.h"
|
||||
#include "manager/safety_manager/include/safety_types.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "devices/device_types.h"
|
||||
#include "manager/safety/include/safety_reason.h"
|
||||
#include "manager/safety_manager/include/safety_reason.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/command_ledger.h"
|
||||
#include "manager/safety_manager/include/command_ledger.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cctype>
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/safety_coordinator.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
@ -187,10 +187,10 @@ int phaseRank(const ParticipantPhase phase) noexcept
|
||||
|
||||
} // namespace
|
||||
|
||||
struct SafetyCoordinator::Impl {
|
||||
struct SafetyManager::Impl {
|
||||
struct PublisherBinding {
|
||||
std::atomic<bool> active{true};
|
||||
SafetyCoordinator* coordinator{nullptr};
|
||||
SafetyManager* coordinator{nullptr};
|
||||
};
|
||||
|
||||
struct DeviceSlot {
|
||||
@ -240,7 +240,7 @@ struct SafetyCoordinator::Impl {
|
||||
RecoveryResult result;
|
||||
};
|
||||
|
||||
explicit Impl(SafetyCoordinatorConfig source)
|
||||
explicit Impl(SafetyManagerConfig source)
|
||||
: config(std::move(source)),
|
||||
ledger(config.command_ledger),
|
||||
service_instance_id(makeInstanceId()),
|
||||
@ -249,7 +249,7 @@ struct SafetyCoordinator::Impl {
|
||||
if (config.stop_all_timeout <= std::chrono::milliseconds::zero() ||
|
||||
config.recovery_timeout <= std::chrono::milliseconds::zero() ||
|
||||
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;
|
||||
}
|
||||
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
SafetySnapshotStore snapshots;
|
||||
CommandLedger ledger;
|
||||
const std::string service_instance_id;
|
||||
@ -367,7 +367,7 @@ struct SafetyCoordinator::Impl {
|
||||
};
|
||||
|
||||
DispatchGuard::DispatchGuard(
|
||||
SafetyCoordinator* coordinator,
|
||||
SafetyManager* coordinator,
|
||||
std::string device_id,
|
||||
HardwareCheckResult hardware_check) noexcept
|
||||
: coordinator_(coordinator),
|
||||
@ -408,12 +408,12 @@ void DispatchGuard::reset_() noexcept
|
||||
coordinator->endDispatch_(device_id_);
|
||||
}
|
||||
|
||||
SafetyCoordinator::SafetyCoordinator(SafetyCoordinatorConfig config)
|
||||
SafetyManager::SafetyManager(SafetyManagerConfig config)
|
||||
: impl_(std::make_unique<Impl>(std::move(config)))
|
||||
{
|
||||
}
|
||||
|
||||
SafetyCoordinator::~SafetyCoordinator()
|
||||
SafetyManager::~SafetyManager()
|
||||
{
|
||||
beginShutdown();
|
||||
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() ||
|
||||
registration.descriptor.maximum_snapshot_age <=
|
||||
@ -531,7 +531,7 @@ bool SafetyCoordinator::registerDevice(DeviceSafetyRegistration registration)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SafetyCoordinator::unregisterDevice(const std::string& device_id)
|
||||
bool SafetyManager::unregisterDevice(const std::string& device_id)
|
||||
{
|
||||
std::shared_ptr<DeviceSafetyEndpoint> endpoint;
|
||||
std::string participant_id;
|
||||
@ -576,7 +576,7 @@ bool SafetyCoordinator::unregisterDevice(const std::string& device_id)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SafetyCoordinator::registerParticipant(
|
||||
bool SafetyManager::registerParticipant(
|
||||
std::shared_ptr<SafetyParticipant> participant)
|
||||
{
|
||||
if (!participant) {
|
||||
@ -597,7 +597,7 @@ bool SafetyCoordinator::registerParticipant(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SafetyCoordinator::unregisterParticipant(
|
||||
bool SafetyManager::unregisterParticipant(
|
||||
const std::string& participant_id)
|
||||
{
|
||||
std::lock_guard lock(impl_->mutex);
|
||||
@ -615,7 +615,7 @@ bool SafetyCoordinator::unregisterParticipant(
|
||||
return true;
|
||||
}
|
||||
|
||||
void SafetyCoordinator::updateDeviceRuntimeState(
|
||||
void SafetyManager::updateDeviceRuntimeState(
|
||||
const std::string& device_id,
|
||||
const device::ManagedDeviceState lifecycle,
|
||||
device::DeviceHealthSnapshot health)
|
||||
@ -633,7 +633,7 @@ void SafetyCoordinator::updateDeviceRuntimeState(
|
||||
impl_->state_changed.notify_all();
|
||||
}
|
||||
|
||||
bool SafetyCoordinator::publishSafetySnapshot(DeviceSafetySnapshot snapshot)
|
||||
bool SafetyManager::publishSafetySnapshot(DeviceSafetySnapshot snapshot)
|
||||
{
|
||||
const std::string device_id = snapshot.device_id;
|
||||
if (!impl_->snapshots.publish(std::move(snapshot))) {
|
||||
@ -679,7 +679,7 @@ bool SafetyCoordinator::publishSafetySnapshot(DeviceSafetySnapshot snapshot)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::optional<std::uint64_t> SafetyCoordinator::advanceDeviceGeneration(
|
||||
std::optional<std::uint64_t> SafetyManager::advanceDeviceGeneration(
|
||||
const std::string& device_id)
|
||||
{
|
||||
const auto generation = impl_->snapshots.bumpGeneration(device_id);
|
||||
@ -709,7 +709,7 @@ std::optional<std::uint64_t> SafetyCoordinator::advanceDeviceGeneration(
|
||||
return generation;
|
||||
}
|
||||
|
||||
StartupCoverageResult SafetyCoordinator::validateStartupCoverage(
|
||||
StartupCoverageResult SafetyManager::validateStartupCoverage(
|
||||
const SafetyClock::time_point deadline)
|
||||
{
|
||||
struct Target {
|
||||
@ -844,7 +844,7 @@ StartupCoverageResult SafetyCoordinator::validateStartupCoverage(
|
||||
return result;
|
||||
}
|
||||
|
||||
void SafetyCoordinator::markStartupComplete()
|
||||
void SafetyManager::markStartupComplete()
|
||||
{
|
||||
std::lock_guard lock(impl_->mutex);
|
||||
if (impl_->system_state != SystemAdmissionState::Starting) {
|
||||
@ -863,7 +863,7 @@ void SafetyCoordinator::markStartupComplete()
|
||||
impl_->state_changed.notify_all();
|
||||
}
|
||||
|
||||
void SafetyCoordinator::beginShutdown() noexcept
|
||||
void SafetyManager::beginShutdown() noexcept
|
||||
{
|
||||
if (!impl_) {
|
||||
return;
|
||||
@ -885,7 +885,7 @@ void SafetyCoordinator::beginShutdown() noexcept
|
||||
}
|
||||
}
|
||||
|
||||
AdmissionDecision SafetyCoordinator::evaluate(
|
||||
AdmissionDecision SafetyManager::evaluate(
|
||||
const AdmissionRequest& request) const
|
||||
{
|
||||
AdmissionDecision decision;
|
||||
@ -1039,7 +1039,7 @@ AdmissionDecision SafetyCoordinator::evaluate(
|
||||
return allow();
|
||||
}
|
||||
|
||||
AdmissionResult SafetyCoordinator::admit(const AdmissionRequest& request)
|
||||
AdmissionResult SafetyManager::admit(const AdmissionRequest& request)
|
||||
{
|
||||
AdmissionResult result;
|
||||
result.decision = evaluate(request);
|
||||
@ -1060,7 +1060,7 @@ AdmissionResult SafetyCoordinator::admit(const AdmissionRequest& request)
|
||||
return result;
|
||||
}
|
||||
|
||||
HardwareCheckResult SafetyCoordinator::revalidatePermit(
|
||||
HardwareCheckResult SafetyManager::revalidatePermit(
|
||||
const AdmissionPermit& permit) const
|
||||
{
|
||||
const auto rejected = [](const SafetyReason reason, std::string detail) {
|
||||
@ -1114,7 +1114,7 @@ HardwareCheckResult SafetyCoordinator::revalidatePermit(
|
||||
return {true, SafetyReason::None, {}};
|
||||
}
|
||||
|
||||
DispatchGuard SafetyCoordinator::beginDispatch(
|
||||
DispatchGuard SafetyManager::beginDispatch(
|
||||
const AdmissionPermit& permit)
|
||||
{
|
||||
const auto rejected = [&permit](
|
||||
@ -1205,7 +1205,7 @@ DispatchGuard SafetyCoordinator::beginDispatch(
|
||||
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 {
|
||||
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 SafetyReason reason,
|
||||
std::string operation_id)
|
||||
@ -1245,7 +1245,7 @@ void SafetyCoordinator::quarantineDevice(
|
||||
impl_->state_changed.notify_all();
|
||||
}
|
||||
|
||||
StopAllResult SafetyCoordinator::stopAll(
|
||||
StopAllResult SafetyManager::stopAll(
|
||||
std::string operation_id,
|
||||
SafetyClock::time_point deadline)
|
||||
{
|
||||
@ -1754,7 +1754,7 @@ StopAllResult SafetyCoordinator::stopAll(
|
||||
return result;
|
||||
}
|
||||
|
||||
RecoveryResult SafetyCoordinator::recover(const RecoveryRequest& request)
|
||||
RecoveryResult SafetyManager::recover(const RecoveryRequest& request)
|
||||
{
|
||||
RecoveryResult invalid;
|
||||
invalid.recovery_id = request.recovery_id;
|
||||
@ -2323,9 +2323,9 @@ RecoveryResult SafetyCoordinator::recover(const RecoveryRequest& request)
|
||||
return result;
|
||||
}
|
||||
|
||||
SafetyCoordinatorSnapshot SafetyCoordinator::snapshot() const
|
||||
SafetyManagerSnapshot SafetyManager::snapshot() const
|
||||
{
|
||||
SafetyCoordinatorSnapshot result;
|
||||
SafetyManagerSnapshot result;
|
||||
std::lock_guard lock(impl_->mutex);
|
||||
result.system_state = impl_->system_state;
|
||||
result.safety_epoch = impl_->safety_epoch;
|
||||
@ -2376,32 +2376,32 @@ SafetyCoordinatorSnapshot SafetyCoordinator::snapshot() const
|
||||
return result;
|
||||
}
|
||||
|
||||
SafetySnapshotStore& SafetyCoordinator::snapshotStore() noexcept
|
||||
SafetySnapshotStore& SafetyManager::snapshotStore() noexcept
|
||||
{
|
||||
return impl_->snapshots;
|
||||
}
|
||||
|
||||
const SafetySnapshotStore& SafetyCoordinator::snapshotStore() const noexcept
|
||||
const SafetySnapshotStore& SafetyManager::snapshotStore() const noexcept
|
||||
{
|
||||
return impl_->snapshots;
|
||||
}
|
||||
|
||||
CommandLedger& SafetyCoordinator::commandLedger() noexcept
|
||||
CommandLedger& SafetyManager::commandLedger() noexcept
|
||||
{
|
||||
return impl_->ledger;
|
||||
}
|
||||
|
||||
const CommandLedger& SafetyCoordinator::commandLedger() const noexcept
|
||||
const CommandLedger& SafetyManager::commandLedger() const noexcept
|
||||
{
|
||||
return impl_->ledger;
|
||||
}
|
||||
|
||||
const std::string& SafetyCoordinator::serviceInstanceId() const noexcept
|
||||
const std::string& SafetyManager::serviceInstanceId() const noexcept
|
||||
{
|
||||
return impl_->service_instance_id;
|
||||
}
|
||||
|
||||
const SafetyCoordinatorConfig& SafetyCoordinator::config() const noexcept
|
||||
const SafetyManagerConfig& SafetyManager::config() const noexcept
|
||||
{
|
||||
return impl_->config;
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/safety_reason.h"
|
||||
#include "manager/safety_manager/include/safety_reason.h"
|
||||
|
||||
namespace cmvr::safety {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/safety_snapshot_store.h"
|
||||
#include "manager/safety_manager/include/safety_snapshot_store.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <limits>
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/command_ledger.h"
|
||||
#include "manager/safety_manager/include/command_ledger.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/safety_coordinator.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
@ -166,9 +166,9 @@ AdmissionRequest actuateRequest()
|
||||
return request;
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, ShadowReportsDenyWithoutChangingLegacyBehavior)
|
||||
TEST(SafetyManagerTest, ShadowReportsDenyWithoutChangingLegacyBehavior)
|
||||
{
|
||||
SafetyCoordinator coordinator;
|
||||
SafetyManager coordinator;
|
||||
ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
@ -180,22 +180,22 @@ TEST(SafetyCoordinatorTest, ShadowReportsDenyWithoutChangingLegacyBehavior)
|
||||
EXPECT_TRUE(result.permit.has_value());
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest,
|
||||
TEST(SafetyManagerTest,
|
||||
EnforceSelectedStartupRejectsEmptyOrUnknownCoverage)
|
||||
{
|
||||
SafetyCoordinatorConfig empty_config;
|
||||
SafetyManagerConfig empty_config;
|
||||
empty_config.enforcement_mode = EnforcementMode::EnforceSelected;
|
||||
SafetyCoordinator empty(empty_config);
|
||||
SafetyManager empty(empty_config);
|
||||
const auto empty_result = empty.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(10));
|
||||
ASSERT_FALSE(empty_result.ready);
|
||||
ASSERT_EQ(empty_result.issues.size(), 1U);
|
||||
EXPECT_EQ(empty_result.issues.front().reason, SafetyReason::InvalidArgument);
|
||||
|
||||
SafetyCoordinatorConfig missing_config;
|
||||
SafetyManagerConfig missing_config;
|
||||
missing_config.enforcement_mode = EnforcementMode::EnforceSelected;
|
||||
missing_config.enforced_device_ids.insert("missing-arm");
|
||||
SafetyCoordinator missing(missing_config);
|
||||
SafetyManager missing(missing_config);
|
||||
const auto missing_result = missing.validateStartupCoverage(
|
||||
SafetyClock::now() + std::chrono::milliseconds(10));
|
||||
ASSERT_FALSE(missing_result.ready);
|
||||
@ -204,13 +204,13 @@ TEST(SafetyCoordinatorTest,
|
||||
EXPECT_EQ(missing_result.issues.front().reason, SafetyReason::DeviceNotFound);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest,
|
||||
TEST(SafetyManagerTest,
|
||||
EnforceAllStartupRequiresEndpointParticipantAndFreshSnapshot)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
|
||||
SafetyCoordinator missing_capability(config);
|
||||
SafetyManager missing_capability(config);
|
||||
ASSERT_TRUE(missing_capability.registerDevice(
|
||||
{controlDescriptor(), {}, {}}));
|
||||
const auto structural = missing_capability.validateStartupCoverage(
|
||||
@ -218,7 +218,7 @@ TEST(SafetyCoordinatorTest,
|
||||
EXPECT_FALSE(structural.ready);
|
||||
EXPECT_EQ(structural.issues.size(), 2U);
|
||||
|
||||
SafetyCoordinator missing_sample(config);
|
||||
SafetyManager missing_sample(config);
|
||||
auto silent_endpoint =
|
||||
std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
silent_endpoint->publish_on_refresh = false;
|
||||
@ -233,12 +233,12 @@ TEST(SafetyCoordinatorTest,
|
||||
EXPECT_EQ(stale.issues.front().reason, SafetyReason::SafetyStateMissing);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest,
|
||||
TEST(SafetyManagerTest,
|
||||
HardwareUnsafeSnapshotBlocksAdmissionButNotStructuralStartup)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Unsafe;
|
||||
endpoint->emergency_stop = TriState::True;
|
||||
@ -258,11 +258,11 @@ TEST(SafetyCoordinatorTest,
|
||||
admission.decision.reason, SafetyReason::EmergencyStopActive);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, EnforceAllFailsClosedOnUnknownControlState)
|
||||
TEST(SafetyManagerTest, EnforceAllFailsClosedOnUnknownControlState)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}}));
|
||||
coordinator.markStartupComplete();
|
||||
|
||||
@ -273,11 +273,11 @@ TEST(SafetyCoordinatorTest, EnforceAllFailsClosedOnUnknownControlState)
|
||||
EXPECT_FALSE(result.permit.has_value());
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, ControlSafetyBitsMustBeExplicitlyFalse)
|
||||
TEST(SafetyManagerTest, ControlSafetyBitsMustBeExplicitlyFalse)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->protective_stop = TriState::Unknown;
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
@ -296,11 +296,11 @@ TEST(SafetyCoordinatorTest, ControlSafetyBitsMustBeExplicitlyFalse)
|
||||
DeviceAdmissionState::Blocked);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, EnforcedDispatchRunsFinalHardwareCheck)
|
||||
TEST(SafetyManagerTest, EnforcedDispatchRunsFinalHardwareCheck)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{controlDescriptor(), endpoint, {}}));
|
||||
@ -317,12 +317,12 @@ TEST(SafetyCoordinatorTest, EnforcedDispatchRunsFinalHardwareCheck)
|
||||
EXPECT_EQ(endpoint->hardware_checks.load(), 1);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest,
|
||||
TEST(SafetyManagerTest,
|
||||
StartActivityMayEnterFromRestrictedButActuationMayNot)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
endpoint->condition = SafetyCondition::Restricted;
|
||||
endpoint->ready = TriState::False;
|
||||
@ -346,11 +346,11 @@ TEST(SafetyCoordinatorTest,
|
||||
EXPECT_EQ(actuation.decision.reason, SafetyReason::HardwareUnsafe);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, SuccessfulStopInvalidatesOldPermitAndReopens)
|
||||
TEST(SafetyManagerTest, SuccessfulStopInvalidatesOldPermitAndReopens)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
@ -388,11 +388,11 @@ TEST(SafetyCoordinatorTest, SuccessfulStopInvalidatesOldPermitAndReopens)
|
||||
EXPECT_TRUE(snapshot.participants.front().last_release.success);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, FailedStopRequiresVerifiedRecovery)
|
||||
TEST(SafetyManagerTest, FailedStopRequiresVerifiedRecovery)
|
||||
{
|
||||
SafetyCoordinatorConfig config;
|
||||
SafetyManagerConfig config;
|
||||
config.enforcement_mode = EnforcementMode::EnforceAll;
|
||||
SafetyCoordinator coordinator(config);
|
||||
SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
participant->verify_result = {
|
||||
@ -437,9 +437,9 @@ TEST(SafetyCoordinatorTest, FailedStopRequiresVerifiedRecovery)
|
||||
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 participant = std::make_shared<FakeParticipant>();
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
@ -466,9 +466,9 @@ TEST(SafetyCoordinatorTest, RecoveryCannotIgnoreEmergencyStop)
|
||||
EXPECT_EQ(endpoint->recoveries.load(), 0);
|
||||
}
|
||||
|
||||
TEST(SafetyCoordinatorTest, RecoveryAuditFailureCannotReleaseLatch)
|
||||
TEST(SafetyManagerTest, RecoveryAuditFailureCannotReleaseLatch)
|
||||
{
|
||||
SafetyCoordinator coordinator;
|
||||
SafetyManager coordinator;
|
||||
auto endpoint = std::make_shared<FakeEndpoint>(controlDescriptor());
|
||||
auto participant = std::make_shared<FakeParticipant>();
|
||||
participant->verify_result = {
|
||||
@ -1,4 +1,4 @@
|
||||
#include "manager/safety/include/safety_snapshot_store.h"
|
||||
#include "manager/safety_manager/include/safety_snapshot_store.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
#include "common/base/logging/logger.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"
|
||||
|
||||
using namespace cmvr;
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
|
||||
#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"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -1,548 +1,4 @@
|
||||
|
||||
add_library(service
|
||||
stop_all/src/stop_operation_dispatcher.cpp
|
||||
action/src/action_queue_executor.cpp
|
||||
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
|
||||
)
|
||||
# Service is intentionally split by transport. The QUIC edge target is added
|
||||
# from the project root before task targets; the gRPC tree is added here after
|
||||
# its manager and task dependencies are available.
|
||||
add_subdirectory(grpc)
|
||||
|
||||
@ -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/` | 入站设备控制、状态查询和兼容流式接口 |
|
||||
| `grpc/action/` | SystemService ActionQueue 的校验、幂等账本和边缘端 FIFO 执行器 |
|
||||
| `grpc/client/` | 面向边缘端内部调用的 gRPC client |
|
||||
| `grpc/server/` | 入站设备控制、状态查询、兼容流式接口和安全控制面 |
|
||||
| `grpc/stop_all/` | 不进入普通命令队列的高优先级停止通道 |
|
||||
| `quic_edge/` | 边缘端主动连接平台的 QUIC client、控制状态机和媒体 packetizer |
|
||||
| `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 的职责边界:
|
||||
|
||||
@ -99,10 +118,10 @@ ActionQueue 遵循以下执行语义:
|
||||
|
||||
- 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)
|
||||
- 实现:[`grpc/include/grpc_motor_service.h`](grpc/include/grpc_motor_service.h)
|
||||
和 [`grpc/src/grpc_motor_service.cpp`](grpc/src/grpc_motor_service.cpp)
|
||||
- 实现:[`grpc/server/include/grpc_motor_service.h`](grpc/server/include/grpc_motor_service.h)
|
||||
和 [`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)
|
||||
- 单元测试:[`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 双向流、
|
||||
`setEnabled`、状态读取和软件 `emergencyStop` 共用同一控制权状态:
|
||||
@ -140,6 +159,7 @@ import 路径必须相对于 `protos/`。兼容规则见 [`../../protos/README.m
|
||||
|
||||
```text
|
||||
service/grpc/
|
||||
└── server/
|
||||
├── include/grpc_example_service.h
|
||||
└── src/grpc_example_service.cpp
|
||||
```
|
||||
@ -203,7 +223,7 @@ cmvr::api::ExampleService::Service
|
||||
|
||||
- 检查 `context->IsCancelled()`;
|
||||
- 检查 `Read()` / `Write()` 返回;
|
||||
- 使用 RAII 或 MediaSourceHub Subscription 释放 producer lease;
|
||||
- 使用 RAII 或 MediaSourceManager Subscription 释放 producer lease;
|
||||
- 不持有设备状态锁进行网络写;
|
||||
- 为 wait/read 使用有限 timeout;
|
||||
- 慢客户端不能阻塞设备生产线程;
|
||||
@ -211,7 +231,7 @@ cmvr::api::ExampleService::Service
|
||||
- gRPC RGB 流在积压超过 `camera_stream_max_pending_frames` 或帧龄超过
|
||||
`camera_stream_max_frame_age_ms` 时主动丢弃旧帧,请求 IDR,并从下一个关键帧恢复。
|
||||
|
||||
当前仅 gRPC RGB 和麦克风流使用 MediaSourceHub;Depth/RGBD 仍直接读取设备帧。
|
||||
当前仅 gRPC RGB 和麦克风流使用 MediaSourceManager;Depth/RGBD 仍直接读取设备帧。
|
||||
|
||||
gRPC 相机实时流默认最多保留 2 帧积压、最大允许 250 ms 帧龄。两个配置项填 0
|
||||
时使用上述默认值。该策略以低延迟为目标,不保证每个视频帧都到达客户端;控制命令
|
||||
|
||||
550
cmvr-es/service/grpc/CMakeLists.txt
Normal file
550
cmvr-es/service/grpc/CMakeLists.txt
Normal 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
|
||||
)
|
||||
@ -9,7 +9,7 @@
|
||||
#include <string>
|
||||
|
||||
#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 {
|
||||
class DeviceManager;
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/action/include/action_queue_executor.h"
|
||||
#include "service/grpc/action/include/action_queue_executor.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
@ -36,10 +36,10 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "devices/agv/abstract_agv.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/safety/include/safety_coordinator.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
@ -1965,7 +1965,7 @@ struct ActionQueueExecutor::Impl {
|
||||
}
|
||||
request.authority_generation = token.generation;
|
||||
request.deadline = deadline;
|
||||
return device_manager.safetyCoordinator().admit(request);
|
||||
return device_manager.safetyManager().admit(request);
|
||||
}
|
||||
|
||||
static std::string admissionFailure(
|
||||
@ -2010,7 +2010,7 @@ struct ActionQueueExecutor::Impl {
|
||||
StepOutcome::Canceled,
|
||||
"RobotArm ActionQueue control was preempted before dispatch"};
|
||||
}
|
||||
auto safety_dispatch = device_manager.safetyCoordinator()
|
||||
auto safety_dispatch = device_manager.safetyManager()
|
||||
.beginDispatch(*safety_admission.permit);
|
||||
if (!safety_dispatch.acquired()) {
|
||||
return {
|
||||
@ -2171,7 +2171,7 @@ struct ActionQueueExecutor::Impl {
|
||||
StepOutcome::Canceled,
|
||||
"AGV ActionQueue control was preempted before dispatch"};
|
||||
}
|
||||
auto safety_dispatch = device_manager.safetyCoordinator()
|
||||
auto safety_dispatch = device_manager.safetyManager()
|
||||
.beginDispatch(*safety_admission.permit);
|
||||
if (!safety_dispatch.acquired()) {
|
||||
return {
|
||||
@ -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 <string>
|
||||
@ -12,7 +12,7 @@
|
||||
#include <unistd.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 {
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
#include <grpcpp/grpcpp.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 {
|
||||
|
||||
@ -18,7 +18,7 @@ class GrpcSecurityGateway;
|
||||
} // namespace cmvr::service
|
||||
|
||||
namespace cmvr::safety {
|
||||
class SafetyCoordinator;
|
||||
class SafetyManager;
|
||||
}
|
||||
|
||||
namespace cmvr::service {
|
||||
@ -87,7 +87,7 @@ public:
|
||||
makeDisabledArmTeleopBackend(),
|
||||
control::ControlAuthorityManager* authority = nullptr,
|
||||
std::shared_ptr<GrpcSecurityGateway> security_gateway = nullptr,
|
||||
safety::SafetyCoordinator* safety_coordinator = nullptr);
|
||||
safety::SafetyManager* safety_manager = nullptr);
|
||||
~ArmTeleopServiceImpl() override = default;
|
||||
|
||||
grpc::Status Teleoperate(
|
||||
@ -99,7 +99,7 @@ private:
|
||||
std::shared_ptr<ArmTeleopBackend> backend_;
|
||||
control::ControlAuthorityManager* authority_{nullptr};
|
||||
std::shared_ptr<GrpcSecurityGateway> security_gateway_;
|
||||
safety::SafetyCoordinator* safety_coordinator_{nullptr};
|
||||
safety::SafetyManager* safety_manager_{nullptr};
|
||||
};
|
||||
|
||||
} // namespace cmvr::service
|
||||
@ -11,7 +11,7 @@
|
||||
#include "common/base/grpc_utils.h"
|
||||
#include "manager/device_manager/include/device_manager.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 {
|
||||
|
||||
@ -11,8 +11,8 @@
|
||||
#include <google/protobuf/message.h>
|
||||
|
||||
#include "cmvr/api/common.pb.h"
|
||||
#include "manager/safety/include/safety_coordinator.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
|
||||
@ -38,7 +38,7 @@ struct GrpcStreamingSafetyOpen {
|
||||
class GrpcStreamingSafetySession final {
|
||||
public:
|
||||
GrpcStreamingSafetySession(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const GrpcRequestContext& request_context,
|
||||
GrpcStreamingSafetyOpen open);
|
||||
|
||||
@ -67,7 +67,7 @@ public:
|
||||
private:
|
||||
void reject_(safety::SafetyReason reason, std::string detail);
|
||||
|
||||
safety::SafetyCoordinator* coordinator_{nullptr};
|
||||
safety::SafetyManager* coordinator_{nullptr};
|
||||
std::optional<safety::AdmissionPermit> permit_;
|
||||
safety::AdmissionDecision admission_decision_;
|
||||
grpc::Status status_;
|
||||
@ -79,7 +79,7 @@ private:
|
||||
class GrpcCommandTransaction final {
|
||||
public:
|
||||
GrpcCommandTransaction(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
GrpcRequestContext request_context,
|
||||
GrpcMethodPolicy method_policy,
|
||||
const google::protobuf::Message& request,
|
||||
@ -153,7 +153,7 @@ private:
|
||||
const std::string& detail);
|
||||
void abandon_() noexcept;
|
||||
|
||||
safety::SafetyCoordinator* coordinator_{nullptr};
|
||||
safety::SafetyManager* coordinator_{nullptr};
|
||||
GrpcRequestContext request_context_;
|
||||
GrpcMethodPolicy method_policy_;
|
||||
google::protobuf::Message* response_{nullptr};
|
||||
@ -181,7 +181,7 @@ using GrpcUnaryCommandOperation =
|
||||
grpc::Status executeRegisteredGrpcCommand(
|
||||
const std::shared_ptr<GrpcSecurityGateway>& gateway,
|
||||
grpc::ServerContext* server_context,
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::string& full_method_name,
|
||||
const google::protobuf::Message* request,
|
||||
google::protobuf::Message* response,
|
||||
@ -194,7 +194,7 @@ grpc::Status executeRegisteredGrpcCommand(
|
||||
grpc::Status executeServerDerivedGrpcCommand(
|
||||
const std::shared_ptr<GrpcSecurityGateway>& gateway,
|
||||
grpc::ServerContext* server_context,
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::string& full_method_name,
|
||||
GrpcMethodPolicy effective_policy,
|
||||
const google::protobuf::Message* request,
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
#include "cmvr/api/motor_service.grpc.pb.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 {
|
||||
class DeviceManager;
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
#include "cmvr/config/grpc_server_config/grpc_server_config.pb.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 {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
#include <memory>
|
||||
|
||||
namespace cmvr::safety {
|
||||
class SafetyCoordinator;
|
||||
class SafetyManager;
|
||||
}
|
||||
|
||||
namespace cmvr::service {
|
||||
@ -26,7 +26,7 @@ public:
|
||||
private:
|
||||
friend std::unique_ptr<GrpcSafetyParticipantRegistration>
|
||||
registerGrpcSafetyParticipants(
|
||||
safety::SafetyCoordinator&,
|
||||
safety::SafetyManager&,
|
||||
std::shared_ptr<ActionQueueExecutor>,
|
||||
std::shared_ptr<StopOperationDispatcher>);
|
||||
struct Impl;
|
||||
@ -36,7 +36,7 @@ private:
|
||||
|
||||
std::unique_ptr<GrpcSafetyParticipantRegistration>
|
||||
registerGrpcSafetyParticipants(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
std::shared_ptr<ActionQueueExecutor> action_queue,
|
||||
std::shared_ptr<StopOperationDispatcher> stop_dispatcher);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#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 {
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
#include <grpcpp/support/status.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 {
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "service/stop_all/include/deferred_stop_operation.h"
|
||||
#include "service/grpc/stop_all/include/deferred_stop_operation.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "service/stop_all/include/deferred_stop_operation.h"
|
||||
#include "service/grpc/stop_all/include/deferred_stop_operation.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
|
||||
@ -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 <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 {
|
||||
@ -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 <exception>
|
||||
#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 {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_agv_service.h"
|
||||
#include "service/grpc/server/include/grpc_agv_service.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
@ -11,10 +11,10 @@
|
||||
#include <google/protobuf/util/time_util.h>
|
||||
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "manager/control_authority/include/control_authority_manager.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
using google::protobuf::util::TimeUtil;
|
||||
|
||||
@ -668,7 +668,7 @@ grpc::Status gRPCAgvServiceImpl::emergencyStop(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/emergencyStop", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -696,7 +696,7 @@ grpc::Status gRPCAgvServiceImpl::clearFault(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/clearFault", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -727,7 +727,7 @@ grpc::Status gRPCAgvServiceImpl::navigateToPose(grpc::ServerContext* context,
|
||||
api::AgvNavigateToPoseCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/navigateToPose", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
if (context && context->IsCancelled()) {
|
||||
@ -766,7 +766,7 @@ grpc::Status gRPCAgvServiceImpl::navigateToStation(grpc::ServerContext* context,
|
||||
api::AgvNavigateToStationCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/navigateToStation", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
if (context && context->IsCancelled()) {
|
||||
@ -806,7 +806,7 @@ grpc::Status gRPCAgvServiceImpl::followPath(grpc::ServerContext* context,
|
||||
api::AgvFollowPathCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/followPath", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
if (context && context->IsCancelled()) {
|
||||
@ -854,7 +854,7 @@ grpc::Status gRPCAgvServiceImpl::translate(
|
||||
api::AgvTranslateCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/translate", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
if (context && context->IsCancelled()) {
|
||||
@ -892,7 +892,7 @@ grpc::Status gRPCAgvServiceImpl::pauseNavigation(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/pauseNavigation", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -924,7 +924,7 @@ grpc::Status gRPCAgvServiceImpl::resumeNavigation(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/resumeNavigation", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -956,7 +956,7 @@ grpc::Status gRPCAgvServiceImpl::cancelNavigation(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/cancelNavigation", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -984,7 +984,7 @@ grpc::Status gRPCAgvServiceImpl::setVelocity(grpc::ServerContext* context,
|
||||
api::AgvSetVelocityCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/setVelocity", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -1015,7 +1015,7 @@ grpc::Status gRPCAgvServiceImpl::stopVelocityControl(grpc::ServerContext* contex
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/stopVelocityControl", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -1095,7 +1095,7 @@ grpc::Status gRPCAgvServiceImpl::switchMap(grpc::ServerContext* context,
|
||||
api::AgvMapCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/switchMap", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -1126,7 +1126,7 @@ grpc::Status gRPCAgvServiceImpl::uploadMap(grpc::ServerContext* context,
|
||||
api::AgvMapCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/uploadMap", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -1181,7 +1181,7 @@ grpc::Status gRPCAgvServiceImpl::startMapping(grpc::ServerContext* context,
|
||||
api::AgvStartMappingCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/startMapping", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -1292,7 +1292,7 @@ grpc::Status gRPCAgvServiceImpl::stopMapping(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.AgvService/stopMapping", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_arm_service.h"
|
||||
#include "service/grpc/server/include/grpc_arm_service.h"
|
||||
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
@ -7,10 +7,10 @@
|
||||
#include <google/protobuf/util/time_util.h>
|
||||
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "manager/control_authority/include/control_authority_manager.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
using google::protobuf::util::TimeUtil;
|
||||
|
||||
@ -381,7 +381,7 @@ grpc::Status gRPCArmServiceImpl::torqueOff(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/torqueOff", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -415,7 +415,7 @@ grpc::Status gRPCArmServiceImpl::torqueOn(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/torqueOn", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -471,7 +471,7 @@ grpc::Status gRPCArmServiceImpl::moveJ(grpc::ServerContext* context,
|
||||
api::MoveJ_Response* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/moveJ", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -511,7 +511,7 @@ grpc::Status gRPCArmServiceImpl::moveL(grpc::ServerContext* context,
|
||||
api::MoveL_Response* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/moveL", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -553,7 +553,7 @@ grpc::Status gRPCArmServiceImpl::speedJ(grpc::ServerContext* context,
|
||||
api::SpeedJ_Response* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/speedJ", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -593,7 +593,7 @@ grpc::Status gRPCArmServiceImpl::speedL(grpc::ServerContext* context,
|
||||
api::SpeedL_Response* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/speedL", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -634,7 +634,7 @@ grpc::Status gRPCArmServiceImpl::servoJ(grpc::ServerContext* context,
|
||||
api::ServoJ_Response* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/servoJ", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -670,7 +670,7 @@ grpc::Status gRPCArmServiceImpl::stopMotion(grpc::ServerContext* context,
|
||||
api::CommandHeader_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/stopMotion", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -763,7 +763,7 @@ grpc::Status gRPCArmServiceImpl::calibrateZeroQ(grpc::ServerContext* context,
|
||||
api::CalibrateZeroQ_Response* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/calibrateZeroQ", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->header().device_id();
|
||||
@ -821,7 +821,7 @@ grpc::Status gRPCArmServiceImpl::ExecuteJsonCommand(
|
||||
api::JsonDeviceCommand_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/ExecuteJsonCommand", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.ArmService/clearFault", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const std::string device_id = request->device_id();
|
||||
@ -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 <atomic>
|
||||
@ -14,9 +14,9 @@
|
||||
#include <unordered_set>
|
||||
#include <utility>
|
||||
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
|
||||
@ -440,7 +440,7 @@ ArmTeleopServiceImpl::ArmTeleopServiceImpl(
|
||||
std::shared_ptr<ArmTeleopBackend> backend,
|
||||
control::ControlAuthorityManager* authority,
|
||||
std::shared_ptr<GrpcSecurityGateway> security_gateway,
|
||||
safety::SafetyCoordinator* safety_coordinator)
|
||||
safety::SafetyManager* safety_manager)
|
||||
: backend_(std::move(backend)),
|
||||
authority_(
|
||||
authority ? authority
|
||||
@ -448,7 +448,7 @@ ArmTeleopServiceImpl::ArmTeleopServiceImpl(
|
||||
security_gateway_(security_gateway
|
||||
? std::move(security_gateway)
|
||||
: makeDefaultGrpcSecurityGateway()),
|
||||
safety_coordinator_(safety_coordinator)
|
||||
safety_manager_(safety_manager)
|
||||
{
|
||||
if (!backend_) {
|
||||
backend_ = makeDisabledArmTeleopBackend();
|
||||
@ -541,7 +541,7 @@ grpc::Status ArmTeleopServiceImpl::Teleoperate(
|
||||
});
|
||||
|
||||
std::optional<GrpcStreamingSafetySession> safety_session;
|
||||
if (safety_coordinator_) {
|
||||
if (safety_manager_) {
|
||||
GrpcStreamingSafetyOpen safety_open;
|
||||
safety_open.full_method_name =
|
||||
"/cmvr.api.armteleop.v1.ArmTeleopService/Teleoperate";
|
||||
@ -550,7 +550,7 @@ grpc::Status ArmTeleopServiceImpl::Teleoperate(
|
||||
safety_open.authority_generation = control_lease.generation;
|
||||
safety_open.deadline = cmvr_grpc_call_guard.context().deadline;
|
||||
safety_session.emplace(
|
||||
*safety_coordinator_,
|
||||
*safety_manager_,
|
||||
cmvr_grpc_call_guard.context(),
|
||||
std::move(safety_open));
|
||||
if (!safety_session->admitted()) {
|
||||
@ -1,10 +1,10 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "manager/media_source_hub/include/device_media_source_adapter.h"
|
||||
#include "service/grpc/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/include/camera_ptz_activity_registry.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "manager/media_source_manager/include/device_media_source_adapter.h"
|
||||
#include "service/grpc/server/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/server/include/camera_ptz_activity_registry.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
//
|
||||
// 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
|
||||
// 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
|
||||
// the one startStreaming() reference acquired by this call.
|
||||
class CameraStreamingLease final {
|
||||
@ -80,7 +80,7 @@ public:
|
||||
CameraStreamingLease(
|
||||
std::shared_ptr<AbstractCamera> camera,
|
||||
const MediaActivityCoordinator::Session& session,
|
||||
cmvr::safety::SafetyCoordinator& coordinator)
|
||||
cmvr::safety::SafetyManager& coordinator)
|
||||
: camera_(std::move(camera)) {
|
||||
(void)session.runIfCurrent([this, &coordinator] {
|
||||
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)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.CameraService/StartCamera", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.CameraService/StopCamera", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.CameraService/StartRecording", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.CameraService/StopRecording", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -581,7 +581,7 @@ grpc::Status gRPCCameraServiceImpl::ControlPtz(grpc::ServerContext* context,
|
||||
}
|
||||
|
||||
return executeServerDerivedGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.CameraService/ControlPtz", std::move(effective_policy),
|
||||
request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command_tx) {
|
||||
@ -666,7 +666,7 @@ grpc::Status gRPCCameraServiceImpl::GetDepthImageStream(grpc::ServerContext* con
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
CameraStreamingLease stream_lease(
|
||||
dev, media_session, dmgr_.safetyCoordinator());
|
||||
dev, media_session, dmgr_.safetyManager());
|
||||
if (!stream_lease) {
|
||||
api::GetDepthImageStreamCommand_Feedback response;
|
||||
response.mutable_header()->set_success(false);
|
||||
@ -763,7 +763,7 @@ grpc::Status gRPCCameraServiceImpl::GetRGBDImagesStream(grpc::ServerContext* con
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
CameraStreamingLease stream_lease(
|
||||
dev, media_session, dmgr_.safetyCoordinator());
|
||||
dev, media_session, dmgr_.safetyManager());
|
||||
if (!stream_lease) {
|
||||
api::GetRGBDImagesStreamCommand_Feedback response;
|
||||
response.mutable_header()->set_success(false);
|
||||
@ -867,7 +867,7 @@ grpc::Status gRPCCameraServiceImpl::GetRGBImageStream(grpc::ServerContext* conte
|
||||
stream->Write(response);
|
||||
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);
|
||||
bool source_ready = false;
|
||||
const bool source_setup_allowed = media_session.runIfCurrent([&] {
|
||||
@ -885,15 +885,15 @@ grpc::Status gRPCCameraServiceImpl::GetRGBImageStream(grpc::ServerContext* conte
|
||||
return grpc::Status::OK;
|
||||
}
|
||||
auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch(
|
||||
dmgr_.safetyCoordinator(), dev_id);
|
||||
dmgr_.safetyManager(), dev_id);
|
||||
auto subscription = source_dispatch.acquired()
|
||||
? media_hub.subscribe(
|
||||
track_id,
|
||||
cmvr::media::MediaSourceHub::StartPosition::NEXT_PUBLISHED,
|
||||
cmvr::media::MediaSourceManager::StartPosition::NEXT_PUBLISHED,
|
||||
[context, &media_session] {
|
||||
return context->IsCancelled() || media_session.cancelled();
|
||||
})
|
||||
: cmvr::media::MediaSourceHub::Subscription{};
|
||||
: cmvr::media::MediaSourceManager::Subscription{};
|
||||
if (!subscription) {
|
||||
api::GetRGBImageStreamCommand_Feedback response;
|
||||
response.mutable_header()->set_success(false);
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
@ -15,7 +15,7 @@
|
||||
#include <google/protobuf/io/zero_copy_stream_impl_lite.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 {
|
||||
|
||||
@ -145,7 +145,7 @@ std::uint64_t stableHash(
|
||||
}
|
||||
|
||||
bool isEnforced(
|
||||
const safety::SafetyCoordinatorConfig& config,
|
||||
const safety::SafetyManagerConfig& config,
|
||||
const std::string& device_id)
|
||||
{
|
||||
switch (config.enforcement_mode) {
|
||||
@ -316,7 +316,7 @@ grpc::Status grpcStatusForSafetyReason(
|
||||
}
|
||||
|
||||
GrpcStreamingSafetySession::GrpcStreamingSafetySession(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const GrpcRequestContext& request_context,
|
||||
GrpcStreamingSafetyOpen open)
|
||||
: coordinator_(&coordinator),
|
||||
@ -469,7 +469,7 @@ std::string deterministicGrpcPayloadHash(
|
||||
}
|
||||
|
||||
GrpcCommandTransaction::GrpcCommandTransaction(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
GrpcRequestContext request_context,
|
||||
GrpcMethodPolicy method_policy,
|
||||
const google::protobuf::Message& request,
|
||||
@ -1166,7 +1166,7 @@ void GrpcCommandTransaction::abandon_() noexcept
|
||||
grpc::Status executeRegisteredGrpcCommand(
|
||||
const std::shared_ptr<GrpcSecurityGateway>& gateway,
|
||||
grpc::ServerContext* server_context,
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::string& full_method_name,
|
||||
const google::protobuf::Message* request,
|
||||
google::protobuf::Message* response,
|
||||
@ -1208,7 +1208,7 @@ grpc::Status executeRegisteredGrpcCommand(
|
||||
grpc::Status executeServerDerivedGrpcCommand(
|
||||
const std::shared_ptr<GrpcSecurityGateway>& gateway,
|
||||
grpc::ServerContext* server_context,
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::string& full_method_name,
|
||||
GrpcMethodPolicy effective_policy,
|
||||
const google::protobuf::Message* request,
|
||||
@ -15,11 +15,11 @@
|
||||
#include <vector>
|
||||
|
||||
#include "devices/dexhand/rh56dftp_dexhand/include/rh56dftp_dexhand.h"
|
||||
#include "manager/control_authority/include/control_authority_manager.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace cmvr::service;
|
||||
@ -367,7 +367,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandPos(grpc::ServerContext* context
|
||||
, const cmvr::api::SetDexHandPositionsCommand_Request* request
|
||||
, cmvr::api::SetDexHandPositionsCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.DexHandService/SetDexHandPos", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -415,7 +415,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandAngle(grpc::ServerContext* contex
|
||||
, const cmvr::api::SetDexHandAnglesCommand_Request* request
|
||||
, cmvr::api::SetDexHandAnglesCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.DexHandService/SetDexHandAngle", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -477,7 +477,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandForce(grpc::ServerContext* contex
|
||||
, const cmvr::api::SetDexHandForceCommand_Request* request
|
||||
, cmvr::api::SetDexHandForceCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.DexHandService/SetDexHandForce", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -525,7 +525,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandSpeed(grpc::ServerContext* contex
|
||||
, const cmvr::api::SetDexHandSpeedCommand_Request* request
|
||||
, cmvr::api::SetDexHandSpeedCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.DexHandService/SetDexHandSpeed", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -573,7 +573,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandPresetAct(grpc::ServerContext* co
|
||||
, const cmvr::api::SetDexHandPresetActCommand_Request* request
|
||||
, cmvr::api::SetDexHandPresetActCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.DexHandService/SetDexHandPresetAct", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -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 <chrono>
|
||||
@ -5,10 +5,10 @@
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
#include "common/base/grpc_utils.h"
|
||||
#include "biohead/biohead_esp32/include/biohead_esp32.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include <chrono>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
@ -65,7 +65,7 @@ grpc::Status executeHeadOperationalCommand(
|
||||
Operation&& operation)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway, context, device_manager.safetyCoordinator(),
|
||||
security_gateway, context, device_manager.safetyManager(),
|
||||
full_method_name, request, response,
|
||||
[&device_manager, request, response, rpc_name,
|
||||
operation = std::forward<Operation>(operation)](
|
||||
@ -245,7 +245,7 @@ grpc::Status gRPCMBioHeadServiceImpl::StreamExpression(
|
||||
safety_open.deadline =
|
||||
cmvr_grpc_call_guard.context().deadline;
|
||||
safety_session.emplace(
|
||||
dmgr_.safetyCoordinator(),
|
||||
dmgr_.safetyManager(),
|
||||
cmvr_grpc_call_guard.context(),
|
||||
std::move(safety_open));
|
||||
if (!safety_session->admitted()) {
|
||||
@ -417,7 +417,7 @@ grpc::Status gRPCMBioHeadServiceImpl::EmergencyStop(
|
||||
EmergencyStop_Feedback* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.BioHeadService/EmergencyStop", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.BioHeadService/SpeakStop", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
const string dev_id = request->header().device_id();
|
||||
@ -14,9 +14,9 @@
|
||||
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "manager/task_manager/include/task_manager.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.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);
|
||||
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.HlcService/touch", &normalized_request, response,
|
||||
[context, request, response, touch_task](
|
||||
GrpcCommandTransaction& command) {
|
||||
@ -1,8 +1,8 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "manager/media_source_hub/include/device_media_source_adapter.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "manager/media_source_manager/include/device_media_source_adapter.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
@ -84,7 +84,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::GetStatus(grpc::ServerContext* context,
|
||||
grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context,
|
||||
const api::StartMicRecordingCommand_Request* request, api::StartMicRecordingCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MicPhoneService/StartRecord", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
auto media_session = globalMediaActivityCoordinator().beginSession();
|
||||
@ -131,7 +131,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context
|
||||
grpc::Status gRPCMicroPhoneServiceImpl::StopRecord(grpc::ServerContext* context,
|
||||
const api::StopMicRecordingCommand_Request* request, api::StopMicRecordingCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MicPhoneService/StopRecord", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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,
|
||||
const api::PauseMicRecordingCommand_Request* request, api::PauseMicRecordingCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MicPhoneService/PauseRecord", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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,
|
||||
const api::ResumeMicRecordingCommand_Request* request, api::ResumeMicRecordingCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MicPhoneService/ResumeRecord", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
auto media_session = globalMediaActivityCoordinator().beginSession();
|
||||
@ -240,7 +240,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context
|
||||
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);
|
||||
bool source_ready = false;
|
||||
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(
|
||||
dmgr_.safetyCoordinator(), dev_id);
|
||||
dmgr_.safetyManager(), dev_id);
|
||||
auto subscription = source_dispatch.acquired()
|
||||
? media_hub.subscribe(
|
||||
track_id,
|
||||
cmvr::media::MediaSourceHub::StartPosition::NEXT_PUBLISHED,
|
||||
cmvr::media::MediaSourceManager::StartPosition::NEXT_PUBLISHED,
|
||||
[context, &media_session] {
|
||||
return context->IsCancelled() || media_session.cancelled();
|
||||
})
|
||||
: cmvr::media::MediaSourceHub::Subscription{};
|
||||
: cmvr::media::MediaSourceManager::Subscription{};
|
||||
if (!subscription) {
|
||||
api::StreamMicAudioCommand_Feedback feedback;
|
||||
feedback.mutable_header()->set_success(false);
|
||||
@ -356,7 +356,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context
|
||||
grpc::Status gRPCMicroPhoneServiceImpl::SetVolume(grpc::ServerContext* context,
|
||||
const api::SetMicPhoneVolumeCommand_Request* request, api::SetMicPhoneVolumeCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MicPhoneService/SetVolume", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_motor_service.h"
|
||||
#include "service/grpc/server/include/grpc_motor_service.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
@ -15,9 +15,9 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "devices/motor/manager/include/motor_manager.h"
|
||||
#include "manager/device_manager/include/device_manager.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
|
||||
@ -870,7 +870,7 @@ grpc::Status gRPCMotorServiceImpl::setZero(
|
||||
api::MotorCommandResponse* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MotorService/setZero", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
return runUnaryGuarded(
|
||||
@ -892,7 +892,7 @@ grpc::Status gRPCMotorServiceImpl::moveToZero(
|
||||
api::MotorCommandResponse* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MotorService/moveToZero", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
return runUnaryGuarded(
|
||||
@ -914,7 +914,7 @@ grpc::Status gRPCMotorServiceImpl::profilePosition(
|
||||
api::MotorCommandResponse* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MotorService/profilePosition", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
return runUnaryGuarded(
|
||||
@ -936,7 +936,7 @@ grpc::Status gRPCMotorServiceImpl::profileVelocity(
|
||||
api::MotorCommandResponse* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MotorService/profileVelocity", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
return runUnaryGuarded(
|
||||
@ -1004,7 +1004,7 @@ grpc::Status gRPCMotorServiceImpl::emergencyStop(
|
||||
api::MotorCommandResponse* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MotorService/emergencyStop", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
return runUnaryGuarded(
|
||||
@ -1039,7 +1039,7 @@ grpc::Status gRPCMotorServiceImpl::setEnabled(
|
||||
api::MotorCommandResponse* response)
|
||||
{
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.MotorService/setEnabled", request, response,
|
||||
[this, context, request, response](GrpcCommandTransaction& command) {
|
||||
return runUnaryGuarded(
|
||||
@ -1821,7 +1821,7 @@ grpc::Status gRPCMotorServiceImpl::streamCyclicPositionImpl(
|
||||
safety_open.authority_generation = generation;
|
||||
safety_open.deadline = request_context.deadline;
|
||||
GrpcStreamingSafetySession safety_session(
|
||||
dmgr_.safetyCoordinator(), request_context,
|
||||
dmgr_.safetyManager(), request_context,
|
||||
std::move(safety_open));
|
||||
if (!safety_session.admitted()) {
|
||||
return safety_session.status();
|
||||
@ -1980,7 +1980,7 @@ grpc::Status gRPCMotorServiceImpl::streamCyclicVelocityImpl(
|
||||
safety_open.authority_generation = generation;
|
||||
safety_open.deadline = request_context.deadline;
|
||||
GrpcStreamingSafetySession safety_session(
|
||||
dmgr_.safetyCoordinator(), request_context,
|
||||
dmgr_.safetyManager(), request_context,
|
||||
std::move(safety_open));
|
||||
if (!safety_session.admitted()) {
|
||||
return safety_session.status();
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_recovery_audit.h"
|
||||
#include "service/grpc/server/include/grpc_recovery_audit.h"
|
||||
|
||||
#include <cerrno>
|
||||
#include <cstring>
|
||||
@ -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 <chrono>
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_safety_participants.h"
|
||||
#include "service/grpc/server/include/grpc_safety_participants.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
@ -12,16 +12,16 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "manager/media_source_hub/include/device_media_source_adapter.h"
|
||||
#include "manager/safety/include/safety_coordinator.h"
|
||||
#include "manager/media_source_manager/include/device_media_source_adapter.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
#include "manager/task_manager/include/task_manager.h"
|
||||
#include "service/action/include/action_queue_executor.h"
|
||||
#include "service/grpc/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/include/camera_ptz_activity_registry.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/motor_activity_coordinator.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/stop_all/include/stop_operation_dispatcher.h"
|
||||
#include "service/grpc/action/include/action_queue_executor.h"
|
||||
#include "service/grpc/server/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/server/include/camera_ptz_activity_registry.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/motor_activity_coordinator.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/stop_all/include/stop_operation_dispatcher.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
|
||||
@ -966,7 +966,7 @@ std::vector<DeferredStopOperation> mediaSourceStopOperations()
|
||||
const auto merge = [&unique_ids](const std::vector<std::string>& ids) {
|
||||
unique_ids.insert(ids.begin(), ids.end());
|
||||
};
|
||||
merge(media::globalMediaSourceHub().trackedSourceIds());
|
||||
merge(media::globalMediaSourceManager().trackedSourceIds());
|
||||
merge(globalCameraOperationalActivityRegistry().trackedDeviceIds());
|
||||
|
||||
std::vector<DeferredStopOperation> operations;
|
||||
@ -976,7 +976,7 @@ std::vector<DeferredStopOperation> mediaSourceStopOperations()
|
||||
"media-source:" + id,
|
||||
[id] {
|
||||
std::vector<std::string> failures;
|
||||
bool stopped = media::globalMediaSourceHub()
|
||||
bool stopped = media::globalMediaSourceManager()
|
||||
.stopSourcesForDevice(id, &failures);
|
||||
if (!globalCameraOperationalActivityRegistry()
|
||||
.stopActivitiesForDevice(id, &failures)) {
|
||||
@ -996,11 +996,11 @@ struct SharedParticipants {
|
||||
};
|
||||
|
||||
std::mutex shared_participants_mutex;
|
||||
std::unordered_map<safety::SafetyCoordinator*, SharedParticipants>
|
||||
std::unordered_map<safety::SafetyManager*, SharedParticipants>
|
||||
shared_participants;
|
||||
|
||||
void acquireSharedParticipants(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
const std::shared_ptr<StopOperationDispatcher>& dispatcher)
|
||||
{
|
||||
std::lock_guard lock(shared_participants_mutex);
|
||||
@ -1057,7 +1057,7 @@ void acquireSharedParticipants(
|
||||
shared_participants.emplace(&coordinator, std::move(entry));
|
||||
}
|
||||
|
||||
void releaseSharedParticipants(safety::SafetyCoordinator& coordinator) noexcept
|
||||
void releaseSharedParticipants(safety::SafetyManager& coordinator) noexcept
|
||||
{
|
||||
try {
|
||||
std::lock_guard lock(shared_participants_mutex);
|
||||
@ -1078,7 +1078,7 @@ void releaseSharedParticipants(safety::SafetyCoordinator& coordinator) noexcept
|
||||
} // namespace
|
||||
|
||||
struct GrpcSafetyParticipantRegistration::Impl {
|
||||
safety::SafetyCoordinator* coordinator{nullptr};
|
||||
safety::SafetyManager* coordinator{nullptr};
|
||||
std::string action_participant_id;
|
||||
bool shared_acquired{false};
|
||||
|
||||
@ -1112,7 +1112,7 @@ GrpcSafetyParticipantRegistration::operator=(
|
||||
|
||||
std::unique_ptr<GrpcSafetyParticipantRegistration>
|
||||
registerGrpcSafetyParticipants(
|
||||
safety::SafetyCoordinator& coordinator,
|
||||
safety::SafetyManager& coordinator,
|
||||
std::shared_ptr<ActionQueueExecutor> action_queue,
|
||||
std::shared_ptr<StopOperationDispatcher> stop_dispatcher)
|
||||
{
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_safety_proto.h"
|
||||
#include "service/grpc/server/include/grpc_safety_proto.h"
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
@ -1,7 +1,7 @@
|
||||
#include "common/base/logging/logger.h"
|
||||
#include "service/grpc/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/grpc/server/include/grpc_command_transaction.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <utility>
|
||||
@ -147,7 +147,7 @@ grpc::Status gRPCSpeakerServiceImpl::GetStatus(grpc::ServerContext* context,
|
||||
grpc::Status gRPCSpeakerServiceImpl::PlayAudio(grpc::ServerContext* context,
|
||||
const api::PlayAudioCommand_Request* request, api::PlayAudioCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.SpeakerService/PlayAudio", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
auto media_session = globalMediaActivityCoordinator().beginSession();
|
||||
@ -240,7 +240,7 @@ grpc::Status gRPCSpeakerServiceImpl::StreamAudio(grpc::ServerContext* context,
|
||||
safety_open.deadline =
|
||||
cmvr_grpc_call_guard.context().deadline;
|
||||
safety_session.emplace(
|
||||
dmgr_.safetyCoordinator(),
|
||||
dmgr_.safetyManager(),
|
||||
cmvr_grpc_call_guard.context(),
|
||||
std::move(safety_open));
|
||||
if (!safety_session->admitted()) {
|
||||
@ -307,7 +307,7 @@ grpc::Status gRPCSpeakerServiceImpl::StreamAudio(grpc::ServerContext* context,
|
||||
grpc::Status gRPCSpeakerServiceImpl::StopPlayback(grpc::ServerContext* context,
|
||||
const api::StopSpeakerCommand_Request* request, api::StopSpeakerCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.SpeakerService/StopPlayback", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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,
|
||||
const api::PauseSpeakerCommand_Request* request, api::PauseSpeakerCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.SpeakerService/PausePlayback", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
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,
|
||||
const api::ResumeSpeakerCommand_Request* request, api::ResumeSpeakerCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.SpeakerService/ResumePlayback", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
auto media_session = globalMediaActivityCoordinator().beginSession();
|
||||
@ -396,7 +396,7 @@ grpc::Status gRPCSpeakerServiceImpl::ResumePlayback(grpc::ServerContext* context
|
||||
grpc::Status gRPCSpeakerServiceImpl::SetVolume(grpc::ServerContext* context,
|
||||
const api::SetSpeakerVolumeCommand_Request* request, api::SetSpeakerVolumeCommand_Feedback* response) {
|
||||
return executeRegisteredGrpcCommand(
|
||||
security_gateway_, context, dmgr_.safetyCoordinator(),
|
||||
security_gateway_, context, dmgr_.safetyManager(),
|
||||
"/cmvr.api.SpeakerService/SetVolume", request, response,
|
||||
[this, request, response](GrpcCommandTransaction& command) {
|
||||
string dev_id = request->header().device_id();
|
||||
@ -27,20 +27,20 @@
|
||||
#include "devices/gripper/abstract_gripper.h"
|
||||
#include "devices/microphone/abstract_microphone.h"
|
||||
#include "devices/speaker/abstract_speaker.h"
|
||||
#include "manager/control_authority/include/control_authority_manager.h"
|
||||
#include "manager/media_source_hub/include/device_media_source_adapter.h"
|
||||
#include "manager/control_authority_manager/include/control_authority_manager.h"
|
||||
#include "manager/media_source_manager/include/device_media_source_adapter.h"
|
||||
#include "manager/task_manager/include/task_manager.h"
|
||||
#include "service/action/include/action_queue_executor.h"
|
||||
#include "service/grpc/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/include/camera_ptz_activity_registry.h"
|
||||
#include "service/grpc/include/grpc_recovery_audit.h"
|
||||
#include "service/grpc/include/grpc_safety_proto.h"
|
||||
#include "service/grpc/include/grpc_safety_participants.h"
|
||||
#include "service/grpc/include/grpc_security.h"
|
||||
#include "service/grpc/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/include/motor_activity_coordinator.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/stop_all/include/stop_operation_dispatcher.h"
|
||||
#include "service/grpc/action/include/action_queue_executor.h"
|
||||
#include "service/grpc/server/include/camera_operational_activity_registry.h"
|
||||
#include "service/grpc/server/include/camera_ptz_activity_registry.h"
|
||||
#include "service/grpc/server/include/grpc_recovery_audit.h"
|
||||
#include "service/grpc/server/include/grpc_safety_proto.h"
|
||||
#include "service/grpc/server/include/grpc_safety_participants.h"
|
||||
#include "service/grpc/server/include/grpc_security.h"
|
||||
#include "service/grpc/server/include/media_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/motor_activity_coordinator.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/stop_all/include/stop_operation_dispatcher.h"
|
||||
|
||||
using namespace cmvr::device;
|
||||
using namespace cmvr::service;
|
||||
@ -718,7 +718,7 @@ StopOutcome stopCameraActivities(
|
||||
const std::shared_ptr<cmvr::device::AbstractCamera>& camera)
|
||||
{
|
||||
std::vector<std::string> failures;
|
||||
bool stopped = cmvr::media::globalMediaSourceHub()
|
||||
bool stopped = cmvr::media::globalMediaSourceManager()
|
||||
.stopSourcesForDevice(device_id, &failures);
|
||||
if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice(
|
||||
device_id, &failures)) {
|
||||
@ -767,7 +767,7 @@ StopOutcome stopMicrophone(
|
||||
const std::shared_ptr<cmvr::device::AbstractMicrophone>& microphone)
|
||||
{
|
||||
std::vector<std::string> failures;
|
||||
bool stopped = cmvr::media::globalMediaSourceHub()
|
||||
bool stopped = cmvr::media::globalMediaSourceManager()
|
||||
.stopSourcesForDevice(device_id, &failures);
|
||||
try {
|
||||
cmvr::device::MicrophoneState state{};
|
||||
@ -811,7 +811,7 @@ StopOutcome stopSpeaker(
|
||||
StopOutcome stopTrackedMediaActivities(const std::string& device_id)
|
||||
{
|
||||
std::vector<std::string> failures;
|
||||
bool stopped = cmvr::media::globalMediaSourceHub()
|
||||
bool stopped = cmvr::media::globalMediaSourceManager()
|
||||
.stopSourcesForDevice(device_id, &failures);
|
||||
if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice(
|
||||
device_id, &failures)) {
|
||||
@ -1162,7 +1162,7 @@ gRPCSystemServiceImpl::gRPCSystemServiceImpl(
|
||||
acquireProcessStopDispatcher(stop_dispatcher_);
|
||||
try {
|
||||
safety_participant_registration_ = registerGrpcSafetyParticipants(
|
||||
dmgr_.safetyCoordinator(), action_queue_, stop_dispatcher_);
|
||||
dmgr_.safetyManager(), action_queue_, stop_dispatcher_);
|
||||
} catch (...) {
|
||||
releaseProcessStopDispatcher(stop_dispatcher_);
|
||||
throw;
|
||||
@ -1217,7 +1217,7 @@ grpc::Status gRPCSystemServiceImpl::GetSystemInfo(grpc::ServerContext* context,
|
||||
toString(security.recovery_exposure));
|
||||
response->set_grpc_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(
|
||||
safety.service_instance_id);
|
||||
response->set_safety_enforcement_mode(
|
||||
@ -1365,7 +1365,7 @@ grpc::Status gRPCSystemServiceImpl::GetSafetyState(
|
||||
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(
|
||||
toApiSystemAdmissionState(snapshot.system_state));
|
||||
response->set_safety_epoch(snapshot.safety_epoch);
|
||||
@ -1486,7 +1486,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState(
|
||||
auto deadline = cmvr_grpc_call_guard.context().deadline;
|
||||
const auto configured_deadline =
|
||||
cmvr::safety::SafetyClock::now() +
|
||||
dmgr_.safetyCoordinator().config().recovery_timeout;
|
||||
dmgr_.safetyManager().config().recovery_timeout;
|
||||
if (deadline == cmvr::safety::SafetyClock::time_point::max() ||
|
||||
configured_deadline < deadline) {
|
||||
deadline = configured_deadline;
|
||||
@ -1528,7 +1528,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState(
|
||||
}
|
||||
|
||||
const auto result =
|
||||
dmgr_.safetyCoordinator().recover(coordinator_request);
|
||||
dmgr_.safetyManager().recover(coordinator_request);
|
||||
response->set_recovery_id(result.recovery_id);
|
||||
response->set_result(toApiRecoveryResult(result.result));
|
||||
response->set_previous_safety_epoch(result.previous_safety_epoch);
|
||||
@ -1544,7 +1544,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState(
|
||||
header->set_success(success);
|
||||
header->set_command_id(request->recovery_id());
|
||||
header->set_service_instance_id(
|
||||
dmgr_.safetyCoordinator().serviceInstanceId());
|
||||
dmgr_.safetyManager().serviceInstanceId());
|
||||
header->set_safety_epoch(result.current_safety_epoch);
|
||||
header->set_execution_state(
|
||||
success ? cmvr::api::COMMAND_EXECUTION_STATE_COMPLETED
|
||||
@ -1596,7 +1596,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
|
||||
grpc::StatusCode::INVALID_ARGUMENT,
|
||||
"StopAll request and response are required");
|
||||
}
|
||||
if (dmgr_.safetyCoordinator().config().enforcement_mode !=
|
||||
if (dmgr_.safetyManager().config().enforcement_mode !=
|
||||
cmvr::safety::EnforcementMode::Legacy) {
|
||||
auto deadline = cmvr_grpc_call_guard.context().deadline;
|
||||
const auto configured_deadline =
|
||||
@ -1616,7 +1616,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
|
||||
if (operation_id.empty() && request->has_header()) {
|
||||
operation_id = request->header().command_id();
|
||||
}
|
||||
const auto result = dmgr_.safetyCoordinator().stopAll(
|
||||
const auto result = dmgr_.safetyManager().stopAll(
|
||||
std::move(operation_id), deadline);
|
||||
response->set_operation_id(result.operation_id);
|
||||
response->set_previous_safety_epoch(
|
||||
@ -1633,7 +1633,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
|
||||
header->set_success(result.success);
|
||||
header->set_command_id(result.operation_id);
|
||||
header->set_service_instance_id(
|
||||
dmgr_.safetyCoordinator().serviceInstanceId());
|
||||
dmgr_.safetyManager().serviceInstanceId());
|
||||
header->set_safety_epoch(result.current_safety_epoch);
|
||||
header->set_execution_state(
|
||||
result.success
|
||||
@ -1826,7 +1826,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context,
|
||||
tracked_media_ids.insert(ids.begin(), ids.end());
|
||||
};
|
||||
merge_tracked_ids(
|
||||
cmvr::media::globalMediaSourceHub().trackedSourceIds());
|
||||
cmvr::media::globalMediaSourceManager().trackedSourceIds());
|
||||
merge_tracked_ids(
|
||||
globalCameraPtzActivityRegistry().trackedDeviceIds());
|
||||
merge_tracked_ids(
|
||||
@ -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 "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/motor_activity_coordinator.h"
|
||||
#include "service/grpc/server/include/motor_activity_coordinator.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <condition_variable>
|
||||
@ -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 <chrono>
|
||||
@ -11,7 +11,7 @@
|
||||
|
||||
#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 {
|
||||
@ -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 <chrono>
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
#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 {
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_agv_service.h"
|
||||
#include "service/grpc/server/include/grpc_agv_service.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <future>
|
||||
@ -11,9 +11,9 @@
|
||||
#include <gtest/gtest.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 "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
@ -1,4 +1,4 @@
|
||||
#include "service/grpc/include/grpc_arm_service.h"
|
||||
#include "service/grpc/server/include/grpc_arm_service.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdio>
|
||||
@ -20,10 +20,10 @@
|
||||
#include <unistd.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 "service/grpc/include/grpc_error_logging_interceptor.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "service/grpc/server/include/grpc_error_logging_interceptor.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
@ -599,7 +599,7 @@ protected:
|
||||
header->set_command_id(command_id);
|
||||
header->set_expected_service_instance_id(
|
||||
device::DeviceManager::getInstance()
|
||||
.safetyCoordinator()
|
||||
.safetyManager()
|
||||
.serviceInstanceId());
|
||||
header->set_valid_for_ms(1000);
|
||||
request.mutable_target()->add_position(position);
|
||||
@ -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 <chrono>
|
||||
@ -17,9 +17,9 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "manager/safety/include/device_safety_endpoint.h"
|
||||
#include "manager/safety/include/safety_coordinator.h"
|
||||
#include "service/stop_all/include/stop_all_admission_gate.h"
|
||||
#include "manager/safety_manager/include/device_safety_endpoint.h"
|
||||
#include "manager/safety_manager/include/safety_manager.h"
|
||||
#include "service/grpc/stop_all/include/stop_all_admission_gate.h"
|
||||
|
||||
namespace cmvr::service {
|
||||
namespace {
|
||||
@ -338,10 +338,10 @@ class TeleopServerHarness final {
|
||||
public:
|
||||
explicit TeleopServerHarness(
|
||||
std::shared_ptr<ArmTeleopBackend> backend,
|
||||
safety::SafetyCoordinator* safety_coordinator = nullptr)
|
||||
safety::SafetyManager* safety_manager = nullptr)
|
||||
: service_(
|
||||
std::move(backend), nullptr, nullptr,
|
||||
safety_coordinator)
|
||||
safety_manager)
|
||||
{
|
||||
socket_path_ =
|
||||
"/tmp/cmvr_arm_teleop_service_test_" +
|
||||
@ -862,9 +862,9 @@ TEST(ArmTeleopServiceTest,
|
||||
TEST(ArmTeleopServiceTest,
|
||||
CoordinatorInvalidationStopsExistingSessionBeforeAnotherSetpoint)
|
||||
{
|
||||
safety::SafetyCoordinatorConfig config;
|
||||
safety::SafetyManagerConfig config;
|
||||
config.enforcement_mode = safety::EnforcementMode::EnforceAll;
|
||||
safety::SafetyCoordinator coordinator(config);
|
||||
safety::SafetyManager coordinator(config);
|
||||
auto endpoint = std::make_shared<FakeTeleopSafetyEndpoint>();
|
||||
ASSERT_TRUE(coordinator.registerDevice(
|
||||
{endpoint->descriptor(), endpoint, {}}));
|
||||
@ -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 <cstdint>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user