Skip to content
Merged
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
2 changes: 1 addition & 1 deletion generated/nirfmxspecan/nirfmxspecan_compilation_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ int32 DPDCfgApplyDPDUserLookupTable(niRFmxInstrHandle instrumentHandle, char sel

int32 DPDCfgApplyDPDUserLookupTableInterleavedIQ(niRFmxInstrHandle instrumentHandle, char selectorString[], float32 lutInputPowers[], float32 lutComplexGains[], int32 arraySize)
{
return RFmxSpecAn_DPDCfgApplyDPDUserLookupTable(instrumentHandle, selectorString, lutInputPowers, reinterpret_cast<NIComplexSingle*>(lutComplexGains), arraySize/2);
return RFmxSpecAn_DPDCfgApplyDPDUserLookupTable(instrumentHandle, selectorString, lutInputPowers, reinterpret_cast<NIComplexSingle*>(lutComplexGains), arraySize);
}

int32 DPDCfgApplyDPDUserLookupTableSplit(niRFmxInstrHandle instrumentHandle, char selectorString[], float32 lutInputPowers[], float32 lutComplexGainsI[], float32 lutComplexGainsQ[], int32 arraySize)
Expand Down
2 changes: 1 addition & 1 deletion generated/nirfmxspecan/nirfmxspecan_library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1648,7 +1648,7 @@ int32 NiRFmxSpecAnLibrary::DPDCfgApplyDPDUserLookupTableInterleavedIQ(niRFmxInst
if (!function_pointers_.DPDCfgApplyDPDUserLookupTableInterleavedIQ) {
throw nidevice_grpc::LibraryLoadException("Could not find RFmxSpecAn_DPDCfgApplyDPDUserLookupTable.");
}
return function_pointers_.DPDCfgApplyDPDUserLookupTableInterleavedIQ(instrumentHandle, selectorString, lutInputPowers, reinterpret_cast<NIComplexSingle*>(lutComplexGains), arraySize/2);
return function_pointers_.DPDCfgApplyDPDUserLookupTableInterleavedIQ(instrumentHandle, selectorString, lutInputPowers, reinterpret_cast<NIComplexSingle*>(lutComplexGains), arraySize);
}

int32 NiRFmxSpecAnLibrary::DPDCfgApplyDPDUserLookupTableSplit(niRFmxInstrHandle instrumentHandle, char selectorString[], float32 lutInputPowers[], float32 lutComplexGainsI[], float32 lutComplexGainsQ[], int32 arraySize)
Expand Down
43 changes: 0 additions & 43 deletions generated/nirfmxspecan/nirfmxspecan_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5622,49 +5622,6 @@ namespace nirfmxspecan_grpc {
}
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
::grpc::Status NiRFmxSpecAnService::DPDCfgApplyDPDUserLookupTableInterleavedIQ(::grpc::ServerContext* context, const DPDCfgApplyDPDUserLookupTableInterleavedIQRequest* request, DPDCfgApplyDPDUserLookupTableInterleavedIQResponse* response)
{
if (context->IsCancelled()) {
return ::grpc::Status::CANCELLED;
}
try {
auto instrument_grpc_session = request->instrument();
niRFmxInstrHandle instrument = session_repository_->access_session(instrument_grpc_session.name());
auto selector_string_mbcs = convert_from_grpc<std::string>(request->selector_string());
char* selector_string = (char*)selector_string_mbcs.c_str();
auto lut_input_powers = const_cast<float32*>(request->lut_input_powers().data());
auto lut_complex_gains = const_cast<float32*>(request->lut_complex_gains().data());
auto array_size_determine_from_sizes = std::array<int, 2>
{
request->lut_input_powers_size(),
request->lut_complex_gains_size()
};
const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, true);

if (array_size_size_calculation.match_state == MatchState::MISMATCH) {
return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [lut_input_powers, lut_complex_gains] do not match");
}
// NULL out optional params with zero sizes.
if (array_size_size_calculation.match_state == MatchState::MATCH_OR_ZERO) {
lut_input_powers = request->lut_input_powers_size() ? std::move(lut_input_powers) : nullptr;
lut_complex_gains = request->lut_complex_gains_size() ? std::move(lut_complex_gains) : nullptr;
}
auto array_size = array_size_size_calculation.size;

auto status = library_->DPDCfgApplyDPDUserLookupTableInterleavedIQ(instrument, selector_string, lut_input_powers, lut_complex_gains, array_size);
if (!status_ok(status)) {
return ConvertApiErrorStatusForNiRFmxInstrHandle(context, status, instrument);
}
response->set_status(status);
return ::grpc::Status::OK;
}
catch (nidevice_grpc::NonDriverException& ex) {
return ex.GetStatus();
}
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
::grpc::Status NiRFmxSpecAnService::DPDCfgApplyDPDUserLookupTableSplit(::grpc::ServerContext* context, const DPDCfgApplyDPDUserLookupTableSplitRequest* request, DPDCfgApplyDPDUserLookupTableSplitResponse* response)
Expand Down
49 changes: 49 additions & 0 deletions source/codegen/metadata/nirfmxspecan/functions_addon.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,53 @@
],
'returns': 'int32'
},
'DPDCfgApplyDPDUserLookupTableInterleavedIQ': {
'cname': 'RFmxSpecAn_DPDCfgApplyDPDUserLookupTable',
'codegen_method': 'CustomCode',
'parameters': [
{
'direction': 'in',
'grpc_name': 'instrument',
'name': 'instrumentHandle',
'type': 'niRFmxInstrHandle'
},
{
'direction': 'in',
'name': 'selectorString',
'type': 'char[]'
},
{
'direction': 'in',
'name': 'lutInputPowers',
'size': {
'mechanism': 'custom-code',
'tags': [
'optional'
],
'value': 'arraySize'
},
'type': 'float32[]'
},
{
'direction': 'in',
'name': 'lutComplexGains',
'size': {
'mechanism': 'custom-code',
'tags': [
'optional'
],
'value': 'arraySize'
},
'type': 'float32[]',
'value_converted_to_c_representation': 'reinterpret_cast<NIComplexSingle*>(lutComplexGains)'
},
{
'direction': 'in',
'include_in_proto': False,
'name': 'arraySize',
'type': 'int32',
}
],
'returns': 'int32'
},
}
70 changes: 59 additions & 11 deletions source/custom/nirfmxspecan_service.custom.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,66 @@
#include <nirfmxspecan/nirfmxspecan_service.h>
using nidevice_grpc::converters::convert_to_grpc;
using nidevice_grpc::converters::convert_from_grpc;
using nidevice_grpc::converters::calculate_linked_array_size;
using nidevice_grpc::converters::MatchState;

