Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions .github/workflows/build_cmake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,17 @@ jobs:
os: windows-latest,
build_type: "Release", cc: "gcc-9", cxx: "g++-9",
cmake_platform: "-A x64",
# On msvc, the -j flag does not help build times and causes intermittent
# file permission errors.
cmake_number_of_jobs: ""
}
- {
name: "Ubuntu Build", artifact: "Linux.tar.xz",
os: ubuntu-18.04,
build_type: "Release", cc: "gcc-9", cxx: "g++-9",
cmake_platform: "",
glibc_version: "2_27"
glibc_version: "2_27",
cmake_number_of_jobs: "-j 2"
}

steps:
Expand Down Expand Up @@ -83,7 +87,7 @@ jobs:
shell: cmake -P {0}
run: |
execute_process(
COMMAND cmake --build build --config $ENV{BUILD_TYPE}
COMMAND cmake --build build --config $ENV{BUILD_TYPE} ${{ matrix.config.cmake_number_of_jobs }}
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE output
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build_nilrt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ jobs:
shell: cmake -P {0}
run: |
execute_process(
COMMAND cmake --build build --config $ENV{BUILD_TYPE}
COMMAND cmake --build build --config $ENV{BUILD_TYPE} -j 2
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE output
Expand Down
35 changes: 32 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,12 @@ set(codegen_scripts
"${codegen_dir}/client_helpers.py"
"${codegen_dir}/common_helpers.py"
"${codegen_dir}/generate_service.py"
"${codegen_dir}/generate_shared_service_files.py"
"${codegen_dir}/service_helpers.py"
"${codegen_dir}/proto_helpers.py"
"${codegen_dir}/metadata_mutation.py"
"${codegen_dir}/metadata_validation.py"
"${codegen_dir}/template_helpers.py"
"${codegen_dir}/templates/client.cpp.mako"
"${codegen_dir}/templates/client.h.mako"
"${codegen_dir}/templates/client_helpers.mako"
Expand All @@ -107,15 +109,19 @@ set(codegen_scripts
"${codegen_dir}/templates/mock_library.h.mako"
"${codegen_dir}/templates/proto.mako"
"${codegen_dir}/templates/proto_helpers.mako"
"${codegen_dir}/templates/register_all_services.h.mako"
"${codegen_dir}/templates/register_all_services.cpp.mako"
"${codegen_dir}/templates/service.cpp.mako"
"${codegen_dir}/templates/service_helpers.mako"
"${codegen_dir}/templates/service.h.mako")
"${codegen_dir}/templates/service.h.mako"
"${codegen_dir}/templates/service_registrar.h.mako"
"${codegen_dir}/templates/service_registrar.cpp.mako"
)

# Populated in the api loop below.
set(nidriver_service_srcs "")
set(nidriver_client_srcs "")


foreach(api ${nidrivers})
set(codegen_dependencies
"${metadata_dir}/${api}/attributes.py"
Expand All @@ -136,12 +142,16 @@ foreach(api ${nidrivers})
${service_output_dir}/${api}/${api}_mock_library.h
${service_output_dir}/${api}/${api}.proto
${service_output_dir}/${api}/${api}_service.cpp
${service_output_dir}/${api}/${api}_service.h)
${service_output_dir}/${api}/${api}_service.h
${service_output_dir}/${api}/${api}_service_registrar.cpp
${service_output_dir}/${api}/${api}_service_registrar.h
)
set(gen_command COMMAND ${PYTHON_EXE} ${codegen_dir}/generate_service.py ${metadata_dir}/${api}/ -o ${service_output_dir}/)
if (NOT api MATCHES "^nifake.*")
set(nidriver_service_srcs
${nidriver_service_srcs}
"${service_output_dir}/${api}/${api}_service.cpp"
"${service_output_dir}/${api}/${api}_service_registrar.cpp"
"${service_output_dir}/${api}/${api}_library.cpp"
"${custom_dir}/${api}_service.custom.cpp")
set(nidriver_client_srcs
Expand All @@ -158,6 +168,23 @@ foreach(api ${nidrivers})
DEPENDS ${proto_dependencies})
endforeach()

add_custom_command(
OUTPUT
${service_output_dir}/register_all_services.cpp
${service_output_dir}/register_all_services.h
COMMAND
${PYTHON_EXE} ${codegen_dir}/generate_shared_service_files.py ${metadata_dir}/ -o ${service_output_dir}/
COMMENT
"Generating shared service files"
DEPENDS
${proto_dependencies}
)

set(nidriver_service_srcs
${nidriver_service_srcs}
${service_output_dir}/register_all_services.cpp
)

#----------------------------------------------------------------------
# Proto file
#----------------------------------------------------------------------
Expand Down Expand Up @@ -237,6 +264,7 @@ endforeach()

add_executable(ni_grpc_device_server
"source/server/core_server.cpp"
"source/server/core_service_registrar.cpp"
"source/server/device_enumerator.cpp"
"source/server/feature_toggles.cpp"
"source/server/logging.cpp"
Expand Down Expand Up @@ -406,6 +434,7 @@ add_custom_command(

add_executable(SystemTestsRunner
"source/tests/utilities/run_all_tests.cpp"
"source/server/core_service_registrar.cpp"
"source/tests/system/device_server.cpp"
"source/tests/system/enumerate_devices.cpp"
"source/tests/system/session_utilities_service_tests.cpp"
Expand Down
8 changes: 2 additions & 6 deletions generated/nidaqmx/nidaqmx_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace nidaqmx_grpc {
NiDAQmxService::NiDAQmxService(
NiDAQmxLibraryInterface* library,
ResourceRepositorySharedPtr session_repository,
const nidevice_grpc::FeatureToggles& feature_toggles)
const NiDAQmxFeatureToggles& feature_toggles)
: library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles)
{
}
Expand Down Expand Up @@ -17769,12 +17769,8 @@ namespace nidaqmx_grpc {
}
}

bool NiDAQmxService::is_enabled()
{
return feature_toggles_.is_enabled;
}

NiDAQmxService::NiDAQmxFeatureToggles::NiDAQmxFeatureToggles(
NiDAQmxFeatureToggles::NiDAQmxFeatureToggles(
const nidevice_grpc::FeatureToggles& feature_toggles)
: is_enabled(
feature_toggles.is_feature_enabled("nidaqmx", CodeReadiness::kRelease)),
Expand Down
22 changes: 10 additions & 12 deletions generated/nidaqmx/nidaqmx_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,23 @@

namespace nidaqmx_grpc {

struct NiDAQmxFeatureToggles
{
using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness;
NiDAQmxFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {});

bool is_enabled;
bool is_allow_undefined_attributes_enabled;
};

class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEvent<NiDAQmx::WithCallbackMethod_RegisterEveryNSamplesEvent<NiDAQmx::WithCallbackMethod_RegisterDoneEvent<NiDAQmx::Service>>> {
public:
using ResourceRepositorySharedPtr = std::shared_ptr<nidevice_grpc::SessionResourceRepository<TaskHandle>>;

NiDAQmxService(
NiDAQmxLibraryInterface* library,
ResourceRepositorySharedPtr session_repository,
const nidevice_grpc::FeatureToggles& feature_toggles = {});
const NiDAQmxFeatureToggles& feature_toggles = {});
virtual ~NiDAQmxService();

::grpc::Status AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) override;
Expand Down Expand Up @@ -419,21 +428,10 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv
::grpc::Status WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) override;
::grpc::Status WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) override;
::grpc::Status WriteToTEDSFromFile(::grpc::ServerContext* context, const WriteToTEDSFromFileRequest* request, WriteToTEDSFromFileResponse* response) override;

