File avx_vss_api_adapter.h
Last update: 22.04.2026Location: co_sim/avx_sensor/avx_vss_api_adapter/avx_vss_api_adapter.h
Classes
Namespaces
Includes
- co_sim/avx_sensor/avx_sensor_setting/avx_sensor_setting.h
- <ansys/api/avxcelerate/sensors/osi/v1/simulation/configuration.pb.h>
- <ansys/api/avxcelerate/sensors/osi/v1/simulation/simulation.grpc.pb.h>
- <ansys/api/avxcelerate/sensors/v1/data_access/sensor_data_access.grpc.pb.h>
- <ansys/api/avxcelerate/sensors/v1/data_access/sensor_data_output_notification.grpc.pb.h>
- <ansys/api/avxcelerate/sensors/v1/sensor_data/sensor_data.pb.h>
- <ansys/api/avxcelerate/sensors/v1/simulation/configuration.pb.h>
- <ansys/api/avxcelerate/sensors/v1/simulation/simulation.grpc.pb.h>
- <ansys/api/avxcelerate/sensors/v1/simulation/simulation_parameters.pb.h>
- <google/protobuf/empty.pb.h>
- <google/protobuf/stubs/common.h>
- <grpc++/grpc++.h>
- <grpcpp/grpcpp.h>
- <osi_sensorview.pb.h>
-
-
-
-
-
Source
#ifndef SIMFWK_AUTONOMY_COSIM_AVXSENSOR_AVXVSSAPIADAPTER_AVXVSSAPIADAPTER_H
#define SIMFWK_AUTONOMY_COSIM_AVXSENSOR_AVXVSSAPIADAPTER_AVXVSSAPIADAPTER_H
#include "co_sim/avx_sensor/avx_sensor_setting/avx_sensor_setting.h"
#include <ansys/api/avxcelerate/sensors/osi/v1/simulation/configuration.pb.h>
#include <ansys/api/avxcelerate/sensors/osi/v1/simulation/simulation.grpc.pb.h>
#include <ansys/api/avxcelerate/sensors/v1/data_access/sensor_data_access.grpc.pb.h>
#include <ansys/api/avxcelerate/sensors/v1/data_access/sensor_data_output_notification.grpc.pb.h>
#include <ansys/api/avxcelerate/sensors/v1/sensor_data/sensor_data.pb.h>
#include <ansys/api/avxcelerate/sensors/v1/simulation/configuration.pb.h>
#include <ansys/api/avxcelerate/sensors/v1/simulation/simulation.grpc.pb.h>
#include <ansys/api/avxcelerate/sensors/v1/simulation/simulation_parameters.pb.h>
#include <google/protobuf/empty.pb.h>
#include <google/protobuf/stubs/common.h>
#include <grpc++/grpc++.h>
#include <grpcpp/grpcpp.h>
#include <osi_sensorview.pb.h>
#include <chrono>
#include <memory>
#include <string>
#include <thread>
#include <vector>
namespace simulation_framework
{
namespace avx_sensor_cosim
{
class AvxVssApiAdapter
{
public:
using SensorDataDescriptions =
std::vector<ansys::api::avxcelerate::sensors::v1::data_access::SensorDataDescription>;
AvxVssApiAdapter(const std::string& grpc_endpoint,
ApiVariant api_variant = ApiVariant::kUpdateByWorldUpdate,
const TransportModeConfig& transport_config = TransportModeConfig{});
~AvxVssApiAdapter();
bool Load(const ansys::api::avxcelerate::sensors::osi::v1::simulation::Configuration& configuration,
const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(30));
bool Load(const ansys::api::avxcelerate::sensors::v1::simulation::Configuration& configuration,
const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(30));
bool Update(const osi3::GroundTruth& ground_truth,
const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(5));
bool Update(const ansys::api::avxcelerate::sensors::v1::simulation::WorldUpdate& world_update,
const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(5));
bool Initialize(const ansys::api::avxcelerate::sensors::v1::simulation::WorldUpdate& world_update,
const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(5));
bool Stop(const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(5));
bool Unload(const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(5));
bool Kill(const std::chrono::seconds& timeout_in_seconds = std::chrono::seconds(5));
SensorDataDescriptions GetLatestSensorDataDescriptions(
const std::chrono::milliseconds& timeout_in_milliseconds = std::chrono::milliseconds(1000));
const std::vector<std::string>& GetSensorIdentifiers() const;
void SetSensorIdentifiers(
const ansys::api::avxcelerate::sensors::v1::simulation::SimulationParameters& simulation_parameters);
std::shared_ptr<grpc::Channel> GetGrpcChannel() const;
static std::vector<unsigned char> SerializeSensorDataDescriptions(
const SensorDataDescriptions& sensor_data_descriptions);
static SensorDataDescriptions DeserializeSensorDataDescriptions(const std::vector<unsigned char>& bytes_array);
private:
bool IsRequestSuccessful(const grpc::Status& grpc_status, const std::string& request_name);
bool WaitForConnection(const std::chrono::seconds& timeout_in_seconds, const bool silent_info = false);
bool ReadSensorDataDescription(
ansys::api::avxcelerate::sensors::v1::data_access::SensorDataDescription& sd_description,
const std::chrono::milliseconds& timeout_in_milliseconds);
bool IsAllSensorDataDescriptionsAvailable(const SensorDataDescriptions& sensor_data_descriptions);
std::unique_ptr<ansys::api::avxcelerate::sensors::osi::v1::simulation::Simulation::Stub>
vss_simulation_control_osi_;
std::unique_ptr<ansys::api::avxcelerate::sensors::v1::simulation::Simulation::Stub> vss_simulation_control_v1_;
std::unique_ptr<ansys::api::avxcelerate::sensors::v1::data_access::SensorDataNotifier::Stub>
sensor_data_notifier_stub_;
std::unique_ptr<grpc::ClientReader<ansys::api::avxcelerate::sensors::v1::data_access::SensorDataDescription>>
sensor_data_description_reader_;
std::shared_ptr<grpc::Channel> grpc_channel_;
std::string grpc_endpoint_;
grpc::ClientContext context_sensor_data_notifier_;
std::vector<std::string> sensor_identifiers_;
ApiVariant api_variant_;
};
} // namespace avx_sensor_cosim
} // namespace simulation_framework
#endif // SIMFWK_AUTONOMY_COSIM_AVXSENSOR_AVXVSSAPIADAPTER_AVXVSSAPIADAPTER_H