namespace nirfmxspecan_grpc {

::grpc::Status NiRFmxSpecAnService::ConvertApiErrorStatusForNiRFmxInstrHandle(::grpc::ServerContextBase* context, int32_t status, niRFmxInstrHandle instrumentHandle)
{
ViStatus error_code{};
std::string description(nidevice_grpc::kMaxGrpcErrorDescriptionSize, '\0');
// Try first to get the most recent error with a dynamic message.
library_->GetError(instrumentHandle, &error_code, nidevice_grpc::kMaxGrpcErrorDescriptionSize, &description[0]);
if (error_code != status) {
// Since another thread has changed the status, fall back to the static message lookup.
library_->GetErrorString(instrumentHandle, status, nidevice_grpc::kMaxGrpcErrorDescriptionSize, &description[0]);
// Returns true if it's safe to use outputs of a method with the given status.
inline bool status_ok(int32 status)
{
return status >= 0;
}

::grpc::Status NiRFmxSpecAnService::ConvertApiErrorStatusForNiRFmxInstrHandle(::grpc::ServerContextBase* context, int32_t status, niRFmxInstrHandle instrumentHandle)
{
ViStatus error_code{};
std::string description(nidevice_grpc::kMaxGrpcErrorDescriptionSize, '\0');
// Try first to get the most recent error with a dynamic message.
library_->GetError(instrumentHandle, &error_code, nidevice_grpc::kMaxGrpcErrorDescriptionSize, &description[0]);
if (error_code != status) {
// Since another thread has changed the status, fall back to the static message lookup.
library_->GetErrorString(instrumentHandle, status, nidevice_grpc::kMaxGrpcErrorDescriptionSize, &description[0]);
}
return nidevice_grpc::ApiErrorAndDescriptionToStatus(context, status, description);
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
::grpc::Status NiRFmxSpecAnService::DPDCfgApplyDPDUserLookupTableInterleavedIQ(::grpc::ServerContext*context, const DPDCfgApplyDPDUserLookupTableInterleavedIQRequest* request, DPDCfgApplyDPDUserLookupTableInterleavedIQResponse* response)
{
if (context->IsCancelled()) {
return ::grpc::Status::CANCELLED;
}
try {
auto instrument_grpc_session = request->instrument();
niRFmxInstrHandle instrument = session_repository_->access_session(instrument_grpc_session.name());
auto selector_string_mbcs = convert_from_grpc<std::string>(request->selector_string());
char* selector_string = (char*)selector_string_mbcs.c_str();
auto lut_input_powers = const_cast<float32*>(request->lut_input_powers().data());
auto lut_complex_gains = const_cast<float32*>(request->lut_complex_gains().data());
auto array_size = 0;
if (request->lut_input_powers_size()) {
array_size = request->lut_input_powers_size() * 2;
if (request->lut_complex_gains_size()) {
if (request->lut_complex_gains_size() != array_size) {
return ::grpc::Status(::grpc::INVALID_ARGUMENT, "lut_complex_gains size must be twice the size of lut_input_powers.");
}
}
}
else if (request->lut_complex_gains_size()) {
array_size = request->lut_complex_gains_size();
}
auto status = library_->DPDCfgApplyDPDUserLookupTableInterleavedIQ(instrument, selector_string, lut_input_powers, lut_complex_gains, array_size);
if (!status_ok(status)) {
return ConvertApiErrorStatusForNiRFmxInstrHandle(context, status, instrument);
}
response->set_status(status);
return ::grpc::Status::OK;
}
catch (nidevice_grpc::NonDriverException& ex) {
return ex.GetStatus();
}
}
return nidevice_grpc::ApiErrorAndDescriptionToStatus(context, status, description);
}

} // namespace nirfmxspecan_grpc