bool is_enabled();
private:
NiDAQmxLibraryInterface* library_;
ResourceRepositorySharedPtr session_repository_;

struct NiDAQmxFeatureToggles
{
using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness;
NiDAQmxFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles);

bool is_enabled;
bool is_allow_undefined_attributes_enabled;
};

NiDAQmxFeatureToggles feature_toggles_;
};

Expand Down
52 changes: 52 additions & 0 deletions generated/nidaqmx/nidaqmx_service_registrar.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@

//---------------------------------------------------------------------
// This file is automatically generated. All manual edits will be lost.
//---------------------------------------------------------------------
// Service registrar implementation for the NI-DAQMX Metadata
//---------------------------------------------------------------------
#include "nidaqmx_library.h"

#include <grpcpp/server_builder.h>

#include "nidaqmx_service.h"
#include "nidaqmx_service_registrar.h"

namespace nidaqmx_grpc {

namespace {
struct LibraryAndService {
LibraryAndService(
const std::shared_ptr<nidevice_grpc::SessionResourceRepository<TaskHandle>>& resource_repository,
const NiDAQmxFeatureToggles& feature_toggles)
: library(),
service(
&library,
resource_repository,
feature_toggles) {
}
NiDAQmxLibrary library;
NiDAQmxService service;
};
}

std::shared_ptr<void> register_service(
grpc::ServerBuilder& builder,
const std::shared_ptr<nidevice_grpc::SessionResourceRepository<TaskHandle>>& resource_repository,
const nidevice_grpc::FeatureToggles& feature_toggles)
{
auto toggles = NiDAQmxFeatureToggles(feature_toggles);

if (toggles.is_enabled)
{
auto library_and_service_ptr = std::make_shared<LibraryAndService>(
resource_repository,
toggles);
auto& service = library_and_service_ptr->service;
builder.RegisterService(&service);
return library_and_service_ptr;
}

return {};
}

} // nidaqmx_grpc
30 changes: 30 additions & 0 deletions generated/nidaqmx/nidaqmx_service_registrar.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

//---------------------------------------------------------------------
// This file is automatically generated. All manual edits will be lost.
//---------------------------------------------------------------------
// Service registrar header for the NI-DAQMX Metadata
//---------------------------------------------------------------------
#ifndef NIDAQMX_GRPC_SERVICE_REGISTRAR_H
#define NIDAQMX_GRPC_SERVICE_REGISTRAR_H
#include <server/feature_toggles.h>
#include <server/session_resource_repository.h>

#include <memory>

#include <NIDAQmx.h> // for TaskHandle

namespace grpc {
class ServerBuilder;
}

namespace nidaqmx_grpc {
using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness;

std::shared_ptr<void> register_service(
grpc::ServerBuilder& server_builder,
const std::shared_ptr<nidevice_grpc::SessionResourceRepository<TaskHandle>>& resource_repository,
const nidevice_grpc::FeatureToggles& feature_toggles);

} // nidaqmx_grpc

#endif // NIDAQMX_GRPC_SERVICE_REGISTRAR_H
8 changes: 2 additions & 6 deletions generated/nidcpower/nidcpower_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace nidcpower_grpc {
NiDCPowerService::NiDCPowerService(
NiDCPowerLibraryInterface* library,
ResourceRepositorySharedPtr session_repository,
const nidevice_grpc::FeatureToggles& feature_toggles)
const NiDCPowerFeatureToggles& feature_toggles)
: library_(library), session_repository_(session_repository), feature_toggles_(feature_toggles)
{
}
Expand Down Expand Up @@ -3472,12 +3472,8 @@ namespace nidcpower_grpc {
}
}

bool NiDCPowerService::is_enabled()
{
return feature_toggles_.is_enabled;
}

NiDCPowerService::NiDCPowerFeatureToggles::NiDCPowerFeatureToggles(
NiDCPowerFeatureToggles::NiDCPowerFeatureToggles(
const nidevice_grpc::FeatureToggles& feature_toggles)
: is_enabled(
feature_toggles.is_feature_enabled("nidcpower", CodeReadiness::kRelease))
Expand Down
20 changes: 9 additions & 11 deletions generated/nidcpower/nidcpower_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,22 @@

namespace nidcpower_grpc {

struct NiDCPowerFeatureToggles
{
using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness;
NiDCPowerFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles = {});

bool is_enabled;
};

class NiDCPowerService final : public NiDCPower::Service {
public:
using ResourceRepositorySharedPtr = std::shared_ptr<nidevice_grpc::SessionResourceRepository<ViSession>>;

NiDCPowerService(
NiDCPowerLibraryInterface* library,
ResourceRepositorySharedPtr session_repository,
const nidevice_grpc::FeatureToggles& feature_toggles = {});
const NiDCPowerFeatureToggles& feature_toggles = {});
virtual ~NiDCPowerService();

::grpc::Status AbortWithChannels(::grpc::ServerContext* context, const AbortWithChannelsRequest* request, AbortWithChannelsResponse* response) override;
Expand Down Expand Up @@ -166,21 +174,11 @@ class NiDCPowerService final : public NiDCPower::Service {
::grpc::Status SetAttributeViString(::grpc::ServerContext* context, const SetAttributeViStringRequest* request, SetAttributeViStringResponse* response) override;
::grpc::Status SetSequence(::grpc::ServerContext* context, const SetSequenceRequest* request, SetSequenceResponse* response) override;
::grpc::Status WaitForEvent(::grpc::ServerContext* context, const WaitForEventRequest* request, WaitForEventResponse* response) override;

bool is_enabled();
private:
NiDCPowerLibraryInterface* library_;
ResourceRepositorySharedPtr session_repository_;
void Copy(const std::vector<ViBoolean>& input, google::protobuf::RepeatedField<bool>* output);

struct NiDCPowerFeatureToggles
{
using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness;
NiDCPowerFeatureToggles(const nidevice_grpc::FeatureToggles& feature_toggles);

bool is_enabled;
};

NiDCPowerFeatureToggles feature_toggles_;
};

Expand Down
Loading